Skip to content

Support matrix

What the library implements, which option turns a feature on and what is out of scope. Known limitations explains the consequences of the gaps and Tested implementations names the peers each feature was tested with.

Standards

Standard Coverage
RFC 9810 (obsoletes RFC 4210 and RFC 9480) CMP version 2 and version 3 messages, MAC and signature protection, transactions, polling, certificate confirmation, proof of possession by decryption
RFC 9483 Lightweight CMP Profile: enrollment, central key generation, revocation, support messages, delayed delivery and requests a registration authority forwards in nested messages
RFC 4211 CRMF certificate requests, controls and proof of possession
RFC 9811 (obsoletes RFC 6712) HTTP transfer: POST with application/pkixcmp
RFC 9481 CMP algorithms. PBMAC1 (RFC 8018) is the default MAC
RFC 5652, RFC 4211 CMS EnvelopedData and CMP version 2 EncryptedValue for encrypted certificates. EnvelopedData and SignedData for centrally generated keys
RFC 5958 OneAsymmetricKey and AsymmetricKeyPackage for centrally generated keys
RFC 9629, RFC 9936 KEMRecipientInfo for ML-KEM recipients
RFC 9935 ML-KEM public keys in certificates
RFC 9909 SLH-DSA keys and pure signatures for the twelve FIPS 205 parameter sets, through circl
draft-ietf-lamps-pq-composite-sigs-19 Composite ML-DSA keys and signatures, through go-composite-mldsa

Messages

Message Client Server
ir / ip SendIR, SendIRWithIndirectPOP, SendIRWithCentralKeyGeneration Always
cr / cp SendCR, SendCRWithIndirectPOP, SendCRWithCentralKeyGeneration Always
kur / kup SendKUR, SendKURWithIndirectPOP, SendKURWithCentralKeyGeneration Always
p10cr / cp SendP10CR Always
rr / rp SendRR, SendRRBySerial A CA that implements Revoker
certConf / pkiConf Sent and checked automatically, unless the CA grants the implicit confirmation WithImplicitConfirm asks for Always. WithImplicitConfirm skips it
pollReq / pollRep Sent automatically, or later by ResumeEnrollment A CA that implements PendingChecker
genm / genp GetCACertificates, GetRootCAUpdate, GetCertReqTemplate, GetCRLUpdate, GetCurrentCRL, SendGenM The matching provider interfaces
popdecc / popdecr Answered automatically with ChallengeResponse WithChallengeResponsePOP
nested WithRegistrationAuthority, one message per nested message WithRAAuthorizer, one message per nested message
error Parsed and verified Sent for every refusal

Message protection

Mechanism Algorithms
MAC PBMAC1 (default) and PasswordBasedMac with HMAC-SHA1 to HMAC-SHA512. Iteration counts from 100 to 1000000 are accepted by default
Signature RSA PKCS #1 v1.5 and ECDSA with SHA-256, SHA-384 or SHA-512, Ed25519, ML-DSA-44, ML-DSA-65, ML-DSA-87, SLH-DSA and composite ML-DSA
SHA-1 signatures RSA and ECDSA with SHA-1, off by default. WithSHA1Signatures in the client or server package accepts them

Proof of possession

Method Server
Signature (POPOSigningKey) Always
PKCS #10 self-signature in a p10cr Always
Signature protection made with the requested key, no popo WithSignatureProtectionPOP
Encrypted certificate (encrCert) WithEncryptedCertificatePOP
Challenge-response (challengeResp) WithChallengeResponsePOP
raVerified Refused with notAuthorized
None, the server generates the key pair WithCentralKeyGeneration

The client sends a signature proof for every key that can sign and either decryption method through the *WithIndirectPOP methods.

Keys

Use Accepted
Certificates that sign RSA, ECDSA on P-256, P-384 and P-521, Ed25519, ML-DSA-44, ML-DSA-65, ML-DSA-87, the twelve SLH-DSA parameter sets and composite ML-DSA
Proof by decryption ML-KEM-768 and ML-KEM-1024, RSA and elliptic curve keys on P-256, P-384 and P-521
EncryptedValue for CMP version 2 RSA only
Receiving a centrally generated key MAC credentials, RSA protection keys and ECDSA protection keys on P-256, P-384 and P-521

Server interfaces

Interface Required Purpose
CA Yes or a custom Handler Issues certificates
SecretLookup For MAC-protected requests Finds the shared secret
CertificateLookup For signature-protected requests Finds the sender's certificate
CertificateConfirmer No Learns whether the client accepted the certificate
PendingChecker For delayed requests Decides a waiting request when the client polls
WaitingExpirer No Learns that a client stopped polling
Revoker For revocation Revokes a certificate
RevocationAuthorizer For revocation by a signer other than the certificate holder Approves the request
CACertificatesProvider, RootCAUpdateProvider, CertReqTemplateProvider, CRLProvider For support messages Answer each general message
RAAuthorizer For nested messages Approves the registration authority
KeyGenerator For central key generation Generates the key pair

Not supported

Capability Status
Key recovery, cross-certification and announcements Not implemented
A centrally generated private key in EncryptedValue Refused by the client and never sent by the server
Several requests in one nested message (RFC 9483 section 5.2.2.2) Refused with badRequest and never sent by the client
ML-KEM-512 Refused, the Go standard library does not implement it
Older Dilithium encodings Not supported
HashSLH-DSA, the pre-hash variant of SLH-DSA Refused
SHAKE256 as the hashAlg of a certificate confirmation Refused. An explicit hashAlg may be SHA-256, SHA-384 or SHA-512
X25519 keys for proof by decryption Refused with badAlg
RSA PKCS #1 v1.5 key transport in EnvelopedData Refused
Protocol versions other than 2 and 3, such as pvno 0 or 1 Refused with unsupportedVersion