Class PdfPKCS7
- java.lang.Object
-
- com.gitlab.pdftk_java.com.lowagie.text.pdf.PdfPKCS7
-
public class PdfPKCS7 extends java.lang.ObjectThis class does all the processing related to signing and verifying a PKCS#7 signature.It's based in code found at org.bouncycastle.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPdfPKCS7.X500Namea class that holds an X509 namestatic classPdfPKCS7.X509NameTokenizerclass for breaking up an X500 Name into it's component tokens, ala java.util.StringTokenizer.
-
Field Summary
Fields Modifier and Type Field Description private java.util.Collectioncertsprivate java.util.Collectioncrlsprivate byte[]digestprivate java.lang.StringdigestAlgorithmprivate java.util.Setdigestalgosprivate byte[]digestAttrprivate java.lang.StringdigestEncryptionAlgorithmprivate byte[]externalDigestprivate byte[]externalRSAdataprivate static java.lang.StringID_CONTENT_TYPEprivate static java.lang.StringID_DSAprivate static java.lang.StringID_MD2private static java.lang.StringID_MD2RSAprivate static java.lang.StringID_MD5private static java.lang.StringID_MD5RSAprivate static java.lang.StringID_MESSAGE_DIGESTprivate static java.lang.StringID_PKCS7_DATAprivate static java.lang.StringID_PKCS7_SIGNED_DATAprivate static java.lang.StringID_RSAprivate static java.lang.StringID_SHA1private static java.lang.StringID_SHA1RSAprivate static java.lang.StringID_SIGNING_TIMEprivate java.lang.StringlocationHolds value of property location.private java.security.MessageDigestmessageDigestprivate java.security.PrivateKeyprivKeyprivate java.lang.StringreasonHolds value of property reason.private byte[]RSAdataprivate java.security.Signaturesigprivate byte[]sigAttrprivate java.security.cert.X509CertificatesignCertprivate java.util.CalendarsignDateHolds value of property signDate.private intsignerversionprivate java.lang.StringsignNameHolds value of property signName.private booleanverifiedprivate booleanverifyResultprivate intversion
-
Constructor Summary
Constructors Constructor Description PdfPKCS7(byte[] contentsKey, byte[] certsKey, java.lang.String provider)Verifies a signature using the sub-filter adbe.x509.rsa_sha1.PdfPKCS7(byte[] contentsKey, java.lang.String provider)Verifies a signature using the sub-filter adbe.pkcs7.detached or adbe.pkcs7.sha1.PdfPKCS7(java.security.PrivateKey privKey, java.security.cert.Certificate[] certChain, java.security.cert.CRL[] crlList, java.lang.String hashAlgorithm, java.lang.String provider, boolean hasRSAdata)Generates a signature.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description byte[]getAuthenticatedAttributeBytes(byte[] secondDigest, java.util.Calendar signingTime)When using authenticatedAttributes the authentication process is different.java.security.cert.Certificate[]getCertificates()Get the X.509 certificates associated with this PKCS#7 objectjava.util.CollectiongetCRLs()Get the X.509 certificate revocation lists associated with this PKCS#7 objectjava.lang.StringgetDigestAlgorithm()Get the algorithm used to calculate the message digestbyte[]getEncodedPKCS1()Gets the bytes for the PKCS#1 object.byte[]getEncodedPKCS7()Gets the bytes for the PKCS7SignedData object.byte[]getEncodedPKCS7(byte[] secondDigest, java.util.Calendar signingTime)Gets the bytes for the PKCS7SignedData object.java.lang.StringgetHashAlgorithm()Returns the algorithm.private static org.bouncycastle.asn1.ASN1PrimitivegetIssuer(byte[] enc)Get the "issuer" from the TBSCertificate bytes that are passed instatic PdfPKCS7.X500NamegetIssuerFields(java.security.cert.X509Certificate cert)Get the issuer fields from an X509 Certificatejava.lang.StringgetLocation()Getter for property location.java.lang.StringgetReason()Getter for property reason.java.util.CalendargetSignDate()Getter for property signDate.java.security.cert.X509CertificategetSigningCertificate()Get the X.509 certificate actually used to sign the digest.intgetSigningInfoVersion()Get the version of the PKCS#7 "SignerInfo" object.java.lang.StringgetSignName()Getter for property sigName.private static org.bouncycastle.asn1.ASN1PrimitivegetSubject(byte[] enc)Get the "subject" from the TBSCertificate bytes that are passed instatic PdfPKCS7.X500NamegetSubjectFields(java.security.cert.X509Certificate cert)Get the subject fields from an X509 CertificateintgetVersion()Get the version of the PKCS#7 object.static java.security.KeyStoreloadCacertsKeyStore()Loads the default root certificates at <java.home>/lib/security/cacerts with the default provider.static java.security.KeyStoreloadCacertsKeyStore(java.lang.String provider)Loads the default root certificates at <java.home>/lib/security/cacerts.voidsetExternalDigest(byte[] digest, byte[] RSAdata, java.lang.String digestEncryptionAlgorithm)Sets the digest/signature to an external calculated value.voidsetLocation(java.lang.String location)Setter for property location.voidsetReason(java.lang.String reason)Setter for property reason.voidsetSignDate(java.util.Calendar signDate)Setter for property signDate.voidsetSignName(java.lang.String signName)Setter for property sigName.voidupdate(byte[] buf, int off, int len)Update the digest with the specified bytes.booleanverify()Verify the digest.static java.lang.StringverifyCertificate(java.security.cert.X509Certificate cert, java.util.Collection crls, java.util.Calendar calendar)Verifies a single certificate.static java.lang.Object[]verifyCertificates(java.security.cert.Certificate[] certs, java.security.KeyStore keystore, java.util.Collection crls, java.util.Calendar calendar)Verifies a certificate chain against a KeyStore.
-
-
-
Field Detail
-
sigAttr
private byte[] sigAttr
-
digestAttr
private byte[] digestAttr
-
version
private int version
-
signerversion
private int signerversion
-
digestalgos
private java.util.Set digestalgos
-
certs
private java.util.Collection certs
-
crls
private java.util.Collection crls
-
signCert
private java.security.cert.X509Certificate signCert
-
digest
private byte[] digest
-
messageDigest
private java.security.MessageDigest messageDigest
-
digestAlgorithm
private java.lang.String digestAlgorithm
-
digestEncryptionAlgorithm
private java.lang.String digestEncryptionAlgorithm
-
sig
private java.security.Signature sig
-
privKey
private transient java.security.PrivateKey privKey
-
RSAdata
private byte[] RSAdata
-
verified
private boolean verified
-
verifyResult
private boolean verifyResult
-
externalDigest
private byte[] externalDigest
-
externalRSAdata
private byte[] externalRSAdata
-
ID_PKCS7_DATA
private static final java.lang.String ID_PKCS7_DATA
- See Also:
- Constant Field Values
-
ID_PKCS7_SIGNED_DATA
private static final java.lang.String ID_PKCS7_SIGNED_DATA
- See Also:
- Constant Field Values
-
ID_MD5
private static final java.lang.String ID_MD5
- See Also:
- Constant Field Values
-
ID_MD2
private static final java.lang.String ID_MD2
- See Also:
- Constant Field Values
-
ID_SHA1
private static final java.lang.String ID_SHA1
- See Also:
- Constant Field Values
-
ID_RSA
private static final java.lang.String ID_RSA
- See Also:
- Constant Field Values
-
ID_DSA
private static final java.lang.String ID_DSA
- See Also:
- Constant Field Values
-
ID_CONTENT_TYPE
private static final java.lang.String ID_CONTENT_TYPE
- See Also:
- Constant Field Values
-
ID_MESSAGE_DIGEST
private static final java.lang.String ID_MESSAGE_DIGEST
- See Also:
- Constant Field Values
-
ID_SIGNING_TIME
private static final java.lang.String ID_SIGNING_TIME
- See Also:
- Constant Field Values
-
ID_MD2RSA
private static final java.lang.String ID_MD2RSA
- See Also:
- Constant Field Values
-
ID_MD5RSA
private static final java.lang.String ID_MD5RSA
- See Also:
- Constant Field Values
-
ID_SHA1RSA
private static final java.lang.String ID_SHA1RSA
- See Also:
- Constant Field Values
-
reason
private java.lang.String reason
Holds value of property reason.
-
location
private java.lang.String location
Holds value of property location.
-
signDate
private java.util.Calendar signDate
Holds value of property signDate.
-
signName
private java.lang.String signName
Holds value of property signName.
-
-
Constructor Detail
-
PdfPKCS7
public PdfPKCS7(byte[] contentsKey, byte[] certsKey, java.lang.String provider) throws java.lang.SecurityException, java.security.cert.CRLException, java.security.InvalidKeyException, java.security.cert.CertificateException, java.security.NoSuchProviderException, java.security.NoSuchAlgorithmException, java.io.IOExceptionVerifies a signature using the sub-filter adbe.x509.rsa_sha1.- Parameters:
contentsKey- the /Contents keycertsKey- the /Cert keyprovider- the provider ornullfor the default provider- Throws:
java.lang.SecurityException- on errorjava.security.cert.CRLException- on errorjava.security.InvalidKeyException- on errorjava.security.cert.CertificateException- on errorjava.security.NoSuchProviderException- on errorjava.security.NoSuchAlgorithmException- on errorjava.io.IOException- on error
-
PdfPKCS7
public PdfPKCS7(byte[] contentsKey, java.lang.String provider) throws java.lang.SecurityException, java.security.cert.CRLException, java.security.InvalidKeyException, java.security.cert.CertificateException, java.security.NoSuchProviderException, java.security.NoSuchAlgorithmExceptionVerifies a signature using the sub-filter adbe.pkcs7.detached or adbe.pkcs7.sha1.- Parameters:
contentsKey- the /Contents keyprovider- the provider ornullfor the default provider- Throws:
java.lang.SecurityException- on errorjava.security.cert.CRLException- on errorjava.security.InvalidKeyException- on errorjava.security.cert.CertificateException- on errorjava.security.NoSuchProviderException- on errorjava.security.NoSuchAlgorithmException- on error
-
PdfPKCS7
public PdfPKCS7(java.security.PrivateKey privKey, java.security.cert.Certificate[] certChain, java.security.cert.CRL[] crlList, java.lang.String hashAlgorithm, java.lang.String provider, boolean hasRSAdata) throws java.lang.SecurityException, java.security.InvalidKeyException, java.security.NoSuchProviderException, java.security.NoSuchAlgorithmExceptionGenerates a signature.- Parameters:
privKey- the private keycertChain- the certificate chaincrlList- the certificate revocation listhashAlgorithm- the hash algorithmprovider- the provider ornullfor the default providerhasRSAdata-trueif the sub-filter is adbe.pkcs7.sha1- Throws:
java.lang.SecurityException- on errorjava.security.InvalidKeyException- on errorjava.security.NoSuchProviderException- on errorjava.security.NoSuchAlgorithmException- on error
-
-
Method Detail
-
update
public void update(byte[] buf, int off, int len) throws java.security.SignatureExceptionUpdate the digest with the specified bytes. This method is used both for signing and verifying- Parameters:
buf- the data bufferoff- the offset in the data bufferlen- the data length- Throws:
java.security.SignatureException- on error
-
verify
public boolean verify() throws java.security.SignatureExceptionVerify the digest.- Returns:
trueif the signature checks out,falseotherwise- Throws:
java.security.SignatureException- on error
-
getCertificates
public java.security.cert.Certificate[] getCertificates()
Get the X.509 certificates associated with this PKCS#7 object- Returns:
- the X.509 certificates associated with this PKCS#7 object
-
getCRLs
public java.util.Collection getCRLs()
Get the X.509 certificate revocation lists associated with this PKCS#7 object- Returns:
- the X.509 certificate revocation lists associated with this PKCS#7 object
-
getSigningCertificate
public java.security.cert.X509Certificate getSigningCertificate()
Get the X.509 certificate actually used to sign the digest.- Returns:
- the X.509 certificate actually used to sign the digest
-
getVersion
public int getVersion()
Get the version of the PKCS#7 object. Always 1- Returns:
- the version of the PKCS#7 object. Always 1
-
getSigningInfoVersion
public int getSigningInfoVersion()
Get the version of the PKCS#7 "SignerInfo" object. Always 1- Returns:
- the version of the PKCS#7 "SignerInfo" object. Always 1
-
getDigestAlgorithm
public java.lang.String getDigestAlgorithm()
Get the algorithm used to calculate the message digest- Returns:
- the algorithm used to calculate the message digest
-
getHashAlgorithm
public java.lang.String getHashAlgorithm()
Returns the algorithm.- Returns:
- the digest algorithm
-
loadCacertsKeyStore
public static java.security.KeyStore loadCacertsKeyStore()
Loads the default root certificates at <java.home>/lib/security/cacerts with the default provider.- Returns:
- a
KeyStore
-
loadCacertsKeyStore
public static java.security.KeyStore loadCacertsKeyStore(java.lang.String provider)
Loads the default root certificates at <java.home>/lib/security/cacerts.- Parameters:
provider- the provider ornullfor the default provider- Returns:
- a
KeyStore
-
verifyCertificate
public static java.lang.String verifyCertificate(java.security.cert.X509Certificate cert, java.util.Collection crls, java.util.Calendar calendar)Verifies a single certificate.- Parameters:
cert- the certificate to verifycrls- the certificate revocation list ornullcalendar- the date ornullfor the current date- Returns:
- a
Stringwith the error description ornullif no error
-
verifyCertificates
public static java.lang.Object[] verifyCertificates(java.security.cert.Certificate[] certs, java.security.KeyStore keystore, java.util.Collection crls, java.util.Calendar calendar)Verifies a certificate chain against a KeyStore.- Parameters:
certs- the certificate chainkeystore- theKeyStorecrls- the certificate revocation list ornullcalendar- the date ornullfor the current date- Returns:
nullif the certificate chain could be validade or aObject[]{cert,error}wherecertis the failed certificate anderroris the error message
-
getIssuer
private static org.bouncycastle.asn1.ASN1Primitive getIssuer(byte[] enc)
Get the "issuer" from the TBSCertificate bytes that are passed in- Parameters:
enc- a TBSCertificate in a byte array- Returns:
- a ASN1Primitive
-
getSubject
private static org.bouncycastle.asn1.ASN1Primitive getSubject(byte[] enc)
Get the "subject" from the TBSCertificate bytes that are passed in- Parameters:
enc- A TBSCertificate in a byte array- Returns:
- a ASN1Primitive
-
getIssuerFields
public static PdfPKCS7.X500Name getIssuerFields(java.security.cert.X509Certificate cert)
Get the issuer fields from an X509 Certificate- Parameters:
cert- an X509Certificate- Returns:
- an X500Name
-
getSubjectFields
public static PdfPKCS7.X500Name getSubjectFields(java.security.cert.X509Certificate cert)
Get the subject fields from an X509 Certificate- Parameters:
cert- an X509Certificate- Returns:
- an X500Name
-
getEncodedPKCS1
public byte[] getEncodedPKCS1()
Gets the bytes for the PKCS#1 object.- Returns:
- a byte array
-
setExternalDigest
public void setExternalDigest(byte[] digest, byte[] RSAdata, java.lang.String digestEncryptionAlgorithm)Sets the digest/signature to an external calculated value.- Parameters:
digest- the digest. This is the actual signatureRSAdata- the extra data that goes into the data tag in PKCS#7digestEncryptionAlgorithm- the encryption algorithm. It may must benullif thedigestis alsonull. If thedigestis notnullthen it may be "RSA" or "DSA"
-
getEncodedPKCS7
public byte[] getEncodedPKCS7()
Gets the bytes for the PKCS7SignedData object.- Returns:
- the bytes for the PKCS7SignedData object
-
getEncodedPKCS7
public byte[] getEncodedPKCS7(byte[] secondDigest, java.util.Calendar signingTime)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 authenticatedAttributessigningTime- the signing time in the authenticatedAttributes- Returns:
- the bytes for the PKCS7SignedData object
-
getAuthenticatedAttributeBytes
public byte[] getAuthenticatedAttributeBytes(byte[] secondDigest, java.util.Calendar signingTime)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[],Calendar).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 digestsigningTime- the signing time- Returns:
- the byte array representation of the authenticatedAttributes ready to be signed
-
getReason
public java.lang.String getReason()
Getter for property reason.- Returns:
- Value of property reason.
-
setReason
public void setReason(java.lang.String reason)
Setter for property reason.- Parameters:
reason- New value of property reason.
-
getLocation
public java.lang.String getLocation()
Getter for property location.- Returns:
- Value of property location.
-
setLocation
public void setLocation(java.lang.String location)
Setter for property location.- Parameters:
location- New value of property location.
-
getSignDate
public java.util.Calendar getSignDate()
Getter for property signDate.- Returns:
- Value of property signDate.
-
setSignDate
public void setSignDate(java.util.Calendar signDate)
Setter for property signDate.- Parameters:
signDate- New value of property signDate.
-
getSignName
public java.lang.String getSignName()
Getter for property sigName.- Returns:
- Value of property sigName.
-
setSignName
public void setSignName(java.lang.String signName)
Setter for property sigName.- Parameters:
signName- New value of property sigName.
-
-