Clause
← Toda la documentación

El original en inglés ha cambiado desde que se hizo esta traducción, por lo que partes de ella pueden estar desactualizadas. Leer en inglés

Traducido del original en inglés · 1e3a39c8-dirty · 2026-10-26

public_key

La aplicación public_key de Clause se construye a partir de dos partes: los módulos ASN.1 que codifican y decodifican los tipos PKIX y PKCS, que clau genera desde las especificaciones de library/public_key/asn1/, y la cabecera library/public_key/include/public_key.hrl, y el módulo public_key, que tiene las exportaciones de OTP 29: su códec DER y PEM y las claves y firmas están implementados; la validación aún genera {not_implemented, Name, Arity} (inventario).

Especificaciones

library/public_key/asn1/ contiene los módulos que compila public_key de OTP, con los mismos nombres:

FuenteMódulos
RFC 5912 (PKIX, ASN.1 de 2009)AlgorithmInformation-2009, AttributeCertificateVersion1-2009, EnrollmentMessageSyntax-2009, PKCS-10, PKIX-CommonTypes-2009, PKIX-X400Address-2009, PKIX1-PSS-OAEP-Algorithms-2009, PKIX1Explicit-2009, PKIX1Implicit-2009, PKIXAlgs-2009, PKIXAttributeCertificate-2009, PKIXCRMF-2009
RFC 5911 (CMS y S/MIME)CryptographicMessageSyntax-2009, CryptographicMessageSyntaxAlgorithms-2009, CMSAesRsaesOaep-2009, SecureMimeMessageV3dot1-2009
RFC 5915, 5958, 8017, 8018, 8410, 9629, 9654, 9810, 9814, 9881, 9935ECPrivateKey, AsymmetricKeyPackageModuleV1, PKCS-1, PKCS5v2-0, Safecurves-pkix-18, KEMAlgorithmInformation-2023, OCSP-2024-08, PKIXCMP-2023, SLH-DSA-Module-2024, X509-ML-DSA-2025, X509-ML-KEM-2025
Escritos para ClauseOTP-PKIX y OTP-PKIX-Relaxed (las formas de OTPCertificate), DSS (DSAPrivateKey), PKCS-3 (DHParameter), RFC5639 (identificadores de curvas Brainpool), PKCS-FRAME.set.asn (AsymmetricKeyPackageModuleV1 con PKCS5v2-0)

Cada módulo RFC es el componente de código de su RFC con el aviso BSD del IETF Trust, y el texto del módulo sin cambios salvo donde difiere el módulo de OTP; esas modificaciones se enumeran al principio del archivo (PKCS-1, PKCS5v2-0, ECPrivateKey, PKIX1Explicit-2009, PKIXAlgs-2009, PKIXCMP-2023). Los módulos generan los mismos módulos y cabeceras Erlang que las especificaciones de OTP.

Módulos generados

La compilación ejecuta clau --generate-asn1 con las opciones de OTP (ber, der, noobj) sobre las especificaciones y escribe los módulos ('OTP-PKIX', 'PKIX1Explicit-2009', ...) en library-asn1/public_key/ del árbol de compilación, una segunda raíz de biblioteca después de library/ (biblioteca): un programa que menciona uno lo incorpora compilado a su lote como cualquier módulo de biblioteca. Como en OTP, los módulos que combina PKCS-FRAME (AsymmetricKeyPackageModuleV1, PKCS5v2-0) no son módulos independientes. Sus codificaciones, decodificaciones y records son los de asn1ct (ASN.1); no se generan las funciones de decodificación exclusiva de asn1config de OTP (decode_TBSCert_exclusive/1).

-include_lib("public_key/include/public_key.hrl") se resuelve a la cabecera de Clause, salvo que un proyecto nombre su propia aplicación public_key. Define los records y macros de la de OTP: la mayoría son los records y valores que generan las especificaciones; los demás son los records que construye el propio public_key ('Certificate' en su forma anterior a 2009, 'ECPoint', las claves ML-DSA, ML-KEM y SLH-DSA, #cert{}) y los identificadores de objeto que menciona. La prueba de referencia public_key_records comprueba los campos y valores predeterminados de cada record y el valor de cada macro frente a la cabecera de OTP; public_key_asn1 decodifica y codifica certificados, claves y parámetros mediante los módulos generados.

Funciones

public_key (con public_key.app y un asn1.app para la aplicación de la que depende) delega sus funciones de códec en clause_public_key_codec, que incluye public_key.hrl; los recorridos de records y las tablas de identificadores de objeto de pubkey_translation y pubkey_cert_records de OTP son funciones integradas del entorno de ejecución (clave pública).

La prueba de referencia public_key_codec compara todo esto con OTP, incluido el texto PEM de las entradas cifradas.

Claves y firmas

clause_public_key_keys convierte los records de claves en listas de claves de crypto como hace OTP y lo invoca:

ClaveAlgoritmo de crypto
#'RSAPrivateKey'{} (todos los componentes CRT, o solo [E, N, D]), {RSAKey, PssParams}; #'RSAPublicKey'{}rsa
#'DSAPrivateKey'{}; {Y, #'Dss-Parms'{}}dss
#'ECPrivateKey'{} con parámetros con nombre o explícitos; {#'ECPoint'{}, Params}ecdsa
Ed25519/Ed448 #'ECPrivateKey'{}, {ed_pri, Curve, Pub, Priv}; {#'ECPoint'{}, {namedCurve, Oid}}, {ed_pub, Curve, Key}eddsa
#'ML-DSAPrivateKey'{} (semilla o, en su defecto, clave expandida), #'SLH-DSAPrivateKey'{}; sus claves públicasel conjunto de parámetros
Un map con sign_fun o encrypt_funse llama a la fun

Se conservan las peculiaridades de OTP: una clave ML-DSA creada por generate_key/1 tiene una semilla vacía, con la que crypto se niega a firmar; una clave privada DSA no puede verificar; las curvas explícitas de cuerpo primo fallan al decodificar su primo. La prueba de referencia public_key_keys compara con OTP las firmas deterministas (RSA PKCS #1, EdDSA, certificados), el cifrado, el acuerdo de claves, los tipos, los hashes y la selección de grupos.