sgcWebSockets bevat sgcCrypto, een algemeen bruikbare cryptografiebibliotheek die volledig in pure Pascal is geschreven. Ze heeft geen afhankelijkheid van OpenSSL of enige andere externe bibliotheek, en compileert ongewijzigd van Delphi 7 tot en met Delphi 13, op Win32, Win64, Linux64, macOS en iOS.
De bibliotheek omvat hashing en berichtauthenticatie, wachtwoordhashing en sleutelafleiding, symmetrische versleuteling, klassieke public key-cryptografie, post-quantumcryptografie, X.509-certificaten, eenmalige wachtwoorden, archiefversleuteling en een fuzzy hash voor de detectie van bijna-duplicaten. Ze is georganiseerd als één unit per algoritmefamilie (sgcCrypto_AES, sgcCrypto_MLKEM, sgcCrypto_TLSH, enzovoort), zodat een toepassing alleen de code meeneemt die ze daadwerkelijk aanroept.
Elke functie is een eenvoudige aanroep die TBytes ontvangt en teruggeeft: er zijn geen componenten om op een formulier te plaatsen en geen ontwerptijdconfiguratie. De implementatie van elk hieronder vermeld algoritme is byte voor byte gecontroleerd tegen een onafhankelijke implementatie van dezelfde standaard (OpenSSL, Python's hashlib/cryptography, of een referentie-implementatie gepubliceerd door de auteurs van de standaard) in plaats van alleen tegen de eigen uitvoer, wat nu net de manier is om een fout op te sporen die intern consistent maar toch onjuist is.
De bibliotheek inschakelen
De cryptografie-units behoren tot het installatiepakket Cryptography, gestuurd door de voorwaardelijke define SGC_PACK_CRYPTO in sgcVer.inc. Wanneer de define is uitgeschakeld, compileert elke sgcCrypto_*-unit naar een lege stub, waardoor het pakket buiten een build blijft die het niet nodig heeft. Selecteer het pakket in het installatieprogramma, of definieer SGC_PACK_CRYPTO in uw projectopties als u vanuit de broncode compileert.
Als een project uitsluitend FIPS-goedgekeurde algoritmen mag gebruiken, verwijdert de optionele define SGC_CRYPTO_FIPS tijdens het compileren elk ander algoritme uit de sgcCrypto-units. Deze staat standaard uit. Zie FIPS-modus voor wat de define behoudt, wat hij verwijdert en waarom het geen FIPS 140-3-validatie is.
De sgcCrypto-units zijn ook wat de rest van de bibliotheek laat draaien zonder OpenSSL: de sgcCryptoBackend-runtimeschakelaar (of de optionele SGC_NATIVE_CRYPTO-define) en de iohNativeTLS-IOHandler. Zie Werken zonder OpenSSL.
Wat deze pagina behandelt
De onderstaande tabel is de volledige inventaris: elk algoritme dat de bibliotheek implementeert, en in welke unit het zich bevindt. De volgende pagina's lichten elke familie één voor één toe, met de exacte functiesignaturen en een kort Delphi-voorbeeld.
| Categorie | Algoritmen | Standaard | Unit |
| Hashing | SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 | FIPS 180-4 | sgcCrypto_SHA2 |
| Hashing | SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256, cSHAKE, KMAC | FIPS 202, SP 800-185 | sgcCrypto_Keccak |
| Hashing | BLAKE2b (keyed, up to 512 bit) | RFC 7693 | sgcCrypto_Blake2b |
| Hashing | BLAKE2s (keyed, up to 256 bit) | RFC 7693 | sgcCrypto_Blake2s |
| Hashing | SipHash-2-4 | — | sgcCrypto_SipHash |
| Hashing | RIPEMD-160, HMAC-RIPEMD160 | ISO/IEC 10118-3, RFC 2286 | sgcCrypto_Legacy |
| Hashing (verouderd) | MD4, MD5, DES-ECB, NTLM v1 hash | — | sgcCrypto_Legacy |
| Fuzzy hashing | TLSH digest and distance | — | sgcCrypto_TLSH |
| Berichtauthenticatie | HMAC-SHA1/256/384/512, HMAC-MD5 | FIPS 198-1 | sgcCrypto_HMAC |
| Berichtauthenticatie | AES-CMAC | RFC 4493 | sgcCrypto_CMAC |
| Berichtauthenticatie | AES-GMAC | SP 800-38D | sgcCrypto_CMAC |
| Berichtauthenticatie | Poly1305 | RFC 8439 | sgcCrypto_Poly1305 |
| Wachtwoordhashing & KDF | PBKDF2 (SHA-1/256/384/512) | RFC 8018 | sgcCrypto_KDF |
| Wachtwoordhashing & KDF | KDF1, KDF2, ANSI X9.63 KDF | ISO 18033-2, ANSI X9.63 | sgcCrypto_KDF |
| Wachtwoordhashing & KDF | scrypt | RFC 7914 | sgcCrypto_Scrypt |
| Wachtwoordhashing & KDF | Argon2d, Argon2i, Argon2id | RFC 9106 | sgcCrypto_Argon2 |
| Wachtwoordhashing & KDF | HKDF (SHA-256/384) | RFC 5869 | sgcCrypto_HKDF |
| Symmetrische versleuteling | AES-128/192/256: ECB, CBC, CFB, OFB, CTR, CBC ciphertext stealing, GCM | FIPS 197, SP 800-38A/D | sgcCrypto_AES, sgcCrypto_Modes |
| Symmetrische versleuteling | AES-CBC with no padding, and the PKCS#7, zero, ANSI X9.23, ISO 7816-4, ISO 10126-2 and TBC padding schemes | SP 800-38A, ISO/IEC 9797-1 | sgcCrypto_AES, sgcCrypto_Modes |
| Symmetrische versleuteling | AES-CCM (AEAD) | RFC 3610, SP 800-38C | sgcCrypto_Modes |
| Symmetrische versleuteling | AES Key Wrap, AES Key Wrap with Padding | RFC 3394, RFC 5649 | sgcCrypto_Modes |
| Symmetrische versleuteling | ChaCha20, XChaCha20, Salsa20, XSalsa20 | RFC 8439 | sgcCrypto_ChaCha |
| Symmetrische versleuteling | ChaCha20-Poly1305, XChaCha20-Poly1305 (AEAD) | RFC 8439 | sgcCrypto_Poly1305 |
| Public key-cryptografie | RSA key generation, RSA-OAEP, RSA-PSS, PKCS#1 v1.5 sign/verify | RFC 8017 | sgcCrypto_RSA_Keys, sgcCrypto_RSA |
| Public key-cryptografie | RSA PKCS#1 v1.5 encryption | RFC 8017 | sgcCrypto_RSA_Keys |
| Public key-cryptografie | Ed25519, Ed448 (signatures) | RFC 8032 | sgcCrypto_Ed25519, sgcCrypto_Ed448 |
| Public key-cryptografie | X25519, X448 (key agreement) | RFC 7748 | sgcCrypto_X25519, sgcCrypto_X448 |
| Public key-cryptografie | ECIES sealed box encryption | — | sgcCrypto_ECIES |
| Public key-cryptografie | ECDSA / ECDH on NIST P-256, P-384, P-521 | FIPS 186-5 | sgcCrypto_EC, sgcCrypto_ECCurves |
| Public key-cryptografie | ECDSA / ECDH on secp256k1, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1 | SEC 2, RFC 5639 | sgcCrypto_ECCurves |
| Public key-cryptografie | ECDSA DER encoded signatures, raw and DER conversion | RFC 3279 | sgcCrypto_ECCurves, sgcCrypto_EC |
| Public key-cryptografie | Schnorr signatures on secp256k1 | BIP-340 | sgcCrypto_ECCurves |
| Public key-cryptografie | RSA and EC key export and import: PKCS#1, PKCS#8, SEC1, SubjectPublicKeyInfo, DER and PEM | RFC 8017, RFC 5958, RFC 5280 | sgcCrypto_RSA_Keys, sgcCrypto_ECCurves |
| Post-quantumcryptografie | ML-KEM-512/768/1024, hybrid X25519 + ML-KEM-768, X-Wing, X25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024 | FIPS 203, RFC 9935, RFC 10024, draft-connolly-cfrg-xwing-kem | sgcCrypto_MLKEM, sgcCrypto_MLKEM_Hybrid |
| Post-quantumcryptografie | ML-DSA-44/65/87 | FIPS 204, RFC 9881, RFC 9964 | sgcCrypto_MLDSA |
| Post-quantumcryptografie | SLH-DSA-SHAKE-128s/128f/192s/192f/256s/256f | FIPS 205, RFC 9909 | sgcCrypto_SLHDSA |
| Certificaten & PKI | PKCS#12 (.pfx, .p12) reading: leaf certificate, chain and private key. PBES2 with AES, and the legacy Triple DES and RC2 schemes | RFC 7292, RFC 9579 | sgcCrypto_PKCS12 |
| Certificaten & PKI | X.509 parsing, chain and CRL verification | RFC 5280 | sgcCrypto_X509 |
| Certificaten & PKI | X.509 self-signed certificate and PKCS#10 CSR generation | RFC 5280, RFC 2986 | sgcCrypto_X509_Gen |
| Certificaten & PKI | EC signed X.509 certificates and CSRs, URI subject alternative names | RFC 5280, RFC 2986 | sgcCrypto_X509_Gen |
| Certificaten & PKI | DER / ASN.1 reader and writer, PEM, Base64 | — | sgcCrypto_ASN1, sgcCrypto_DER |
| Eenmalige wachtwoorden | HOTP, TOTP | RFC 4226, RFC 6238 | sgcCrypto_OTP |
| Archiefversleuteling | WinZip AE-1 / AE-2 | WinZip AE-2 | sgcCrypto_Zip_AE2 |
| Encodering & hulpprogramma's | Hex, Base32, Base64url, constant time compare, secure zero, random bytes | RFC 4648 | sgcCrypto_Encoding, sgcCrypto_Random |
Één voor één toegelicht
1. Hashing & berichtauthenticatie: SHA-2, SHA-3, SHAKE, BLAKE2, SipHash, HMAC, AES-CMAC en Poly1305, de bouwstenen waarop bijna elk ander algoritme op deze pagina is gebaseerd.
2. Wachtwoordhashing & sleutelafleiding: PBKDF2, scrypt, Argon2id en HKDF. Een wachtwoord opslaan en een sleutel afleiden van een bestaand geheim zijn twee verschillende taken; deze pagina legt uit waarom, en welke functie bij welke taak past.
3. Symmetrische versleuteling: AES in elke modus die de bibliotheek ondersteunt, AES-sleutelwrapping, ChaCha20/Salsa20 en hun Poly1305 AEAD-constructies, en waarom een geauthenticeerde modus de standaardkeuze zou moeten zijn.
4. Public key-cryptografie: RSA, Ed25519/Ed448-handtekeningen, X25519/X448-sleuteluitwisseling, ECIES, ECDSA/ECDH op de NIST-, secp256k1- en Brainpool-curven, en BIP-340 Schnorr-handtekeningen.
5. Post-quantumcryptografie: ML-KEM, ML-DSA en SLH-DSA, de drie schema's die NIST heeft gestandaardiseerd in FIPS 203-205, en de hybride constructie om vandaag al in te zetten.
6. Certificaten & PKI: het parseren en verifiëren van X.509-certificaten die u ontvangt, en het genereren van uw eigen zelfondertekende certificaten en PKCS#10-aanvragen, ondertekend met een RSA- of een EC-sleutel.
7. Eenmalige wachtwoorden: HOTP en TOTP, de codes die een authenticator-app genereert, inclusief de provisioning-URI.
8. Fuzzy hashing (TLSH): een locality sensitive hash voor de detectie van bijna-duplicaten; in tegenstelling tot elke andere hash op deze pagina is deze niet bedoeld voor integriteit of beveiliging.
9. WinZip AE-2-archiefversleuteling: de AES-versleuteling die binnen .zip-archieven wordt gebruikt, en wat deze wel en niet beschermt.
10. FIPS-modus: een compileerschakelaar die alleen FIPS-goedgekeurde algoritmen in de bibliotheek overlaat, wat hij verwijdert en controleert, en waarom het geen FIPS 140-3-validatie is.
Demo's
De map Demos\18.Cryptography bevat zeven uitvoerbare toepassingen, één per bovenstaand gebied (hashing, symmetrische versleuteling, wachtwoorden, public key, post-quantum, certificaten, en eenmalige wachtwoorden met WinZip AE-2), die elk de API in gebruik tonen en de redenering achter de aanbevolen keuzes uitleggen.