Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Cryptix V3.1
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## cryptix.provider.rsa
Class Any_RSA_PKCS1Signature

    java.lang.Object
      |
      +--java.security.SignatureSpi
            |
            +--java.security.Signature
                  |
                  +--cryptix.provider.rsa.Any_RSA_PKCS1Signature

Direct Known Subclasses:
  MD2_RSA_PKCS1Signature, MD5_RSA_PKCS1Signature, RIPEMD160_RSA_PKCS1Signature, SHA1_RSA_PKCS1Signature

public abstract class Any_RSA_PKCS1Signature
extends Signature

An abstract class to digest a message and sign/verify the resulting hash value, using any JCA MessageDigest algorithm with the RSA digital signature scheme, and the formatting and padding conventions defined by PKCS#1. These conventions are compatible with PEM (RFC-1423).

References:

1. Bruce Schneier, "Section 19.3 RSA," Applied Cryptography, 2nd edition, John Wiley & Sons, 1996.

2. PKCS#1 [need reference]

3. RFC-1423 [need reference]

Copyright © 1997 Systemics Ltd on behalf of the Cryptix Development Team.
All rights reserved.

$Revision: 1.8 $

Since:
  Cryptix 2.2.2
Author:
  David Hopwood, Raïf S. Naffah

Fields inherited from class java.security.Signature
`SIGN, state, UNINITIALIZED, VERIFY`

Fields inherited from class java.security.SignatureSpi
`appRandom`

Constructor Summary
`protected` | `Any_RSA_PKCS1Signature(String mdAlgorithm)` Constructor for an Any_RSA_PKCS1Signature.

Method Summary
`protected Object` | `engineGetParameter(String param)`
`protected void` | `engineInitSign(PrivateKey key)` SPI: Initializes this signature object for signing, using the given private key.
`protected void` | `engineInitVerify(PublicKey key)` SPI: Initializes this signature object for verification, using the given public key.
`protected void` | `engineSetParameter(String param, Object value)`
`protected byte[]` | `engineSign()` Terminates the update process and returns the signature bytes of all the data signed so far.
`protected void` | `engineUpdate(byte b)` Updates the data to be signed or verified, using one byte.
`protected void` | `engineUpdate(byte[] in, int offset, int length)` Updates the data to be signed or verified, using the specified sub-array of bytes, starting at the specified offset.
`protected boolean` | `engineVerify(byte[] signature)` Terminates the update process and verifies that the passed signature equals that of a generated one based on the updated data so far.
`protected abstract byte[]` | `getAlgorithmEncoding()` Returns the ASN.1 bytes of the AlgorithmIdentifier token described in `engineSign()` method above.

Methods inherited from class java.security.Signature
`clone, getAlgorithm, getInstance, getInstance, getParameter, getProvider, initSign, initSign, initVerify, setParameter, setParameter, sign, sign, toString, update, update, update, verify`

Methods inherited from class java.security.SignatureSpi
`engineInitSign, engineSetParameter, engineSign`

