sgcWebSockets incluye sgcCrypto, una biblioteca de criptografía de propósito general escrita íntegramente en Pascal puro. No depende de OpenSSL ni de ninguna otra biblioteca externa, y compila sin cambios desde Delphi 7 hasta Delphi 13, en Win32, Win64, Linux64, macOS e iOS.
La biblioteca cubre el hash y la autenticación de mensajes, el hash de contraseñas y la derivación de claves, el cifrado simétrico, la criptografía de clave pública clásica, la criptografía poscuántica, los certificados X.509, las contraseñas de un solo uso, el cifrado de archivos y un hash difuso para la detección de casi duplicados. Está organizada como una unidad por familia de algoritmos (sgcCrypto_AES, sgcCrypto_MLKEM, sgcCrypto_TLSH, y así sucesivamente), de modo que una aplicación solo incorpora el código que realmente utiliza.
Cada función es una llamada sencilla que recibe y devuelve TBytes: no hay componentes que colocar en un formulario ni configuración en tiempo de diseño. La implementación de cada algoritmo listado a continuación se verificó, byte a byte, frente a una implementación independiente del mismo estándar (OpenSSL, hashlib/cryptography de Python, o una implementación de referencia publicada por los autores del estándar) y no solo frente a su propia salida, que es lo que permite detectar un error que es internamente consistente pero incorrecto.
Habilitar la biblioteca
Las unidades de criptografía pertenecen al paquete de instalación Cryptography, controlado por la definición condicional SGC_PACK_CRYPTO en sgcVer.inc. Con la definición desactivada, cada unidad sgcCrypto_* compila como un stub vacío, lo que mantiene el paquete fuera de una compilación que no lo necesita. Seleccione el paquete en el instalador, o defina SGC_PACK_CRYPTO en las opciones de su proyecto si compila desde el código fuente.
Si un proyecto debe usar únicamente algoritmos aprobados por FIPS, la definición opcional SGC_CRYPTO_FIPS elimina de las unidades sgcCrypto todos los demás algoritmos en tiempo de compilación. Está desactivada por defecto. Vea Modo FIPS para saber qué conserva, qué elimina y por qué no es una validación FIPS 140-3.
Las unidades sgcCrypto también son lo que permite que el resto de la biblioteca funcione sin OpenSSL: el interruptor en tiempo de ejecución sgcCryptoBackend (o la definición opcional SGC_NATIVE_CRYPTO) y el IOHandler iohNativeTLS. Vea Ejecutar sin OpenSSL.
Qué se cubre en esta página
La siguiente tabla es el inventario completo: cada algoritmo que implementa la biblioteca, y en qué unidad se encuentra. Las páginas siguientes explican cada familia una por una, con las firmas exactas de las funciones y un breve ejemplo en Delphi.
| Categoría | Algoritmos | Estándar | Unidad |
| Hash | SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 | FIPS 180-4 | sgcCrypto_SHA2 |
| Hash | SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256, cSHAKE, KMAC | FIPS 202, SP 800-185 | sgcCrypto_Keccak |
| Hash | BLAKE2b (con clave, hasta 512 bits) | RFC 7693 | sgcCrypto_Blake2b |
| Hash | BLAKE2s (con clave, hasta 256 bits) | RFC 7693 | sgcCrypto_Blake2s |
| Hash | SipHash-2-4 | — | sgcCrypto_SipHash |
| Hash | RIPEMD-160, HMAC-RIPEMD160 | ISO/IEC 10118-3, RFC 2286 | sgcCrypto_Legacy |
| Hash (heredado) | MD4, MD5, DES-ECB, hash NTLM v1 | — | sgcCrypto_Legacy |
| Hash difuso | Resumen TLSH y distancia | — | sgcCrypto_TLSH |
| Autenticación de mensajes | HMAC-SHA1/256/384/512, HMAC-MD5 | FIPS 198-1 | sgcCrypto_HMAC |
| Autenticación de mensajes | AES-CMAC | RFC 4493 | sgcCrypto_CMAC |
| Autenticación de mensajes | AES-GMAC | SP 800-38D | sgcCrypto_CMAC |
| Autenticación de mensajes | Poly1305 | RFC 8439 | sgcCrypto_Poly1305 |
| Hash de contraseñas y KDF | PBKDF2 (SHA-1/256/384/512) | RFC 8018 | sgcCrypto_KDF |
| Hash de contraseñas y KDF | KDF1, KDF2, ANSI X9.63 KDF | ISO 18033-2, ANSI X9.63 | sgcCrypto_KDF |
| Hash de contraseñas y KDF | scrypt | RFC 7914 | sgcCrypto_Scrypt |
| Hash de contraseñas y KDF | Argon2d, Argon2i, Argon2id | RFC 9106 | sgcCrypto_Argon2 |
| Hash de contraseñas y KDF | HKDF (SHA-256/384) | RFC 5869 | sgcCrypto_HKDF |
| Cifrado simétrico | AES-128/192/256: ECB, CBC, CFB, OFB, CTR, robo de texto cifrado CBC, GCM | FIPS 197, SP 800-38A/D | sgcCrypto_AES, sgcCrypto_Modes |
| Cifrado simétrico | AES-CBC sin relleno, y los esquemas de relleno PKCS#7, cero, ANSI X9.23, ISO 7816-4, ISO 10126-2 y TBC | SP 800-38A, ISO/IEC 9797-1 | sgcCrypto_AES, sgcCrypto_Modes |
| Cifrado simétrico | AES-CCM (AEAD) | RFC 3610, SP 800-38C | sgcCrypto_Modes |
| Cifrado simétrico | AES Key Wrap, AES Key Wrap con relleno | RFC 3394, RFC 5649 | sgcCrypto_Modes |
| Cifrado simétrico | ChaCha20, XChaCha20, Salsa20, XSalsa20 | RFC 8439 | sgcCrypto_ChaCha |
| Cifrado simétrico | ChaCha20-Poly1305, XChaCha20-Poly1305 (AEAD) | RFC 8439 | sgcCrypto_Poly1305 |
| Criptografía de clave pública | Generación de claves RSA, RSA-OAEP, RSA-PSS, firma/verificación PKCS#1 v1.5 | RFC 8017 | sgcCrypto_RSA_Keys, sgcCrypto_RSA |
| Criptografía de clave pública | Cifrado RSA PKCS#1 v1.5 | RFC 8017 | sgcCrypto_RSA_Keys |
| Criptografía de clave pública | Ed25519, Ed448 (firmas) | RFC 8032 | sgcCrypto_Ed25519, sgcCrypto_Ed448 |
| Criptografía de clave pública | X25519, X448 (acuerdo de claves) | RFC 7748 | sgcCrypto_X25519, sgcCrypto_X448 |
| Criptografía de clave pública | Cifrado de caja sellada ECIES | — | sgcCrypto_ECIES |
| Criptografía de clave pública | ECDSA / ECDH en NIST P-256, P-384, P-521 | FIPS 186-5 | sgcCrypto_EC, sgcCrypto_ECCurves |
| Criptografía de clave pública | ECDSA / ECDH en secp256k1, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1 | SEC 2, RFC 5639 | sgcCrypto_ECCurves |
| Criptografía de clave pública | Firmas ECDSA codificadas en DER, conversión entre bruto y DER | RFC 3279 | sgcCrypto_ECCurves, sgcCrypto_EC |
| Criptografía de clave pública | Firmas Schnorr sobre secp256k1 | BIP-340 | sgcCrypto_ECCurves |
| Criptografía de clave pública | Exportación e importación de claves RSA y EC: PKCS#1, PKCS#8, SEC1, SubjectPublicKeyInfo, DER y PEM | RFC 8017, RFC 5958, RFC 5280 | sgcCrypto_RSA_Keys, sgcCrypto_ECCurves |
| Criptografía poscuántica | ML-KEM-512/768/1024, híbrido 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 |
| Criptografía poscuántica | ML-DSA-44/65/87 | FIPS 204, RFC 9881, RFC 9964 | sgcCrypto_MLDSA |
| Criptografía poscuántica | SLH-DSA-SHAKE-128s/128f/192s/192f/256s/256f | FIPS 205, RFC 9909 | sgcCrypto_SLHDSA |
| Certificados y PKI | Análisis de X.509, verificación de cadena y CRL | RFC 5280 | sgcCrypto_X509 |
| Certificados y PKI | Generación de certificados X.509 autofirmados y de solicitudes PKCS#10 CSR | RFC 5280, RFC 2986 | sgcCrypto_X509_Gen |
| Certificados y PKI | Certificados X.509 y CSR firmados con EC, nombres alternativos del sujeto de tipo URI | RFC 5280, RFC 2986 | sgcCrypto_X509_Gen |
| Certificados y PKI | Lectura de PKCS#12 (.pfx, .p12): certificado hoja, cadena y clave privada. PBES2 con AES, y los esquemas heredados Triple DES y RC2 | RFC 7292, RFC 9579 | sgcCrypto_PKCS12 |
| Certificados y PKI | Lector y escritor DER / ASN.1, PEM, Base64 | — | sgcCrypto_ASN1, sgcCrypto_DER |
| Contraseñas de un solo uso | HOTP, TOTP | RFC 4226, RFC 6238 | sgcCrypto_OTP |
| Cifrado de archivos | WinZip AE-1 / AE-2 | WinZip AE-2 | sgcCrypto_Zip_AE2 |
| Codificación y utilidades | Hex, Base32, Base64url, comparación en tiempo constante, borrado seguro, bytes aleatorios | RFC 4648 | sgcCrypto_Encoding, sgcCrypto_Random |
Explicado uno por uno
1. Hash y Autenticación de Mensajes: SHA-2, SHA-3, SHAKE, BLAKE2, SipHash, HMAC, AES-CMAC y Poly1305, los bloques de construcción con los que se elabora casi cualquier otro algoritmo de esta página.
2. Hash de Contraseñas y Derivación de Claves: PBKDF2, scrypt, Argon2id y HKDF. Almacenar una contraseña y derivar una clave a partir de un secreto ya existente son tareas distintas; esta página explica por qué y qué función encaja en cada una.
3. Cifrado Simétrico: AES en todos los modos que admite la biblioteca, el envoltorio de claves AES, ChaCha20/Salsa20 y sus construcciones AEAD con Poly1305, y por qué un modo autenticado debería ser la opción predeterminada.
4. Criptografía de Clave Pública: RSA, firmas Ed25519/Ed448, acuerdo de claves X25519/X448, ECIES, ECDSA/ECDH sobre las curvas NIST, secp256k1 y Brainpool, y firmas Schnorr BIP-340.
5. Criptografía Poscuántica: ML-KEM, ML-DSA y SLH-DSA, los tres esquemas estandarizados por el NIST en FIPS 203-205, y la construcción híbrida que conviene desplegar hoy.
6. Certificados y PKI: análisis y verificación de los certificados X.509 que recibe, y generación de sus propios certificados autofirmados y solicitudes PKCS#10, firmados con una clave RSA o EC.
7. Contraseñas de un Solo Uso: HOTP y TOTP, los códigos que genera una aplicación autenticadora, incluida la URI de aprovisionamiento.
8. Hash Difuso (TLSH): un hash sensible a la localidad para la detección de casi duplicados, a diferencia de cualquier otro hash de esta página no está pensado para la integridad ni la seguridad.
9. Cifrado de Archivos WinZip AE-2: el cifrado AES utilizado dentro de los archivos .zip, y qué protege y qué no.
10. Modo FIPS: una opción de compilación que deja en la biblioteca solo los algoritmos aprobados por FIPS, qué elimina y qué comprueba, y por qué no es una validación FIPS 140-3.
Demos
La carpeta Demos\18.Cryptography contiene siete aplicaciones ejecutables, una por cada área anterior (hash, cifrado simétrico, contraseñas, clave pública, poscuántica, certificados, y contraseñas de un solo uso con WinZip AE-2), cada una mostrando la API en uso y explicando el razonamiento detrás de las opciones recomendadas.