sgcCrypto Matriz de características

Todo lo que hace sgcCrypto, mapeado en las 43 unidades del disco. Aquí no hay componentes ni propiedades en tiempo de diseño: cada fila de abajo es una función o un procedimiento que llamas directamente. El código fuente completo se incluye en todas las licencias. Los anclajes de abajo te llevan a las seis familias de funcionalidades en las que se agrupan las unidades, más el motor TLS 1.3 y TLS 1.2 que el mismo paquete construye sobre ellas.

sgcCrypto no tiene componentes. Las 43 unidades de abajo exportan funciones normales, no hay ninguna clase Tsgc* ni ningún sgcCrypto_Reg.pas. Añade una unidad a tu cláusula uses y llama a la función.

Ya incluido. sgcCrypto se distribuye gratis dentro de sgcWebSockets Standard, Professional y Enterprise, y dentro de All-Access. También se vende por separado (incluyendo el runtime de sgcWebSockets Core) para los clientes que solo tienen Core. Consulta Precios.

Simétrico

AES, CCM, ChaCha20, Poly1305, 5 unidades

Hash & KDF

SHA-2/3, BLAKE2, Argon2, 11 unidades

Firmas e intercambio de claves

Ed25519, X25519, Schnorr, RSA, 10 unidades

PKI

X.509, ASN.1, CSR RSA y EC, 5 unidades

Poscuántica

ML-KEM, ML-DSA, SLH-DSA, 6 unidades

OTP y varios

HOTP/TOTP, codificación, ZIP AES, 6 unidades

Motor TLS 1.3 y 1.2

iohNativeTLS, X25519MLKEM768, Pascal puro

43 unidades de código fuente

Cada unidad sgcCrypto_*.pas bajo sgcWebSockets/delphi/Source/, agrupada por familia.

UnidadFamiliaQué hace
sgcCrypto_AESSimétricoAES-CBC, AES-GCM (AEAD), AES-CTR.
sgcCrypto_ModesSimétricoAES-ECB, OFB, CFB, CTS, CCM (AEAD), Key Wrap / Key Wrap with Padding, y los siete esquemas de relleno.
sgcCrypto_CMACSimétricoAutenticación de mensajes AES-CMAC y AES-GMAC.
sgcCrypto_ChaChaSimétricoChaCha20, XChaCha20, Salsa20, XSalsa20.
sgcCrypto_Poly1305SimétricoMAC Poly1305, AEAD ChaCha20-Poly1305 y XChaCha20-Poly1305.
sgcCrypto_SHA2Hash & KDFSHA-1, SHA-224, SHA-256, SHA-384, SHA-512.
sgcCrypto_KeccakHash & KDFSHA-3, SHAKE128/256, cSHAKE, KMAC.
sgcCrypto_Blake2bHash & KDFBLAKE2b, con o sin clave.
sgcCrypto_Blake2sHash & KDFBLAKE2s, con o sin clave.
sgcCrypto_HMACHash & KDFHMAC-SHA1/256/384/512.
sgcCrypto_KDFHash & KDFPBKDF2, KDF1, KDF2 y X9.63, hash seleccionable.
sgcCrypto_HKDFHash & KDFHKDF, extraer y expandir.
sgcCrypto_ScryptHash & KDFKDF con dureza de memoria scrypt.
sgcCrypto_Argon2Hash & KDFArgon2d, Argon2i, Argon2id.
sgcCrypto_SipHashHash & KDFHash con clave SipHash-2-4.
sgcCrypto_TLSHHash & KDFHash difuso TLSH y diferencia de similitud.
sgcCrypto_Ed25519Firmas e intercambio de clavesFirma / verificación Ed25519.
sgcCrypto_X25519Firmas e intercambio de clavesX25519 Diffie-Hellman.
sgcCrypto_Ed448Firmas e intercambio de clavesFirma / verificación Ed448.
sgcCrypto_X448Firmas e intercambio de clavesX448 Diffie-Hellman.
sgcCrypto_GF448Firmas e intercambio de clavesAritmética de cuerpo interna GF(2^448-2^224-1) para Ed448/X448.
sgcCrypto_ECCurvesFirmas e intercambio de clavesECDSA / ECDH sobre secp256k1, Brainpool P256r1/P384r1/P512r1 y NIST P-256/P-384/P-521, firmas DER, exportación/importación de claves, y Schnorr BIP-340.
sgcCrypto_ECFirmas e intercambio de clavesFirma/verificación EC general como JWS (ES256/384/512), ECDH.
sgcCrypto_RSAFirmas e intercambio de clavesFirma RSA PKCS#1 v1.5, verificación PKCS#1 v1.5 / PSS, desde PEM o en bruto.
sgcCrypto_RSA_KeysFirmas e intercambio de clavesGeneración de claves RSA, OAEP (con hash MGF1 independiente), PSS, firma/verificación/cifrado/descifrado PKCS#1 v1.5, exportación e importación DER/PEM PKCS#1 y PKCS#8.
sgcCrypto_ECIESFirmas e intercambio de clavesCifrado híbrido ECIES seal / open sobre X25519.
sgcCrypto_ASN1PKILector DER, códec PEM, análisis de claves PKCS#1/SEC 1.
sgcCrypto_DERPKIPrimitivas de escritura DER.
sgcCrypto_BigIntegerPKIAritmética interna de enteros de precisión arbitraria.
sgcCrypto_X509PKIAnálisis y verificación X.509, cadena con pathLenConstraint y nameConstraints, verificación de CSR, CRL y revocación. Lee claves públicas RSA, EC, Ed25519, ML-DSA, SLH-DSA y ML-KEM.
sgcCrypto_X509_GenPKIGeneración de certificados autofirmados, emitidos por una CA y CSR PKCS#10, firmados con RSA, EC, ML-DSA o SLH-DSA, con nombres alternativos del sujeto de tipo URI e IPv6 y con nameConstraints.
sgcCrypto_MLKEMPoscuánticaEncapsulación de claves ML-KEM (FIPS 203), 3 conjuntos de parámetros, con importación y exportación de claves en SubjectPublicKeyInfo, PKCS#8 y PEM.
sgcCrypto_MLKEM_PolyPoscuánticaAritmética interna de anillos de polinomios detrás de ML-KEM.
sgcCrypto_MLKEM_HybridPoscuánticaEncapsulación de claves híbrida X25519 + ML-KEM, X-Wing, y los key shares híbridos de TLS 1.3 del RFC 10024.
sgcCrypto_MLDSAPoscuánticaFirmas digitales ML-DSA (FIPS 204), 3 conjuntos de parámetros, con importación y exportación de claves en SubjectPublicKeyInfo, PKCS#8 y PEM.
sgcCrypto_MLDSA_PolyPoscuánticaAritmética interna de anillos de polinomios detrás de ML-DSA.
sgcCrypto_SLHDSAPoscuánticaFirmas SLH-DSA (FIPS 205), 6 conjuntos de parámetros SHAKE, con importación y exportación de claves en SubjectPublicKeyInfo, PKCS#8 y PEM.
sgcCrypto_OTPOTP y variosHOTP, TOTP, ventana de verificación en tiempo constante.
sgcCrypto_EncodingOTP y variosComparación en tiempo constante, puesta a cero segura, hex/Base64url/Base32.
sgcCrypto_Zip_AE2OTP y variosCifrado WinZip AES para entradas ZIP, AE-1 / AE-2.
sgcCrypto_LegacyOTP y variosMD4, MD5, HMAC-MD5, DES-ECB, RIPEMD-160 y HMAC-RIPEMD160, solo para interoperabilidad.
sgcCrypto_RandomOTP y variosCSPRNG multiplataforma.
sgcCrypto_Int64OTP y variosEmulación interna de enteros de 64 bits para Delphi 7.

