Clause
← All dokumentation

Det engelska originalet har ändrats sedan översättningen gjordes, så delar av den kan vara inaktuella. Läs på engelska

Översatt från det engelska originalet · 1e3a39c8-dirty · 2026-10-26

public_key

Clauses applikation public_key består av två delar: ASN.1-modulerna som kodar och avkodar PKIX- och PKCS-typerna, som clau genererar från specifikationerna i library/public_key/asn1/, samt headerfilen library/public_key/include/public_key.hrl, och modulen public_key, som har OTP 29:s exporterade funktioner: dess DER- och PEM-kodare och -avkodare samt nycklar och signaturer är implementerade; validering ger fortfarande {not_implemented, Name, Arity} (förteckning).

Specifikationer

library/public_key/asn1/ innehåller modulerna som OTP:s public_key kompilerar, under samma namn:

KällaModuler
RFC 5912 (PKIX, 2009 ASN.1)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 och 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
Skrivna för ClauseOTP-PKIX och OTP-PKIX-Relaxed (OTPCertificate-formerna), DSS (DSAPrivateKey), PKCS-3 (DHParameter), RFC5639 (identifierare för Brainpool-kurvor), PKCS-FRAME.set.asn (AsymmetricKeyPackageModuleV1 med PKCS5v2-0)

Varje RFC-modul är kodkomponenten i sin RFC med IETF Trusts BSD-licenstext, med oförändrad modultext utom där OTP:s modul skiljer sig; dessa ändringar listas överst i filen (PKCS-1, PKCS5v2-0, ECPrivateKey, PKIX1Explicit-2009, PKIXAlgs-2009, PKIXCMP-2023). Modulerna genererar samma Erlang-moduler och headerfiler som OTP:s specifikationer gör.

Genererade moduler

Bygget kör clau --generate-asn1 med OTP:s alternativ (ber, der, noobj) på specifikationerna och skriver modulerna ('OTP-PKIX', 'PKIX1Explicit-2009', ...) till library-asn1/public_key/ i byggträdet, en andra biblioteksrot efter library/ (bibliotek): ett program som anger en av dem får den kompilerad i sin kompileringsomgång som vilken biblioteksmodul som helst. Som i OTP är modulerna som PKCS-FRAME slår samman (AsymmetricKeyPackageModuleV1, PKCS5v2-0) inte egna moduler. Deras kodningar, avkodningar och records är som i asn1ct (ASN.1); OTP:s exklusiva avkodningsfunktioner för asn1config (decode_TBSCert_exclusive/1) genereras inte.

-include_lib("public_key/include/public_key.hrl") hittar Clauses headerfil om inte ett projekt anger en egen public_key-applikation. Den definierar samma records och makron som OTP:s: de flesta är de records och värden som specifikationerna genererar, de övriga är de records som public_key bygger själv ('Certificate' i sin form från före 2009, 'ECPoint', nycklarna för ML-DSA, ML-KEM och SLH-DSA, #cert{}) och de objektidentifierare den anger. Referenstestet public_key_records kontrollerar varje records fält och standardvärden samt varje makros värde mot OTP:s headerfil; public_key_asn1 avkodar och kodar certifikat, nycklar och parametrar genom de genererade modulerna.

Funktioner

public_key (med public_key.app och en asn1.app för applikationen den beror på) vidarebefordrar sina kodnings- och avkodningsfunktioner till clause_public_key_codec, som inkluderar public_key.hrl; record-genomgångarna och tabellerna för objektidentifierare i OTP:s pubkey_translation och pubkey_cert_records är inbyggda funktioner i runtime (publika nycklar).

Referenstestet public_key_codec jämför allt detta med OTP, även PEM-texten för krypterade poster.

Nycklar och signaturer

clause_public_key_keys omvandlar nyckel-records till crypto:s nyckellistor som OTP gör och anropar den:

Nyckelcrypto-algoritm
#'RSAPrivateKey'{} (alla CRT-komponenter eller bara [E, N, D]), {RSAKey, PssParams}; #'RSAPublicKey'{}rsa
#'DSAPrivateKey'{}; {Y, #'Dss-Parms'{}}dss
#'ECPrivateKey'{} med namngivna eller explicita parametrar; {#'ECPoint'{}, Params}ecdsa
Ed25519/Ed448 #'ECPrivateKey'{}, {ed_pri, Curve, Pub, Priv}; {#'ECPoint'{}, {namedCurve, Oid}}, {ed_pub, Curve, Key}eddsa
#'ML-DSAPrivateKey'{} (frö, annars expanderad nyckel), #'SLH-DSAPrivateKey'{}; deras publika nycklarparameteruppsättningen
En map med sign_fun eller encrypt_funfun anropas

OTP:s egenheter behålls: en ML-DSA-nyckel som generate_key/1 skapar har ett tomt frö, som crypto vägrar signera med; en privat DSA-nyckel kan inte verifiera; explicita primtalsfältskurvor misslyckas när deras primtal avkodas. Referenstestet public_key_keys jämför deterministiska signaturer (RSA PKCS #1, EdDSA, certifikat), kryptering, nyckelöverenskommelse, typer, hashvärden och gruppurval med OTP.