public class PdfPKCS7
extends java.lang.Object
It's based in code found at org.bouncycastle.
Modifier and Type | Class and Description |
---|---|
static class |
PdfPKCS7.X509Name
a class that holds an X509 name
|
static class |
PdfPKCS7.X509NameTokenizer
class for breaking up an X500 Name into it's component tokens, ala
java.util.StringTokenizer.
|
Modifier and Type | Field and Description |
---|---|
private java.util.Collection |
certs |
private java.util.Collection |
crls |
private byte[] |
digest |
private java.lang.String |
digestAlgorithm |
private java.util.Set |
digestalgos |
private byte[] |
digestAttr |
private java.lang.String |
digestEncryptionAlgorithm |
private byte[] |
externalDigest |
private byte[] |
externalRSAdata |
private static java.lang.String |
ID_CONTENT_TYPE |
private static java.lang.String |
ID_DSA |
private static java.lang.String |
ID_MD2 |
private static java.lang.String |
ID_MD2RSA |
private static java.lang.String |
ID_MD5 |
private static java.lang.String |
ID_MD5RSA |
private static java.lang.String |
ID_MESSAGE_DIGEST |
private static java.lang.String |
ID_PKCS7_DATA |
private static java.lang.String |
ID_PKCS7_SIGNED_DATA |
private static java.lang.String |
ID_RSA |
private static java.lang.String |
ID_SHA1 |
private static java.lang.String |
ID_SHA1RSA |
private static java.lang.String |
ID_SIGNING_TIME |
private java.lang.String |
location
Holds value of property location.
|
private java.security.MessageDigest |
messageDigest |
private java.security.PrivateKey |
privKey |
private java.lang.String |
reason
Holds value of property reason.
|
private byte[] |
RSAdata |
private java.security.Signature |
sig |
private byte[] |
sigAttr |
private java.security.cert.X509Certificate |
signCert |
private java.util.Calendar |
signDate
Holds value of property signDate.
|
private int |
signerversion |
private java.lang.String |
signName
Holds value of property signName.
|
private boolean |
verified |
private boolean |
verifyResult |
private int |
version |
Constructor and 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.
|
Modifier and Type | Method and 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 object
|
java.util.Collection |
getCRLs()
Get the X.509 certificate revocation lists associated with this PKCS#7 object
|
java.lang.String |
getDigestAlgorithm()
Get the algorithm used to calculate the message digest
|
byte[] |
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.String |
getHashAlgorithm()
Returns the algorithm.
|
private static DERObject |
getIssuer(byte[] enc)
Get the "issuer" from the TBSCertificate bytes that are passed in
|
static PdfPKCS7.X509Name |
getIssuerFields(java.security.cert.X509Certificate cert)
Get the issuer fields from an X509 Certificate
|
java.lang.String |
getLocation()
Getter for property location.
|
java.lang.String |
getReason()
Getter for property reason.
|
java.util.Calendar |
getSignDate()
Getter for property signDate.
|
java.security.cert.X509Certificate |
getSigningCertificate()
Get the X.509 certificate actually used to sign the digest.
|
int |
getSigningInfoVersion()
Get the version of the PKCS#7 "SignerInfo" object.
|
java.lang.String |
getSignName()
Getter for property sigName.
|
private static DERObject |
getSubject(byte[] enc)
Get the "subject" from the TBSCertificate bytes that are passed in
|
static PdfPKCS7.X509Name |
getSubjectFields(java.security.cert.X509Certificate cert)
Get the subject fields from an X509 Certificate
|
int |
getVersion()
Get the version of the PKCS#7 object.
|
static java.security.KeyStore |
loadCacertsKeyStore()
Loads the default root certificates at <java.home>/lib/security/cacerts
with the default provider.
|
static java.security.KeyStore |
loadCacertsKeyStore(java.lang.String provider)
Loads the default root certificates at <java.home>/lib/security/cacerts.
|
void |
setExternalDigest(byte[] digest,
byte[] RSAdata,
java.lang.String digestEncryptionAlgorithm)
Sets the digest/signature to an external calculated value.
|
void |
setLocation(java.lang.String location)
Setter for property location.
|
void |
setReason(java.lang.String reason)
Setter for property reason.
|
void |
setSignDate(java.util.Calendar signDate)
Setter for property signDate.
|
void |
setSignName(java.lang.String signName)
Setter for property sigName.
|
void |
update(byte[] buf,
int off,
int len)
Update the digest with the specified bytes.
|
boolean |
verify()
Verify the digest.
|
static java.lang.String |
verifyCertificate(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.
|
private byte[] sigAttr
private byte[] digestAttr
private int version
private int signerversion
private java.util.Set digestalgos
private java.util.Collection certs
private java.util.Collection crls
private java.security.cert.X509Certificate signCert
private byte[] digest
private java.security.MessageDigest messageDigest
private java.lang.String digestAlgorithm
private java.lang.String digestEncryptionAlgorithm
private java.security.Signature sig
private transient java.security.PrivateKey privKey
private byte[] RSAdata
private boolean verified
private boolean verifyResult
private byte[] externalDigest
private byte[] externalRSAdata
private static final java.lang.String ID_PKCS7_DATA
private static final java.lang.String ID_PKCS7_SIGNED_DATA
private static final java.lang.String ID_MD5
private static final java.lang.String ID_MD2
private static final java.lang.String ID_SHA1
private static final java.lang.String ID_RSA
private static final java.lang.String ID_DSA
private static final java.lang.String ID_CONTENT_TYPE
private static final java.lang.String ID_MESSAGE_DIGEST
private static final java.lang.String ID_SIGNING_TIME
private static final java.lang.String ID_MD2RSA
private static final java.lang.String ID_MD5RSA
private static final java.lang.String ID_SHA1RSA
private java.lang.String reason
private java.lang.String location
private java.util.Calendar signDate
private java.lang.String signName
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.IOException
contentsKey
- the /Contents keycertsKey
- the /Cert keyprovider
- the provider or null
for the default providerjava.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 errorpublic 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.NoSuchAlgorithmException
contentsKey
- the /Contents keyprovider
- the provider or null
for the default providerjava.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 errorpublic 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.NoSuchAlgorithmException
privKey
- the private keycertChain
- the certificate chaincrlList
- the certificate revocation listhashAlgorithm
- the hash algorithmprovider
- the provider or null
for the default providerhasRSAdata
- true
if the sub-filter is adbe.pkcs7.sha1java.lang.SecurityException
- on errorjava.security.InvalidKeyException
- on errorjava.security.NoSuchProviderException
- on errorjava.security.NoSuchAlgorithmException
- on errorpublic void update(byte[] buf, int off, int len) throws java.security.SignatureException
buf
- the data bufferoff
- the offset in the data bufferlen
- the data lengthjava.security.SignatureException
- on errorpublic boolean verify() throws java.security.SignatureException
true
if the signature checks out, false
otherwisejava.security.SignatureException
- on errorpublic java.security.cert.Certificate[] getCertificates()
public java.util.Collection getCRLs()
public java.security.cert.X509Certificate getSigningCertificate()
public int getVersion()
public int getSigningInfoVersion()
public java.lang.String getDigestAlgorithm()
public java.lang.String getHashAlgorithm()
public static java.security.KeyStore loadCacertsKeyStore()
KeyStore
public static java.security.KeyStore loadCacertsKeyStore(java.lang.String provider)
provider
- the provider or null
for the default providerKeyStore
public static java.lang.String verifyCertificate(java.security.cert.X509Certificate cert, java.util.Collection crls, java.util.Calendar calendar)
cert
- the certificate to verifycrls
- the certificate revocation list or null
calendar
- the date or null
for the current dateString
with the error description or null
if no errorpublic static java.lang.Object[] verifyCertificates(java.security.cert.Certificate[] certs, java.security.KeyStore keystore, java.util.Collection crls, java.util.Calendar calendar)
certs
- the certificate chainkeystore
- the KeyStore
crls
- the certificate revocation list or null
calendar
- the date or null
for the current datenull
if the certificate chain could be validade or a
Object[]{cert,error}
where cert
is the
failed certificate and error
is the error messageprivate static DERObject getIssuer(byte[] enc)
enc
- a TBSCertificate in a byte arrayprivate static DERObject getSubject(byte[] enc)
enc
- A TBSCertificate in a byte arraypublic static PdfPKCS7.X509Name getIssuerFields(java.security.cert.X509Certificate cert)
cert
- an X509Certificatepublic static PdfPKCS7.X509Name getSubjectFields(java.security.cert.X509Certificate cert)
cert
- an X509Certificatepublic byte[] getEncodedPKCS1()
public void setExternalDigest(byte[] digest, byte[] RSAdata, java.lang.String digestEncryptionAlgorithm)
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 be null
if the digest
is also null
. If the digest
is not null
then it may be "RSA" or "DSA"public byte[] getEncodedPKCS7()
public byte[] getEncodedPKCS7(byte[] secondDigest, java.util.Calendar signingTime)
null
, none will be used.secondDigest
- the digest in the authenticatedAttributessigningTime
- the signing time in the authenticatedAttributespublic byte[] getAuthenticatedAttributeBytes(byte[] secondDigest, java.util.Calendar signingTime)
getEncodedPKCS7(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);
secondDigest
- the content digestsigningTime
- the signing timepublic java.lang.String getReason()
public void setReason(java.lang.String reason)
reason
- New value of property reason.public java.lang.String getLocation()
public void setLocation(java.lang.String location)
location
- New value of property location.public java.util.Calendar getSignDate()
public void setSignDate(java.util.Calendar signDate)
signDate
- New value of property signDate.public java.lang.String getSignName()
public void setSignName(java.lang.String signName)
signName
- New value of property sigName.