Cifrado y MAC

AES en los modos que realmente usa el código de producción, más la familia AEAD ChaCha20/Poly1305.

FuncionalidadFunciónNotas
AES-CBCsgcAES_CBC_Encrypt / sgcAES_CBC_DecryptRelleno PKCS#7, IV de 16 bytes. La longitud de la clave selecciona el cifrado: 16/24/32 bytes = AES-128/192/256.
AES-CBC, sin rellenosgcAES_CBC_Encrypt_NoPad / sgcAES_CBC_Decrypt_NoPadEl modo que Java escribe como AES/CBC/NoPadding. La entrada ya debe ser múltiplo de 16 bytes; una entrada no alineada lanza una excepción en lugar de rellenarse silenciosamente en algo que el otro lado no pueda leer.
AES-GCM (AEAD)sgcAES_GCM_Encrypt / sgcAES_GCM_DecryptSe recomienda un IV de 12 bytes. Etiqueta de 16 bytes, comparada en tiempo constante; el descifrado devuelve False y texto plano vacío si la etiqueta falla.
Núcleo AESsgcAES_GetCore / sgcAES_SetCoreaescConstantTime es el valor por defecto, un núcleo bitsliced que nunca indexa la memoria con un byte secreto ni se bifurca según uno, lo que cierra el canal lateral de temporización de la caché sobre la clave y el texto plano. aescTable es el núcleo clásico basado en tablas, que filtra información a través de la caché de datos y fue más lento en todas las mediciones, por lo que solo se mantiene como alternativa. GHASH, que autentica GCM, multiplica bajo una máscara en lugar de bifurcarse según la clave. Establece el núcleo una sola vez al arrancar, antes de que se ejecute cualquier hilo de trabajo.
AES-CCM (AEAD)sgcAES_CCM_Encrypt / sgcAES_CCM_DecryptEl AEAD que especifican las pilas embebidas e IoT, Zigbee, 802.15.4, Bluetooth y las suites CCM de TLS, porque solo necesita el cifrado de bloque y ninguna tabla GHASH. Nonce de 7 a 13 bytes, etiqueta de 4 a 16 bytes, verificada en tiempo constante.
AES-CTRsgcAES_CTRAES-CM al estilo SRTP (RFC 3711). Llamada simétrica, sin relleno, contador big-endian de 128 bits.
AES-ECBsgcAES_ECB_Encrypt / sgcAES_ECB_DecryptSin IV, sin encadenamiento. Incluido por interoperabilidad con formatos que lo especifican.
Esquemas de rellenosgcPad_Add / sgcPad_Remove, sgcAES_CBC_EncryptPad / DecryptPad, sgcAES_ECB_EncryptPad / DecryptPadTsgcPadding cubre None, PKCS#7, Zero, ANSI X9.23, ISO 7816-4, ISO 10126-2 y TBC, de modo que CBC y ECB pueden leer y escribir datos de un sistema que no eligió PKCS#7. sgcPad_Remove devuelve False por el mismo camino ante cualquier tipo de relleno incorrecto.
AES-OFB / AES-CFBsgcAES_OFB, sgcAES_CFB_Encrypt / sgcAES_CFB_DecryptModos de realimentación al estilo de cifrado de flujo.
AES-CTSsgcAES_CTS_Encrypt / sgcAES_CTS_DecryptRobo de texto cifrado: cifra datos que no son múltiplo del tamaño de bloque sin sobrecarga de relleno.
AES Key WrapsgcAES_KeyWrap / sgcAES_KeyUnwrapRFC 3394, para envolver una clave bajo otra.
AES Key Wrap with PaddingsgcAES_KeyWrapPad / sgcAES_KeyUnwrapPadRFC 5649, para material de clave que no es múltiplo de 8 bytes.
AES-CMACsgcAES_CMAC / sgcAES_CMAC_VerifyCódigo de autenticación de mensajes RFC 4493.
AES-GMACsgcAES_GMAC / sgcAES_GMAC_VerifyEl modo solo de autenticación de GCM: el mensaje completo viaja como datos adicionales, nada se cifra. El IV nunca debe repetirse con la misma clave, y la etiqueta de 16 bytes se compara en tiempo constante.
Primitivas de bloque de bajo nivelsgcAES_ExpandKey, sgcAES_EncryptBlock, sgcAES_DecryptBlockExpuestas para las unidades de modos y MAC de arriba; llama a estas directamente solo para construir un modo que no esté ya disponible.
ChaCha20sgcChaCha20RFC 8439, nonce de 96 bits, contador de 32 bits.
XChaCha20sgcXChaCha20Nonce extendido de 192 bits, seguro para generar nonces aleatorios a gran escala.
Salsa20 / XSalsa20sgcSalsa20 / sgcXSalsa20La familia de cifrado de flujo predecesora, ambos tamaños de nonce.
Derivación de subclavesgcHChaCha20 / sgcHSalsa20Lo que usan internamente las variantes X para derivar una subclave a partir de los primeros 16 bytes del nonce.
MAC Poly1305sgcPoly1305 / sgcPoly1305_VerifyAutenticador de un solo uso, RFC 8439. Nunca reutilices una clave Poly1305.
AEAD ChaCha20-Poly1305sgcChaCha20Poly1305_Encrypt / _DecryptEl cifrado AEAD detrás de la segunda suite de cifrado de TLS 1.3 y de SSH.
AEAD XChaCha20-Poly1305sgcXChaCha20Poly1305_Encrypt / _DecryptEl mismo AEAD, nonce de 192 bits, la construcción que libsodium llama crypto_aead_xchacha20poly1305_ietf.

