sgcCrypto is een nieuwe cryptografiebibliotheek voor algemeen gebruik voor Delphi en C++ Builder: 43 pure Object Pascal-units voor symmetrische versleuteling, hashing, digitale handtekeningen, PKI en post-quantum sleuteluitwisseling. Er zijn geen design-time componenten, geen Tsgc*-klassen en niets om op een formulier te plaatsen. U voegt een unit toe aan uw uses-clausule en roept een functie aan, op dezelfde manier waarop u een RTL-routine zou aanroepen.
sgcCrypto wordt gratis meegeleverd met sgcWebSockets Standard, Professional en Enterprise, dus als u al een van deze licenties bezit, of All-Access, heeft u het al, er hoeft niets nieuws geïnstalleerd of besteld te worden. Het wordt ook verkocht als een op zichzelf staand pakket, met de sgcWebSockets Core-runtime erbij, voor klanten die alleen Core bezitten of helemaal geen sgcWebSockets-licentie hebben.
Hoe het werkt
Elke unit exporteert eenvoudige functies en procedures die TBytes als invoer nemen en TBytes als uitvoer teruggeven. Er is geen context-object om te alloceren, geen interface om te implementeren en geen sgcCrypto_Reg.pas, omdat er niets te registreren valt. Volledige Pascal-broncode wordt meegeleverd met elke licentie, zodat u een primitief stap voor stap kunt doorlopen in uw eigen debugger in plaats van dat het verdwijnt in een DLL of een OpenSSL-binding.
Niets in de bibliotheek is afhankelijk van een externe bibliotheek. Elk algoritme, van AES tot de post-quantum handtekeningschema's, is rechtstreeks geïmplementeerd in de unit die het blootstelt, en dezelfde broncode compileert ongewijzigd van Delphi 7 tot en met RAD Studio 13, voor Win32, Win64, Linux64, macOS, iOS en Android.
uses
sgcCrypto_Random, sgcCrypto_AES, sgcCrypto_Keccak, sgcCrypto_Ed25519,
sgcCrypto_MLKEM;
var
vKey, vIV, vPlain, vAAD, vTag, vCipher: TBytes;
vDigest, vSeed, vSignature, vMessage: TBytes;
vPublicKey, vPrivateKey, vSharedSecret, vCiphertext: TBytes;
begin
// AES-256-GCM: authenticated encryption in one call
vKey := sgcRandomBytes(32);
vIV := sgcRandomBytes(12);
vPlain := TEncoding.UTF8.GetBytes('confidential payload');
vCipher := sgcAES_GCM_Encrypt(vKey, vIV, vPlain, vAAD, vTag);
// SHA-3-256, one call, no context object to manage
vDigest := sgcSHA3_256(vPlain);
// Ed25519: sign a message
vSeed := sgcRandomBytes(32);
vMessage := TEncoding.UTF8.GetBytes('sign me');
vSignature := sgcEd25519_Sign(vSeed, vMessage);
// ML-KEM-768: post-quantum key encapsulation (FIPS 203)
sgcMLKEM_GenerateKeyPair(mlkem768, vPublicKey, vPrivateKey);
sgcMLKEM_Encapsulate(mlkem768, vPublicKey, vCiphertext, vSharedSecret);
end;
Symmetrische versleuteling en AEAD
sgcCrypto_AES ondersteunt CBC, GCM en CTR. sgcCrypto_Modes voegt ECB, OFB, CFB, ciphertext-stealing CTS, en AES Key Wrap en Key Wrap with Padding (RFC 3394 en RFC 5649) toe, en sgcCrypto_CMAC is AES-CMAC. sgcCrypto_ChaCha implementeert ChaCha20, XChaCha20, Salsa20 en XSalsa20, en sgcCrypto_Poly1305 combineert Poly1305 ermee tot de ChaCha20-Poly1305- en XChaCha20-Poly1305-AEAD-cijfers uit RFC 8439. Elke authenticatietag, of het nu GCM of Poly1305 is, wordt vergeleken in constante tijd, zodat een mislukte controle nooit lekt hoe dicht de gok in de buurt kwam.
Hashing, sleutelafleiding en MAC's
sgcCrypto_SHA2 en sgcCrypto_Keccak ondersteunen SHA-1/2, SHA-3, SHAKE, cSHAKE en KMAC, en sgcCrypto_Blake2b/Blake2s voegen BLAKE2 toe. sgcCrypto_HMAC is berichtauthenticatie met een sleutel. Om een wachtwoord om te zetten in een sleutel zijn er sgcCrypto_KDF (PBKDF2), sgcCrypto_HKDF, sgcCrypto_Scrypt en sgcCrypto_Argon2, dat alle drie de Argon2-varianten implementeert, d, i en id, de winnaar van de Password Hashing Competition. sgcCrypto_SipHash biedt een snelle hash met sleutel voor hashtabel-sleutels, en sgcCrypto_TLSH is een fuzzy-gelijkenishash, nuttig voor het detecteren van bijna-duplicaten in plaats van als cryptografische digest.
Handtekeningen, sleuteluitwisseling en PKI
sgcCrypto_Ed25519 en sgcCrypto_Ed448 ondertekenen en verifiëren, en sgcCrypto_X25519 en sgcCrypto_X448 voeren de bijbehorende Diffie-Hellman-sleuteluitwisseling uit. sgcCrypto_ECCurves voegt ECDSA en ECDH toe over secp256k1 en de drie Brainpool-curven, met deterministische nonces volgens RFC 6979, en sgcCrypto_RSA_Keys ondersteunt RSA-sleutelgeneratie op elke bitlengte, OAEP-versleuteling en PSS-handtekeningen.
Aan de PKI-kant parseert sgcCrypto_X509 een certificaat, verifieert of het is ondertekend door een bepaalde uitgever, doorloopt en verifieert een keten, en controleert een CRL op intrekking. sgcCrypto_X509_Gen genereert vanaf nul een zelfondertekend X.509-certificaat of een PKCS#10-CSR, inclusief subject alternative names, key usage en CA-padlengtebeperkingen, bovenop een DER-writer die precies daarvoor is gebouwd.
Post-quantum cryptografie
sgcCrypto implementeert ook de drie NIST post-quantum standaarden. sgcCrypto_MLKEM is FIPS 203-sleutelencapsulatie over alle drie de parametersets, ML-KEM-512, 768 en 1024, met impliciete afwijzing bij een misvormde ciphertext, zodat een foutieve invoer nooit informatie lekt. sgcCrypto_MLDSA is FIPS 204-ondertekening, ML-DSA-44/65/87, en sgcCrypto_SLHDSA is FIPS 205 over alle zes SHAKE-parametersets. Omdat een lattice-aanname jonger is dan elliptische krommen, combineert sgcCrypto_MLKEM_Hybrid een X25519-geheim met een ML-KEM-geheim tot één gedeelde sleutel, het hybride migratiepatroon waar de industrie naartoe convergeert.
Beschikbaarheid
sgcCrypto wordt gratis geleverd bij sgcWebSockets Standard, Professional en Enterprise, en bij All-Access. Als u al een van deze licenties bezit, staan de 43 units al in uw installer, geen aparte bestelling nodig. Als u alleen sgcWebSockets Core bezit, of helemaal geen sgcWebSockets-licentie, wordt sgcCrypto ook verkocht als eigen standalone pakket met de Core-runtime erbij. Elke licentie, inbegrepen of standalone, wordt geleverd met volledige Pascal-broncode en één jaar updates.
U kunt de volledige unit-referentie lezen en het zelf uitproberen op de sgcCrypto-productpagina.
Vragen of feedback? Neem contact op, u krijgt een antwoord van de mensen die de code hebben geschreven.
