| Firma / verificación Ed25519 | sgcEd25519_Sign / sgcEd25519_Verify, sgcEd25519_PublicKey | RFC 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 X25519 | sgcX25519, sgcX25519_PublicKey, sgcX25519_SharedSecret | Diffie-Hellman RFC 7748 sobre Curve25519. |
| Firma / verificación Ed448 | sgcEd448_GenerateKeyPair, sgcEd448_Sign, sgcEd448_Verify | RFC 8032, la curva EdDSA de 448 bits (Goldilocks). |
| Intercambio de claves X448 | sgcX448, sgcX448_PublicKey, sgcX448_SharedSecret | Diffie-Hellman RFC 7748 sobre Curve448. |
| secp256k1 | sgcECDSA_SignHash / VerifyHash con eccSecp256k1 | La curva de Bitcoin/Ethereum, SEC 2, en sgcCrypto_ECCurves. |
| Brainpool P256r1 / P384r1 / P512r1 | mismas funciones con eccBrainpoolP256r1 / P384r1 / P512r1 | RFC 5639, habitual en perfiles eIDAS de la UE y gubernamentales. |
| NIST P-256 / P-384 / P-521 | mismas funciones con eccP256 / eccP384 / eccP521 | TsgcECCurve 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 determinista | integrado en sgcECDSA_SignHash | RFC 6979: el nonce se deriva de la clave privada y el mensaje, sin modo de fallo del RNG. |
| Multiplicación escalar en tiempo constante | dentro de sgcECDSA_SignHash, sgcECDH_SharedSecret y la generación de claves EC | Todas 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_SharedSecret | Secreto compartido sobre las mismas cuatro curvas. |
| Compresión de puntos | sgcEC_Compress / sgcEC_Decompress | Almacena o transmite la forma comprimida más corta de la clave pública. |
| EC como JWS (ES256/384/512) | sgcECDSA_SignJWS / sgcECDSA_VerifyJWS | La 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érico | sgcECDH | Secreto compartido a partir de una clave privada en bruto y el punto público del interlocutor. |
| Verificación ECDSA en bruto / DER | sgcECDSA_VerifyRaw / sgcECDSA_VerifyDER | Verifica contra una tupla en bruto (Qx, Qy, r, s) o una firma codificada en DER. |
| Firma DER ECDSA y conversión | sgcECDSA_SignDER / sgcECDSA_VerifyDER, sgcECDSA_RawToDER / sgcECDSA_DERToRaw | X.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_Verify | Solo 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_SignPKCS1 | Desde una clave privada PEM, resumen SHA-1/256/384/512. |
| Operaciones con la clave privada RSA | sgcRSA_SignPKCS1 y las demás llamadas de firma y descifrado de sgcCrypto_RSA_Keys | Cada 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/exponente | RFC 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 RSA | sgcRSA_GenerateKey | Cualquier longitud en bits solicitada, comprobación de primalidad Miller-Rabin. |
| Cifrado RSA-OAEP | sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_Decrypt | Relleno de cifrado asimétrico óptimo RFC 8017. |
| RSA-OAEP con un hash MGF1 independiente | las sobrecargas de cinco parámetros de sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_Decrypt | Fija 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.5 | sgcRSA_PKCS1_Encrypt / sgcRSA_PKCS1_Decrypt | RFC 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#1 | sgcRSA_PSS_Sign / Verify, sgcRSA_PKCS1_Sign / Verify | Firma directamente desde un TsgcRSAPrivateKey generado. |
| Exportación de claves RSA | sgcRSA_ExportPrivateKeyPEM, sgcRSA_ExportPublicKeyPEM, llamadas DER equivalentes | Codificaciones PKCS#1 y SubjectPublicKeyInfo. |
| Exportación de claves PKCS#8 y SEC 1 | sgcRSA_ExportPrivateKeyPKCS8DER / PKCS8PEM, sgcEC_ExportPrivateKeyPKCS8DER / PKCS8PEM, sgcEC_ExportPrivateKeySEC1DER / SEC1PEM, sgcEC_ExportSubjectPublicKeyInfo, sgcEC_ExportPublicKeyPEM | El 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 EC | sgcRSA_ImportPrivateKeyDER / PEM, sgcRSA_ImportPublicKeyDER / PEM, sgcEC_ImportPrivateKeyDER / PEM, sgcEC_ImportPublicKeyDER / PEM | Esto 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 / open | sgcECIES_GenerateKeyPair, sgcECIES_Seal, sgcECIES_Open | Cifrado híbrido hacia una clave pública X25519: ECDH efímero más un AEAD, una llamada en cada sentido. |