Resúmenes, MAC y hash de contraseñas

Todas las familias de hash habituales, además de PBKDF2, HKDF, scrypt y las tres variantes de Argon2.

FuncionalidadFunciónNotas
SHA-1 / SHA-2sgcSHA1, sgcSHA224, sgcSHA256, sgcSHA384, sgcSHA512FIPS 180-4. SHA-1 se mantiene por interoperabilidad, no se recomienda para firmas nuevas.
SHA-3sgcSHA3_224 / _256 / _384 / _512FIPS 202, la esponja Keccak, estructuralmente independiente de SHA-2.
SHAKE128 / SHAKE256sgcSHAKE128 / sgcSHAKE256Funciones de salida extensible: solicita cualquier longitud de resumen.
cSHAKE128 / cSHAKE256sgcCSHAKE128 / sgcCSHAKE256SHAKE con separación de dominio, NIST SP 800-185, la base de KMAC.
KMAC128 / KMAC256sgcKMAC128 / sgcKMAC256MAC basado en Keccak con longitud de salida variable.
BLAKE2bsgcBlake2b / sgcBlake2b_KeyedRFC 7693, resúmenes de hasta 64 bytes, con clave integrada (no hace falta un HMAC aparte).
BLAKE2ssgcBlake2s / sgcBlake2s_KeyedRFC 7693, resúmenes de hasta 32 bytes, ajustado para plataformas de 32 bits.
Resúmenes en flujosgcBlake2b_Init/_Update/_Final, llamadas equivalentes en Keccak/Blake2sPara calcular el hash de datos demasiado grandes para mantenerlos en memoria de una vez.
HMACsgcHMAC_SHA1 / _SHA256 / _SHA384 / _SHA512Hash con clave RFC 2104 sobre la familia SHA-1/2.
RIPEMD-160 / HMAC-RIPEMD160sgcRIPEMD160, sgcHMAC_RIPEMD160ISO/IEC 10118-3 y RFC 2286. El resumen de 160 bits que las direcciones de Bitcoin superponen sobre SHA-256, y el que nombra OpenPGP.
PBKDF2sgcPBKDF2, sgcPBKDF2_SHA1 / _SHA256 / _SHA512RFC 8018. Solo ligeramente resistente a la memoria; prefiere Argon2id o scrypt cuando puedas elegir.
HKDFsgcHKDF_Extract_SHA256 / _SHA384, sgcHKDF_Expand_SHA256 / _SHA384, sgcHKDF_SHA256 / _SHA384RFC 5869, derivación de claves extraer-y-expandir, la forma estándar de convertir un secreto compartido en varias claves.
KDF1 / KDF2 / X9.63sgcKDF1, sgcKDF2, sgcKDF_X963Las derivaciones en modo contador que definen ISO 18033-2, IEEE 1363a y ANSI X9.63, que es lo que nombran RSA-KEM y ECIES. KDF1 cuenta desde 0 y KDF2 desde 1, una diferencia que ha causado errores de interoperabilidad reales, así que compruebe cuál de los dos indica su especificación.
scryptsgcScryptRFC 7914, resistente a la memoria, resiste ataques de GPU/ASIC mucho mejor que PBKDF2.
Argon2sgcArgon2 (d / i / id), envoltorio de conveniencia sgcArgon2idRFC 9106, la ganadora de la Password Hashing Competition. Interfaz completa con secreto opcional (pepper) y datos asociados.
SipHash-2-4sgcSipHash24 / sgcSipHash24_ValuePRF con clave rápida para claves de tablas hash, resiste denegación de servicio por inundación de hash.
Hash difuso TLSHsgcTLSH, sgcTLSH_Init/_Update/_FinalHash sensible a la localidad para detectar casi duplicados, no es un resumen criptográfico.
Puntuación de similitud TLSHsgcTLSH_DiffDistancia entre dos resúmenes TLSH; cuanto menor, más similares.

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

Firma, verifica y deriva secretos compartidos en cinco familias de curvas distintas, más RSA.

