|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--iaik.pkcs.pkcs7.SignerInfo
This class implements the PKCS#7 SignerInfo
type.
The PKCS#7
Cryptographic Message Standard specifies the SignerInfo
type for collecting all signer-related information about some particular
signer intending to build a digital signature on the content of a PKCS#7
SignedData
, or the content of a PKCS#7
SignedAndEnvelopedData
object. Content of any type may be
signed by any number of signers in parallel. For each signer, a message
digest is computed on the content (and any additional authenticating
information) with a signer-specific message-digest algorithm (when
building a SignedAndEnvelopedData
, this message digest
again is encrypted with a content-encryption key). Subsequently,
again for each signer, the corresponding message digest from the previous
step is encrypted with the particular signer´s private key and - together with
some signer-specific information - collected into a SignerInfo
value. Finally all created SignerInfo
values are collected
together with the content for forming a SignedData
structure
(when.
The SignerInfo
structure collecting all signer-related
information is defined as ASN.1 SEQUENCE type containing the following
components (see PKCS#7 specification):
SignerInfo ::= SEQUENCE { version Version, issuerAndSerialNumber IssuerAndSerialNumber, digestAlgorithm DigestAlgorithmIdentifier, authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL, digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier, encryptedDigest EncryptedDigest, unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL }
EncryptedDigest ::= OCTET STRING
The digestAlgorithm
and digestEncryptionAlgorithm
fields identify the algorithms used for digesting the content and any
authenticated attributes, respectively encrypting the message digest and
associated information with the signer´s private key. This
SignerInfo
implementation uses the rsaEncryption
digest-encryption method as specified by PKCS#1v1.5. The
issuerAndSerialNumber
field specifies the signer´s certificate by
issuer distinguished name and issuer-specific serial number.
AuthenticatedAttributes
and
unauthenticatedAttributes
are optional fields giving some
attributes that are signed (respectively not signed) by the signer.
Attributes that may be used here, are defined in PKCS#9. The
encryptedDigest
field finally contains the result of the
message digest encryption process. It is derived by encrypting the
message digest and associated information (supplied as BER encoded
PKCS#7 DigestInfo
object) with the signer´s private key.
For more information consult the RSA PKCS#7 specification.
This class provides several constructors and methods for creating a
SignerInfo
object, setting some attributes, obtaining
the component values, and encrypting (respectively decrypting) the
(encrypted) message digest.
Assuming that certificate
represents the X509v3 certifcate
of some signer, a SignerInfo
object may be created by supplying
the certificate issuer distinguished name and the issuer-specific serial
number, the signer´s message digest algorithm ID, and the signer´s private key:
IssuerAndSerialNumber issuer_and_serialNr = new IssuerAndSerialNumber(certificate); SignerInfo signer_info = new SignerInfo(issuer_and_serialNr, AlgorithmID.sha, privateKey);
Attributes may be added using the setAuthenticatedAttributes
respectively
setUnauthenticatedAttributes
methods, e.g.:
Attribute[] attributes = new Attribute[2]; // PKCS#9ContentType
attribute specifying, e.g. the Data content type: attributes[0] = new Attribute(ObjectID.contentType, new ASN1Object[] {ObjectID.pkcs7_data}); // PKCS#9SigningTime
attribute specifying the signing time (e.g. current time): attributes[1] = new Attribute(ObjectID.signingTime, new ASN1Object[] {new ChoiceOfTime().toASN1Object()}); // add the attributes to the SignerInfo: signer_info.setAuthenticatedAttributes(attributes);
Add a SignerInfo to a SignedData object by calling the addSignerInfo
method of the SignedData(Stream)
class.
ContentInfo
,
SignedData
,
SignedAndEnvelopedData
,
SignedDataStream
,
SignedAndEnvelopedDataStream
,
IssuerAndSerialNumber
,
DigestInfo
Constructor Summary | |
SignerInfo()
Default constructor. |
|
SignerInfo(ASN1Object obj)
Creates a PKCS#7 SignerInfo from an ASN1Object.
|
|
SignerInfo(IssuerAndSerialNumber issuerAndSerialNumber,
AlgorithmID digestAlgorithm,
AlgorithmID digestEncryptionAlgorithm,
PrivateKey privateKey)
Creates a new SignerInfo from given issuerAndSerialNumber, and digestAlgorithm ID, digest-encrytion algorithmID, and the signer´s private key. |
|
SignerInfo(IssuerAndSerialNumber issuerAndSerialNumber,
AlgorithmID digestAlgorithm,
PrivateKey privateKey)
Creates a new SignerInfo from given IssuerAndSerialNumber, digestAlgorithm ID, and the signer´s private key. |
Method Summary | |
void |
decode(ASN1Object obj)
Decodes the given ASN.1 SignerInfo object for parsing
the internal structure.
|
void |
encodeCalled(ASN1Object o,
int id)
This method implements the EncodeListener interface. |
Attribute |
getAuthenticatedAttribute(ObjectID oid)
Returns the first authenticated attribute matching to the given ObjectID, if included in this SignerInfo object. |
Attribute[] |
getAuthenticatedAttributes()
Returns a set of attributes that are signed by the signer. |
byte[] |
getDigest(PublicKey publicKey)
Decrypts the encrypted digest using the publicKey and returns the resulting digest value in a byte array. |
AlgorithmID |
getDigestAlgorithm()
Returns the AlgorithmID of the message-digest algorithm that has been used for digesting the content and any authenticated attributes. |
AlgorithmID |
getDigestEncryptionAlgorithm()
Returns the digest-encryption algorithm used for encrypting the message digest and associated information with the signer's private key. |
byte[] |
getEncryptedDigest()
Returns the encrypted digest. |
IssuerAndSerialNumber |
getIssuerAndSerialNumber()
Returns informatin about the signer's certificate. |
RSACipherProvider |
getRSACipherProvider()
Gets the RSA cipher provider for this ReceipientInfo. |
Attribute |
getUnauthenticatedAttribute(ObjectID oid)
Returns the first unauthenticated attribute matching to the given ObjectID, if included in this SignerInfo object. |
Attribute[] |
getUnauthenticatedAttributes()
Returns a set of attributes that are not signed by the signer. |
int |
getVersion()
Returns the synatx version number. |
void |
setAuthenticatedAttributes(Attribute[] attributes)
Sets a set of attributes to be authenticated along with the content to be signed. |
void |
setEncryptedDigest(byte[] encryptedDigest)
Sets the encrypted digest value. |
void |
setRSACipherProvider(RSACipherProvider provider)
Sets the RSA cipher provider for this SignerInfo. |
void |
setUnauthenticatedAttributes(Attribute[] attributes)
Sets a set of attributes that are not signed by the signer. |
ASN1Object |
toASN1Object()
Returns this SignerInfo as ASN1Object.
|
String |
toString()
Returns a string giving some information about this SignerInfo object. |
String |
toString(boolean detailed)
Returns a string giving some - if requested - detailed information about this SignerInfo object. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Constructor Detail |
public SignerInfo()
SignerInfo
object and sets the version number to 1, and the digest-encryption
algorithm ID to rsaEncryption.public SignerInfo(IssuerAndSerialNumber issuerAndSerialNumber, AlgorithmID digestAlgorithm, PrivateKey privateKey)
The issuerAndSerialNumber
specifies issuer distinguished name
and serial number of the signer´s certificate, and the digestAlgorithm
ID specifies the message digest algorithm used for calculating the digest
of the content and any authenticated information. The private key is used for
calculating the signature (encrypting the digest with the PKCS#1 rsaEncryption
method).
issuerAndSerialNumber
- information about the signer's certificate.algorithmID
- the AlgorithmID of the message-digest algorithmprivateKey
- the signer´s private key to be used for signingpublic SignerInfo(IssuerAndSerialNumber issuerAndSerialNumber, AlgorithmID digestAlgorithm, AlgorithmID digestEncryptionAlgorithm, PrivateKey privateKey)
The issuerAndSerialNumber
specifies issuer distinguished name
and serial number of the signer´s certificate, and the the digestAlgorithm
ID specifies the message digest algorithm used for calculating the digest
of the content and any authenticated information. The private key is used for
calculating the signature (encrypting the digest with the with the
given digest-encryption method). Currently only PKCS#1 rsaEncryption
is supported for digest encryption.
issuerAndSerialNumber
- information about the signer's certificate.algorithmID
- the AlgorithmID of the message-digest algorithmdigestEncryptionAlgorithm
- the algorithm to be used for encrypting the
digest; default: PKCS#1 rsaEncryptionprivateKey
- the signer´s private key to be used for signingpublic SignerInfo(ASN1Object obj) throws CodingException
SignerInfo
from an ASN1Object.
The ASN1Object supplied to this constructor represents an
already exisiting SignerInfo
object that may
have been created by calling toASN1Object
.
obj
- the PKCS#7 SignerInfo as ASN1ObjectCodingException
- if the object can not be parsedMethod Detail |
public void decode(ASN1Object obj) throws CodingException
SignerInfo
object for parsing
the internal structure.
This method internally is called when creating a PKCS#7 SignerInfo
object from an already existing SignerInfo
object,
supplied as ASN1Object.
decode
in interface ASN1Type
obj
- the PKCS#7 SignerInfo as ASN1ObjectCodingException
- if the object can not be parsedpublic ASN1Object toASN1Object() throws CodingException
SignerInfo
as ASN1Object.
Creates an ASN1 SEQUENCE object supplied with all the component values as
defined in the
PKCS#7 Cryptographic Message Standard specification. The ASN1Object returned
by this method may be used as parameter value when creating a
SignerInfo
object using the SignerInfo(ASN1Object obj)
constructor.
toASN1Object
in interface ASN1Type
CodingException
- if the ASN1Object could not be createdpublic void encodeCalled(ASN1Object o, int id) throws CodingException
SignedData
content type, the message digest cannot be computed before the
content stream entirely has been read. Since the content stream
actually is read during the encoding procedure, this SignerInfo
class has to be notified when the content stream has been read. This
is done by means of the EncodeListener
utility. The toASN1Object()
method of this SignerInfo
class instantiates an empty OCTET_STRING for the encrypted message digest
field, and registers itself as EncodeListener for this empty OCTET_STRING.
Now, during the encoding process, when the content stream entirely has
been read, this encodeCalled
method is called for
performing digest computation and encryption. The supplied ASN1Object
is the empty OCTET_STRING to be "filled" with the result of the
digest-computation-encryption.encodeCalled
in interface EncodeListener
o
- an OCTET_STRING for being supplied with the encrypted message digestid
- the id identifying the particular octet string to be processedCodingException
- if an error occurs when computing/encrypting
the message digestpublic void setAuthenticatedAttributes(Attribute[] attributes)
The authenticatedAttributes
field is optional, but must be
present if the content type of the ContentInfo
value being
signed is not the Data
type.
If the authenticatedAttributes
field is present, it must include
the PKCS#9 content-type attribute and the PKCS#9 message-digest attribute.
If the message-digest attribute is not included in the supplied authenticated attributes
it is automatically calculated and set.
A further attribute type specified by PKCS#9 may be used for specifying the time at which the signer has performed the signing process, e.g.:
Attribute[] attributes = new Attribute[2]; // PKCS#9ContentType
attribute specifying, e.g. the Data content type: attributes[0] = new Attribute(ObjectID.contentType, new ASN1Object[] {ObjectID.pkcs7_data}); // PKCS#9SigningTime
attribute specifying the signing time (e.g. current time): attributes[1] = new Attribute(ObjectID.signingTime, new ASN1Object[] {new ChoiceOfTime().toASN1Object()}); // add the attributes to the SignerInfo: signer_info.setAuthenticatedAttributes(attributes);
attributes
- a set of attributes to be authenticated along with the content
to be signed.public byte[] getDigest(PublicKey publicKey) throws SignatureException, InvalidKeyException
This method decrypts the encrypted message digest using the PKCS#1
rsaEncryption method in decryption mode with the signer´s public key
(usually derived from the signer´s certificate). The resulting
DigestInfo
object is parsed for the inherent digest value,
which subsequently is returned by this method.
SignatureException
- if the digest decryption process failsInvalidKeyException
- if the given key does not match to the
digest-encryption algorithm (rsaEncryption)DigestInfo
public void setUnauthenticatedAttributes(Attribute[] attributes)
attributes
- a set of attributes that are not signed by the signerpublic int getVersion()
public IssuerAndSerialNumber getIssuerAndSerialNumber()
The information is returned as issuerAndSerialNumber
object
specifying the signer´s certificate by issuer distinguished name and
issuer-specific serial number.
IssuerAndSerialNumber
public AlgorithmID getDigestAlgorithm()
public Attribute[] getAuthenticatedAttributes()
authenticatedAttributes
field is optional, but must
be present if the content type of the ContentInfo
value
being signed is not the Data
type.setAuthenticatedAttributes(iaik.asn1.structures.Attribute[])
public Attribute getAuthenticatedAttribute(ObjectID oid)
null
if there is no attribute for the given OID.public AlgorithmID getDigestEncryptionAlgorithm()
public byte[] getEncryptedDigest()
public void setEncryptedDigest(byte[] encryptedDigest)
encryptedDigest
- the encrypted digest value, calculated from outsidepublic Attribute[] getUnauthenticatedAttributes()
setUnauthenticatedAttributes(iaik.asn1.structures.Attribute[])
public Attribute getUnauthenticatedAttribute(ObjectID oid)
null
if there is no attribute for the given OID.public void setRSACipherProvider(RSACipherProvider provider)
RSACipherProvider
allows an application to control the RSA cipher encryption/decryption
(private key based encryption part of signature creation / public key
based decryption part of signature verification operations).
To, for instance, use the IAIK PKCS#11 provider for RSA cipher private key
based encryption during signature creation only, but the first installed
provider for RSA cipher public key based decryption during signature verification
you may set the PKCS#11 provider as RSA encryption provider:
IAIKPkcs11 pkcs11Provider = new IAIKPkcs11(); Security.addProvider(pkcs11Provider); ... RSACipherProvider rsaProv = new RSACipherProvider(pkcs11Provider.getName(), null); ... SignerInfo signerInfo = ...; ... signerInfo.setRSACipherProvider(rsaProv, null);In overriding method
cipher
of the RSACipherProvider
you even
can take more influence on the ciphering process.
If no RSACipherProvider is set for this RecipientInfo the first installed RSA capable crypto provider is used for RSA en/deciphering.
provider
- the RSACipherProvider to be used for private/public key RSA cipher
operationspublic RSACipherProvider getRSACipherProvider()
RSACipherProvider
allows an application to control the RSA cipher encryption/decryption
(signature creation/verification operations). It may be
set by calling method setRSACipherProvider
.public String toString()
SignerInfo
object.toString
in class Object
public String toString(boolean detailed)
SignerInfo
object.detailed
- - whether or not to give detailed information
|
This Javadoc may contain text parts from Internet Standard specifications (RFC 2459, 3280, 3039, 2560, 1521, 821, 822, 2253, 1319, 1321, ,2630, 2631, 2268, 3058, 2984, 2104, 2144, 2040, 2311, 2279, see copyright note) and RSA Data Security Public-Key Cryptography Standards (PKCS#1,3,5,7,8,9,10,12, see copyright note). | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |