sgcCrypto Matrice delle funzionalità

Tutto ciò che fa sgcCrypto, mappato sulle 43 unità presenti sul disco. Qui non ci sono componenti né proprietà a design-time: ogni riga qui sotto è una funzione o una procedura che chiami direttamente. Il codice sorgente completo è incluso in ogni licenza. Le ancore qui sotto ti portano alle sei famiglie di capacità in cui rientrano le unità, più al motore TLS 1.3 e TLS 1.2 che lo stesso pacchetto costruisce sopra di esse.

sgcCrypto non ha componenti. Le 43 unità qui sotto esportano semplici funzioni, non esiste una classe Tsgc* e non esiste un sgcCrypto_Reg.pas. Aggiungi un'unità alla tua clausola uses e chiama la funzione.

Già incluso. sgcCrypto viene distribuito gratuitamente all'interno di sgcWebSockets Standard, Professional ed Enterprise, e di All-Access. È anche venduto in autonomo (con il runtime sgcWebSockets Core incluso) per i clienti che possiedono solo Core. Vedi Prezzi.

Simmetrica

AES, CCM, ChaCha20, Poly1305, 5 unità

Hashing e KDF

SHA-2/3, BLAKE2, Argon2, 11 unità

Firme e scambio di chiavi

Ed25519, X25519, Schnorr, RSA, 10 unità

PKI

X.509, ASN.1, CSR RSA e EC, 5 unità

Post-quantum

ML-KEM, ML-DSA, SLH-DSA, 6 unità

OTP e varie

HOTP/TOTP, codifica, ZIP AES, 6 unità

Motore TLS 1.3 e 1.2

iohNativeTLS, X25519MLKEM768, Pascal puro

43 unità sorgente

Ogni unità sgcCrypto_*.pas sotto sgcWebSockets/delphi/Source/, raggruppata per famiglia.

UnitàFamigliaCosa fa
sgcCrypto_AESSimmetricaAES-CBC, AES-GCM (AEAD), AES-CTR.
sgcCrypto_ModesSimmetricaAES-ECB, OFB, CFB, CTS, CCM (AEAD), Key Wrap / Key Wrap with Padding, e i sette schemi di padding.
sgcCrypto_CMACSimmetricaAutenticazione dei messaggi AES-CMAC e AES-GMAC.
sgcCrypto_ChaChaSimmetricaChaCha20, XChaCha20, Salsa20, XSalsa20.
sgcCrypto_Poly1305SimmetricaMAC Poly1305, AEAD ChaCha20-Poly1305 e XChaCha20-Poly1305.
sgcCrypto_SHA2Hashing e KDFSHA-1, SHA-224, SHA-256, SHA-384, SHA-512.
sgcCrypto_KeccakHashing e KDFSHA-3, SHAKE128/256, cSHAKE, KMAC.
sgcCrypto_Blake2bHashing e KDFBLAKE2b, con o senza chiave.
sgcCrypto_Blake2sHashing e KDFBLAKE2s, con o senza chiave.
sgcCrypto_HMACHashing e KDFHMAC-SHA1/256/384/512.
sgcCrypto_KDFHashing e KDFPBKDF2, KDF1, KDF2 e X9.63, hash selezionabile.
sgcCrypto_HKDFHashing e KDFHKDF extract-and-expand.
sgcCrypto_ScryptHashing e KDFKDF memory-hard scrypt.
sgcCrypto_Argon2Hashing e KDFArgon2d, Argon2i, Argon2id.
sgcCrypto_SipHashHashing e KDFHash con chiave SipHash-2-4.
sgcCrypto_TLSHHashing e KDFFuzzy hash TLSH e diff di similarità.
sgcCrypto_Ed25519Firme e scambio di chiaviEd25519 firma / verifica.
sgcCrypto_X25519Firme e scambio di chiaviDiffie-Hellman X25519.
sgcCrypto_Ed448Firme e scambio di chiaviEd448 firma / verifica.
sgcCrypto_X448Firme e scambio di chiaviDiffie-Hellman X448.
sgcCrypto_GF448Firme e scambio di chiaviAritmetica interna del campo GF(2^448-2^224-1) per Ed448/X448.
sgcCrypto_ECCurvesFirme e scambio di chiaviECDSA / ECDH su secp256k1, Brainpool P256r1/P384r1/P512r1 e NIST P-256/P-384/P-521, firme DER, esportazione/importazione di chiavi, e Schnorr BIP-340.
sgcCrypto_ECFirme e scambio di chiaviFirma/verifica EC generica come JWS (ES256/384/512), ECDH.
sgcCrypto_RSAFirme e scambio di chiaviFirma RSA PKCS#1 v1.5, verifica PKCS#1 v1.5 / PSS, da PEM o raw.
sgcCrypto_RSA_KeysFirme e scambio di chiaviGenerazione chiavi RSA, OAEP (con hash MGF1 indipendente), PSS, firma/verifica/cifratura/decifratura PKCS#1 v1.5, esportazione e importazione DER/PEM PKCS#1 e PKCS#8.
sgcCrypto_ECIESFirme e scambio di chiaviCrittografia ibrida seal / open ECIES su X25519.
sgcCrypto_ASN1PKILettore DER, codec PEM, analisi chiavi PKCS#1/SEC 1.
sgcCrypto_DERPKIPrimitive di scrittura DER.
sgcCrypto_BigIntegerPKIAritmetica interna a precisione arbitraria.
sgcCrypto_X509PKIAnalisi e verifica X.509, catena con pathLenConstraint e nameConstraints, verifica della CSR, CRL, revoca. Legge chiavi pubbliche RSA, EC, Ed25519, ML-DSA, SLH-DSA e ML-KEM.
sgcCrypto_X509_GenPKIGenerazione di certificati autofirmati, di certificati emessi da una CA e di CSR PKCS#10, firmati con RSA, EC, ML-DSA o SLH-DSA, con subject alternative name di tipo URI e IPv6 e con nameConstraints.
sgcCrypto_MLKEMPost-quantumIncapsulamento di chiavi ML-KEM (FIPS 203), 3 parameter set, con importazione ed esportazione delle chiavi in SubjectPublicKeyInfo, PKCS#8 e PEM.
sgcCrypto_MLKEM_PolyPost-quantumAritmetica interna dell'anello polinomiale dietro ML-KEM.
sgcCrypto_MLKEM_HybridPost-quantumIncapsulamento di chiavi ibrido X25519 + ML-KEM, X-Wing, e le key share ibride TLS 1.3 della RFC 10024.
sgcCrypto_MLDSAPost-quantumFirme digitali ML-DSA (FIPS 204), 3 parameter set, con importazione ed esportazione delle chiavi in SubjectPublicKeyInfo, PKCS#8 e PEM.
sgcCrypto_MLDSA_PolyPost-quantumAritmetica interna dell'anello polinomiale dietro ML-DSA.
sgcCrypto_SLHDSAPost-quantumFirme SLH-DSA (FIPS 205), 6 parameter set SHAKE, con importazione ed esportazione delle chiavi in SubjectPublicKeyInfo, PKCS#8 e PEM.
sgcCrypto_OTPOTP e varieHOTP, TOTP, finestra di verifica in tempo costante.
sgcCrypto_EncodingOTP e varieConfronto in tempo costante, azzeramento sicuro, hex/Base64url/Base32.
sgcCrypto_Zip_AE2OTP e varieCrittografia AES di WinZip per le voci ZIP, AE-1 / AE-2.
sgcCrypto_LegacyOTP e varieMD4, MD5, HMAC-MD5, DES-ECB, RIPEMD-160 e HMAC-RIPEMD160, solo per interoperabilità.
sgcCrypto_RandomOTP e varieCSPRNG multipiattaforma.
sgcCrypto_Int64OTP e varieEmulazione interna di interi a 64 bit per Delphi 7.