FuncionalidadFunciónNotas
Firma / verificación Ed25519sgcEd25519_Sign / sgcEd25519_Verify, sgcEd25519_PublicKeyRFC 8032. Clave pública de 32 bytes, firma de 64 bytes. Verify rechaza los puntos no canónicos y S >= L según la sección 5.1.7. La firma se realiza en tiempo constante en el escalar secreto y en el nonce de cada mensaje: ventanas fijas de cuatro bits, la entrada de la tabla elegida recorriendo las dieciséis bajo una máscara, y la fórmula de suma completa de la sección 5.1.4. La clave pública se obtiene de la semilla de 32 bytes.
Intercambio de claves X25519sgcX25519, sgcX25519_PublicKey, sgcX25519_SharedSecretDiffie-Hellman RFC 7748 sobre Curve25519.
Firma / verificación Ed448sgcEd448_GenerateKeyPair, sgcEd448_Sign, sgcEd448_VerifyRFC 8032, la curva EdDSA de 448 bits (Goldilocks).
Intercambio de claves X448sgcX448, sgcX448_PublicKey, sgcX448_SharedSecretDiffie-Hellman RFC 7748 sobre Curve448.
secp256k1sgcECDSA_SignHash / VerifyHash con eccSecp256k1La curva de Bitcoin/Ethereum, SEC 2, en sgcCrypto_ECCurves.
Brainpool P256r1 / P384r1 / P512r1mismas funciones con eccBrainpoolP256r1 / P384r1 / P512r1RFC 5639, habitual en perfiles eIDAS de la UE y gubernamentales.
NIST P-256 / P-384 / P-521mismas funciones con eccP256 / eccP384 / eccP521TsgcECCurve ahora nombra siete curvas, así que la generación de claves, la firma, la verificación, el ECDH y la compresión de puntos alcanzan todos las curvas primas NIST a partir de bytes de clave en bruto, no solo desde un archivo PEM.
Nonce ECDSA deterministaintegrado en sgcECDSA_SignHashRFC 6979: el nonce se deriva de la clave privada y el mensaje, sin modo de fallo del RNG.
Multiplicación escalar en tiempo constantedentro de sgcECDSA_SignHash, sgcECDH_SharedSecret y la generación de claves ECTodas las curvas de sgcCrypto_ECCurves ejecutan el mismo motor: reducción de Montgomery, que no tiene ningún paso dependiente de los datos, una ventana fija cuyo recuento viene de la curva, entradas de tabla elegidas recorriendo todas bajo una máscara, y una fórmula de suma completa que nunca mira una coordenada para decidir qué caso se aplica. Las rutas JOSE, WebAuthn y E2EE de sgcCrypto_EC ejecutan el mismo código.
ECDH (secp256k1 / Brainpool)sgcECDH_SharedSecretSecreto compartido sobre las mismas cuatro curvas.
Compresión de puntossgcEC_Compress / sgcEC_DecompressAlmacena o transmite la forma comprimida más corta de la clave pública.
EC como JWS (ES256/384/512)sgcECDSA_SignJWS / sgcECDSA_VerifyJWSLa curva se selecciona automáticamente según la longitud en bits solicitada, firma/verifica directamente desde una clave PEM, hermana orientada a JOSE de ECCurves.
ECDH genéricosgcECDHSecreto compartido a partir de una clave privada en bruto y el punto público del interlocutor.
Verificación ECDSA en bruto / DERsgcECDSA_VerifyRaw / sgcECDSA_VerifyDERVerifica contra una tupla en bruto (Qx, Qy, r, s) o una firma codificada en DER.
Firma DER ECDSA y conversiónsgcECDSA_SignDER / sgcECDSA_VerifyDER, sgcECDSA_RawToDER / sgcECDSA_DERToRawX.509, CMS y TLS llevan el ECDSA-Sig-Value DER, una SEQUENCE de INTEGER r seguido de INTEGER s. JOSE y WebAuthn llevan en su lugar el par en bruto R || S. Firme directamente en cualquiera de las dos formas, o convierta una firma existente entre ellas.
Firmas Schnorr (BIP-340)sgcSchnorr_PublicKey, sgcSchnorr_Sign, sgcSchnorr_VerifySolo secp256k1, con claves públicas x-only de 32 bytes y firmas de 64 bytes: lo que usan Taproot, Nostr y Lightning. sgcSchnorr_TaggedHash se expone para que las etiquetas de BIP-341 y BIP-342 se puedan construir sobre la misma construcción.
Firma RSA (PKCS#1 v1.5)sgcRSA_SignPKCS1Desde una clave privada PEM, resumen SHA-1/256/384/512.
Operaciones con la clave privada RSAsgcRSA_SignPKCS1 y las demás llamadas de firma y descifrado de sgcCrypto_RSA_KeysCada operación se ciega con un par aleatorio nuevo, se ejecuta mediante una exponenciación de ventana fija y una recombinación CRT cuya temporización no depende de los factores ni de los datos, y se comprueba contra el exponente público antes de devolver el resultado. Un fallo en una mitad CRT revelaría un factor en una sola firma, así que si no coincide no se devuelve nada.
Verificación RSA (PKCS#1 v1.5 / PSS)sgcRSA_VerifyPKCS1, sgcRSA_VerifyPSS, y variantes _Raw sobre un módulo/exponenteRFC 8017. La verificación funciona desde una clave PEM o un módulo y exponente en bruto, sin necesidad de construir un objeto de clave.
Generación de claves RSAsgcRSA_GenerateKeyCualquier longitud en bits solicitada, comprobación de primalidad Miller-Rabin.
Cifrado RSA-OAEPsgcRSA_OAEP_Encrypt / sgcRSA_OAEP_DecryptRelleno de cifrado asimétrico óptimo RFC 8017.
RSA-OAEP con un hash MGF1 independientelas sobrecargas de cinco parámetros de sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_DecryptFija el hash de la etiqueta y el hash MGF1 por separado. OAEPWithSHA256AndMGF1Padding significa SHA-256 para ambos en Bouncy Castle pero SHA-256 con MGF1-SHA1 en SunJCE, y ese desajuste es el motivo habitual por el que falla la interoperabilidad con Java.
Cifrado RSA PKCS#1 v1.5sgcRSA_PKCS1_Encrypt / sgcRSA_PKCS1_DecryptRFC 8017 sección 7.2, el modo que Java llama RSA/ECB/PKCS1Padding. El descifrado sigue el mismo camino ante todo fallo, de modo que no le da nada con lo que trabajar a un oráculo de relleno. Prefiera OAEP para cualquier cosa nueva.
Firma RSA-PSS / PKCS#1sgcRSA_PSS_Sign / Verify, sgcRSA_PKCS1_Sign / VerifyFirma directamente desde un TsgcRSAPrivateKey generado.
Exportación de claves RSAsgcRSA_ExportPrivateKeyPEM, sgcRSA_ExportPublicKeyPEM, llamadas DER equivalentesCodificaciones PKCS#1 y SubjectPublicKeyInfo.
Exportación de claves PKCS#8 y SEC 1sgcRSA_ExportPrivateKeyPKCS8DER / PKCS8PEM, sgcEC_ExportPrivateKeyPKCS8DER / PKCS8PEM, sgcEC_ExportPrivateKeySEC1DER / SEC1PEM, sgcEC_ExportSubjectPublicKeyInfo, sgcEC_ExportPublicKeyPEMEl contenedor BEGIN PRIVATE KEY que esperan Java, .NET y la mayoría de las herramientas modernas, junto con la forma SEC 1 BEGIN EC PRIVATE KEY y el SubjectPublicKeyInfo que incrusta un certificado. Sin cifrar, así que lo que se obtiene es material de clave desnudo.
Importación de claves RSA y ECsgcRSA_ImportPrivateKeyDER / PEM, sgcRSA_ImportPublicKeyDER / PEM, sgcEC_ImportPrivateKeyDER / PEM, sgcEC_ImportPublicKeyDER / PEMEsto no existía antes: una clave generada se podía escribir pero nunca volver a leer. La importación acepta PKCS#1, PKCS#8, SEC 1 y SubjectPublicKeyInfo, DER o PEM, recalcula los parámetros CRT o el punto público cuando el archivo los omite, y devuelve False ante una entrada malformada en lugar de lanzar una excepción, así que es seguro entregarle archivos no confiables.
ECIES seal / opensgcECIES_GenerateKeyPair, sgcECIES_Seal, sgcECIES_OpenCifrado híbrido hacia una clave pública X25519: ECDH efímero más un AEAD, una llamada en cada sentido.

Certificados X.509 y ASN.1

Lee un certificado emitido por otra entidad, o genera uno tú mismo, con un codificador y un decodificador DER debajo de ambos.

FuncionalidadFunciónNotas
Lector DERsgcASN1_Read, sgcASN1_Next, sgcASN1_ContentRecorre una estructura DER nodo a nodo.
DER estrictosgcASN1_Read, sgcASN1_IsMinimalUnsignedIntegerToda estructura que lee la unidad es DER por especificación, así que las longitudes se ajustan a las reglas DER: se rechaza la forma indefinida, y también una forma larga que la forma corta habría podido representar. También se rechaza una firma ECDSA cuyos INTEGER no estén codificados de forma mínima, de modo que una firma no pueda escribirse de dos maneras y tomarse por dos valores distintos.
Códec PEMsgcPEM_Decode / sgcPEM_EncodeRFC 7468, el envoltorio -----BEGIN ... -----END alrededor de DER.
Análisis de claves RSAsgcASN1_ParseRSAPrivateKey / PublicKeyEstructuras de clave PKCS#1 (RFC 8017).
Análisis de claves ECsgcASN1_ParseECPrivateKey / PublicKeyEstructuras de clave SEC 1.
Escritor DER, estructuralsgcDER_Sequence, sgcDER_Set, sgcDER_Tagged, sgcDER_ContextExplicit / ImplicitLos bloques básicos con los que se ensambla cada campo de un certificado.
Escritor DER, valoressgcDER_Integer, sgcDER_OctetString, sgcDER_BitString, sgcDER_Boolean, sgcDER_NullCodificadores de valores primitivos.
Escritor DER, cadenas e identificadoressgcDER_OID, sgcDER_UTF8String, sgcDER_PrintableString, sgcDER_IA5String, sgcDER_TimeIdentificadores de objeto, los tres tipos de cadena que usa X.509, y UTCTime/GeneralizedTime.
Análisis de certificadossgcX509_ParseEstructura completa del certificado: sujeto, emisor, validez, clave pública, extensiones.
Verificación de firma / cadenasgcX509_VerifySignedBy, sgcX509_VerifyChainVerifica un certificado contra un emisor, o recorre y verifica un array de certificados DER.
Análisis de CRL y revocaciónsgcX509_CRL_Parse, sgcX509_IsRevoked, sgcX509_CRL_VerifySignedByAnaliza una lista de revocación de certificados y comprueba un número de serie contra ella.
Formateo de nombressgcX509_SubjectRFC2253, sgcX509_IssuerRFC2253, sgcX509_SubjectOneLineCadenas de nombre distintivo RFC 2253, para registro y visualización.
Extensiones y SANsgcX509_GetExtension, sgcX509_GetCRLDistributionURIsLee OID de extensión arbitrarios y URI de puntos de distribución de CRL.
Generación de certificados autofirmadossgcX509_CreateSelfSignedTsgcX509Options completo: DN del sujeto, ventana de validez, número de serie, indicador de CA con restricción de longitud de ruta, uso de clave, uso extendido de clave, nombres alternativos del sujeto (incluyendo SAN IPv4).
Nombres alternativos del sujeto de tipo URITsgcX509Options.URIsSAN uniformResourceIdentifier, para una identidad de servicio al estilo SPIFFE en lugar de un nombre de host. El valor se escribe tal cual como contenido IA5String, así que pase un URI completo.
Generación de CSR PKCS#10sgcX509_CreateCSRSolicitud de firma de certificado RFC 2986 a partir del mismo registro de opciones.
Certificados y CSR firmados con ECsgcX509_CreateSelfSignedEx, sgcX509_CreateCSREx, sgcX509_ECKey, sgcX509_RSAKeyFirme con una clave EC además de con RSA envolviendo cualquiera de las dos en un TsgcX509SignKey. Un certificado EC tiene aproximadamente un tercio del tamaño de uno RSA y verifica mucho más rápido. TsgcX509Options.Hash sigue nombrando solo el SHA, el algoritmo sigue a la clave, así que rhSHA256 con una clave EC significa ecdsa-with-SHA256.
Emisión por una CAsgcX509_CreateSigned, sgcX509_CreateSignedFromCSREmite un certificado firmado por la clave de una CA, bien a partir de un registro de opciones, bien a partir de una solicitud PKCS#10 ya analizada.
Claves de firma poscuánticassgcX509_MLDSAKey, sgcX509_SLHDSAKeyEnvuelven una clave ML-DSA o SLH-DSA en un TsgcX509SignKey y se la pasan a sgcX509_CreateSelfSignedEx, sgcX509_CreateCSREx o a los emisores de CA. RFC 9881 para ML-DSA, RFC 9909 para SLH-DSA.
Certificados ML-KEMsgcX509_CreateSigned con una clave de sujeto ML-KEMRFC 9935. Una CA puede certificar una clave pública ML-KEM, que no puede firmar, así que la posesión hay que demostrarla de otra manera antes de emitir el certificado.
Tipos de clave poscuánticos en la lecturaTsgcX509PublicKeyTypex509pkMLDSA, x509pkSLHDSA y x509pkMLKEM junto a x509pkRSA, x509pkEC y x509pkEd25519. sgcX509_Parse, sgcX509_VerifySignedBy y sgcX509_CSR_Verify los tratan todos.
Restricciones de cadenasgcX509_VerifyChainAplica el pathLenConstraint de basicConstraints y la extensión nameConstraints, sobre dNSName, iPAddress, rfc822Name, uniformResourceIdentifier y directoryName.
nameConstraints en la generaciónTsgcX509Options.PermittedDNSNames, ExcludedDNSNames, PermittedIPRanges, ExcludedIPRangesEscriben los subárboles permitidos y excluidos en un certificado de CA, para que el verificador de cadena de arriba pueda aplicarlos.
SAN de direcciones IPv6TsgcX509Options.IPAddressesAcepta IPv6 en cualquier forma de texto del RFC 4291, además de IPv4.
Salida PEMsgcX509_ToPEMEnvuelve el DER generado como un archivo PEM listo para guardar.

ML-KEM, ML-DSA y SLH-DSA

Los tres algoritmos que el NIST finalizó en agosto de 2024 como FIPS 203, 204 y 205, más un combinador híbrido para el periodo de migración.

FuncionalidadFunciónNotas
Generación de claves ML-KEMsgcMLKEM_GenerateKeyPair, sgcMLKEM_GenerateKeyPairFromSeedFIPS 203, anteriormente Kyber. Tres conjuntos de parámetros: mlkem512, mlkem768, mlkem1024.
Encapsulación ML-KEMsgcMLKEM_Encapsulate, sgcMLKEM_EncapsulateWithSeedProduce un secreto compartido nuevo de 32 bytes y el texto cifrado que lo transporta. La clave pública pasa primero las comprobaciones de entrada de FIPS 203 sección 7.2, así que una de longitud incorrecta, o una que no supera la comprobación del módulo, lanza una excepción.
Decapsulación ML-KEMsgcMLKEM_DecapsulateUn texto cifrado de la longitud correcta que no descifra produce un secreto pseudoaleatorio (rechazo implícito) en lugar de un error, de modo que ni la temporización ni el comportamiento ante errores revelan nada. Un texto cifrado o una clave privada de longitud incorrecta, o una clave privada que no supera la comprobación del hash, lanza una excepción primero, según las comprobaciones de entrada de FIPS 203 sección 7.3.
Tamaños ML-KEMsgcMLKEM_PublicKeySize, PrivateKeySize, CiphertextSize, SharedSecretSizeLongitudes en bytes por conjunto de parámetros, para dimensionar buffers.
Híbrido X25519 + ML-KEMsgcHybrid_GenerateKeyPair, sgcHybrid_Encapsulate, sgcHybrid_DecapsulateCombina un secreto compartido clásico y otro poscuántico mediante un KDF, de modo que el resultado nunca es más débil que X25519 por sí solo. La forma recomendada de desplegar ML-KEM hoy.
Generación de claves ML-DSAsgcMLDSA_GenerateKeyPair, sgcMLDSA_GenerateKeyPairFromSeedFIPS 204, anteriormente Dilithium. Tres conjuntos de parámetros: mldsa44, mldsa65, mldsa87.
Firma / verificación ML-DSAsgcMLDSA_Sign / sgcMLDSA_VerifyFirma determinista o aleatorizada según la interfaz FIPS 204, más una cadena de contexto.
Tamaños ML-DSAsgcMLDSA_PublicKeySize, PrivateKeySize, SignatureSizeLongitudes en bytes por conjunto de parámetros.
Generación de claves SLH-DSAsgcSLHDSA_GenerateKeyPair, sgcSLHDSA_GenerateKeyPairFromSeedFIPS 205, anteriormente SPHINCS+. Firmas basadas en hash sin estado: la seguridad descansa únicamente en la función de hash, no en una suposición reticular o de curvas.
Firma / verificación SLH-DSAsgcSLHDSA_Sign / sgcSLHDSA_VerifySeis conjuntos de parámetros SHAKE: slhShake128s, slhShake128f, slhShake192s, slhShake192f, slhShake256s, slhShake256f. Los conjuntos s favorecen firmas pequeñas, los conjuntos f favorecen una firma rápida.
Tamaños y nombres SLH-DSAsgcSLHDSA_PublicKeySize, PrivateKeySize, SignatureSize, sgcSLHDSA_ParamsNameLas firmas SLH-DSA son grandes (de 7,8 KB a 49 KB según el conjunto); dimensiona el buffer antes de firmar.
Exportación e importación de clave pública, DERsgcMLDSA_ExportSubjectPublicKeyInfo / ImportSubjectPublicKeyInfo, y los pares idénticos sgcMLKEM_* y sgcSLHDSA_*SubjectPublicKeyInfo de X.509, así que una clave pública poscuántica va en la misma estructura que una RSA o EC. RFC 9881, RFC 9909 y RFC 9935.
Exportación & importación de clave privada, DERsgcMLDSA_ExportPrivateKeyInfo / ImportPrivateKeyInfo, y los pares sgcMLKEM_* y sgcSLHDSA_*PKCS#8 OneAsymmetricKey, versiones 0 y 1. La importación comprueba la coherencia de la clave: se rechaza una clave pública incrustada que no coincide, las formas de semilla y expandida de la misma clave deben concordar, y una clave ML-DSA debe reproducir sus t0 y tr almacenados. SLH-DSA recalcula PK.root a partir de la semilla, lo que cuesta aproximadamente una generación de claves, así que esas importaciones aceptan un parámetro aVerify, True por defecto, que puedes pasar como False para una clave generada por tu propia aplicación.
Exportación e importación PEMsgcMLDSA_ExportPublicKeyPEM, ExportPrivateKeyPEM, ImportPublicKeyPEM, ImportPrivateKeyPEM, y los conjuntos sgcMLKEM_* y sgcSLHDSA_*RFC 7468, el envoltorio -----BEGIN ... -----END, así que las claves encajan en los mismos ficheros y herramientas que el resto de la PKI.
Forma de la clave privadaTsgcPQCPrivateKeyFormatLas claves privadas de ML-DSA y ML-KEM tienen tres formas. pqkfSeed escribe solo la semilla (32 bytes para ML-DSA, la semilla d||z de 64 bytes para ML-KEM), pqkfExpanded escribe la clave expandida, pqkfBoth lleva las dos. SLH-DSA tiene una única forma de clave privada.
Generación de claves con la semillasgcMLDSA_GenerateKeyPairAndSeed, sgcMLKEM_GenerateKeyPairAndSeedDevuelven la semilla junto con el par de claves, así que se puede escribir un fichero PKCS#8 o PEM en forma de semilla justo después de generarlo.
KEM híbrido X-WingsgcXWing_GenerateKeyPair, sgcXWing_Encapsulate, sgcXWing_Decapsulatedraft-connolly-cfrg-xwing-kem-10: X25519 con ML-KEM-768 como un único KEM. Clave pública de 1216 bytes, clave privada de 32 bytes (la semilla), texto cifrado de 1120 bytes, secreto compartido de 32 bytes.
Key shares híbridos de TLS 1.3sgcTLSHybrid_ClientKeyShare, sgcTLSHybrid_ServerKeyShare, sgcTLSHybrid_ClientSharedSecret, sgcTLSHybrid_GroupName, sgcTLSHybrid_AvailableLos grupos del RFC 10024 X25519MLKEM768, SecP256r1MLKEM768 y SecP384r1MLKEM1024 (puntos de código IANA 0x11EC, 0x11EB, 0x11ED). No son KEM independientes, solo construyen un key share de TLS.
ML-DSA para JSON Web TokensJWTOptions.Algorithms.MLDSA.PrivateKey, PublicKey, Enabled, sgcMLDSA_ExportPublicJWK, sgcMLDSA_ExportPrivateJWK, sgcMLDSA_ImportJWK, sgcMLDSA_ImportJWKAsPEMRFC 9964, en sgcHTTP_JWT_MLDSA y no en una unidad sgcCrypto_*. Algoritmos JWS ML-DSA-44, ML-DSA-65 y ML-DSA-87 (jwtMLDSA44, jwtMLDSA65, jwtMLDSA87), un PEM PKCS#8 en el cliente, un PEM SubjectPublicKeyInfo en el servidor, claves web JSON de tipo AKP, y ningún OpenSSL en toda la ruta.
Validación con respuestas conocidasVectores NIST ACVPLa generación de claves, la encapsulación y la decapsulación de ML-KEM, y la generación de claves, la generación de firmas y la verificación de firmas de ML-DSA y SLH-DSA, se comprueban con los vectores de respuesta conocida de NIST ACVP en la suite QA de sgcWebSockets.

sgcCrypto no afirma implementar ed25519187 ni SPECK. ed25519187 no tiene una especificación publicada, y SPECK fue retirado de la estandarización ISO en 2018; ninguno de los dos está implementado aquí.

Una pila TLS 1.3 y TLS 1.2 sobre estas unidades

Escrita en Object Pascal sobre las primitivas de sgcCrypto y entregada en el mismo paquete. Vive en las unidades sgcSSL_NativeTLS*, no en sgcCrypto_*, así que no es una de las 43 contadas más arriba.

FuncionalidadAPINotas
Selección en un clienteTLSOptions.IOHandler := iohNativeTLSSustituye a OpenSSL, SChannel y los backends TLS de la plataforma por el motor Pascal dentro del propio proceso. No hay nada que desplegar en ningún destino.
Selección en un servidorSSLOptions.IOHandler := iohNativeTLSFunciona con el motor de servidor Indy por defecto y con los motores IOCP y EPOLL.
Versión del protocoloTLSOptions.VersionLa versión mínima permitida. tls1_2 o tlsUndefined negocia TLS 1.3 o TLS 1.2, tls1_3 permite solo TLS 1.3, y tls1_0 o tls1_1 genera un error de configuración. SSLOptions.Version hace lo mismo en un servidor. Para usar solo TLS 1.2, incluye en CipherSuites únicamente conjuntos de TLS 1.2.
Grupos de intercambio de clavesTLSOptions.NativeTLS_Options.GroupsSeparados por dos puntos, al estilo de OpenSSL. Por defecto X25519MLKEM768:X25519:secp256r1:secp384r1, así que un handshake es híbrido poscuántico siempre que el par lo acepte. Una compilación con SGC_CRYPTO_FIPS usa por defecto SecP256r1MLKEM768:SecP384r1MLKEM1024:secp256r1:secp384r1 en su lugar. Los tres grupos híbridos son solo de TLS 1.3, así que una conexión TLS 1.2 usa X25519, secp256r1 o secp384r1.
Suites de cifradoTLSOptions.NativeTLS_Options.CipherSuitesSeparadas por dos puntos, al estilo de OpenSSL. Por defecto TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 para TLS 1.3, más ECDHE_ECDSA y ECDHE_RSA con AES-128-GCM, AES-256-GCM y ChaCha20-Poly1305 para TLS 1.2. ECDHE con AES-CBC y el intercambio de claves RSA solo se usan cuando se nombran, para 20 suites de TLS 1.2 en total. Una compilación con SGC_CRYPTO_FIPS deja fuera ChaCha20-Poly1305 y el intercambio de claves RSA.
Raíces de confianzaTLSOptions.RootCertFile, TLSOptions.NativeTLS_Options.UseSystemRootsLas raíces vienen de RootCertFile. Establece UseSystemRoots en True para añadir las raíces en las que el sistema operativo ya confía: el almacén ROOT en Windows, y en cualquier otra plataforma el primer paquete de certificados de CA encontrado entre las ubicaciones estándar. Nunca lee el llavero de macOS o iOS ni el almacén de Android. Está desactivado por defecto, así que RootCertFile sigue siendo la fuente. La misma propiedad en SSLOptions se aplica a los certificados de cliente que verifica un servidor.
Construcción de la cadenala cadena de certificados que envía el parSe busca en la cadena un camino desde la hoja hasta una raíz de confianza, así que se aceptan certificados adicionales y cualquier orden, como pide la sección 4.4.2 de RFC 8446. La búsqueda retrocede, de modo que un certificado que nombra al emisor correcto pero no lleva a ninguna parte ya no oculta tras de sí un camino válido. No se comprueban la revocación ni las políticas de certificados.
Alcance del protocoloRFC 8446, RFC 5246TLS 1.3 y TLS 1.2. Nada de TLS 1.1, TLS 1.0 ni SSL. TLS 1.2 usa el extended master secret de la RFC 7627 y la protección contra downgrade de la RFC 8446 en ambos lados, rechaza la renegociación y las firmas SHA-1 (RFC 9155), y comprueba los registros CBC en tiempo constante.
No implementadon/aNo hay reanudación de sesión ni PSK, ni 0-RTT, ni QUIC.
Evento de verificación del parOnSSLVerifyPeerNo está disponible para este motor, que tiene sus propios puntos de enganche de verificación. Sigue con OpenSSL o con un backend de plataforma si tu código depende de ese evento.

Contraseñas de un solo uso, códecs y ZIP cifrado

La capa de utilidades: códigos de un solo uso, las codificaciones en las que se apoyan el resto de familias, y el cifrado WinZip AES.

FuncionalidadFunciónNotas
HOTPsgcHOTPRFC 4226, contraseña de un solo uso basada en contador.
TOTPsgcTOTP, sgcTOTP_FromBase32RFC 6238, contraseña de un solo uso basada en tiempo; la variante Base32 acepta el secreto tal como lo muestra una app de autenticación.
Verificación TOTPsgcTOTP_VerifyComprueba un código enviado a lo largo de una ventana de pasos en tiempo constante, de modo que ni el resultado ni su posición se filtran por temporización. No impide por sí misma la repetición; quien la llama debe llevar el control de los códigos usados.
Comparación en tiempo constantesgcConstantTimeEqualsSe usa en toda la biblioteca para comparar etiquetas y MAC.
Puesta a cero segurasgcSecureZeroSobrescribe un buffer de bytes para que el material de clave no permanezca en memoria.
HexsgcHexEncode / sgcHexDecodeHex en minúsculas, decodificación sin distinguir mayúsculas/minúsculas.
Base64urlsgcBase64UrlEncode / sgcBase64UrlDecodeRFC 4648 sección 5, sin relleno, la codificación que usan JWT y JOSE.
Base32sgcBase32Encode / sgcBase32DecodeRFC 4648 sección 6, la codificación que usan los secretos TOTP y las apps de autenticación.
Derivación de claves WinZip AESsgcZipAE2_DeriveKeysClave basada en PBKDF2, clave de autenticación y verificador de contraseña a partir de una contraseña y una sal.
Cifrado / descifrado WinZip AESsgcZipAE2_Encrypt / sgcZipAE2_DecryptAE-1 y AE-2, AES-128/192/256, tamaño de sal por entrada mediante TsgcZipAESStrength.
Empaquetado de entradas WinZipsgcZipAE2_PackEntry / sgcZipAE2_UnpackEntryCombina la sal, el verificador, el texto cifrado y el código de autenticación en el formato en disco.
Campo extra WinZipsgcZipAE2_BuildExtraField / sgcZipAE2_ParseExtraFieldEl campo extra 0x9901 que marca una entrada ZIP como cifrada con AES.
Hashes heredados (solo interoperabilidad)sgcMD4, sgcMD5, sgcHMAC_MD5Se mantienen para leer formatos y protocolos antiguos; no los uses en un diseño nuevo.
Cifrado heredado (solo interoperabilidad)sgcDES_EncryptECB / sgcDES_DecryptECB, sgcDES_NTLM7to8DES-ECB y el paso de expansión de clave NTLM basado en DES, ambos retirados (FIPS 46-3), mantenidos por interoperabilidad heredada.
Bytes aleatorios segurossgcRandomBytes / sgcRandomFillBCryptGenRandom (Windows CNG) bajo MSWINDOWS, /dev/urandom en el resto, una sola llamada en cualquier caso.

Dónde funciona sgcCrypto

Qué está soportado, dicho con precisión.

ÁreaDetalle
Sistema operativoNinguna guarda MSWINDOWS, ni ninguna otra guarda de plataforma, envuelve SGC_CRYPTO en sgcVer.inc. Las 43 unidades compilan para Win32, Win64, Linux64, macOS, iOS y Android.
Fuente de números aleatoriosLa única unidad que distingue la plataforma, sgcCrypto_Random, selecciona un CSPRNG según el destino: BCryptGenRandom (Windows CNG) bajo MSWINDOWS, /dev/urandom en destinos POSIX, detrás de la misma llamada sgcRandomBytes. Los bytes salen directamente del generador del sistema operativo, sin ningún generador propio por encima. En Windows solo se recurre a RtlGenRandom y después a CryptGenRandom cuando BCryptGenRandom no está disponible, y si no se puede leer ninguna fuente se lanza una excepción en lugar de devolver bytes débiles.
Modo FIPSDirectiva opcional SGC_CRYPTO_FIPS, desactivada por defecto, que elimina en tiempo de compilación todos los algoritmos no aprobados de las 43 unidades y comprueba algunas reglas de parámetros en tiempo de ejecución. Mantiene la biblioteca dentro de los algoritmos aprobados por FIPS, pero sgcCrypto no es un módulo validado FIPS 140-3 y la directiva no supone ninguna declaración de validación. Modo FIPS
DelphiDelphi 7 hasta RAD Studio 13 Florence. No se asume en ningún sitio un tipo entero de 64 bits nativo: sgcCrypto_Int64 y el tipo TsgcBigInt en sgcCrypto_BigInteger emulan la aritmética que necesitan las unidades de hash, curvas y poscuánticas.
C++ BuilderC++ Builder a través de las cabeceras generadas, el mismo árbol de código fuente.
Huella en tiempo de diseñoNinguna. No existe sgcCrypto_Reg.pas, nada se registra con RegisterComponents, y ninguna unidad aparece en una página de la paleta de componentes.
DependenciasSin enlace a OpenSSL, sin DLL externa. Cada primitiva está implementada directamente en Object Pascal dentro de la unidad que referencias.
Código fuenteCódigo fuente completo en Object Pascal en todas las versiones de pago, y en los paquetes de edición que ya incluyen sgcCrypto.
RedistribuciónLos binarios que compilas son libres de regalías, sin coste de runtime por puesto ni por servidor.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

Desarrolla con sgcCrypto

Descarga la prueba gratuita y llama a una función, no hace falta ningún componente.