sgcCrypto è una nuova libreria di crittografia general-purpose per Delphi e C++ Builder: 43 unità in puro Object Pascal che coprono cifratura simmetrica, hashing, firme digitali, PKI e scambio di chiavi post-quantum. Non ci sono componenti a design-time, nessuna classe Tsgc* e nulla da trascinare su una form. Basta aggiungere un'unità alla propria clausola uses e chiamare una funzione, esattamente come si richiamerebbe una routine della RTL.
sgcCrypto viene fornita gratuitamente con sgcWebSockets Standard, Professional ed Enterprise, quindi se possiedi già una di queste licenze, o All-Access, la hai già a disposizione, senza nulla da installare o ordinare. Viene inoltre venduta anche come pacchetto standalone a sé stante, che include il runtime di sgcWebSockets Core, per i clienti che possiedono solo Core o nessuna licenza sgcWebSockets.
Come Funziona
Ogni unità esporta funzioni e procedure semplici che ricevono in ingresso TBytes e restituiscono TBytes in uscita. Non c'è alcun oggetto di contesto da allocare, nessuna interfaccia da implementare e nessun sgcCrypto_Reg.pas, perché non c'è nulla da registrare. Il codice sorgente Pascal completo viene fornito con ogni licenza, così un primitive può essere seguito passo passo nel proprio debugger invece di scomparire dentro una DLL o un binding OpenSSL.
Nulla nella libreria dipende da una libreria esterna. Ogni algoritmo, da AES fino agli schemi di firma post-quantum, è implementato direttamente nell'unità che lo espone, e lo stesso codice sorgente si compila senza modifiche da Delphi 7 fino a RAD Studio 13, per Win32, Win64, Linux64, macOS, iOS e 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;
Cifratura Simmetrica e AEAD
sgcCrypto_AES copre CBC, GCM e CTR. sgcCrypto_Modes aggiunge ECB, OFB, CFB, il ciphertext-stealing CTS, e AES Key Wrap e Key Wrap with Padding (RFC 3394 e RFC 5649), mentre sgcCrypto_CMAC implementa AES-CMAC. sgcCrypto_ChaCha implementa ChaCha20, XChaCha20, Salsa20 e XSalsa20, e sgcCrypto_Poly1305 abbina Poly1305 a questi algoritmi per formare i cifrari AEAD ChaCha20-Poly1305 e XChaCha20-Poly1305 definiti in RFC 8439. Ogni tag di autenticazione, sia esso GCM o Poly1305, viene confrontato in tempo costante, cosicché un controllo fallito non riveli mai quanto il tentativo si sia avvicinato al valore corretto.
Hashing, Derivazione di Chiavi e MAC
sgcCrypto_SHA2 e sgcCrypto_Keccak coprono SHA-1/2, SHA-3, SHAKE, cSHAKE e KMAC, mentre sgcCrypto_Blake2b/Blake2s aggiungono BLAKE2. sgcCrypto_HMAC fornisce l'autenticazione dei messaggi con chiave. Per trasformare una password in una chiave sono disponibili sgcCrypto_KDF (PBKDF2), sgcCrypto_HKDF, sgcCrypto_Scrypt e sgcCrypto_Argon2, che implementa tutte e tre le varianti di Argon2, d, i e id, il vincitore della Password Hashing Competition. sgcCrypto_SipHash offre un hash con chiave veloce per le chiavi delle hash table, e sgcCrypto_TLSH è un hash di similarità fuzzy, utile per il rilevamento di quasi-duplicati piuttosto che come digest crittografico.
Firme, Scambio di Chiavi e PKI
sgcCrypto_Ed25519 e sgcCrypto_Ed448 firmano e verificano, mentre sgcCrypto_X25519 e sgcCrypto_X448 eseguono il corrispondente scambio di chiavi Diffie-Hellman. sgcCrypto_ECCurves aggiunge ECDSA ed ECDH su secp256k1 e sulle tre curve Brainpool con nonce deterministici RFC 6979, e sgcCrypto_RSA_Keys copre la generazione di chiavi RSA a qualsiasi lunghezza in bit, la cifratura OAEP e le firme PSS.
Sul fronte PKI, sgcCrypto_X509 analizza un certificato, verifica che sia stato firmato da un dato emittente, percorre e verifica una catena, e controlla una CRL per la revoca. sgcCrypto_X509_Gen genera un certificato X.509 autofirmato o una CSR PKCS#10 da zero, inclusi subject alternative names, key usage e vincoli sulla lunghezza del percorso della CA, basandosi su un writer DER costruito esattamente per questo scopo.
Crittografia Post-Quantum
sgcCrypto implementa anche i tre standard post-quantum del NIST. sgcCrypto_MLKEM è l'incapsulamento di chiavi FIPS 203 su tutti e tre i parameter set, ML-KEM-512, 768 e 1024, con rejection implicita su un ciphertext malformato in modo che un input non valido non riveli mai informazioni. sgcCrypto_MLDSA è la firma FIPS 204, ML-DSA-44/65/87, e sgcCrypto_SLHDSA è FIPS 205 su tutti e sei i parameter set SHAKE. Poiché un'assunzione basata su reticoli è più recente rispetto alle curve ellittiche, sgcCrypto_MLKEM_Hybrid combina un segreto X25519 con un segreto ML-KEM in un'unica chiave condivisa, lo schema di migrazione ibrido verso cui l'industria sta convergendo.
Disponibilità
sgcCrypto viene fornita gratuitamente con sgcWebSockets Standard, Professional ed Enterprise, e con All-Access. Se possiedi già una di queste licenze, le 43 unità sono già presenti nel tuo installer, senza bisogno di un ordine separato. Se possiedi solo sgcWebSockets Core, o nessuna licenza sgcWebSockets, sgcCrypto è disponibile anche come pacchetto standalone a sé stante con il runtime Core incluso. Ogni licenza, inclusa o standalone, comprende il codice sorgente Pascal completo e un anno di aggiornamenti.
Puoi consultare il riferimento completo delle unità e provarla tu stesso sulla pagina del prodotto sgcCrypto.
Domande o commenti? Mettiti in contatto con noi, riceverai una risposta dalle persone che hanno scritto il codice.