Methods inherited from class java.lang.Object
`equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Constructor Detail

### Any_RSA_PKCS1Signature

    protected Any_RSA_PKCS1Signature(String mdAlgorithm)

  Constructor for an Any_RSA_PKCS1Signature.
  Parameters:
    `mdAlgorithm` - the standard JCA algorithm name of the message digest to be used.

Method Detail

### engineInitSign

    protected void engineInitSign(PrivateKey key)
                           throws InvalidKeyException

  SPI: Initializes this signature object for signing, using the given private key.
  Overrides:
    engineInitSign in class SignatureSpi
  Parameters:
    `key` - the private key to be used to generate signatures.
  Throws:
    InvalidKeyException - If the key class does not implement java.security.interfaces.RSAPrivateKey or If the size of the minimal PKCS#1 frame generated by the engineSign() method will be larger than the public key modulus.

### engineInitVerify

    protected void engineInitVerify(PublicKey key)
                             throws InvalidKeyException

  SPI: Initializes this signature object for verification, using the given public key.
  Overrides:
    engineInitVerify in class SignatureSpi
  Parameters:
    `key` - the public key this signature is assumed to have been generated with.
  Throws:
    InvalidKeyException - If the key class does not implement java.security.interfaces.RSAPrivateKey or If the size of the minimal PKCS#1 frame generated by the engineSign() method will be larger than the public key modulus.

### engineUpdate

    protected void engineUpdate(byte b)
                         throws SignatureException

  Updates the data to be signed or verified, using one byte.
  Overrides:
    engineUpdate in class SignatureSpi
  Parameters:
    `b` - the byte to use for the update process.
  Throws:
    SignatureException - if the engine is not initialised properly.

### engineUpdate

    protected void engineUpdate(byte[] in,
                                int offset,
                                int length)
                         throws SignatureException

  Updates the data to be signed or verified, using the specified sub-array of bytes, starting at the specified offset.
  Overrides:
    engineUpdate in class SignatureSpi
  Parameters:
    `in` - the array of bytes.
    `offset` - the offset to start from in in.
    `length` - the number of bytes to use, starting at offset.
  Throws:
    SignatureException - if the engine is not initialised properly.

### engineSign

    protected byte[] engineSign()
                         throws SignatureException

  Terminates the update process and returns the signature bytes of all the data signed so far.

  NOTES: Sun's documentation talks about the bytes returned being X.509-encoded. For this RSA/PKCS#1 implementation, they conform to PKCS#1 section 10. Practically, the return value will be formed by concatenating a leading NULL byte, a block type BT, a padding block PS, another NULLbyte, and finally a data block D; ie:

           return = 0x00 || BT || PS || 0x00 || D.

  For signing, PKCS#1 block type 01 encryption-block formatting scheme is employed. The block type BT is a single byte valued 0x01 and the padding block PS is enough 0xFF bytes to make the length of the complete RSA Multi Precision Integer equal to the length of the public modulus. The data block D consists of the MIC -- Message Integrity Check, or message digest value-- and the MIC algorithm ASN.1 encoded identifier. The formal syntax in ASN.1 notation is:

         SEQUENCE {
           digestAlgorithm  AlgorithmIdentifier,
           digest           OCTET STRING
         }

         AlgorithmIdentifier ::= SEQUENCE {
           algorithm        OBJECT IDENTIFIER,
           parameters       ANY DEFINED BY algorithm OPTIONAL
         }

  Overrides:
    engineSign in class SignatureSpi
  Returns:
    the signature bytes of the signing operation's result.
  Throws:
    SignatureException - if the engine is not initialised properly.

### engineVerify

    protected boolean engineVerify(byte[] signature)
                            throws SignatureException

  Terminates the update process and verifies that the passed signature equals that of a generated one based on the updated data so far.

  NOTES: Sun's documentation talks about the bytes received being X.509-encoded. For this RSA/PKCS#1 implementation, the bytes received are assumed to conform to PKCS#1 section 10, or have been generated by a previous invocation of the `engineSign` method.

  Overrides:
    engineVerify in class SignatureSpi
  Parameters:
    `signature` - the signature bytes to be verified.
  Returns:
    true if the signature was verified successfully, false otherwise.
  Throws:
    SignatureException - if the engine is not initialised properly, the received signature data is improperly encoded or of the wrong type, etc.

### engineSetParameter

    protected void engineSetParameter(String param,
                                      Object value)
                               throws InvalidParameterException

  Overrides:
    engineSetParameter in class SignatureSpi

### engineGetParameter

    protected Object engineGetParameter(String param)
                                 throws InvalidParameterException

  Overrides:
    engineGetParameter in class SignatureSpi

### getAlgorithmEncoding

    protected abstract byte[] getAlgorithmEncoding()

  Returns the ASN.1 bytes of the AlgorithmIdentifier token described in `engineSign()` method above.
  Returns:
    the AlgorithmIdentifier bytes.

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Cryptix V3.1
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright (C) 1995-2000 The Cryptix Foundation Ltd. All rights reserved.