Crittografia e MAC

AES nelle modalità che il codice di produzione usa davvero, più la famiglia AEAD ChaCha20/Poly1305.

CapacitàFunzioneNote
AES-CBCsgcAES_CBC_Encrypt / sgcAES_CBC_DecryptPadding PKCS#7, IV a 16 byte. La lunghezza della chiave seleziona il cifrario: 16/24/32 byte = AES-128/192/256.
AES-CBC, senza paddingsgcAES_CBC_Encrypt_NoPad / sgcAES_CBC_Decrypt_NoPadLa modalità che Java scrive come AES/CBC/NoPadding. L'input deve essere già un multiplo di 16 byte; un input non allineato solleva un'eccezione anziché essere sottoposto silenziosamente a padding producendo qualcosa che l'altra parte non può leggere.
AES-GCM (AEAD)sgcAES_GCM_Encrypt / sgcAES_GCM_DecryptIV consigliato a 12 byte. Tag a 16 byte, confrontato in tempo costante; la decrittazione restituisce False e testo in chiaro vuoto in caso di tag non valido.
Core AESsgcAES_GetCore / sgcAES_SetCoreaescConstantTime è il valore predefinito, un core bitsliced che non indicizza mai la memoria con un byte segreto né si ramifica su di esso, il che chiude il canale di timing della cache su chiave e testo in chiaro. aescTable è il core classico a tabelle, che perde informazioni attraverso la cache dati ed è stato più lento in ogni misurazione, quindi viene mantenuto solo come ripiego. GHASH, che autentica GCM, moltiplica sotto una maschera invece di ramificarsi sulla chiave. Imposta il core una sola volta all'avvio, prima che giri qualsiasi thread di lavoro.
AES-CCM (AEAD)sgcAES_CCM_Encrypt / sgcAES_CCM_DecryptL'AEAD specificato dagli stack constrained e IoT, Zigbee, 802.15.4, Bluetooth e le cipher suite TLS CCM, perché richiede solo il block cipher e nessuna tabella GHASH. Nonce da 7 a 13 byte, tag da 4 a 16 byte, verificato in tempo costante.
AES-CTRsgcAES_CTRAES-CM in stile SRTP (RFC 3711). Chiamata simmetrica, nessun padding, contatore a 128 bit big-endian.
AES-ECBsgcAES_ECB_Encrypt / sgcAES_ECB_DecryptNessun IV, nessun concatenamento. Incluso per interoperabilità con formati che lo richiedono.
Schemi di paddingsgcPad_Add / sgcPad_Remove, sgcAES_CBC_EncryptPad / DecryptPad, sgcAES_ECB_EncryptPad / DecryptPadTsgcPadding copre None, PKCS#7, Zero, ANSI X9.23, ISO 7816-4, ISO 10126-2 e TBC, così CBC ed ECB possono leggere e scrivere dati da un sistema che non ha scelto PKCS#7. sgcPad_Remove restituisce False seguendo lo stesso percorso per ogni tipo di pad non valido.
AES-OFB / AES-CFBsgcAES_OFB, sgcAES_CFB_Encrypt / sgcAES_CFB_DecryptModalità a retroazione in stile stream cipher.
AES-CTSsgcAES_CTS_Encrypt / sgcAES_CTS_DecryptCiphertext stealing: cripta dati non multipli della dimensione del blocco senza overhead di padding.
AES Key WrapsgcAES_KeyWrap / sgcAES_KeyUnwrapRFC 3394, per avvolgere una chiave sotto un'altra.
AES Key Wrap with PaddingsgcAES_KeyWrapPad / sgcAES_KeyUnwrapPadRFC 5649, per materiale di chiave non multiplo di 8 byte.
AES-CMACsgcAES_CMAC / sgcAES_CMAC_VerifyCodice di autenticazione dei messaggi RFC 4493.
AES-GMACsgcAES_GMAC / sgcAES_GMAC_VerifyLa modalità di sola autenticazione di GCM: l'intero messaggio viaggia come additional data, nulla viene cifrato. L'IV non deve mai ripetersi con la stessa chiave, e il tag a 16 byte è confrontato in tempo costante.
Primitive di blocco a basso livellosgcAES_ExpandKey, sgcAES_EncryptBlock, sgcAES_DecryptBlockEsposte per le unità di modalità e MAC sopra; chiamale direttamente solo per costruire una modalità non già fornita.
ChaCha20sgcChaCha20RFC 8439, nonce a 96 bit, contatore a 32 bit.
XChaCha20sgcXChaCha20Nonce esteso a 192 bit, sicuro per la generazione casuale di nonce su larga scala.
Salsa20 / XSalsa20sgcSalsa20 / sgcXSalsa20La famiglia di stream cipher predecessore, entrambe le dimensioni di nonce.
Derivazione di sottochiavesgcHChaCha20 / sgcHSalsa20Ciò che le varianti X usano internamente per derivare una sottochiave dai primi 16 byte del nonce.
MAC Poly1305sgcPoly1305 / sgcPoly1305_VerifyAutenticatore monouso, RFC 8439. Non riutilizzare mai una chiave Poly1305.
AEAD ChaCha20-Poly1305sgcChaCha20Poly1305_Encrypt / _DecryptIl cifrario AEAD dietro la seconda cipher suite di TLS 1.3 e SSH.
AEAD XChaCha20-Poly1305sgcXChaCha20Poly1305_Encrypt / _DecryptStesso AEAD, nonce a 192 bit, la costruzione che libsodium chiama crypto_aead_xchacha20poly1305_ietf.

