RsaPkcs1v1_5Signature
insteadpublic abstract class RSASignature
extends java.security.Signature
java.security.Signature class for providing
the functionality of the RSA digital signature algorithm, featured by any proper
hash algorithm.
Within the IAIK-JCE environment, this class is extended by Md2RSASignature,
Md5RSASignature, ShaRSASignature and SSLRSASignature
for supporting the "MD2 with RSA", "MD5 with RSA" (as described in PKCS#1) and
"SHA with RSA" signature algorithms, and a particular signature scheme to be used within
the Secure Sockets Layer SSLv3 protocol.
Digital signatures are used for ensuring data authentication and data integrity. RSA based signature algorithms use a proper hash function (like MD2, MD5 or SHA) for creating a message digest of the message to be signed. Subsequently this message digest is encrypted with the RSA private key of the entity going to sign the message. Message and encrypted message digest together are sent to the intended receiver that verifies the signature by decrypting the received encrypted message digest with the corresponding RSA public key, and comparing it with the hash value derived from the received original message after hashing it with the same hash function as used by the entity that has sent the message.
This class follows the guidelines presented in PKCS #1: RSA Encryption Version 1.5 (RFC 2313)) for implementing a signature algorithm based on the RSA encryption method for being used in signing X.509/PEM certificates, certificate-revocation lists, PKCS#6 extended certificates, and other objects employing digital signatures such as X.401 message tokens. The algorithms presented in PKCS#1 are not intended to be used in PKCS#7, where signatures (encrypted message digests) are treated as octet strings, in contrast to the bit string interpretation of PKCS#1.
For implementing a RSASignature with a specific hash algorithm you only have to extend
this class and supply the variable "hash" with an instance of the desired hash
algorithm, see Md2RSASignature, Md5RSASignature, ShaRSASignature.
An application wishing to sign some message or to verify some signature, generally
has to perform three steps (in the following example, HASH has to be
replaced by the name of the desired hash algorithm):
getInstance method, e.g.:
Signature hash_rsa = Signature.getInstance("HASH/RSA");
hash_rsa.initSign(rsaPrivateKey);
hash_rsa.initVerify(rsaPublicKey);
sign method returning the signature as DER encoded byte array.
Otherwise, if the Signature object has been initialized for verifying, first the
data to be verified is supplied to the Signature object, and subsequently the
signature is verified by calling the verify method, supplied with
the DER encoded byte array holding the corresponding signature:
hash_rsa.update(data); byte[] signature = hash_rsa.sign();
hash_rsa.update(data);
System.out.println("Signature " + (hash_rsa.verify(signature) ? "correct!" : "not correct!"));
Md2RSASignature,
Md5RSASignature,
ShaRSASignature,
SslRsaSignature,
Signature| Modifier and Type | Field and Description |
|---|---|
protected java.security.MessageDigest |
hash
Deprecated.
The MessageDigest used to hash the data; supplied with an instance of the desired MessageDigest
algorithm by any extending subclass.
|
| Modifier | Constructor and Description |
|---|---|
protected |
RSASignature(AlgorithmID algorithm,
java.security.MessageDigest hash)
Deprecated.
Creates a RSA Signature object with a specified hash algorithm.
|
| Modifier and Type | Method and Description |
|---|---|
protected java.lang.Object |
engineGetParameter(java.lang.String param)
Deprecated.
This method is not implemented and only throws an InvalidParameterException
|
protected void |
engineInitSign(java.security.PrivateKey pk)
Deprecated.
SPI: Initializes this Signature object with the given
RSA private key for going to sign some data.
|
protected void |
engineInitVerify(java.security.PublicKey pk)
Deprecated.
SPI: Initializes this Signature object with the given
RSA public key for performing a signature verification.
|
protected void |
engineSetParameter(java.lang.String param,
java.lang.Object value)
Deprecated.
This method is not implemented and only throws an InvalidParameterException
|
protected byte[] |
engineSign()
Deprecated.
SPI: Returns a byte array holding the signature resulting from all
already performed data update operations.
|
protected void |
engineUpdate(byte b)
Deprecated.
SPI: Updates the data to be signed or verified
with the specified byte.
|
protected void |
engineUpdate(byte[] b,
int off,
int len)
Deprecated.
SPI: Updates the data to be signed or verified with the
specified number of bytes, beginning at the specified offset within the given byte array.
|
protected boolean |
engineVerify(byte[] sigBytes)
Deprecated.
Verifies the given signature of a message according to PKCS#1.
|
clone, getAlgorithm, getInstance, getInstance, getInstance, getParameter, getParameters, getProvider, initSign, initSign, initVerify, initVerify, setParameter, setParameter, sign, sign, toString, update, update, update, update, verify, verifyprotected java.security.MessageDigest hash
Md2RSASignature,
Md5RSASignature,
ShaRSASignatureprotected RSASignature(AlgorithmID algorithm, java.security.MessageDigest hash)
This constructor is called from subclasses to represent a RSA signature with a defined hash algorithm like Md2, Md5 or Sha.
Applications use
Signature.getInstance("HASHwithRSA");
for creating a Signature object, where HASH has to be replaced
by the name of the desired hash algorithm.algorithm - the hash algorithm to useMd2RSASignature,
Md5RSASignature,
ShaRSASignature,
Signature.getInstance(java.lang.String)protected void engineInitVerify(java.security.PublicKey pk)
throws java.security.InvalidKeyException
engineInitVerify in class java.security.SignatureSpipk - the RSA public key belonging to the RSA private key that has been used for signing.java.security.InvalidKeyException - if a key encoding error occursprotected void engineInitSign(java.security.PrivateKey pk)
throws java.security.InvalidKeyException
engineInitSign in class java.security.SignatureSpipk - the RSA private key to be used for signing.java.security.InvalidKeyException - if a key encoding error occursprotected byte[] engineSign()
throws java.security.SignatureException
The signature is returned as defined in PKCS #1:
RSA Encryption Version 1.5 (RFC 2313), claiming for an
ASN.1 BIT STRING object. For building the signature according to PKCS#1, the data
resulting from the several update operations is digested using the defined message
digest algorithm. Subsequently, from message digest and message-digest AlgorithmID
an ASN.1 DigestInfo object is created and DER encoded as required by
PKCS#1:
DigestInfo ::= SEQUENCE {
digestAlgorithm DigestAlgorithmIdentifier,
digest Digest }
DigestAlgorithmIdentifier ::= AlgorithmIdentifier
Digest ::= OCTET STRING
Subsequently the RSA encryption is performed with the signer's RSA private key and the resulting octet string is converted to the bit string yielding the desired PKCS#1 signature.
Please notice that calling this sign method will return the signature value resulting from encrypting the BER encoded DigestInfo onject. The conversion to a bit string is left to the calling application.
engineSign in class java.security.SignatureSpijava.security.SignatureException - if an error occurs when creating the signatureprotected boolean engineVerify(byte[] sigBytes)
throws java.security.SignatureException
PKCS #1: RSA Encryption Version 1.5 (RFC 2313)
defines a signature as bit string, which has to be converted into an octet
string, RSA decrypted with the signer's RSA public key, and DER decoded for
giving an ASN.1 DigestInfo. From this DigestInfo
the message digest shall be taken for comparing it with the message digest
derived from hashing the original message with the same message digest
algorithm.
Please notice that first step of bit-string-to-octet-string conversion already has to be done when calling this verify method. In this way the supplied sigBytes value has to be the octet string signature value.
engineVerify in class java.security.SignatureSpisigBytes - the signature bytes to be verifiedtrue if signature is OK, false otherwisejava.security.SignatureException - if an error occurs when verifying the signatureprotected void engineUpdate(byte b)
engineUpdate in class java.security.SignatureSpib - the byte to be used for updating.protected void engineUpdate(byte[] b,
int off,
int len)
engineUpdate in class java.security.SignatureSpib - the byte array holding the data to be used for this update operation.off - the offset, indicating the start position within the given byte array.len - the number of bytes to be obtained from the given byte array, starting at the given position.protected void engineSetParameter(java.lang.String param,
java.lang.Object value)
throws java.security.InvalidParameterException
engineSetParameter in class java.security.SignatureSpijava.security.InvalidParameterException - This Method is not supportedprotected java.lang.Object engineGetParameter(java.lang.String param)
throws java.security.InvalidParameterException
engineGetParameter in class java.security.SignatureSpijava.security.InvalidParameterException - This Method is not supported