sgcCrypto 機能マトリックス
sgcCrypto ができることすべてを、ディスク上の 43 ユニットにマッピングしています。ここにはコンポーネントも設計時プロパティもありません。以下の各行は、直接呼び出す関数またはプロシージャです。完全なソースコードはすべてのライセンスに付属します。下のアンカーから、ユニットが属する 6 つの機能ファミリーと、同じパックがその上に構築する TLS 1.3 および TLS 1.2 エンジンへ移動できます。
sgcCrypto ができることすべてを、ディスク上の 43 ユニットにマッピングしています。ここにはコンポーネントも設計時プロパティもありません。以下の各行は、直接呼び出す関数またはプロシージャです。完全なソースコードはすべてのライセンスに付属します。下のアンカーから、ユニットが属する 6 つの機能ファミリーと、同じパックがその上に構築する TLS 1.3 および TLS 1.2 エンジンへ移動できます。
sgcCrypto にコンポーネントはありません。 以下の 43 ユニットは単なる関数をエクスポートします。Tsgc* クラスも sgcCrypto_Reg.pas もありません。ユニットを uses 句に追加し、関数を呼び出すだけです。
すでに同梱されています。 sgcCrypto は sgcWebSockets Standard、Professional、Enterprise、そして All-Access に無料で同梱されています。Core のみをお持ちのお客様向けに単体でも販売されています(sgcWebSockets Core ランタイムを同梱)。詳しくは価格ページをご覧ください。
AES、CCM、ChaCha20、Poly1305、5 ユニット
SHA-2/3、BLAKE2、Argon2、11 ユニット
Ed25519、X25519、Schnorr、RSA、10 ユニット
X.509、ASN.1、RSA & EC CSR、5 ユニット
ML-KEM、ML-DSA、SLH-DSA、6 ユニット
HOTP/TOTP、エンコーディング、ZIP AES、6 ユニット
iohNativeTLS、X25519MLKEM768、純粋な Pascal
sgcWebSockets/delphi/Source/ 配下のすべての sgcCrypto_*.pas ユニットを、ファミリーごとにグループ分けしています。
| ユニット | ファミリー | できること |
|---|---|---|
sgcCrypto_AES | 対称暗号 | AES-CBC、AES-GCM(AEAD)、AES-CTR。 |
sgcCrypto_Modes | 対称暗号 | AES-ECB、OFB、CFB、CTS、CCM(AEAD)、Key Wrap / Padding 付き Key Wrap、そして7種類のパディング方式。 |
sgcCrypto_CMAC | 対称暗号 | AES-CMAC と AES-GMAC のメッセージ認証。 |
sgcCrypto_ChaCha | 対称暗号 | ChaCha20、XChaCha20、Salsa20、XSalsa20。 |
sgcCrypto_Poly1305 | 対称暗号 | Poly1305 MAC、ChaCha20-Poly1305、XChaCha20-Poly1305 AEAD。 |
sgcCrypto_SHA2 | ハッシュ & KDF | SHA-1、SHA-224、SHA-256、SHA-384、SHA-512。 |
sgcCrypto_Keccak | ハッシュ & KDF | SHA-3、SHAKE128/256、cSHAKE、KMAC。 |
sgcCrypto_Blake2b | ハッシュ & KDF | BLAKE2b、鍵付き/鍵なし。 |
sgcCrypto_Blake2s | ハッシュ & KDF | BLAKE2s、鍵付き/鍵なし。 |
sgcCrypto_HMAC | ハッシュ & KDF | HMAC-SHA1/256/384/512。 |
sgcCrypto_KDF | ハッシュ & KDF | PBKDF2、KDF1、KDF2、X9.63、ハッシュ関数を選択可能。 |
sgcCrypto_HKDF | ハッシュ & KDF | HKDF の extract-and-expand。 |
sgcCrypto_Scrypt | ハッシュ & KDF | scrypt メモリハード KDF。 |
sgcCrypto_Argon2 | ハッシュ & KDF | Argon2d、Argon2i、Argon2id。 |
sgcCrypto_SipHash | ハッシュ & KDF | SipHash-2-4 鍵付きハッシュ。 |
sgcCrypto_TLSH | ハッシュ & KDF | TLSH ファジーハッシュと類似度診断。 |
sgcCrypto_Ed25519 | 署名 & 鍵交換 | Ed25519 の署名/検証。 |
sgcCrypto_X25519 | 署名 & 鍵交換 | X25519 Diffie-Hellman。 |
sgcCrypto_Ed448 | 署名 & 鍵交換 | Ed448 の署名/検証。 |
sgcCrypto_X448 | 署名 & 鍵交換 | X448 Diffie-Hellman。 |
sgcCrypto_GF448 | 署名 & 鍵交換 | Ed448/X448 向けの内部 GF(2^448-2^224-1) 体演算。 |
sgcCrypto_ECCurves | 署名 & 鍵交換 | secp256k1、Brainpool P256r1/P384r1/P512r1、NIST P-256/P-384/P-521 上の ECDSA / ECDH、DER 署名、鍵のエクスポート/インポート、そして BIP-340 Schnorr。 |
sgcCrypto_EC | 署名 & 鍵交換 | JWS(ES256/384/512)としての汎用 EC 署名/検証、ECDH。 |
sgcCrypto_RSA | 署名 & 鍵交換 | PEM または raw から、RSA PKCS#1 v1.5 署名、PKCS#1 v1.5 / PSS 検証。 |
sgcCrypto_RSA_Keys | 署名 & 鍵交換 | RSA 鍵生成、OAEP(独立した MGF1 ハッシュ対応)、PSS、PKCS#1 v1.5 署名/検証/暗号化/復号、PKCS#1 と PKCS#8 の DER/PEM エクスポートとインポート。 |
sgcCrypto_ECIES | 署名 & 鍵交換 | X25519 上の ECIES seal / open ハイブリッド暗号化。 |
sgcCrypto_ASN1 | PKI | DER リーダー、PEM コーデック、PKCS#1/SEC 1 鍵解析。 |
sgcCrypto_DER | PKI | DER ライタープリミティブ。 |
sgcCrypto_BigInteger | PKI | 内部の任意精度整数演算。 |
sgcCrypto_X509 | PKI | X.509 の解析、検証、pathLenConstraint と nameConstraints を伴うチェーン、CSR の検証、CRL、失効確認。RSA、EC、Ed25519、ML-DSA、SLH-DSA、ML-KEM の公開鍵を読み取ります。 |
sgcCrypto_X509_Gen | PKI | 自己署名証明書、CA 発行の証明書、PKCS#10 CSR の生成。RSA、EC、ML-DSA、SLH-DSA で署名でき、URI と IPv6 のサブジェクト代替名、nameConstraints にも対応。 |
sgcCrypto_MLKEM | 耐量子 | ML-KEM 鍵カプセル化(FIPS 203)、3 種類のパラメータセット。SubjectPublicKeyInfo、PKCS#8、PEM での鍵のインポートとエクスポートに対応。 |
sgcCrypto_MLKEM_Poly | 耐量子 | ML-KEM の裏にある内部多項式環演算。 |
sgcCrypto_MLKEM_Hybrid | 耐量子 | ハイブリッドな X25519 + ML-KEM 鍵カプセル化、X-Wing、そして RFC 10024 の TLS 1.3 ハイブリッド鍵共有。 |
sgcCrypto_MLDSA | 耐量子 | ML-DSA デジタル署名(FIPS 204)、3 種類のパラメータセット。SubjectPublicKeyInfo、PKCS#8、PEM での鍵のインポートとエクスポートに対応。 |
sgcCrypto_MLDSA_Poly | 耐量子 | ML-DSA の裏にある内部多項式環演算。 |
sgcCrypto_SLHDSA | 耐量子 | SLH-DSA 署名(FIPS 205)、6 種類の SHAKE パラメータセット。SubjectPublicKeyInfo、PKCS#8、PEM での鍵のインポートとエクスポートに対応。 |
sgcCrypto_OTP | OTP & その他 | HOTP、TOTP、定数時間の検証ウィンドウ。 |
sgcCrypto_Encoding | OTP & その他 | 定数時間比較、セキュアゼロ化、hex/Base64url/Base32。 |
sgcCrypto_Zip_AE2 | OTP & その他 | ZIP エントリ向けの WinZip AES 暗号化、AE-1 / AE-2。 |
sgcCrypto_Legacy | OTP & その他 | MD4、MD5、HMAC-MD5、DES-ECB、RIPEMD-160、HMAC-RIPEMD160。相互運用のみが目的です。 |
sgcCrypto_Random | OTP & その他 | クロスプラットフォームな CSPRNG。 |
sgcCrypto_Int64 | OTP & その他 | Delphi 7 向けの内部 64 ビット整数エミュレーション。 |
実運用のコードが実際に使うモードでの AES、そして ChaCha20/Poly1305 の AEAD ファミリーです。
| 機能 | 関数 | 備考 |
|---|---|---|
| AES-CBC | sgcAES_CBC_Encrypt / sgcAES_CBC_Decrypt | PKCS#7 パディング、16 バイト IV。鍵長が暗号を決定します。16/24/32 バイト = AES-128/192/256。 |
| AES-CBC、パディングなし | sgcAES_CBC_Encrypt_NoPad / sgcAES_CBC_Decrypt_NoPad | Java が AES/CBC/NoPadding と表記するモードです。入力は既に 16 バイトの倍数でなければならず、揃っていない入力は、黙ってパディングされて相手が読めないものになるのではなく、例外を発生させます。 |
| AES-GCM(AEAD) | sgcAES_GCM_Encrypt / sgcAES_GCM_Decrypt | 12 バイト IV を推奨。16 バイトタグは定数時間で比較され、検証失敗時は復号は False と空の平文を返します。 |
| AES コア | sgcAES_GetCore / sgcAES_SetCore | aescConstantTime が既定で、秘密のバイトでメモリを参照したり分岐したりしないビットスライス方式のコアです。これにより、鍵と平文に対するキャッシュタイミングのチャネルが塞がれます。aescTable は従来のテーブル方式のコアで、データキャッシュ経由で情報が漏れ、あらゆる測定で低速だったため、フォールバックとしてのみ残されています。GCM を認証する GHASH は、鍵で分岐する代わりにマスクの下で乗算します。コアは起動時に一度だけ、ワーカースレッドが動作する前に設定してください。 |
| AES-CCM(AEAD) | sgcAES_CCM_Encrypt / sgcAES_CCM_Decrypt | 制約のある環境や IoT スタックが指定する AEAD で、Zigbee、802.15.4、Bluetooth、そして TLS の CCM スイートが該当します。ブロック暗号だけで済み、GHASH テーブルを必要としないためです。ノンスは 7 から 13 バイト、タグは 4 から 16 バイトで、定数時間で検証されます。 |
| AES-CTR | sgcAES_CTR | SRTP スタイルの AES-CM(RFC 3711)。対称的な呼び出しで、パディングなし、128 ビットのビッグエンディアンカウンター。 |
| AES-ECB | sgcAES_ECB_Encrypt / sgcAES_ECB_Decrypt | IV なし、チェイニングなし。それを指定するフォーマットとの相互運用のために用意しています。 |
| パディング方式 | sgcPad_Add / sgcPad_Remove、sgcAES_CBC_EncryptPad / DecryptPad、sgcAES_ECB_EncryptPad / DecryptPad | TsgcPadding は None、PKCS#7、Zero、ANSI X9.23、ISO 7816-4、ISO 10126-2、TBC をカバーしており、CBC と ECB は PKCS#7 を選ばなかったシステムとの間でもデータを読み書きできます。sgcPad_Remove は、あらゆる種類の不正なパディングに対して同じ経路で False を返します。 |
| AES-OFB / AES-CFB | sgcAES_OFB、sgcAES_CFB_Encrypt / sgcAES_CFB_Decrypt | ストリーム暗号スタイルのフィードバックモード。 |
| AES-CTS | sgcAES_CTS_Encrypt / sgcAES_CTS_Decrypt | 暗号文盗用。ブロックサイズの倍数でないデータを、パディングのオーバーヘッドなしで暗号化します。 |
| AES Key Wrap | sgcAES_KeyWrap / sgcAES_KeyUnwrap | RFC 3394。ある鍵を別の鍵でラップします。 |
| AES Key Wrap with Padding | sgcAES_KeyWrapPad / sgcAES_KeyUnwrapPad | RFC 5649。8 バイトの倍数でない鍵材料向け。 |
| AES-CMAC | sgcAES_CMAC / sgcAES_CMAC_Verify | RFC 4493 のメッセージ認証コード。 |
| AES-GMAC | sgcAES_GMAC / sgcAES_GMAC_Verify | GCM の認証専用モードです。メッセージ全体が追加データとして渡され、何も暗号化されません。IV は同じ鍵の下で決して繰り返してはならず、16 バイトのタグは定数時間で比較されます。 |
| 低レベルブロックプリミティブ | sgcAES_ExpandKey、sgcAES_EncryptBlock、sgcAES_DecryptBlock | 上記のモードと MAC ユニットのために公開されています。まだ用意されていないモードを構築する場合にのみ直接呼び出してください。 |
| ChaCha20 | sgcChaCha20 | RFC 8439、96 ビットナンス、32 ビットカウンター。 |
| XChaCha20 | sgcXChaCha20 | 192 ビットの拡張ナンス。大規模にランダムなナンスを生成しても安全です。 |
| Salsa20 / XSalsa20 | sgcSalsa20 / sgcXSalsa20 | 先代のストリーム暗号ファミリーで、両方のナンスサイズに対応します。 |
| サブ鍵導出 | sgcHChaCha20 / sgcHSalsa20 | X 系バリアントが、最初の 16 バイトのナンスからサブ鍵を導出する際に内部で使う関数です。 |
| Poly1305 MAC | sgcPoly1305 / sgcPoly1305_Verify | RFC 8439 の一回限りの認証子です。Poly1305 の鍵を再利用しないでください。 |
| ChaCha20-Poly1305 AEAD | sgcChaCha20Poly1305_Encrypt / _Decrypt | TLS 1.3 の 2 番目の暗号スイートと SSH の裏にある AEAD 暗号です。 |
| XChaCha20-Poly1305 AEAD | sgcXChaCha20Poly1305_Encrypt / _Decrypt | 同じ AEAD で 192 ビットナンス。libsodium が crypto_aead_xchacha20poly1305_ietf と呼ぶ構成です。 |
主要なハッシュファミリーすべてに加え、PBKDF2、HKDF、scrypt、Argon2 の 3 種類すべてに対応します。
| 機能 | 関数 | 備考 |
|---|---|---|
| SHA-1 / SHA-2 | sgcSHA1、sgcSHA224、sgcSHA256、sgcSHA384、sgcSHA512 | FIPS 180-4。SHA-1 は相互運用のために残していますが、新規の署名には推奨しません。 |
| SHA-3 | sgcSHA3_224 / _256 / _384 / _512 | FIPS 202、Keccak スポンジ構造で、SHA-2 とは構造的に独立しています。 |
| SHAKE128 / SHAKE256 | sgcSHAKE128 / sgcSHAKE256 | 拡張可能出力関数。任意のダイジェスト長を要求できます。 |
| cSHAKE128 / cSHAKE256 | sgcCSHAKE128 / sgcCSHAKE256 | ドメイン分離された SHAKE、NIST SP 800-185、KMAC の基盤です。 |
| KMAC128 / KMAC256 | sgcKMAC128 / sgcKMAC256 | 可変長出力に対応した Keccak ベースの MAC。 |
| BLAKE2b | sgcBlake2b / sgcBlake2b_Keyed | RFC 7693。最大 64 バイトのダイジェスト、組み込みの鍵指定(別途 HMAC 不要)。 |
| BLAKE2s | sgcBlake2s / sgcBlake2s_Keyed | RFC 7693。最大 32 バイトのダイジェスト、32 ビットプラットフォーム向けに調整済み。 |
| ストリーミングダイジェスト | sgcBlake2b_Init/_Update/_Final、Keccak/Blake2s の対応する呼び出し | 一度にメモリへ収まらない大きなデータをハッシュする場合に。 |
| HMAC | sgcHMAC_SHA1 / _SHA256 / _SHA384 / _SHA512 | RFC 2104、SHA-1/2 ファミリーによる鍵付きハッシュ。 |
| RIPEMD-160 / HMAC-RIPEMD160 | sgcRIPEMD160、sgcHMAC_RIPEMD160 | ISO/IEC 10118-3 と RFC 2286。Bitcoin アドレスが SHA-256 の上に重ねる 160 ビットダイジェストであり、OpenPGP が名指しするものでもあります。 |
| PBKDF2 | sgcPBKDF2、sgcPBKDF2_SHA1 / _SHA256 / _SHA512 | RFC 8018。メモリハード性は控えめです。選べるなら Argon2id か scrypt を優先してください。 |
| HKDF | sgcHKDF_Extract_SHA256 / _SHA384、sgcHKDF_Expand_SHA256 / _SHA384、sgcHKDF_SHA256 / _SHA384 | RFC 5869、extract-then-expand 方式の鍵導出。共有秘密を複数の鍵に変換する標準的な方法です。 |
| KDF1 / KDF2 / X9.63 | sgcKDF1、sgcKDF2、sgcKDF_X963 | ISO 18033-2、IEEE 1363a、ANSI X9.63 が定めるカウンターモードの導出方式で、RSA-KEM や ECIES が名指しするものです。KDF1 はカウンターを 0 から、KDF2 は 1 から数え始めるという違いがあり、これは実際に相互運用性のバグを引き起こしてきたため、仕様がどちらを意味しているかを確認してください。 |
| scrypt | sgcScrypt | RFC 7914、メモリハードで、PBKDF2 よりも GPU/ASIC 攻撃への耐性が高くなっています。 |
| Argon2 | sgcArgon2(d / i / id)、便利ラッパーの sgcArgon2id | RFC 9106、Password Hashing Competition の優勝方式。オプションの秘密(ペッパー)と関連データを含む完全なインターフェースです。 |
| SipHash-2-4 | sgcSipHash24 / sgcSipHash24_Value | ハッシュテーブルのキー向けの高速な鍵付き PRF で、ハッシュフラッディング DoS に耐性があります。 |
| TLSH ファジーハッシュ | sgcTLSH、sgcTLSH_Init/_Update/_Final | ほぼ重複するデータの検出向けの局所性鋭敏型ハッシュで、暗号学的ダイジェストではありません。 |
| TLSH 類似度スコア | sgcTLSH_Diff | 2 つの TLSH ダイジェスト間の距離。値が小さいほど類似しています。 |
5 種類の異なる曲線ファミリーと RSA にまたがって、署名、検証、共有秘密の導出を行います。
| 機能 | 関数 | 備考 |
|---|---|---|
| Ed25519 署名 / 検証 | sgcEd25519_Sign / sgcEd25519_Verify, sgcEd25519_PublicKey | RFC 8032。公開鍵は 32 バイト、署名は 64 バイトです。検証は 5.1.7 節に従い、非正準の点と S >= L を拒否します。署名は秘密スカラーとメッセージごとのノンスに対して定数時間で行われます。4 ビット固定ウィンドウを使い、テーブルのエントリは 16 個すべてをマスクの下で走査して選択し、5.1.4 節の完全加算公式を用います。公開鍵は 32 バイトのシードから得られます。 |
| X25519 鍵交換 | sgcX25519、sgcX25519_PublicKey、sgcX25519_SharedSecret | Curve25519 上の RFC 7748 Diffie-Hellman。 |
| Ed448 署名 / 検証 | sgcEd448_GenerateKeyPair、sgcEd448_Sign、sgcEd448_Verify | RFC 8032、448 ビット(Goldilocks)の EdDSA 曲線です。 |
| X448 鍵交換 | sgcX448、sgcX448_PublicKey、sgcX448_SharedSecret | Curve448 上の RFC 7748 Diffie-Hellman。 |
| secp256k1 | eccSecp256k1 を指定した sgcECDSA_SignHash / VerifyHash | sgcCrypto_ECCurves にある、SEC 2 の Bitcoin/Ethereum 曲線です。 |
| Brainpool P256r1 / P384r1 / P512r1 | eccBrainpoolP256r1 / P384r1 / P512r1 を指定した同じ関数群 | RFC 5639。EU の eIDAS や政府プロファイルで一般的です。 |
| NIST P-256 / P-384 / P-521 | eccP256 / eccP384 / eccP521 を指定した同じ関数群 | TsgcECCurve は現在7種類の曲線を持つため、鍵生成、署名、検証、ECDH、点圧縮のすべてが、PEM ファイルからだけでなく生の鍵バイト列からも NIST 素数曲線に到達できます。 |
| 決定論的 ECDSA ナンス | sgcECDSA_SignHash に組み込み | RFC 6979。ナンスは秘密鍵とメッセージから導出され、乱数生成器の失敗モードがありません。 |
| 定数時間のスカラー倍算 | sgcECDSA_SignHash、sgcECDH_SharedSecret および EC 鍵生成の内部 | sgcCrypto_ECCurves のすべての曲線が同じエンジンで動作します。データに依存するステップを持たない Montgomery 還元、個数が曲線から決まる固定ウィンドウ、すべてのエントリをマスクの下で走査して選択するテーブル、どのケースが該当するかを座標を見て判断することのない完全加算公式です。sgcCrypto_EC の JOSE、WebAuthn、E2EE の各経路も同じコードを実行します。 |
| ECDH(secp256k1 / Brainpool) | sgcECDH_SharedSecret | 同じ 4 種類の曲線上での共有秘密。 |
| ポイント圧縮 | sgcEC_Compress / sgcEC_Decompress | より短い圧縮形式の公開鍵を保存または送信します。 |
| JWS としての EC(ES256/384/512) | sgcECDSA_SignJWS / sgcECDSA_VerifyJWS | 要求されたビット長から曲線を自動選択し、PEM 鍵から直接署名/検証する、ECCurves の JOSE 向け姉妹ユニットです。 |
| 汎用 ECDH | sgcECDH | raw の秘密鍵と相手の公開点から共有秘密を導出します。 |
| raw / DER の ECDSA 検証 | sgcECDSA_VerifyRaw / sgcECDSA_VerifyDER | raw の (Qx, Qy, r, s) タプル、または DER エンコードされた署名を検証します。 |
| DER ECDSA 署名と変換 | sgcECDSA_SignDER / sgcECDSA_VerifyDER、sgcECDSA_RawToDER / sgcECDSA_DERToRaw | X.509、CMS、TLS は、INTEGER r の後に INTEGER s が続く SEQUENCE である DER の ECDSA-Sig-Value を使用します。JOSE と WebAuthn は代わりに生の R || S ペアを使用します。どちらの形式にも直接署名でき、既存の署名を両者の間で変換することもできます。 |
| Schnorr 署名(BIP-340) | sgcSchnorr_PublicKey、sgcSchnorr_Sign、sgcSchnorr_Verify | secp256k1 専用で、x 座標のみの 32 バイト公開鍵と 64 バイトの署名を使用します。Taproot、Nostr、Lightning が使用しているものです。sgcSchnorr_TaggedHash が公開されているのは、BIP-341 と BIP-342 のタグを同じ構成の上に構築できるようにするためです。 |
| RSA 署名(PKCS#1 v1.5) | sgcRSA_SignPKCS1 | PEM 秘密鍵から、SHA-1/256/384/512 ダイジェストで署名します。 |
| RSA 秘密鍵演算 | sgcRSA_SignPKCS1 と sgcCrypto_RSA_Keys のその他の署名および復号の呼び出し | 各演算は新しい乱数のペアでブラインディングされ、固定ウィンドウのべき乗と、タイミングが因数やデータに依存しない CRT 再結合を経て、結果を返す前に公開指数で検証されます。CRT の片方に障害が生じると、1 回の署名で因数が漏れてしまうため、不一致の場合は何も返されません。 |
| RSA 検証(PKCS#1 v1.5 / PSS) | sgcRSA_VerifyPKCS1、sgcRSA_VerifyPSS、モジュラス/指数に対する _Raw バリアント | RFC 8017。PEM 鍵、または raw のモジュラスと指数のどちらからでも検証でき、鍵オブジェクトの構築は不要です。 |
| RSA 鍵生成 | sgcRSA_GenerateKey | 任意のビット長、Miller-Rabin 素数判定。 |
| RSA-OAEP 暗号化 | sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_Decrypt | RFC 8017 の Optimal Asymmetric Encryption Padding。 |
| 独立した MGF1 ハッシュを持つ RSA-OAEP | 5 パラメータの sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_Decrypt オーバーロード | ラベルハッシュと MGF1 ハッシュを別々に固定します。OAEPWithSHA256AndMGF1Padding は、Bouncy Castle では両方とも SHA-256 を意味しますが、SunJCE では SHA-256 と MGF1-SHA1 の組み合わせを意味し、この不一致が Java との相互運用が失敗する通常の原因です。 |
| RSA PKCS#1 v1.5 暗号化 | sgcRSA_PKCS1_Encrypt / sgcRSA_PKCS1_Decrypt | RFC 8017 section 7.2、Java が RSA/ECB/PKCS1Padding と呼ぶモードです。復号はあらゆる失敗に対して同じ経路をたどるため、パディングオラクルに手がかりを与えません。新規の用途では OAEP を優先してください。 |
| RSA-PSS / PKCS#1 署名 | sgcRSA_PSS_Sign / Verify、sgcRSA_PKCS1_Sign / Verify | 生成済みの TsgcRSAPrivateKey から直接署名します。 |
| RSA 鍵エクスポート | sgcRSA_ExportPrivateKeyPEM、sgcRSA_ExportPublicKeyPEM、対応する DER 呼び出し | PKCS#1 と SubjectPublicKeyInfo のエンコーディングです。 |
| PKCS#8 と SEC 1 鍵エクスポート | sgcRSA_ExportPrivateKeyPKCS8DER / PKCS8PEM、sgcEC_ExportPrivateKeyPKCS8DER / PKCS8PEM、sgcEC_ExportPrivateKeySEC1DER / SEC1PEM、sgcEC_ExportSubjectPublicKeyInfo、sgcEC_ExportPublicKeyPEM | Java、.NET、そしてほとんどの最新ツールが期待する BEGIN PRIVATE KEY コンテナに加え、SEC 1 の BEGIN EC PRIVATE KEY 形式、そして証明書が埋め込む SubjectPublicKeyInfo です。暗号化されていないため、返ってくるのは鍵材料そのものです。 |
| RSA と EC の鍵インポート | sgcRSA_ImportPrivateKeyDER / PEM、sgcRSA_ImportPublicKeyDER / PEM、sgcEC_ImportPrivateKeyDER / PEM、sgcEC_ImportPublicKeyDER / PEM | これは以前は存在しませんでした。生成した鍵は書き出せても、二度と読み込むことができなかったのです。インポートは PKCS#1、PKCS#8、SEC 1、SubjectPublicKeyInfo のいずれも、DER または PEM で受け付け、ファイルに CRT パラメータや公開点が含まれていない場合はそれらを再計算し、不正な形式の入力に対しては例外を発生させるのではなく False を返すため、信頼できないファイルを渡しても安全です。 |
| ECIES seal / open | sgcECIES_GenerateKeyPair、sgcECIES_Seal、sgcECIES_Open | X25519 公開鍵に対するハイブリッド暗号化。エフェメラル ECDH と AEAD を組み合わせ、往復とも 1 回の呼び出しです。 |
他者が発行した証明書を読み取るか、自分で生成するか。どちらの裏にも DER エンコーダーとデコーダーがあります。
| 機能 | 関数 | 備考 |
|---|---|---|
| DER リーダー | sgcASN1_Read、sgcASN1_Next、sgcASN1_Content | DER 構造をノードごとにたどります。 |
| 厳格な DER | sgcASN1_Read, sgcASN1_IsMinimalUnsignedInteger | このユニットが読み取る構造はすべて仕様上 DER であるため、長さは DER の規則に従って扱われます。不定長形式は拒否され、短形式で表せる長さの長形式も拒否されます。INTEGER が最小限にエンコードされていない ECDSA 署名も拒否されるため、1 つの署名を 2 通りに書いて 2 つの異なる値として受け取られることはありません。 |
| PEM コーデック | sgcPEM_Decode / sgcPEM_Encode | RFC 7468。DER を囲む -----BEGIN ... -----END ラッパーです。 |
| RSA 鍵解析 | sgcASN1_ParseRSAPrivateKey / PublicKey | PKCS#1(RFC 8017)の鍵構造です。 |
| EC 鍵解析 | sgcASN1_ParseECPrivateKey / PublicKey | SEC 1 の鍵構造です。 |
| DER ライター、構造 | sgcDER_Sequence、sgcDER_Set、sgcDER_Tagged、sgcDER_ContextExplicit / Implicit | あらゆる証明書フィールドが組み立てられる基礎部品です。 |
| DER ライター、値 | sgcDER_Integer、sgcDER_OctetString、sgcDER_BitString、sgcDER_Boolean、sgcDER_Null | プリミティブな値のエンコーダーです。 |
| DER ライター、文字列 & 識別子 | sgcDER_OID、sgcDER_UTF8String、sgcDER_PrintableString、sgcDER_IA5String、sgcDER_Time | オブジェクト識別子、X.509 が使う 3 種類の文字列型、そして UTCTime/GeneralizedTime です。 |
| 証明書解析 | sgcX509_Parse | subject、issuer、有効期間、公開鍵、拡張を含む完全な証明書構造です。 |
| 署名 / チェーン検証 | sgcX509_VerifySignedBy、sgcX509_VerifyChain | 1 つの証明書を発行者に対して検証するか、DER 証明書の配列をたどって検証します。 |
| CRL 解析 & 失効確認 | sgcX509_CRL_Parse、sgcX509_IsRevoked、sgcX509_CRL_VerifySignedBy | 証明書失効リストを解析し、シリアル番号を照合します。 |
| 名前のフォーマット | sgcX509_SubjectRFC2253、sgcX509_IssuerRFC2253、sgcX509_SubjectOneLine | ロギングや表示向けの RFC 2253 識別名文字列です。 |
| 拡張 & SAN | sgcX509_GetExtension、sgcX509_GetCRLDistributionURIs | 任意の拡張 OID と CRL 配布ポイント URI を読み取ります。 |
| 自己署名証明書の生成 | sgcX509_CreateSelfSigned | 完全な TsgcX509Options: subject DN、有効期間、シリアル番号、パス長制約付き CA フラグ、鍵用途、拡張鍵用途、サブジェクト代替名(IPv4 SAN を含む)。 |
| URI サブジェクト代替名 | TsgcX509Options.URIs | ホスト名ではなく SPIFFE 形式のサービス ID 向けの uniformResourceIdentifier SAN です。値は IA5String の内容としてそのまま書き込まれるため、完全な URI を渡してください。 |
| PKCS#10 CSR の生成 | sgcX509_CreateCSR | 同じオプションレコードから作る RFC 2986 の証明書署名要求です。 |
| EC 署名の証明書と CSR | sgcX509_CreateSelfSignedEx、sgcX509_CreateCSREx、sgcX509_ECKey、sgcX509_RSAKey | どちらの鍵も TsgcX509SignKey でラップすることで、RSA だけでなく EC 鍵でも署名できます。EC 証明書は RSA 証明書のおよそ3分の1のサイズで、検証もはるかに高速です。TsgcX509Options.Hashは引き続き SHA の種類だけを指定し、アルゴリズムは鍵に従うため、rhSHA256は EC 鍵ではecdsa-with-SHA256を意味します。 |
| CA による発行 | sgcX509_CreateSigned、sgcX509_CreateSignedFromCSR | オプションレコードから、または解析済みの PKCS#10 要求から、CA 鍵で署名した証明書を発行します。 |
| 耐量子の署名鍵 | sgcX509_MLDSAKey、sgcX509_SLHDSAKey | ML-DSA または SLH-DSA の鍵を TsgcX509SignKey でラップし、sgcX509_CreateSelfSignedEx、sgcX509_CreateCSREx、または CA の発行関数に渡します。ML-DSA は RFC 9881、SLH-DSA は RFC 9909 です。 |
| ML-KEM 証明書 | subject 鍵に ML-KEM を指定した sgcX509_CreateSigned | RFC 9935。CA は ML-KEM 公開鍵を証明できます。ML-KEM は署名ができないため、証明書を発行する前に所持の証明を別の方法で行う必要があります。 |
| 読み取り時の耐量子鍵種別 | TsgcX509PublicKeyType | x509pkRSA、x509pkEC、x509pkEd25519 に加えて x509pkMLDSA、x509pkSLHDSA、x509pkMLKEM があります。sgcX509_Parse、sgcX509_VerifySignedBy、sgcX509_CSR_Verify はいずれもこれらを扱います。 |
| チェーンの制約 | sgcX509_VerifyChain | basicConstraints の pathLenConstraint と、dNSName、iPAddress、rfc822Name、uniformResourceIdentifier、directoryName にわたる nameConstraints 拡張を強制します。 |
| 生成時の nameConstraints | TsgcX509Options.PermittedDNSNames、ExcludedDNSNames、PermittedIPRanges、ExcludedIPRanges | 許可および除外するサブツリーを CA 証明書に書き込みます。上のチェーン検証がそれを強制できるようになります。 |
| IPv6 アドレス SAN | TsgcX509Options.IPAddresses | IPv4 に加えて、RFC 4291 のいずれの表記形式の IPv6 も受け付けます。 |
| PEM 出力 | sgcX509_ToPEM | 生成した DER を、すぐに保存できる PEM ファイルとしてラップします。 |
NIST が 2024 年 8 月に FIPS 203、204、205 として確定した 3 つのアルゴリズムに加え、移行期間向けのハイブリッドコンバイナーです。
| 機能 | 関数 | 備考 |
|---|---|---|
| ML-KEM 鍵生成 | sgcMLKEM_GenerateKeyPair、sgcMLKEM_GenerateKeyPairFromSeed | FIPS 203、旧称 Kyber。3 種類のパラメータセット: mlkem512、mlkem768、mlkem1024。 |
| ML-KEM カプセル化 | sgcMLKEM_Encapsulate, sgcMLKEM_EncapsulateWithSeed | 新しい 32 バイトの共有秘密と、それを運ぶ暗号文を生成します。公開鍵には最初に FIPS 203 の 7.2 節の入力チェックが行われるため、長さが誤っているもの、またはモジュラスのチェックに失敗するものは例外を発生させます。 |
| ML-KEM デカプセル化 | sgcMLKEM_Decapsulate | 長さが正しいが復号できない暗号文は、エラーではなく擬似乱数の秘密(implicit rejection)を生成するため、タイミングやエラーの挙動から何も漏れません。長さが誤っている暗号文や秘密鍵、ハッシュ検査に失敗する秘密鍵は、FIPS 203 の 7.3 節の入力チェックに従い、先に例外を発生させます。 |
| ML-KEM のサイズ | sgcMLKEM_PublicKeySize、PrivateKeySize、CiphertextSize、SharedSecretSize | バッファサイズを決めるための、パラメータセットごとのバイト長です。 |
| ハイブリッド X25519 + ML-KEM | sgcHybrid_GenerateKeyPair、sgcHybrid_Encapsulate、sgcHybrid_Decapsulate | 古典的な共有秘密と耐量子の共有秘密を KDF で組み合わせ、結果が X25519 単体より弱くなることはありません。ML-KEM を今日デプロイする際の推奨方法です。 |
| ML-DSA 鍵生成 | sgcMLDSA_GenerateKeyPair、sgcMLDSA_GenerateKeyPairFromSeed | FIPS 204、旧称 Dilithium。3 種類のパラメータセット: mldsa44、mldsa65、mldsa87。 |
| ML-DSA 署名 / 検証 | sgcMLDSA_Sign / sgcMLDSA_Verify | FIPS 204 インターフェースに従った決定論的または確率的な署名、そしてコンテキスト文字列。 |
| ML-DSA のサイズ | sgcMLDSA_PublicKeySize、PrivateKeySize、SignatureSize | パラメータセットごとのバイト長です。 |
| SLH-DSA 鍵生成 | sgcSLHDSA_GenerateKeyPair、sgcSLHDSA_GenerateKeyPairFromSeed | FIPS 205、旧称 SPHINCS+。ステートレスなハッシュベース署名で、安全性は格子や曲線の仮定ではなくハッシュ関数のみに依拠します。 |
| SLH-DSA 署名 / 検証 | sgcSLHDSA_Sign / sgcSLHDSA_Verify | 6 種類の SHAKE パラメータセット: slhShake128s、slhShake128f、slhShake192s、slhShake192f、slhShake256s、slhShake256f。s 系は署名の小ささ、f 系は署名の速さを優先します。 |
| SLH-DSA のサイズ & 命名 | sgcSLHDSA_PublicKeySize、PrivateKeySize、SignatureSize、sgcSLHDSA_ParamsName | SLH-DSA の署名は大きく(セットにより 7.8 KB から 49 KB)、署名前にバッファサイズを決めてください。 |
| 公開鍵のエクスポート & インポート、DER | sgcMLDSA_ExportSubjectPublicKeyInfo / ImportSubjectPublicKeyInfo、および同じ構成の sgcMLKEM_* と sgcSLHDSA_* の組 | X.509 SubjectPublicKeyInfo です。耐量子の公開鍵も、RSA や EC と同じ構造に収まります。RFC 9881、RFC 9909、RFC 9935。 |
| 秘密鍵のエクスポート & インポート、DER | sgcMLDSA_ExportPrivateKeyInfo / ImportPrivateKeyInfo、および sgcMLKEM_* と sgcSLHDSA_* のペア | PKCS#8 OneAsymmetricKey、バージョン 0 と 1。インポートでは鍵の整合性が検査されます。埋め込まれた公開鍵が一致しない場合は拒否され、同じ鍵のシード形式と展開形式は一致していなければならず、ML-DSA の鍵は保存されている t0 と tr を再現できなければなりません。SLH-DSA はシードから PK.root を再計算し、そのコストは鍵生成 1 回分ほどです。そのためこれらのインポートには aVerify パラメーターがあり、既定は True ですが、自分のアプリケーションが生成した鍵には False を渡せます。 |
| PEM のエクスポート & インポート | sgcMLDSA_ExportPublicKeyPEM、ExportPrivateKeyPEM、ImportPublicKeyPEM、ImportPrivateKeyPEM、および sgcMLKEM_* と sgcSLHDSA_* の一式 | RFC 7468、-----BEGIN ... -----END ラッパーです。PKI のほかの部分と同じファイルおよびツールでそのまま扱えます。 |
| 秘密鍵の形式 | TsgcPQCPrivateKeyFormat | ML-DSA と ML-KEM の秘密鍵には 3 つの形式があります。pqkfSeed はシードのみを書き出し(ML-DSA は 32 バイト、ML-KEM は 64 バイトの d||z シード)、pqkfExpanded は展開済みの鍵を書き出し、pqkfBoth は両方を保持します。SLH-DSA の秘密鍵形式は 1 つだけです。 |
| シードも返す鍵生成 | sgcMLDSA_GenerateKeyPairAndSeed、sgcMLKEM_GenerateKeyPairAndSeed | 鍵ペアとともにシードも返すため、生成の直後にシード形式の PKCS#8 または PEM ファイルを書き出せます。 |
| X-Wing ハイブリッド KEM | sgcXWing_GenerateKeyPair、sgcXWing_Encapsulate、sgcXWing_Decapsulate | draft-connolly-cfrg-xwing-kem-10。X25519 と ML-KEM-768 を 1 つの KEM としてまとめたものです。公開鍵 1216 バイト、秘密鍵 32 バイト(シード)、暗号文 1120 バイト、共有秘密 32 バイト。 |
| TLS 1.3 のハイブリッド鍵共有 | sgcTLSHybrid_ClientKeyShare、sgcTLSHybrid_ServerKeyShare、sgcTLSHybrid_ClientSharedSecret、sgcTLSHybrid_GroupName、sgcTLSHybrid_Available | RFC 10024 のグループ X25519MLKEM768、SecP256r1MLKEM768、SecP384r1MLKEM1024(IANA コードポイント 0x11EC、0x11EB、0x11ED)です。これらは単体の KEM ではなく、TLS の鍵共有を構築するだけのものです。 |
| JSON Web Token 向けの ML-DSA | JWTOptions.Algorithms.MLDSA.PrivateKey、PublicKey、Enabled、sgcMLDSA_ExportPublicJWK、sgcMLDSA_ExportPrivateJWK、sgcMLDSA_ImportJWK、sgcMLDSA_ImportJWKAsPEM | RFC 9964 です。sgcCrypto_* ユニットではなく sgcHTTP_JWT_MLDSA にあります。JWS アルゴリズムは ML-DSA-44、ML-DSA-65、ML-DSA-87(jwtMLDSA44、jwtMLDSA65、jwtMLDSA87)で、クライアントは PKCS#8 PEM、サーバーは SubjectPublicKeyInfo PEM を使い、AKP 形式の JSON Web Key に対応します。この経路のどこにも OpenSSL は関与しません。 |
| 既知解の検証 | NIST ACVP ベクター | ML-KEM の鍵生成、カプセル化、デカプセル化、そして ML-DSA と SLH-DSA の鍵生成、署名生成、署名検証は、sgcWebSockets の QA スイートで NIST ACVP の既知解ベクターと照合されます。 |
sgcCrypto は ed25519187 や SPECK を実装していません。ed25519187 には公開された仕様がなく、SPECK は 2018 年に ISO 標準化から取り下げられているため、いずれもここには実装していません。
sgcCrypto のプリミティブの上に Object Pascal で書かれ、同じパックに同梱されています。sgcCrypto_* ではなく sgcSSL_NativeTLS* のユニットにあるため、上で数えた 43 ユニットには含まれません。
| 機能 | API | 備考 |
|---|---|---|
| クライアントでの選択 | TLSOptions.IOHandler := iohNativeTLS | OpenSSL、SChannel、プラットフォームの TLS バックエンドを、プロセス内の Pascal 製エンジンに置き換えます。どのターゲットでもデプロイするものはありません。 |
| サーバーでの選択 | SSLOptions.IOHandler := iohNativeTLS | 既定の Indy サーバーエンジンでも、IOCP と EPOLL のエンジンでも動作します。 |
| プロトコルのバージョン | TLSOptions.Version | 許可する最低バージョンです。tls1_2 または tlsUndefined は TLS 1.3 か TLS 1.2 のいずれかをネゴシエートし、tls1_3 は TLS 1.3 のみを許可し、tls1_0 または tls1_1 は設定エラーを発生させます。SSLOptions.Version はサーバーで同じ働きをします。TLS 1.2 のみにするには、CipherSuites に TLS 1.2 のスイートだけを列挙してください。 |
| 鍵交換グループ | TLSOptions.NativeTLS_Options.Groups | コロン区切りで、OpenSSL 形式です。既定値は X25519MLKEM768:X25519:secp256r1:secp384r1 で、相手が同意すればハンドシェイクは常に耐量子ハイブリッドになります。SGC_CRYPTO_FIPS を指定したビルドでは、代わりに SecP256r1MLKEM768:SecP384r1MLKEM1024:secp256r1:secp384r1 が既定になります。3 つのハイブリッドグループは TLS 1.3 専用のため、TLS 1.2 接続では X25519、secp256r1、secp384r1 のいずれかを使用します。 |
| 暗号スイート | TLSOptions.NativeTLS_Options.CipherSuites | コロン区切りで、OpenSSL 形式です。既定値は TLS 1.3 では TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 で、TLS 1.2 では ECDHE_ECDSA と ECDHE_RSA を AES-128-GCM、AES-256-GCM、ChaCha20-Poly1305 とともに追加します。ECDHE の AES-CBC スイートと RSA 鍵交換は、名前を指定したときのみ使用され、TLS 1.2 のスイートは全部で 20 種類になります。SGC_CRYPTO_FIPS を指定したビルドでは ChaCha20-Poly1305 と RSA 鍵交換が除外されます。 |
| 信頼するルート | TLSOptions.RootCertFile, TLSOptions.NativeTLS_Options.UseSystemRoots | ルートは RootCertFile から取得されます。UseSystemRoots を True に設定すると、オペレーティングシステムがすでに信頼しているルートが追加されます。Windows では ROOT ストア、それ以外のすべてのプラットフォームでは標準的な場所の中から最初に見つかった CA バンドルファイルです。macOS や iOS のキーチェーン、Android のストアからは読み取りません。既定ではオフのため、RootCertFile が取得元のままとなります。SSLOptions の同じプロパティは、サーバーが検証するクライアント証明書に適用されます。 |
| チェーンの構築 | 相手が送信する証明書チェーン | リーフから信頼するルートまでのパスがチェーンから検索されるため、余分な証明書や任意の順序も、RFC 8446 の 4.4.2 節が求めるとおり受け入れられます。検索はバックトラックを行うため、正しい発行者を名乗りながらどこにも到達しない証明書が、その背後にある有効なパスを隠してしまうことはなくなりました。失効確認と証明書ポリシーは検査されません。 |
| プロトコルの範囲 | RFC 8446、RFC 5246 | TLS 1.3 と TLS 1.2 です。TLS 1.1、TLS 1.0、SSL には対応しません。TLS 1.2 は RFC 7627 の拡張マスターシークレットと、双方向の RFC 8446 のダウングレード保護を使用し、再ネゴシエーションと SHA-1 署名(RFC 9155)を拒否し、CBC レコードを定数時間で検査します。 |
| 未実装 | n/a | セッション再開も PSK もなく、0-RTT も QUIC もありません。 |
| ピア検証イベント | OnSSLVerifyPeer | このエンジンでは利用できません。エンジンは独自の検証フックを備えています。このイベントに依存するコードがある場合は、OpenSSL またはプラットフォームのバックエンドを使い続けてください。 |
ユーティリティ層です。ワンタイムコード、他のすべてのファミリーが頼るエンコーディング、そして WinZip AES 暗号化です。
| 機能 | 関数 | 備考 |
|---|---|---|
| HOTP | sgcHOTP | RFC 4226、カウンターベースのワンタイムパスワード。 |
| TOTP | sgcTOTP、sgcTOTP_FromBase32 | RFC 6238、時刻ベースのワンタイムパスワード。Base32 版は、認証アプリが表示するそのままの形式でシークレットを受け取れます。 |
| TOTP 検証 | sgcTOTP_Verify | 送信されたコードを、ステップのウィンドウにわたって定数時間でチェックするため、結果もその位置もタイミングから漏れません。リプレイ自体は防がないため、使用済みコードの追跡は呼び出し側で行います。 |
| 定数時間比較 | sgcConstantTimeEquals | ライブラリ全体で、タグや MAC の比較に使われます。 |
| セキュアゼロ化 | sgcSecureZero | 鍵材料がメモリに残らないよう、バイトバッファを上書きします。 |
| Hex | sgcHexEncode / sgcHexDecode | 小文字の hex で、デコードは大文字小文字を区別しません。 |
| Base64url | sgcBase64UrlEncode / sgcBase64UrlDecode | RFC 4648 section 5、パディングなし。JWT と JOSE が使うエンコーディングです。 |
| Base32 | sgcBase32Encode / sgcBase32Decode | RFC 4648 section 6。TOTP のシークレットと認証アプリが使うエンコーディングです。 |
| WinZip AES 鍵導出 | sgcZipAE2_DeriveKeys | パスワードとソルトから、PBKDF2 ベースの鍵、認証鍵、パスワード検証子を導出します。 |
| WinZip AES 暗号化 / 復号 | sgcZipAE2_Encrypt / sgcZipAE2_Decrypt | AE-1 と AE-2、AES-128/192/256。TsgcZipAESStrength によるエントリごとのソルトサイズ設定です。 |
| WinZip エントリパッキング | sgcZipAE2_PackEntry / sgcZipAE2_UnpackEntry | ソルト、検証子、暗号文、認証コードを、ディスク上のレイアウトに組み合わせます。 |
| WinZip 拡張フィールド | sgcZipAE2_BuildExtraField / sgcZipAE2_ParseExtraField | ZIP エントリが AES 暗号化されていることを示す 0x9901 拡張フィールドです。 |
| レガシーハッシュ(相互運用専用) | sgcMD4、sgcMD5、sgcHMAC_MD5 | 古い形式やプロトコルの読み取り用に残しています。新しい設計には使わないでください。 |
| レガシー暗号(相互運用専用) | sgcDES_EncryptECB / sgcDES_DecryptECB、sgcDES_NTLM7to8 | DES-ECB と DES ベースの NTLM 鍵拡張ステップです。どちらも取り下げられていますが(FIPS 46-3)、レガシーとの相互運用のために残しています。 |
| セキュアな乱数バイト | sgcRandomBytes / sgcRandomFill | MSWINDOWS では BCryptGenRandom(Windows CNG)、それ以外では /dev/urandom。どちらも同じ呼び出しです。 |
サポート内容を正確に記載しています。
| 項目 | 詳細 |
|---|---|
| オペレーティングシステム | sgcVer.inc の中で SGC_CRYPTO を囲む MSWINDOWS ガードや、その他のプラットフォームガードは一切ありません。43 ユニットすべてが Win32、Win64、Linux64、macOS、iOS、Android 向けにコンパイルされます。 |
| 乱数ソース | 唯一プラットフォームを意識するユニット sgcCrypto_Random は、対象ごとに CSPRNG を選択します。MSWINDOWS では BCryptGenRandom(Windows CNG)、POSIX 系のターゲットでは /dev/urandom を、同じ sgcRandomBytes 呼び出しの裏側で行います。バイトは OS の乱数生成器から直接取得され、独自の生成器を上に重ねることはありません。Windows では BCryptGenRandom が利用できない場合に限り RtlGenRandom、次に CryptGenRandom を使用し、どのソースも読み取れない場合は弱いバイトを返さずに例外を発生させます。 |
| FIPS モード | 既定では無効の条件定義 SGC_CRYPTO_FIPS で、コンパイル時に 43 ユニットから非承認のアルゴリズムをすべて取り除き、実行時にいくつかのパラメーター規則を検査します。ライブラリを FIPS 承認アルゴリズムの範囲内に保ちますが、sgcCrypto は FIPS 140-3 の認証を受けたモジュールではなく、この定義も認証を主張するものではありません。FIPS モード |
| Delphi | Delphi 7 から RAD Studio 13 Florence まで。ネイティブな 64 ビット整数型はどこにも前提としていません。sgcCrypto_Int64 と sgcCrypto_BigInteger の TsgcBigInt 型が、ハッシュ、曲線、耐量子ユニットの必要とする演算をエミュレートします。 |
| C++ Builder | 生成されたヘッダーを介して、同じソースツリーで C++ Builder に対応します。 |
| 設計時の要素 | ありません。sgcCrypto_Reg.pas はなく、RegisterComponents されるものもなく、コンポーネントパレットのページに現れるユニットもありません。 |
| 依存関係 | OpenSSL バインディングも外部 DLL もありません。すべてのプリミティブは、参照するユニットの中に直接 Object Pascal で実装されています。 |
| ソースコード | すべての有料ティア、そして sgcCrypto をすでに含むエディションパッケージで、完全な Object Pascal のソースコードが提供されます。 |
| 再配布 | ビルドしたバイナリはロイヤリティフリーで、シート単位やサーバー単位のランタイム費用もありません。 |