Digest, MAC e hashing delle password

Ogni famiglia di hash di uso comune, più PBKDF2, HKDF, scrypt e tutte e tre le varianti di Argon2.

CapacitàFunzioneNote
SHA-1 / SHA-2sgcSHA1, sgcSHA224, sgcSHA256, sgcSHA384, sgcSHA512FIPS 180-4. SHA-1 è mantenuto per interoperabilità, non consigliato per nuove firme.
SHA-3sgcSHA3_224 / _256 / _384 / _512FIPS 202, la spugna Keccak, strutturalmente indipendente da SHA-2.
SHAKE128 / SHAKE256sgcSHAKE128 / sgcSHAKE256Funzioni a output estendibile: richiedi qualsiasi lunghezza di digest.
cSHAKE128 / cSHAKE256sgcCSHAKE128 / sgcCSHAKE256SHAKE con separazione di dominio, NIST SP 800-185, la base di KMAC.
KMAC128 / KMAC256sgcKMAC128 / sgcKMAC256MAC basato su Keccak con lunghezza di output variabile.
BLAKE2bsgcBlake2b / sgcBlake2b_KeyedRFC 7693, digest fino a 64 byte, keying integrato (nessun HMAC separato necessario).
BLAKE2ssgcBlake2s / sgcBlake2s_KeyedRFC 7693, digest fino a 32 byte, ottimizzato per piattaforme a 32 bit.
Digest in streamingsgcBlake2b_Init/_Update/_Final, chiamate corrispondenti su Keccak/Blake2sPer l'hashing di dati troppo grandi per stare in memoria in un colpo solo.
HMACsgcHMAC_SHA1 / _SHA256 / _SHA384 / _SHA512Hashing con chiave RFC 2104 sulla famiglia SHA-1/2.
RIPEMD-160 / HMAC-RIPEMD160sgcRIPEMD160, sgcHMAC_RIPEMD160ISO/IEC 10118-3 e RFC 2286. Il digest a 160 bit che gli indirizzi Bitcoin sovrappongono a SHA-256, e quello indicato per nome da OpenPGP.
PBKDF2sgcPBKDF2, sgcPBKDF2_SHA1 / _SHA256 / _SHA512RFC 8018. Solo lievemente memory-hard; preferisci Argon2id o scrypt quando puoi scegliere.
HKDFsgcHKDF_Extract_SHA256 / _SHA384, sgcHKDF_Expand_SHA256 / _SHA384, sgcHKDF_SHA256 / _SHA384RFC 5869, derivazione della chiave extract-then-expand, il modo standard per trasformare un segreto condiviso in più chiavi.
KDF1 / KDF2 / X9.63sgcKDF1, sgcKDF2, sgcKDF_X963Le derivazioni in modalità contatore definite da ISO 18033-2, IEEE 1363a e ANSI X9.63, che è ciò che RSA-KEM ed ECIES indicano per nome. KDF1 conta da 0 e KDF2 da 1, una differenza che ha causato veri bug di interoperabilità, quindi verificare quale dei due intende la propria specifica.
scryptsgcScryptRFC 7914, memory-hard, resiste molto meglio di PBKDF2 agli attacchi GPU/ASIC.
Argon2sgcArgon2 (d / i / id), wrapper di convenienza sgcArgon2idRFC 9106, vincitore della Password Hashing Competition. Interfaccia completa con secret opzionale (pepe) e dati associati.
SipHash-2-4sgcSipHash24 / sgcSipHash24_ValuePRF veloce con chiave per le chiavi di hash-table, resiste al denial of service da hash-flooding.
Fuzzy hash TLSHsgcTLSH, sgcTLSH_Init/_Update/_FinalHash locality-sensitive per il rilevamento di quasi-duplicati, non un digest crittografico.
Punteggio di similarità TLSHsgcTLSH_DiffDistanza tra due digest TLSH; più basso significa più simile.

Ed25519/Ed448, X25519/X448, secp256k1, Brainpool e RSA

Firma, verifica e deriva segreti condivisi su cinque distinte famiglie di curve più RSA.

