Interface PkixProvider
- All Known Implementing Classes:
BcPkixProvider
A provider supplies the concrete builders, parsers, and signing operators. The
default provider is implemented with BouncyCastle and is confined to the
lib module; a JDK-only or in-house provider can replace it in future
without any change to the public zeroecho.pkix API. Providers are
resolved by Pkix.
-
Method Summary
Modifier and TypeMethodDescriptionbyte[]assembleCertificateOrCrl(byte[] tbs, byte[] signature, boolean crl) Reassembles a signed certificate or CRL from itstbsbytes and a raw signature, repeating the algorithm identifier embedded in thetbsas the outersignatureAlgorithm, and validates that the result parses.byte[]assembleOcspResponse(byte[] tbsResponseData, byte[] signatureAlgorithmDer, byte[] signature) Reassembles a successfulOCSPResponsewrapping aBasicOCSPResponsefrom itstbsResponseData, a DER-encoded signature algorithm identifier, and a raw signature, and validates that the result parses as successful.byte[]assembleOcspResponse(byte[] tbsResponseData, byte[] signatureAlgorithmDer, byte[] signature, List<X509Certificate> chain) Reassembles a successful OCSP response from unsignedResponseData, an encoded signature algorithm, a raw signature and an ordered certificate chain.buildPreCertificate(byte[] tbsCertificateDer, List<byte[]> issuerChainDer, ContentSigner signer) Builds a CT pre-certificate from an existingTBSCertificateby adding the CT poison extension (OID1.3.6.1.4.1.11129.2.4.3) and signing with the supplied signer.byte[]buildServerKeygenCsr(byte[] originalCsrDer, PublicKey generatedPublicKey, PrivateKey generatedPrivateKey) Builds a new DER-encoded PKCS#10 CSR using the supplied generated key pair, copying the subject DN and all attributes from the original CSR.byte[]buildSubjectPublicKeyInfo(AlgorithmIdentifier algorithm, byte[] publicKeyBits) Builds the DER of aSubjectPublicKeyInfofrom an algorithm identifier and the raw public-keyBIT STRINGcontents.Creates a new certificate builder.Creates a new certification-request builder.computeCertId(X509Certificate issuer, BigInteger serialNumber, String digestAlgorithmOid) Computes an OCSPCertIdfor a certificate under a given issuer.Creates a new CRL builder.distinguishedName(List<RelativeDistinguishedName> relativeNames) Builds a byte-exact distinguished name from typed relative distinguished names.distinguishedNameString(List<RelativeDistinguishedName> relativeNames) Renders a distinguished name, built from typed relative distinguished names, as its canonical string form (attribute short names, most-significant first).byte[]embedScts(byte[] tbsCertificateDer, List<SignedCertificateTimestamp> scts) Embeds a list of SCTs into aTBSCertificateas the SCT list extension (OID1.3.6.1.4.1.11129.2.4.2), producing a modifiedTBSCertificateDER ready for final signing.byte[]encodeAlgorithmIdentifier(AlgorithmIdentifier algorithm) Returns the DER encoding of an X.509AlgorithmIdentifier.byte[]encodeCertsOnly(List<X509Certificate> chain) Encodes a list of X.509 certificates as a CMS certs-only message (SignedDatawith no signers, only the certificate bag).byte[]encodeCsrAttrs(List<CsrAttribute> attributes) Encodes a list of CSR attributes as an RFC 7030CsrAttrsstructure (DER-encoded ASN.1 sequence of OIDs and optional attribute values).byte[]encryptPrivateKeyForRecipient(byte[] pkcs8PrivateKeyDer, X509Certificate recipientCertificate) Encrypts a PKCS#8 private key for a single recipient using CMSEnvelopedDatawith AES-256-GCM content encryption.id()Returns the stable provider identifier (for diagnostics and selection).Creates a new OCSP response builder.parseAlgorithmIdentifier(byte[] der) Parses a DER-encoded X.509AlgorithmIdentifier.parseCertificate(byte[] der) Parses a DER-encoded X.509 certificate.parseCertificationRequest(byte[] der) Parses a DER-encoded PKCS#10 certification request.parseCrl(byte[] der) Parses a DER-encoded X.509 CRL.parseDistinguishedName(byte[] nameDer) Parses a DER-encoded X.500Nameinto its ordered, single-valued relative distinguished names, preserving the ASN.1 string type of each value.Parses a distinguished-name string (as produced bydistinguishedNameString(java.util.List)) into its ordered, single-valued relative distinguished names, preserving the written order.parseExtensions(byte[] der) Parses a DER-encoded X.509Extensionssequence into typed extensions.parseGeneralNames(byte[] der) Parses a DER-encodedGeneralNamessequence into typed general names.parseOcspRequest(byte[] der) Parses a DER-encoded OCSP request.parseOcspResponse(byte[] der) Parses a DER-encoded OCSP response.parseSct(byte[] jsonResponseBody) Parses a Signed Certificate Timestamp from the JSON response body returned by a CT log'sadd-pre-chainoradd-chainendpoint.publicKeyFromSubjectPublicKeyInfo(byte[] subjectPublicKeyInfoDer) Recovers a public key from a DER-encodedSubjectPublicKeyInfo.signer(PrivateKey privateKey, AlgorithmIdentifier algorithm) Creates a content signer over a local private key.byte[]subjectKeyIdentifier(PublicKey publicKey) Computes the standard subject key identifier (SHA-1 of the SPKI) for a key.subjectPublicKeyAlgorithm(byte[] subjectPublicKeyInfoDer) Extracts the algorithm identifier from a DER-encodedSubjectPublicKeyInfo.byte[]subjectPublicKeyBytes(byte[] subjectPublicKeyInfoDer) Returns the raw contents of the public-keyBIT STRINGof a DER-encodedSubjectPublicKeyInfo(the bytes after the unused-bits octet).byte[]subjectPublicKeyInfo(X509Certificate certificate) Returns the exact DER of theSubjectPublicKeyInfoembedded in a certificate, byte-for-byte as encoded in the certificate.verifier(byte[] subjectPublicKeyInfoDer, AlgorithmIdentifier algorithm) Creates a content verifier over a DER-encodedSubjectPublicKeyInfoand a signature algorithm identifier, honouring any algorithm parameters (such as RSASSA-PSS parameters) carried by the identifier.verifier(PublicKey publicKey, AlgorithmIdentifier algorithm) Creates a content verifier over a public key.default booleanverifyAlternativeSignature(X509Certificate certificate, PublicKey issuerAlternativeKey) Verifies only the standardized alternative signature using an explicit issuer alternative key.booleanverifySct(SignedCertificateTimestamp sct, PublicKey ctLogPublicKey, byte[] preCertDer) Verifies an SCT's digital signature against a known CT log public key.
-
Method Details
-
verifyAlternativeSignature
default boolean verifyAlternativeSignature(X509Certificate certificate, PublicKey issuerAlternativeKey) Verifies only the standardized alternative signature using an explicit issuer alternative key. Missing or malformed alternative extensions fail closed. This operation performs no path, time or primary-signature checks.- Parameters:
certificate- nonnull certificate with all three alternative extensionsissuerAlternativeKey- nonnull trusted issuer alternative public key- Returns:
- whether the alternative signature is valid
- Throws:
UnsupportedOperationException- if unsupported by this provider
-
id
String id()Returns the stable provider identifier (for diagnostics and selection).- Returns:
- the provider id
-
certificateBuilder
CertificateBuilder certificateBuilder()Creates a new certificate builder.- Returns:
- a fresh certificate builder
-
parseCertificate
Parses a DER-encoded X.509 certificate.- Parameters:
der- the certificate DER- Returns:
- the parsed certificate
-
certificationRequestBuilder
CertificationRequestBuilder certificationRequestBuilder()Creates a new certification-request builder.- Returns:
- a fresh CSR builder
-
parseCertificationRequest
Parses a DER-encoded PKCS#10 certification request.- Parameters:
der- the request DER- Returns:
- the parsed request
-
crlBuilder
-
parseCrl
Parses a DER-encoded X.509 CRL.- Parameters:
der- the CRL DER- Returns:
- the parsed CRL
-
ocspResponseBuilder
OcspResponseBuilder ocspResponseBuilder()Creates a new OCSP response builder.- Returns:
- a fresh OCSP response builder
-
parseOcspRequest
Parses a DER-encoded OCSP request.- Parameters:
der- the request DER- Returns:
- the parsed request
-
signer
Creates a content signer over a local private key.- Parameters:
privateKey- the signing private keyalgorithm- the signature algorithm identifier- Returns:
- a content signer
- Throws:
UnsupportedRoleException- if LMS/XMSS signing is requested; implementations must reject before key use
-
verifier
Creates a content verifier over a public key.- Parameters:
publicKey- the verifying public keyalgorithm- the signature algorithm identifier- Returns:
- a content verifier
-
verifier
Creates a content verifier over a DER-encodedSubjectPublicKeyInfoand a signature algorithm identifier, honouring any algorithm parameters (such as RSASSA-PSS parameters) carried by the identifier.- Parameters:
subjectPublicKeyInfoDer- the SPKI DER of the verifying keyalgorithm- the signature algorithm identifier- Returns:
- a content verifier
-
subjectKeyIdentifier
Computes the standard subject key identifier (SHA-1 of the SPKI) for a key.- Parameters:
publicKey- the public key- Returns:
- the subject key identifier bytes
-
computeCertId
Computes an OCSPCertIdfor a certificate under a given issuer.- Parameters:
issuer- the issuer certificateserialNumber- the subject certificate serial numberdigestAlgorithmOid- the digest algorithm OID for the hashes- Returns:
- the computed cert id
-
distinguishedName
Builds a byte-exact distinguished name from typed relative distinguished names.- Parameters:
relativeNames- the ordered relative distinguished names- Returns:
- the distinguished name
-
parseAlgorithmIdentifier
Parses a DER-encoded X.509AlgorithmIdentifier.- Parameters:
der- the algorithm-identifier DER- Returns:
- the parsed algorithm identifier
-
subjectPublicKeyAlgorithm
Extracts the algorithm identifier from a DER-encodedSubjectPublicKeyInfo.- Parameters:
subjectPublicKeyInfoDer- the SPKI DER- Returns:
- the subject public key algorithm identifier
-
publicKeyFromSubjectPublicKeyInfo
Recovers a public key from a DER-encodedSubjectPublicKeyInfo.- Parameters:
subjectPublicKeyInfoDer- the SPKI DER- Returns:
- the public key
-
parseOcspResponse
Parses a DER-encoded OCSP response.- Parameters:
der- the response DER- Returns:
- the parsed response
-
parseDistinguishedName
Parses a DER-encoded X.500Nameinto its ordered, single-valued relative distinguished names, preserving the ASN.1 string type of each value.- Parameters:
nameDer- the DER encoding of an X.500Name- Returns:
- the ordered relative distinguished names
-
parseDistinguishedNameString
Parses a distinguished-name string (as produced bydistinguishedNameString(java.util.List)) into its ordered, single-valued relative distinguished names, preserving the written order.- Parameters:
name- the distinguished-name string- Returns:
- the ordered relative distinguished names
-
subjectPublicKeyBytes
byte[] subjectPublicKeyBytes(byte[] subjectPublicKeyInfoDer) Returns the raw contents of the public-keyBIT STRINGof a DER-encodedSubjectPublicKeyInfo(the bytes after the unused-bits octet).- Parameters:
subjectPublicKeyInfoDer- the SPKI DER- Returns:
- the public-key bit-string content bytes
-
subjectPublicKeyInfo
Returns the exact DER of theSubjectPublicKeyInfoembedded in a certificate, byte-for-byte as encoded in the certificate.- Parameters:
certificate- the certificate- Returns:
- the exact SPKI DER
-
buildSubjectPublicKeyInfo
Builds the DER of aSubjectPublicKeyInfofrom an algorithm identifier and the raw public-keyBIT STRINGcontents.- Parameters:
algorithm- the subject public-key algorithm identifierpublicKeyBits- the raw public-key bit-string content bytes- Returns:
- the SPKI DER
-
parseExtensions
Parses a DER-encoded X.509Extensionssequence into typed extensions.- Parameters:
der- the DER of anExtensionssequence- Returns:
- the parsed extensions in order
-
parseGeneralNames
Parses a DER-encodedGeneralNamessequence into typed general names.- Parameters:
der- the DER of aGeneralNamessequence- Returns:
- the parsed general names in order
-
assembleCertificateOrCrl
byte[] assembleCertificateOrCrl(byte[] tbs, byte[] signature, boolean crl) Reassembles a signed certificate or CRL from itstbsbytes and a raw signature, repeating the algorithm identifier embedded in thetbsas the outersignatureAlgorithm, and validates that the result parses.- Parameters:
tbs- thetbsCertificateortbsCertListDERsignature- the raw signature bytescrl-truefor a CRL,falsefor a certificate- Returns:
- the DER of the assembled signed object
-
assembleOcspResponse
byte[] assembleOcspResponse(byte[] tbsResponseData, byte[] signatureAlgorithmDer, byte[] signature) Reassembles a successfulOCSPResponsewrapping aBasicOCSPResponsefrom itstbsResponseData, a DER-encoded signature algorithm identifier, and a raw signature, and validates that the result parses as successful.- Parameters:
tbsResponseData- thetbsResponseDataDERsignatureAlgorithmDer- the DER of the signatureAlgorithmIdentifiersignature- the raw signature bytes- Returns:
- the DER of the assembled OCSP response
-
assembleOcspResponse
byte[] assembleOcspResponse(byte[] tbsResponseData, byte[] signatureAlgorithmDer, byte[] signature, List<X509Certificate> chain) Reassembles a successful OCSP response from unsignedResponseData, an encoded signature algorithm, a raw signature and an ordered certificate chain. Certificates are embedded in the supplied order without sorting or trust validation. An empty chain omits the optionalcertsfield, matching the three-argument overload. No signer is invoked and the raw signature is not cryptographically verified by assembly.Inputs remain caller-owned and are not retained. The returned DER array is independent. Time and auxiliary memory are linear in response-data, algorithm, signature and total embedded-certificate bytes. No aggregate live-response size limit is introduced.
- Parameters:
tbsResponseData- nonnull DER-encoded unsignedResponseDatasignatureAlgorithmDer- nonnull DER-encoded signatureAlgorithmIdentifiersignature- nonnull raw signature byteschain- nonnull certificate list in exact embedding order, with no null elements- Returns:
- freshly encoded successful OCSP response DER
- Throws:
NullPointerException- if an argument or a chain element is nullIllegalArgumentException- if DER parsing or certificate encoding fails
-
encodeAlgorithmIdentifier
Returns the DER encoding of an X.509AlgorithmIdentifier.- Parameters:
algorithm- the algorithm identifier- Returns:
- the DER encoding
-
distinguishedNameString
Renders a distinguished name, built from typed relative distinguished names, as its canonical string form (attribute short names, most-significant first).- Parameters:
relativeNames- the ordered relative distinguished names- Returns:
- the string form of the distinguished name
-
encodeCertsOnly
Encodes a list of X.509 certificates as a CMS certs-only message (SignedDatawith no signers, only the certificate bag).The returned bytes are the DER-encoded
ContentInfowrapping theSignedData. The encoding is suitable for use as the body of an EST/cacertsor/simpleenrollresponse.- Parameters:
chain- ordered certificate list; must not be null or empty- Returns:
- DER-encoded CMS certs-only
ContentInfo - Throws:
IllegalArgumentException- if encoding fails
-
encodeCsrAttrs
Encodes a list of CSR attributes as an RFC 7030CsrAttrsstructure (DER-encoded ASN.1 sequence of OIDs and optional attribute values).- Parameters:
attributes- the CSR attributes to encode; must not be null- Returns:
- DER-encoded
CsrAttrssequence - Throws:
IllegalArgumentException- if encoding fails
-
buildServerKeygenCsr
byte[] buildServerKeygenCsr(byte[] originalCsrDer, PublicKey generatedPublicKey, PrivateKey generatedPrivateKey) Builds a new DER-encoded PKCS#10 CSR using the supplied generated key pair, copying the subject DN and all attributes from the original CSR.The self-signature over the rebuilt CSR uses SHA-256withECDSA for EC keys and SHA-256withRSA for RSA keys, determined from the generated private key type.
- Parameters:
originalCsrDer- DER-encoded original PKCS#10 CSR (source of subject and attributes)generatedPublicKey- server-generated public key to embedgeneratedPrivateKey- server-generated private key used to self-sign- Returns:
- DER-encoded PKCS#10 CSR signed with the generated key
- Throws:
IllegalArgumentException- if CSR construction or signing failsUnsupportedRoleException- if the private key uses LMS/XMSS; implementations must reject before parsing the CSR or using the key
-
encryptPrivateKeyForRecipient
byte[] encryptPrivateKeyForRecipient(byte[] pkcs8PrivateKeyDer, X509Certificate recipientCertificate) Encrypts a PKCS#8 private key for a single recipient using CMSEnvelopedDatawith AES-256-GCM content encryption.The recipient is identified by the public key in the supplied certificate. The key is wrapped using RSA-OAEP (for RSA keys) or ECDH-KDF (for EC keys) depending on the recipient certificate's public key algorithm.
- Parameters:
pkcs8PrivateKeyDer- DER-encoded PKCS#8 private key to encryptrecipientCertificate- the recipient's certificate (public key used for wrap)- Returns:
- DER-encoded CMS
ContentInfowrapping theEnvelopedData - Throws:
IllegalArgumentException- if encryption fails
-
buildPreCertificate
PreCertificateResult buildPreCertificate(byte[] tbsCertificateDer, List<byte[]> issuerChainDer, ContentSigner signer) Builds a CT pre-certificate from an existingTBSCertificateby adding the CT poison extension (OID1.3.6.1.4.1.11129.2.4.3) and signing with the supplied signer.The pre-certificate is submitted to CT logs; logs return SCTs that are later embedded in the final certificate via
embedScts(byte[], List).- Parameters:
tbsCertificateDer- DER-encodedTBSCertificatewithout the poison extensionissuerChainDer- DER-encoded issuer chain (issuer first, root last)signer- configured signer for the issuing CA key- Returns:
- pre-certificate DER and its chain, ready for CT log submission
- Throws:
IllegalArgumentException- if pre-certificate construction or signing fails
-
embedScts
Embeds a list of SCTs into aTBSCertificateas the SCT list extension (OID1.3.6.1.4.1.11129.2.4.2), producing a modifiedTBSCertificateDER ready for final signing.If the
TBSCertificatealready carries a poison extension (OID1.3.6.1.4.1.11129.2.4.3), it is replaced by the SCT list extension. Any pre-existing SCT list extension is also replaced.- Parameters:
tbsCertificateDer- DER-encodedTBSCertificatescts- verified SCTs to embed; must contain at least one entry- Returns:
- modified DER-encoded
TBSCertificatewith the SCT list extension - Throws:
IllegalArgumentException- if embedding fails
-
parseSct
Parses a Signed Certificate Timestamp from the JSON response body returned by a CT log'sadd-pre-chainoradd-chainendpoint.Expected JSON fields:
sct_version,id(base64 log ID),timestamp(epoch milliseconds),extensions(base64, may be empty),signature(base64-encoded TLSDigitallySignedstructure).- Parameters:
jsonResponseBody- raw response body bytes; must not benull- Returns:
- the parsed SCT
- Throws:
IllegalArgumentException- if the JSON is malformed or the SCT structure is invalid
-
verifySct
Verifies an SCT's digital signature against a known CT log public key.The signed data covers the SCT fields (version, log ID, timestamp, extensions) concatenated with a SHA-256 hash of the pre-certificate DER, as a simplified verification approach. Returns
falseif the signature is invalid; throws only on algorithmic or key errors.- Parameters:
sct- the SCT to verify; must not benullctLogPublicKey- EC or RSA public key of the CT log; must not benullpreCertDer- DER-encoded pre-certificate that was submitted; must not benull- Returns:
trueif the signature is valid- Throws:
IllegalArgumentException- if the algorithm is unsupported or the key is invalid
-