Package com.itextpdf.signatures
Class PdfPKCS7
java.lang.Object
com.itextpdf.signatures.PdfPKCS7
This class does all the processing related to signing and verifying a PKCS#7 / CMS signature.
-
Constructor Summary
ConstructorDescriptionUse this constructor if you want to verify a signature using the sub-filter adbe.x509.rsa_sha1.Use this constructor if you want to verify a signature.PdfPKCS7
(PrivateKey privKey, Certificate[] certChain, String hashAlgorithm, String provider, boolean hasEncapContent) Assembles all the elements needed to create a signature, except for the data.PdfPKCS7
(PrivateKey privKey, Certificate[] certChain, String hashAlgorithm, String provider, IExternalDigest interfaceDigest, boolean hasEncapContent) Assembles all the elements needed to create a signature, except for the data. -
Method Summary
Modifier and TypeMethodDescriptionbyte[]
getAuthenticatedAttributeBytes
(byte[] secondDigest, PdfSigner.CryptoStandard sigtype, Collection ocsp, Collection crlBytes) When using authenticatedAttributes the authentication process is different.Get all the X.509 certificates associated with this PKCS#7 object in no particular order.getCRLs()
Get the X.509 certificate revocation lists associated with this PKCS#7 object (stored in Signer Info).Returns the name of the digest algorithm, e.g.Getter for the ID of the digest algorithm, e.g.byte[]
Gets the bytes for the PKCS#1 object.byte[]
Gets the bytes for the PKCS7SignedData object.byte[]
getEncodedPKCS7
(byte[] secondDigest) Gets the bytes for the PKCS7SignedData object.byte[]
getEncodedPKCS7
(byte[] secondDigest, PdfSigner.CryptoStandard sigtype, ITSAClient tsaClient, Collection ocsp, Collection crlBytes) Gets the bytes for the PKCS7SignedData object.Getter for the filter subtype.Getter for property location.getOcsp()
Gets the OCSP basic response from the SignerInfo if there is one.Getter for property reason.Returns the name of the signature algorithm only (disregarding the digest function, if any).Get the signature mechanism identifier, including both the digest function and the signature algorithm, e.g.Getter for the signature algorithm OID.Get the X.509 sign certificate chain associated with this PKCS#7 object.Getter for property signDate.Get the X.509 certificate revocation lists associated with this PKCS#7 Signed Data object.Gets the OCSP basic response collection retrieved from SignedData structure.Get the X.509 certificate actually used to sign the digest.int
Get the version of the PKCS#7 "SignerInfo" object.Getter for property sigName.Get all X.509 certificates associated with this PKCS#7 object timestamp in no particular order.Gets the timestamp date.Gets the timestamp token info if there is one.int
Get the version of the PKCS#7 object.boolean
Checks if OCSP revocation refers to the document signing certificate.boolean
isTsp()
Check if it's a PAdES-LTV time stamp.void
setExternalSignatureValue
(byte[] signatureValue, byte[] signedMessageContent, String signatureAlgorithm) Sets the signature to an externally calculated value.void
setExternalSignatureValue
(byte[] signatureValue, byte[] signedMessageContent, String signatureAlgorithm, ISignatureMechanismParams signatureMechanismParams) Sets the signature to an externally calculated value.void
setLocation
(String location) Setter for property location.void
Setter for property reason.void
setSignaturePolicy
(ISignaturePolicyIdentifier signaturePolicy) void
setSignaturePolicy
(SignaturePolicyInfo signaturePolicy) void
setSignDate
(Calendar signDate) Setter for property signDate.void
setSignName
(String signName) Setter for property sigName.void
update
(byte[] buf, int off, int len) Update the digest with the specified bytes.boolean
Verifies that signature integrity is intact (or in other words that signed data wasn't modified) by checking that embedded data digest corresponds to the calculated one.boolean
Checks if the timestamp refers to this document.
-
Constructor Details
-
PdfPKCS7
public PdfPKCS7(PrivateKey privKey, Certificate[] certChain, String hashAlgorithm, String provider, IExternalDigest interfaceDigest, boolean hasEncapContent) throws InvalidKeyException, NoSuchProviderException, NoSuchAlgorithmException Assembles all the elements needed to create a signature, except for the data.- Parameters:
-
privKey
- the private key -
certChain
- the certificate chain -
interfaceDigest
- the interface digest -
hashAlgorithm
- the hash algorithm -
provider
- the provider ornull
for the default provider -
hasEncapContent
-true
if the sub-filter is adbe.pkcs7.sha1 - Throws:
-
InvalidKeyException
- on error -
NoSuchProviderException
- on error -
NoSuchAlgorithmException
- on error
-
PdfPKCS7
public PdfPKCS7(PrivateKey privKey, Certificate[] certChain, String hashAlgorithm, String provider, boolean hasEncapContent) throws InvalidKeyException, NoSuchProviderException, NoSuchAlgorithmException Assembles all the elements needed to create a signature, except for the data.- Parameters:
-
privKey
- the private key -
certChain
- the certificate chain -
hashAlgorithm
- the hash algorithm -
provider
- the provider ornull
for the default provider -
hasEncapContent
-true
if the sub-filter is adbe.pkcs7.sha1 - Throws:
-
InvalidKeyException
- on error -
NoSuchProviderException
- on error -
NoSuchAlgorithmException
- on error
-
PdfPKCS7
Use this constructor if you want to verify a signature using the sub-filter adbe.x509.rsa_sha1.- Parameters:
-
contentsKey
- the /Contents key -
certsKey
- the /Cert key -
provider
- the provider ornull
for the default provider
-
PdfPKCS7
Use this constructor if you want to verify a signature.- Parameters:
-
contentsKey
- the /Contents key -
filterSubtype
- the filtersubtype -
provider
- the provider ornull
for the default provider
-
-
Method Details
-
setSignaturePolicy
-
setSignaturePolicy
-
getSignName
Getter for property sigName.- Returns:
- Value of property sigName.
-
setSignName
Setter for property sigName.- Parameters:
-
signName
- New value of property sigName.
-
getReason
Getter for property reason.- Returns:
- Value of property reason.
-
setReason
Setter for property reason.- Parameters:
-
reason
- New value of property reason.
-
getLocation
Getter for property location.- Returns:
- Value of property location.
-
setLocation
Setter for property location.- Parameters:
-
location
- New value of property location.
-
getSignDate
Getter for property signDate.- Returns:
- Value of property signDate.
-
setSignDate
Setter for property signDate.- Parameters:
-
signDate
- New value of property signDate.
-
getVersion
public int getVersion()Get the version of the PKCS#7 object.- Returns:
- the version of the PKCS#7 object.
-
getSigningInfoVersion
public int getSigningInfoVersion()Get the version of the PKCS#7 "SignerInfo" object.- Returns:
- the version of the PKCS#7 "SignerInfo" object.
-
getDigestAlgorithmOid
Getter for the ID of the digest algorithm, e.g. "2.16.840.1.101.3.4.2.1". See ISO-32000-1, section 12.8.3.3 PKCS#7 Signatures as used in ISO 32000- Returns:
- the ID of the digest algorithm
-
getDigestAlgorithmName
Returns the name of the digest algorithm, e.g. "SHA256".- Returns:
- the digest algorithm name, e.g. "SHA256"
-
getSignatureMechanismOid
Getter for the signature algorithm OID. See ISO-32000-1, section 12.8.3.3 PKCS#7 Signatures as used in ISO 32000- Returns:
- the signature algorithm OID
-
getSignatureMechanismName
Get the signature mechanism identifier, including both the digest function and the signature algorithm, e.g. "SHA1withRSA". See ISO-32000-1, section 12.8.3.3 PKCS#7 Signatures as used in ISO 32000- Returns:
- the algorithm used to calculate the signature
-
getSignatureAlgorithmName
Returns the name of the signature algorithm only (disregarding the digest function, if any).- Returns:
- the name of an encryption algorithm
-
setExternalSignatureValue
public void setExternalSignatureValue(byte[] signatureValue, byte[] signedMessageContent, String signatureAlgorithm) Sets the signature to an externally calculated value.- Parameters:
-
signatureValue
- the signature value -
signedMessageContent
- the extra data that goes into the data tag in PKCS#7 -
signatureAlgorithm
- the signature algorithm. It must benull
if thesignatureValue
is alsonull
. If thesignatureValue
is notnull
, possible values include "RSA", "DSA", "ECDSA", "Ed25519" and "Ed448".
-
setExternalSignatureValue
public void setExternalSignatureValue(byte[] signatureValue, byte[] signedMessageContent, String signatureAlgorithm, ISignatureMechanismParams signatureMechanismParams) Sets the signature to an externally calculated value.- Parameters:
-
signatureValue
- the signature value -
signedMessageContent
- the extra data that goes into the data tag in PKCS#7 -
signatureAlgorithm
- the signature algorithm. It must benull
if thesignatureValue
is alsonull
. If thesignatureValue
is notnull
, possible values include "RSA", "RSASSA-PSS", "DSA", "ECDSA", "Ed25519" and "Ed448". -
signatureMechanismParams
- parameters for the signature mechanism, if required
-
update
Update the digest with the specified bytes. This method is used both for signing and verifying- Parameters:
-
buf
- the data buffer -
off
- the offset in the data buffer -
len
- the data length - Throws:
-
SignatureException
- on error
-
getEncodedPKCS1
public byte[] getEncodedPKCS1()Gets the bytes for the PKCS#1 object.- Returns:
- a byte array
-
getEncodedPKCS7
public byte[] getEncodedPKCS7()Gets the bytes for the PKCS7SignedData object.- Returns:
- the bytes for the PKCS7SignedData object
-
getEncodedPKCS7
public byte[] getEncodedPKCS7(byte[] secondDigest) Gets the bytes for the PKCS7SignedData object. Optionally the authenticatedAttributes in the signerInfo can also be set. If either of the parameters isnull
, none will be used.- Parameters:
-
secondDigest
- the digest in the authenticatedAttributes - Returns:
- the bytes for the PKCS7SignedData object
-
getEncodedPKCS7
public byte[] getEncodedPKCS7(byte[] secondDigest, PdfSigner.CryptoStandard sigtype, ITSAClient tsaClient, Collection ocsp, Collection crlBytes) Gets the bytes for the PKCS7SignedData object. Optionally the authenticatedAttributes in the signerInfo can also be set, and/or a time-stamp-authority client may be provided.- Parameters:
-
secondDigest
- the digest in the authenticatedAttributes -
sigtype
- specifies the PKCS7 standard flavor to which created PKCS7SignedData object will adhere: either basic CMS or CAdES -
tsaClient
- TSAClient - null or an optional time stamp authority client -
ocsp
- collection of DER-encoded BasicOCSPResponses for the certificate in the signature certificates chain, or null if OCSP revocation data is not to be added. -
crlBytes
- collection of DER-encoded CRL for certificates from the signature certificates chain, or null if CRL revocation data is not to be added. - Returns:
- byte[] the bytes for the PKCS7SignedData object
- See Also:
-
getAuthenticatedAttributeBytes
public byte[] getAuthenticatedAttributeBytes(byte[] secondDigest, PdfSigner.CryptoStandard sigtype, Collection ocsp, Collection crlBytes) When using authenticatedAttributes the authentication process is different. The document digest is generated and put inside the attribute. The signing is done over the DER encoded authenticatedAttributes. This method provides that encoding and the parameters must be exactly the same as ingetEncodedPKCS7(byte[])
.Note: do not pass in the full DER-encoded OCSPResponse object obtained from the responder, only the DER-encoded IBasicOCSPResponse value contained in the response data.
A simple example:
Calendar cal = Calendar.getInstance(); PdfPKCS7 pk7 = new PdfPKCS7(key, chain, null, "SHA1", null, false); MessageDigest messageDigest = MessageDigest.getInstance("SHA1"); byte[] buf = new byte[8192]; int n; InputStream inp = sap.getRangeStream(); while ((n = inp.read(buf)) > 0) { messageDigest.update(buf, 0, n); } byte[] hash = messageDigest.digest(); byte[] sh = pk7.getAuthenticatedAttributeBytes(hash, cal); pk7.update(sh, 0, sh.length); byte[] sg = pk7.getEncodedPKCS7(hash, cal);
- Parameters:
-
secondDigest
- the content digest -
sigtype
- specifies the PKCS7 standard flavor to which created PKCS7SignedData object will adhere: either basic CMS or CAdES -
ocsp
- collection of DER-encoded BasicOCSPResponses for the certificate in the signature certificates chain, or null if OCSP revocation data is not to be added. -
crlBytes
- collection of DER-encoded CRL for certificates from the signature certificates chain, or null if CRL revocation data is not to be added. - Returns:
- the byte array representation of the authenticatedAttributes ready to be signed
- See Also:
-
verifySignatureIntegrityAndAuthenticity
Verifies that signature integrity is intact (or in other words that signed data wasn't modified) by checking that embedded data digest corresponds to the calculated one. Also ensures that signature is genuine and is created by the owner of private key that corresponds to the declared public certificate.Even though signature can be authentic and signed data integrity can be intact, one shall also always check that signed data is not only a part of PDF contents but is actually a complete PDF file. In order to check that given signature covers the current
PdfDocument
please useSignatureUtil.signatureCoversWholeDocument(String)
method.- Returns:
-
true
if the signature checks out,false
otherwise - Throws:
-
GeneralSecurityException
- if this signature object is not initialized properly, the passed-in signature is improperly encoded or of the wrong type, if this signature algorithm is unable to process the input data provided, if the public key is invalid or if security provider or signature algorithm are not recognized, etc.
-
verifyTimestampImprint
Checks if the timestamp refers to this document.- Returns:
- true if it checks false otherwise
- Throws:
-
GeneralSecurityException
- on error
-
getCertificates
Get all the X.509 certificates associated with this PKCS#7 object in no particular order. Other certificates, from OCSP for example, will also be included.- Returns:
- the X.509 certificates associated with this PKCS#7 object
-
getTimestampCertificates
Get all X.509 certificates associated with this PKCS#7 object timestamp in no particular order.- Returns:
-
Certificate
array
-
getSignCertificateChain
Get the X.509 sign certificate chain associated with this PKCS#7 object. Only the certificates used for the main signature will be returned, with the signing certificate first.- Returns:
- the X.509 certificates associated with this PKCS#7 object
-
getSigningCertificate
Get the X.509 certificate actually used to sign the digest.- Returns:
- the X.509 certificate actually used to sign the digest
-
getCRLs
Get the X.509 certificate revocation lists associated with this PKCS#7 object (stored in Signer Info).- Returns:
- the X.509 certificate revocation lists associated with this PKCS#7 object.
-
getSignedDataCRLs
Get the X.509 certificate revocation lists associated with this PKCS#7 Signed Data object.- Returns:
- the X.509 certificate revocation lists associated with this PKCS#7 Signed Data object.
-
getSignedDataOcsps
Gets the OCSP basic response collection retrieved from SignedData structure.- Returns:
- the OCSP basic response collection.
-
getOcsp
Gets the OCSP basic response from the SignerInfo if there is one.- Returns:
- the OCSP basic response or null.
-
isRevocationValid
public boolean isRevocationValid()Checks if OCSP revocation refers to the document signing certificate.- Returns:
- true if it checks, false otherwise
-
isTsp
public boolean isTsp()Check if it's a PAdES-LTV time stamp.- Returns:
- true if it's a PAdES-LTV time stamp, false otherwise
-
getTimeStampTokenInfo
Gets the timestamp token info if there is one.- Returns:
- the timestamp token info or null
-
getTimeStampDate
Gets the timestamp date.In case the signed document doesn't contain timestamp,
TimestampConstants.UNDEFINED_TIMESTAMP_DATE
will be returned.- Returns:
- the timestamp date
-
getFilterSubtype
Getter for the filter subtype.- Returns:
- the filter subtype
-