CapacitàFunzioneNote
Firma / verifica Ed25519sgcEd25519_Sign / sgcEd25519_Verify, sgcEd25519_PublicKeyRFC 8032. Chiave pubblica di 32 byte, firma di 64 byte. Verify rifiuta i punti non canonici e S >= L secondo la sezione 5.1.7. La firma avviene in tempo costante nello scalare segreto e nel nonce per messaggio: finestre fisse di quattro bit, la voce di tabella scelta scorrendole tutte e sedici sotto una maschera, e la formula di addizione completa della sezione 5.1.4. La chiave pubblica deriva dal seed di 32 byte.
Scambio di chiavi X25519sgcX25519, sgcX25519_PublicKey, sgcX25519_SharedSecretDiffie-Hellman RFC 7748 su Curve25519.
Ed448 firma / verificasgcEd448_GenerateKeyPair, sgcEd448_Sign, sgcEd448_VerifyRFC 8032, la curva EdDSA a 448 bit (Goldilocks).
Scambio di chiavi X448sgcX448, sgcX448_PublicKey, sgcX448_SharedSecretDiffie-Hellman RFC 7748 su Curve448.
secp256k1sgcECDSA_SignHash / VerifyHash con eccSecp256k1La curva Bitcoin/Ethereum, SEC 2, in sgcCrypto_ECCurves.
Brainpool P256r1 / P384r1 / P512r1stesse funzioni con eccBrainpoolP256r1 / P384r1 / P512r1RFC 5639, comune nei profili eIDAS e governativi UE.
NIST P-256 / P-384 / P-521stesse funzioni con eccP256 / eccP384 / eccP521TsgcECCurve ora nomina sette curve, quindi la generazione delle chiavi, la firma, la verifica, l'ECDH e la compressione dei punti raggiungono tutte le curve prime NIST a partire da byte di chiave grezzi, non solo da un file PEM.
Nonce ECDSA deterministicointegrato in sgcECDSA_SignHashRFC 6979: il nonce è derivato dalla chiave privata e dal messaggio, nessuna modalità di fallimento dell'RNG.
Moltiplicazione scalare in tempo costanteall'interno di sgcECDSA_SignHash, sgcECDH_SharedSecret e della generazione di chiavi ECOgni curva in sgcCrypto_ECCurves esegue lo stesso motore: riduzione di Montgomery, che non ha alcun passo dipendente dai dati, una finestra fissa il cui numero deriva dalla curva, voci di tabella scelte scorrendole tutte sotto una maschera, e una formula di addizione completa che non guarda mai una coordinata per decidere quale caso si applica. I percorsi JOSE, WebAuthn ed E2EE di sgcCrypto_EC eseguono lo stesso codice.
ECDH (secp256k1 / Brainpool)sgcECDH_SharedSecretSegreto condiviso sulle stesse quattro curve.
Compressione dei puntisgcEC_Compress / sgcEC_DecompressMemorizza o trasmetti la forma compressa più corta della chiave pubblica.
EC come JWS (ES256/384/512)sgcECDSA_SignJWS / sgcECDSA_VerifyJWSCurva selezionata automaticamente dalla lunghezza in bit richiesta, firma/verifica direttamente da una chiave PEM, sorella orientata a JOSE di ECCurves.
ECDH genericosgcECDHSegreto condiviso da una chiave privata raw e dal punto pubblico del peer.
Verifica ECDSA raw / DERsgcECDSA_VerifyRaw / sgcECDSA_VerifyDERVerifica contro una tupla raw (Qx, Qy, r, s) o una firma codificata DER.
Firma DER ECDSA e conversionesgcECDSA_SignDER / sgcECDSA_VerifyDER, sgcECDSA_RawToDER / sgcECDSA_DERToRawX.509, CMS e TLS trasportano il DER ECDSA-Sig-Value, una SEQUENCE di INTEGER r seguito da INTEGER s. JOSE e WebAuthn trasportano invece la coppia raw R || S. Firma direttamente nell'una o nell'altra forma, oppure converte una firma esistente tra le due.
Firme Schnorr (BIP-340)sgcSchnorr_PublicKey, sgcSchnorr_Sign, sgcSchnorr_VerifySolo secp256k1, con chiavi pubbliche x-only a 32 byte e firme a 64 byte: ciò che utilizzano Taproot, Nostr e Lightning. sgcSchnorr_TaggedHash è esposta in modo che i tag BIP-341 e BIP-342 possano essere costruiti sulla stessa costruzione.
Firma RSA (PKCS#1 v1.5)sgcRSA_SignPKCS1Da una chiave privata PEM, digest SHA-1/256/384/512.
Operazioni con la chiave privata RSAsgcRSA_SignPKCS1 e le altre chiamate di firma e decifratura di sgcCrypto_RSA_KeysOgni operazione viene accecata con una coppia casuale nuova, eseguita tramite un'esponenziazione a finestra fissa e una ricombinazione CRT il cui tempo non dipende dai fattori né dai dati, e verificata rispetto all'esponente pubblico prima che il risultato venga restituito. Un guasto in una metà CRT rivelerebbe altrimenti un fattore in una singola firma, quindi in caso di discrepanza non viene restituito nulla.
Verifica RSA (PKCS#1 v1.5 / PSS)sgcRSA_VerifyPKCS1, sgcRSA_VerifyPSS, e varianti _Raw su modulo/esponenteRFC 8017. La verifica funziona da una chiave PEM o da modulo ed esponente raw, senza costruzione di un key-object.
Generazione di chiavi RSAsgcRSA_GenerateKeyQualsiasi lunghezza in bit richiesta, test di primalità Miller-Rabin.
Crittografia RSA-OAEPsgcRSA_OAEP_Encrypt / sgcRSA_OAEP_DecryptPadding di crittografia asimmetrica ottimale RFC 8017.
RSA-OAEP con hash MGF1 indipendentegli overload a cinque parametri di sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_DecryptFissa separatamente l'hash dell'etichetta e l'hash MGF1. OAEPWithSHA256AndMGF1Padding significa SHA-256 per entrambi in Bouncy Castle ma SHA-256 con MGF1-SHA1 in SunJCE, e questa discrepanza è il motivo abituale per cui fallisce l'interoperabilità con Java.
Cifratura RSA PKCS#1 v1.5sgcRSA_PKCS1_Encrypt / sgcRSA_PKCS1_DecryptRFC 8017 sezione 7.2, la modalità che Java chiama RSA/ECB/PKCS1Padding. La decifratura segue lo stesso percorso per ogni errore, così non offre nulla su cui lavorare a un oracolo di padding. Preferire OAEP per qualsiasi cosa nuova.
Firma RSA-PSS / PKCS#1sgcRSA_PSS_Sign / Verify, sgcRSA_PKCS1_Sign / VerifyFirma direttamente da una TsgcRSAPrivateKey generata.
Esportazione chiavi RSAsgcRSA_ExportPrivateKeyPEM, sgcRSA_ExportPublicKeyPEM, chiamate DER corrispondentiCodifiche PKCS#1 e SubjectPublicKeyInfo.
Esportazione chiavi PKCS#8 e SEC 1sgcRSA_ExportPrivateKeyPKCS8DER / PKCS8PEM, sgcEC_ExportPrivateKeyPKCS8DER / PKCS8PEM, sgcEC_ExportPrivateKeySEC1DER / SEC1PEM, sgcEC_ExportSubjectPublicKeyInfo, sgcEC_ExportPublicKeyPEMIl contenitore BEGIN PRIVATE KEY che Java, .NET e la maggior parte degli strumenti moderni si aspettano, accanto alla forma SEC 1 BEGIN EC PRIVATE KEY e al SubjectPublicKeyInfo che un certificato incorpora. Non cifrato, quindi ciò che si ottiene è materiale di chiave allo stato grezzo.
Importazione chiavi RSA ed ECsgcRSA_ImportPrivateKeyDER / PEM, sgcRSA_ImportPublicKeyDER / PEM, sgcEC_ImportPrivateKeyDER / PEM, sgcEC_ImportPublicKeyDER / PEMQuesto prima non esisteva: una chiave generata poteva essere scritta ma mai riletta. L'importazione accetta PKCS#1, PKCS#8, SEC 1 e SubjectPublicKeyInfo, DER o PEM, ricalcola i parametri CRT o il punto pubblico quando il file li omette, e restituisce False su input malformato anziché sollevare un'eccezione, quindi è sicuro passarle file non fidati.
ECIES seal / opensgcECIES_GenerateKeyPair, sgcECIES_Seal, sgcECIES_OpenCrittografia ibrida verso una chiave pubblica X25519: ECDH effimero più un AEAD, una chiamata per ogni direzione.

Certificati X.509 e ASN.1

Leggi un certificato che qualcun altro ha emesso, o generane uno tu stesso, con un encoder e un decoder DER sotto entrambi.

CapacitàFunzioneNote
Lettore DERsgcASN1_Read, sgcASN1_Next, sgcASN1_ContentPercorre una struttura DER nodo per nodo.
DER rigorososgcASN1_Read, sgcASN1_IsMinimalUnsignedIntegerOgni struttura che l'unit legge è DER per specifica, quindi le lunghezze sono tenute alle regole DER: la forma indefinita viene rifiutata, e lo stesso vale per una forma lunga che la forma corta avrebbe potuto trasportare. Viene rifiutata anche una firma ECDSA i cui INTEGER non sono codificati in modo minimo, così una firma non può essere scritta in due modi ed essere presa per due valori diversi.
Codec PEMsgcPEM_Decode / sgcPEM_EncodeRFC 7468, il wrapper -----BEGIN ... -----END attorno al DER.
Analisi chiavi RSAsgcASN1_ParseRSAPrivateKey / PublicKeyStrutture di chiave PKCS#1 (RFC 8017).
Analisi chiavi ECsgcASN1_ParseECPrivateKey / PublicKeyStrutture di chiave SEC 1.
Scrittore DER, strutturalesgcDER_Sequence, sgcDER_Set, sgcDER_Tagged, sgcDER_ContextExplicit / ImplicitI mattoncini da cui è assemblato ogni campo di un certificato.
Scrittore DER, valorisgcDER_Integer, sgcDER_OctetString, sgcDER_BitString, sgcDER_Boolean, sgcDER_NullEncoder di valori primitivi.
Scrittore DER, stringhe e identificatorisgcDER_OID, sgcDER_UTF8String, sgcDER_PrintableString, sgcDER_IA5String, sgcDER_TimeObject identifier, i tre tipi di stringa che X.509 usa, e UTCTime/GeneralizedTime.
Analisi del certificatosgcX509_ParseStruttura completa del certificato: soggetto, emittente, validità, chiave pubblica, estensioni.
Verifica firma / catenasgcX509_VerifySignedBy, sgcX509_VerifyChainVerifica un certificato contro un emittente, o percorre e verifica un array di certificati DER.
Analisi CRL e revocasgcX509_CRL_Parse, sgcX509_IsRevoked, sgcX509_CRL_VerifySignedByAnalizza una Certificate Revocation List e controlla un numero di serie contro di essa.
Formattazione dei nomisgcX509_SubjectRFC2253, sgcX509_IssuerRFC2253, sgcX509_SubjectOneLineStringhe distinguished-name RFC 2253, per log e visualizzazione.
Estensioni e SANsgcX509_GetExtension, sgcX509_GetCRLDistributionURIsLegge OID di estensione arbitrari e URI dei punti di distribuzione CRL.
Generazione di certificati autofirmatisgcX509_CreateSelfSignedTsgcX509Options completo: DN di soggetto, finestra di validità, numero di serie, flag CA con vincolo di lunghezza del percorso, key usage, extended key usage, subject alternative name (inclusi i SAN IPv4).
Subject alternative name di tipo URITsgcX509Options.URIsSAN uniformResourceIdentifier, per un'identità di servizio in stile SPIFFE anziché un nome host. Il valore viene scritto testualmente come contenuto IA5String, quindi passare un URI completo.
Generazione CSR PKCS#10sgcX509_CreateCSRRichiesta di firma del certificato RFC 2986 dallo stesso record di opzioni.
Certificati e CSR firmati con ECsgcX509_CreateSelfSignedEx, sgcX509_CreateCSREx, sgcX509_ECKey, sgcX509_RSAKeyFirma con una chiave EC oltre che RSA, avvolgendo l'una o l'altra in una TsgcX509SignKey. Un certificato EC è all'incirca un terzo della dimensione di uno RSA e verifica molto più velocemente. TsgcX509Options.Hash continua a indicare solo lo SHA, l'algoritmo segue la chiave, quindi rhSHA256 con una chiave EC significa ecdsa-with-SHA256.
Emissione da CAsgcX509_CreateSigned, sgcX509_CreateSignedFromCSREmette un certificato firmato da una chiave CA, a partire da un record di opzioni oppure da una richiesta PKCS#10 già analizzata.
Chiavi di firma post-quantumsgcX509_MLDSAKey, sgcX509_SLHDSAKeyAvvolgono una chiave ML-DSA o SLH-DSA in una TsgcX509SignKey e la passano a sgcX509_CreateSelfSignedEx, sgcX509_CreateCSREx o agli emittenti CA. RFC 9881 per ML-DSA, RFC 9909 per SLH-DSA.
Certificati ML-KEMsgcX509_CreateSigned con una chiave soggetto ML-KEMRFC 9935. Una CA può certificare una chiave pubblica ML-KEM, che non può firmare, quindi il possesso va dimostrato in un altro modo prima di emettere il certificato.
Tipi di chiave post-quantum in letturaTsgcX509PublicKeyTypex509pkMLDSA, x509pkSLHDSA e x509pkMLKEM accanto a x509pkRSA, x509pkEC e x509pkEd25519. sgcX509_Parse, sgcX509_VerifySignedBy e sgcX509_CSR_Verify li gestiscono tutti.
Vincoli di catenasgcX509_VerifyChainApplica il pathLenConstraint di basicConstraints e l'estensione nameConstraints, su dNSName, iPAddress, rfc822Name, uniformResourceIdentifier e directoryName.
nameConstraints in generazioneTsgcX509Options.PermittedDNSNames, ExcludedDNSNames, PermittedIPRanges, ExcludedIPRangesScrive i sottoalberi permessi ed esclusi in un certificato CA, così il verificatore di catena qui sopra può applicarli.
SAN di indirizzo IPv6TsgcX509Options.IPAddressesAccetta IPv6 in qualsiasi forma testuale della RFC 4291, oltre a IPv4.
Output PEMsgcX509_ToPEMAvvolge il DER generato come file PEM pronto da salvare.

ML-KEM, ML-DSA e SLH-DSA

I tre algoritmi che il NIST ha finalizzato nell'agosto 2024 come FIPS 203, 204 e 205, più un combinatore ibrido per il periodo di migrazione.

CapacitàFunzioneNote
Generazione di chiavi ML-KEMsgcMLKEM_GenerateKeyPair, sgcMLKEM_GenerateKeyPairFromSeedFIPS 203, in precedenza Kyber. Tre parameter set: mlkem512, mlkem768, mlkem1024.
Incapsulamento ML-KEMsgcMLKEM_Encapsulate, sgcMLKEM_EncapsulateWithSeedProduce un nuovo segreto condiviso a 32 byte e il ciphertext che lo trasporta. La chiave pubblica riceve prima i controlli di input di FIPS 203 sezione 7.2, quindi una di lunghezza errata, o una che non supera il controllo del modulo, solleva un'eccezione.
Decapsulamento ML-KEMsgcMLKEM_DecapsulateUn ciphertext della lunghezza giusta che non si decifra produce un segreto pseudocasuale (rifiuto implicito) invece di un errore, così tempistica e comportamento d'errore non rivelano nulla. Un ciphertext o una chiave privata di lunghezza errata, o una chiave privata che non supera il controllo dell'hash, solleva prima un'eccezione, secondo i controlli di input di FIPS 203 sezione 7.3.
Dimensioni ML-KEMsgcMLKEM_PublicKeySize, PrivateKeySize, CiphertextSize, SharedSecretSizeLunghezze in byte per parameter set, per dimensionare i buffer.
Ibrido X25519 + ML-KEMsgcHybrid_GenerateKeyPair, sgcHybrid_Encapsulate, sgcHybrid_DecapsulateCombina un segreto condiviso classico e uno post-quantum tramite una KDF, così il risultato non è mai più debole del solo X25519. Il modo consigliato per usare ML-KEM oggi.
Generazione di chiavi ML-DSAsgcMLDSA_GenerateKeyPair, sgcMLDSA_GenerateKeyPairFromSeedFIPS 204, in precedenza Dilithium. Tre parameter set: mldsa44, mldsa65, mldsa87.
Firma / verifica ML-DSAsgcMLDSA_Sign / sgcMLDSA_VerifyFirma deterministica o randomizzata secondo l'interfaccia FIPS 204, più una stringa di contesto.
Dimensioni ML-DSAsgcMLDSA_PublicKeySize, PrivateKeySize, SignatureSizeLunghezze in byte per parameter set.
Generazione di chiavi SLH-DSAsgcSLHDSA_GenerateKeyPair, sgcSLHDSA_GenerateKeyPairFromSeedFIPS 205, in precedenza SPHINCS+. Firme hash-based stateless: la sicurezza si basa solo sulla funzione hash, non su un'ipotesi reticolare o su una curva.
Firma / verifica SLH-DSAsgcSLHDSA_Sign / sgcSLHDSA_VerifySei parameter set SHAKE: slhShake128s, slhShake128f, slhShake192s, slhShake192f, slhShake256s, slhShake256f. I set s favoriscono firme piccole, i set f favoriscono la firma veloce.
Dimensioni e nomi SLH-DSAsgcSLHDSA_PublicKeySize, PrivateKeySize, SignatureSize, sgcSLHDSA_ParamsNameLe firme SLH-DSA sono grandi (da 7,8 KB a 49 KB a seconda del set); dimensiona il buffer prima di firmare.
Esportazione e importazione della chiave pubblica, DERsgcMLDSA_ExportSubjectPublicKeyInfo / ImportSubjectPublicKeyInfo, e le coppie identiche sgcMLKEM_* e sgcSLHDSA_*SubjectPublicKeyInfo X.509, così una chiave pubblica post-quantum entra nella stessa struttura di una RSA o EC. RFC 9881, RFC 9909 e RFC 9935.
Esportazione & importazione della chiave privata, DERsgcMLDSA_ExportPrivateKeyInfo / ImportPrivateKeyInfo e le coppie sgcMLKEM_* e sgcSLHDSA_*PKCS#8 OneAsymmetricKey, versioni 0 e 1. L'importazione verifica la coerenza della chiave: una chiave pubblica incorporata che non corrisponde viene rifiutata, le forme seed ed espansa della stessa chiave devono concordare, e una chiave ML-DSA deve riprodurre i propri t0 e tr memorizzati. SLH-DSA ricalcola PK.root dal seed, il che costa circa una generazione di chiavi, quindi queste importazioni accettano un parametro aVerify, True per impostazione predefinita, che puoi passare come False per una chiave generata dalla tua applicazione.
Esportazione e importazione PEMsgcMLDSA_ExportPublicKeyPEM, ExportPrivateKeyPEM, ImportPublicKeyPEM, ImportPrivateKeyPEM, e gli insiemi sgcMLKEM_* e sgcSLHDSA_*RFC 7468, l'involucro -----BEGIN ... -----END, così le chiavi finiscono negli stessi file e negli stessi strumenti del resto della PKI.
Forma della chiave privataTsgcPQCPrivateKeyFormatLe chiavi private ML-DSA e ML-KEM hanno tre forme. pqkfSeed scrive solo il seed (32 byte per ML-DSA, il seed d||z di 64 byte per ML-KEM), pqkfExpanded scrive la chiave espansa, pqkfBoth le contiene entrambe. SLH-DSA ha un'unica forma di chiave privata.
Generazione delle chiavi con il seedsgcMLDSA_GenerateKeyPairAndSeed, sgcMLKEM_GenerateKeyPairAndSeedRestituiscono il seed insieme alla coppia di chiavi, così un file PKCS#8 o PEM in forma seed può essere scritto subito dopo la generazione.
KEM ibrido X-WingsgcXWing_GenerateKeyPair, sgcXWing_Encapsulate, sgcXWing_Decapsulatedraft-connolly-cfrg-xwing-kem-10: X25519 con ML-KEM-768 come un unico KEM. Chiave pubblica di 1216 byte, chiave privata di 32 byte (il seed), ciphertext di 1120 byte, segreto condiviso di 32 byte.
Key share ibride TLS 1.3sgcTLSHybrid_ClientKeyShare, sgcTLSHybrid_ServerKeyShare, sgcTLSHybrid_ClientSharedSecret, sgcTLSHybrid_GroupName, sgcTLSHybrid_AvailableI gruppi della RFC 10024 X25519MLKEM768, SecP256r1MLKEM768 e SecP384r1MLKEM1024 (codepoint IANA 0x11EC, 0x11EB, 0x11ED). Non sono KEM a sé stanti, servono soltanto a costruire una key share TLS.
ML-DSA per i JSON Web TokenJWTOptions.Algorithms.MLDSA.PrivateKey, PublicKey, Enabled, sgcMLDSA_ExportPublicJWK, sgcMLDSA_ExportPrivateJWK, sgcMLDSA_ImportJWK, sgcMLDSA_ImportJWKAsPEMRFC 9964, in sgcHTTP_JWT_MLDSA anziché in un'unità sgcCrypto_*. Algoritmi JWS ML-DSA-44, ML-DSA-65 e ML-DSA-87 (jwtMLDSA44, jwtMLDSA65, jwtMLDSA87), un PEM PKCS#8 sul client, un PEM SubjectPublicKeyInfo sul server, JSON Web Key AKP, e nessun OpenSSL in tutto il percorso.
Validazione known-answerVettori NIST ACVPLa generazione di chiavi, l'incapsulamento e il decapsulamento ML-KEM, e la generazione di chiavi, la generazione di firme e la verifica di firme ML-DSA e SLH-DSA, vengono verificati rispetto ai vettori known-answer NIST ACVP nella suite QA di sgcWebSockets.

sgcCrypto non pretende di implementare ed25519187 o SPECK. ed25519187 non ha una specifica pubblicata, e SPECK è stato ritirato dalla standardizzazione ISO nel 2018; nessuno dei due è implementato qui.

Uno stack TLS 1.3 e TLS 1.2 sopra queste unità

Scritto in Object Pascal sulle primitive di sgcCrypto e distribuito nello stesso pacchetto. Vive nelle unità sgcSSL_NativeTLS*, non in sgcCrypto_*, quindi non è una delle 43 contate qui sopra.

CapacitàAPINote
Selezionarlo su un clientTLSOptions.IOHandler := iohNativeTLSSostituisce OpenSSL, SChannel e i backend TLS di piattaforma con il motore Pascal in-process. Non c'è nulla da distribuire, su nessun target.
Selezionarlo su un serverSSLOptions.IOHandler := iohNativeTLSFunziona con il motore server Indy predefinito e con i motori IOCP ed EPOLL.
Versione del protocolloTLSOptions.VersionLa versione minima consentita. tls1_2 o tlsUndefined negozia TLS 1.3 o TLS 1.2, tls1_3 consente solo TLS 1.3, e tls1_0 o tls1_1 genera un errore di configurazione. SSLOptions.Version fa lo stesso su un server. Per il solo TLS 1.2, elenca soltanto le suite TLS 1.2 in CipherSuites.
Gruppi per lo scambio di chiaviTLSOptions.NativeTLS_Options.GroupsSeparati da due punti, in stile OpenSSL. Il valore predefinito è X25519MLKEM768:X25519:secp256r1:secp384r1, quindi un handshake è ibrido post-quantum ogni volta che il peer è d'accordo. Una build con SGC_CRYPTO_FIPS usa invece come valore predefinito SecP256r1MLKEM768:SecP384r1MLKEM1024:secp256r1:secp384r1. I tre gruppi ibridi sono solo per TLS 1.3, quindi una connessione TLS 1.2 usa X25519, secp256r1 o secp384r1.
Suite di cifraturaTLSOptions.NativeTLS_Options.CipherSuitesSeparate da due punti, in stile OpenSSL. Il valore predefinito è TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 per TLS 1.3, più ECDHE_ECDSA ed ECDHE_RSA con AES-128-GCM, AES-256-GCM e ChaCha20-Poly1305 per TLS 1.2. ECDHE con AES-CBC e lo scambio di chiavi RSA sono usati solo se nominati, per 20 suite TLS 1.2 in tutto. Una build con SGC_CRYPTO_FIPS esclude ChaCha20-Poly1305 e lo scambio di chiavi RSA.
Radici di fiduciaTLSOptions.RootCertFile, TLSOptions.NativeTLS_Options.UseSystemRootsLe radici arrivano da RootCertFile. Imposta UseSystemRoots su True per aggiungere le radici di cui il sistema operativo si fida già: l'archivio ROOT su Windows, e su ogni altra piattaforma il primo file CA bundle trovato tra le posizioni standard. Non legge mai il portachiavi di macOS o iOS né l'archivio di Android. È disattivato per impostazione predefinita, quindi RootCertFile resta la fonte. La stessa proprietà su SSLOptions si applica ai certificati client che un server verifica.
Costruzione della catenala catena di certificati che il peer inviaLa catena viene cercata per un percorso dalla foglia a una radice di fiducia, quindi certificati extra e qualsiasi ordine sono accettati, come richiede RFC 8446 sezione 4.4.2. La ricerca torna indietro, quindi un certificato che nomina l'emittente giusto ma non porta da nessuna parte non nasconde più un percorso valido dietro di sé. La revoca e le policy dei certificati non vengono verificate.
Ambito del protocolloRFC 8446, RFC 5246TLS 1.3 e TLS 1.2. Niente TLS 1.1, TLS 1.0 o SSL. TLS 1.2 usa il master secret esteso della RFC 7627 e la protezione dal downgrade della RFC 8446 su entrambi i lati, rifiuta la rinegoziazione e le firme SHA-1 (RFC 9155), e verifica i record CBC in tempo costante.
Non implementaton/aNessuna ripresa di sessione e nessun PSK, niente 0-RTT e niente QUIC.
Evento di verifica del peerOnSSLVerifyPeerNon disponibile per questo motore, che ha i propri hook di verifica. Resta su OpenSSL o su un backend di piattaforma se il tuo codice dipende da questo evento.

Password monouso, codec e ZIP crittografati

Lo strato di utilità: codici monouso, le codifiche su cui si appoggiano tutte le altre famiglie, e la crittografia AES di WinZip.

CapacitàFunzioneNote
HOTPsgcHOTPRFC 4226, password monouso basata su contatore.
TOTPsgcTOTP, sgcTOTP_FromBase32RFC 6238, password monouso basata sul tempo; la variante Base32 accetta il secret esattamente come lo mostra un'app di autenticazione.
Verifica TOTPsgcTOTP_VerifyControlla un codice inviato su una finestra di passi in tempo costante, così né il risultato né la sua posizione trapelano tramite la tempistica. Non impedisce da sola il replay; è il chiamante a tracciare i codici già usati.
Confronto in tempo costantesgcConstantTimeEqualsUsato in tutta la libreria per i confronti di tag e MAC.
Azzeramento sicurosgcSecureZeroSovrascrive un buffer di byte così il materiale di chiave non resta in memoria.
HexsgcHexEncode / sgcHexDecodeHex minuscolo, decodifica case-insensitive.
Base64urlsgcBase64UrlEncode / sgcBase64UrlDecodeRFC 4648 sezione 5, senza padding, la codifica usata da JWT e JOSE.
Base32sgcBase32Encode / sgcBase32DecodeRFC 4648 sezione 6, la codifica usata dai secret TOTP e dalle app di autenticazione.
Derivazione chiavi AES di WinZipsgcZipAE2_DeriveKeysChiave basata su PBKDF2, chiave di autenticazione e verificatore della password a partire da una password e un salt.
Crittografia / decrittazione AES di WinZipsgcZipAE2_Encrypt / sgcZipAE2_DecryptAE-1 e AE-2, AES-128/192/256, dimensionamento del salt per voce tramite TsgcZipAESStrength.
Impacchettamento voce WinZipsgcZipAE2_PackEntry / sgcZipAE2_UnpackEntryCombina salt, verificatore, ciphertext e codice di autenticazione nel layout su disco.
Extra field WinZipsgcZipAE2_BuildExtraField / sgcZipAE2_ParseExtraFieldL'extra field 0x9901 che marca una voce ZIP come crittografata AES.
Hash legacy (solo interoperabilità)sgcMD4, sgcMD5, sgcHMAC_MD5Mantenuti per leggere formati e protocolli più vecchi; non usarli in un nuovo progetto.
Cifrario legacy (solo interoperabilità)sgcDES_EncryptECB / sgcDES_DecryptECB, sgcDES_NTLM7to8DES-ECB e il passo di espansione di chiave DES-based di NTLM, entrambi ritirati (FIPS 46-3), mantenuti per interoperabilità legacy.
Byte casuali sicurisgcRandomBytes / sgcRandomFillBCryptGenRandom (Windows CNG) sotto MSWINDOWS, /dev/urandom altrove, una sola chiamata in entrambi i casi.

Dove funziona sgcCrypto

Cosa è supportato, dichiarato con precisione.

AreaDettaglio
Sistema operativoNessuna guardia MSWINDOWS, né alcun'altra guardia di piattaforma, avvolge SGC_CRYPTO in sgcVer.inc. Tutte le 43 unità compilano per Win32, Win64, Linux64, macOS, iOS e Android.
Sorgente dei numeri casualiL'unica unità sensibile alla piattaforma, sgcCrypto_Random, seleziona un CSPRNG per ogni target: BCryptGenRandom (Windows CNG) sotto MSWINDOWS, /dev/urandom sui target POSIX, dietro la stessa chiamata sgcRandomBytes. I byte arrivano direttamente dal generatore del sistema operativo, senza alcun generatore proprio sopra. Su Windows RtlGenRandom e poi CryptGenRandom vengono usati solo quando BCryptGenRandom non è disponibile, e se nessuna sorgente può essere letta viene sollevata un’eccezione invece di restituire byte deboli.
Modalità FIPSDirettiva opzionale SGC_CRYPTO_FIPS, disattivata per impostazione predefinita, che rimuove in fase di compilazione ogni algoritmo non approvato dalle 43 unità e controlla alcune regole sui parametri in fase di esecuzione. Mantiene la libreria entro gli algoritmi approvati FIPS, ma sgcCrypto non è un modulo validato FIPS 140-3 e la direttiva non costituisce una dichiarazione di validazione. Modalità FIPS
DelphiDa Delphi 7 a RAD Studio 13 Florence. Non si assume da nessuna parte un tipo intero nativo a 64 bit: sgcCrypto_Int64 e il tipo TsgcBigInt in sgcCrypto_BigInteger emulano l'aritmetica di cui hanno bisogno gli hash, le curve e le unità post-quantum.
C++ BuilderC++ Builder tramite gli header generati, stesso albero sorgente.
Impronta a design-timeNessuna. Non esiste un sgcCrypto_Reg.pas, niente viene registrato con RegisterComponents, e nessuna unità compare in una pagina della palette dei componenti.
DipendenzeNessun binding OpenSSL, nessuna DLL esterna. Ogni primitiva è implementata direttamente in Object Pascal dentro l'unità che referenzi.
Codice sorgenteSorgente Object Pascal completo in ogni livello a pagamento, e nei pacchetti edizione che già includono sgcCrypto.
RidistribuzioneI binari che compili sono esenti da royalty, senza alcuna tariffa di runtime per postazione o per server.
La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Sviluppa con sgcCrypto

Scarica la versione di prova gratuita e chiama una funzione, nessun componente richiesto.