de.flexiprovider.core.rsa
Class RSASignaturePKCS1v15

java.lang.Object
  |
  +--java.security.SignatureSpi
        |
        +--de.flexiprovider.api.Signature
              |
              +--de.flexiprovider.core.rsa.RSASignaturePKCS1v15
Direct Known Subclasses:
RSASignaturePKCS1v15.MD5, RSASignaturePKCS1v15.RawMD5, RSASignaturePKCS1v15.RawRIPEMD160, RSASignaturePKCS1v15.RawSHA1, RSASignaturePKCS1v15.RawSHA224, RSASignaturePKCS1v15.RawSHA256, RSASignaturePKCS1v15.RawSHA384, RSASignaturePKCS1v15.RawSHA512, RSASignaturePKCS1v15.RIPEMD160, RSASignaturePKCS1v15.SHA1, RSASignaturePKCS1v15.SHA224, RSASignaturePKCS1v15.SHA256, RSASignaturePKCS1v15.SHA384, RSASignaturePKCS1v15.SHA512

public abstract class RSASignaturePKCS1v15
extends Signature

The deterministic RSA signature algorithm RSASSA-PKCS1-v1_5, originally defined in PKCS #1 v1.5, implemented as per PKCS#1 version 2.1 with a variable message digest algorithm. EMSA-PKCS1-v1_5 (defined in the IEEE P1363a draft) is used for message encoding, which embeds a hash identifier in the signature. Whilst no attack against RSASSA-PKCS1-v1_5 is currently known, it is suggested to move to RSASSA-PSS as a security precaution (stronger theoretical security properties apply to RSASSA-PSS in the random oracle model).

Subclassing it and overriding the getOID and getMessageDigest methods yields the message digest specific classes.

Author:
Thomas Wahrenbruch, Ralf-Philipp Weinmann

Inner Class Summary
static class RSASignaturePKCS1v15.MD5
          RSA PKCS#1 v1.5 signature with MD5 message digest
static class RSASignaturePKCS1v15.RawMD5
          RSA PKCS#1 v1.5 signature with MD5 message digest
static class RSASignaturePKCS1v15.RawRIPEMD160
          RSA PKCS#1 v1.5 signature with RIPEMD-160 message digest
static class RSASignaturePKCS1v15.RawSHA1
          RSA PKCS#1 v1.5 signature with SHA-1 message digest
static class RSASignaturePKCS1v15.RawSHA224
          RSA PKCS#1 v1.5 signature with SHA-224 message digest
static class RSASignaturePKCS1v15.RawSHA256
          RSA PKCS#1 v1.5 signature with SHA-256 message digest
static class RSASignaturePKCS1v15.RawSHA384
          RSA PKCS#1 v1.5 signature with SHA-384 message digest
static class RSASignaturePKCS1v15.RawSHA512
          RSA PKCS#1 v1.5 signature with SHA-512 message digest
static class RSASignaturePKCS1v15.RIPEMD160
          RSA PKCS#1 v1.5 signature with RIPEMD-160 message digest
static class RSASignaturePKCS1v15.SHA1
          RSA PKCS#1 v1.5 signature with SHA-1 message digest
static class RSASignaturePKCS1v15.SHA224
          RSA PKCS#1 v1.5 signature with SHA-224 message digest
static class RSASignaturePKCS1v15.SHA256
          RSA PKCS#1 v1.5 signature with SHA-256 message digest
static class RSASignaturePKCS1v15.SHA384
          RSA PKCS#1 v1.5 signature with SHA-384 message digest
static class RSASignaturePKCS1v15.SHA512
          RSA PKCS#1 v1.5 signature with SHA-512 message digest
 
Fields inherited from class java.security.SignatureSpi
appRandom
 
Constructor Summary
protected RSASignaturePKCS1v15(java.lang.String oidStr, MessageDigest md)
          Constructor.
 
Method Summary
 void initSign(PrivateKey privateKey, SecureRandom secureRandom)
          Initializes the signature algorithm for signing a message.
 void initVerify(PublicKey publicKey)
          Initializes the signature algorithm for verifying a signature.
 void setParameters(AlgorithmParameterSpec params)
          Set parameters for the signature (not used).
 byte[] sign()
          Signs a message.
 void update(byte b)
          Feeds a message byte to the message digest.
 void update(byte[] b, int offset, int length)
          Feeds message bytes to the message digest.
 boolean verify(byte[] signature)
          Verifies a signature.
 
Methods inherited from class de.flexiprovider.api.Signature
engineGetParameter, engineInitSign, engineInitSign, engineInitVerify, engineSetParameter, engineSetParameter, engineSign, engineUpdate, engineUpdate, engineVerify, engineVerify, initSign, sign, update, verify, verify, verify
 
Methods inherited from class java.security.SignatureSpi
clone, engineSign
 
Methods inherited from class java.lang.Object
, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RSASignaturePKCS1v15

protected RSASignaturePKCS1v15(java.lang.String oidStr,
                               MessageDigest md)
Constructor. Generate the RSA-SSA-PSS algorithm identifier with the corresponding OID.
Parameters:
oidStr - the OID
md - the message digest
Method Detail

initSign

public void initSign(PrivateKey privateKey,
                     SecureRandom secureRandom)
              throws InvalidKeyException
Initializes the signature algorithm for signing a message.
Overrides:
initSign in class Signature
Parameters:
privateKey - the private key of the signer.
secureRandom - the source of randomness.
Throws:
InvalidKeyException - if the key is not an instance of RSAPrivKey.

initVerify

public void initVerify(PublicKey publicKey)
                throws InvalidKeyException
Initializes the signature algorithm for verifying a signature.
Overrides:
initVerify in class Signature
Parameters:
publicKey - the public key of the signer.
Throws:
InvalidKeyException - if the public key is not an instance of RSAPubKey.

setParameters

public void setParameters(AlgorithmParameterSpec params)
Set parameters for the signature (not used).
Overrides:
setParameters in class Signature
Parameters:
params - the parameters (not used)

update

public void update(byte[] b,
                   int offset,
                   int length)
Feeds message bytes to the message digest.
Overrides:
update in class Signature
Parameters:
b - array of message bytes
offset - index of message start
length - number of message bytes

update

public void update(byte b)
Feeds a message byte to the message digest.
Overrides:
update in class Signature
Parameters:
b - array of message bytes

sign

public byte[] sign()
            throws SignatureException
Signs a message.
Overrides:
sign in class Signature
Returns:
the signature.
Throws:
SignatureException - if the signature is not initialized properly.

verify

public boolean verify(byte[] signature)
Verifies a signature.
Overrides:
verify in class Signature
Parameters:
signature - the signature to be verified
Returns:
true if the signature is correct - false otherwise.