COM.claymoresystems.provider
Class RawRSACipher

java.lang.Object
  extended by Cipher
      extended by COM.claymoresystems.provider.RawRSACipher
All Implemented Interfaces:
Blindable, java.lang.Cloneable

public class RawRSACipher
extends Cipher
implements java.lang.Cloneable, Blindable

The raw RSA encryption algorithm, without any block framing.

If the number of bits in the modulus is bitlength, the plaintext and ciphertext block sizes will both be (int) ((bitlength+7)/8). When in ENCRYPT mode, if the value of any plaintext block, considered as a BigInteger with Big-Endian byte order, is greater than or equal to the modulus, a CryptixException will be thrown.

This class is designed to allow any input to the RSA encryption algorithm, in order to facilitate implementation of standards which use a block framing format not otherwise supported by Cryptix. Note that using raw RSA directly on application data is potentially insecure; wherever possible a higher level algorithm such as "RSA/PKCS#1" should be used.

(Note: RSA/PKCS#1 is not implemented in this version of Cryptix.)

References:

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

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

$Revision: 1.11 $

Since:
Cryptix 2.2.2
Author:
Raif S. Naffah, David Hopwood

Constructor Summary
RawRSACipher()
          Constructs a RawRSA cipher object, in the UNINITIALIZED state.
 
Method Summary
protected  int engineCiphertextBlockSize()
           
protected  void engineInitDecrypt(java.security.Key key)
          SPI: Initializes this cipher object for decryption, using the given private key.
protected  void engineInitEncrypt(java.security.Key key)
          SPI: Initializes this cipher object for encryption, using the given public key.
protected  int enginePlaintextBlockSize()
          SPI: Return the block size, in bytes.
protected  int engineUpdate(byte[] in, int inOffset, int inLen, byte[] out, int outOffset)
           
static void main(java.lang.String[] args)
          Entry point for very basic self_test.
static void self_test(java.io.PrintWriter out)
           
 void setBlindingInfo(java.security.SecureRandom rng, CryptixRSAPublicKey pubKey)
          set the RNG for blinding
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RawRSACipher

public RawRSACipher()
Constructs a RawRSA cipher object, in the UNINITIALIZED state. This calls the Cipher constructor with implBuffering false, implPadding false and the provider set to "Cryptix".

Method Detail

engineInitEncrypt

protected void engineInitEncrypt(java.security.Key key)
                          throws java.security.InvalidKeyException
SPI: Initializes this cipher object for encryption, using the given public key.

Parameters:
key - the public key to be used for encryption.
Throws:
java.security.InvalidKeyException - if the key class does not implement java.security.interfaces.RSAPublicKey.

engineInitDecrypt

protected void engineInitDecrypt(java.security.Key key)
                          throws java.security.InvalidKeyException
SPI: Initializes this cipher object for decryption, using the given private key.

Parameters:
key - the private key to be used for decryption.
Throws:
java.security.InvalidKeyException - if the key class does not implement java.security.interfaces.RSAPrivateKey.

enginePlaintextBlockSize

protected int enginePlaintextBlockSize()
SPI: Return the block size, in bytes. For RawRSA this is the number of bytes needed to represent the modulus, n.

Returns:
the block size in bytes.
Throws:
CryptixException - if the cipher object is uninitialized.

engineCiphertextBlockSize

protected int engineCiphertextBlockSize()

engineUpdate

protected int engineUpdate(byte[] in,
                           int inOffset,
                           int inLen,
                           byte[] out,
                           int outOffset)

setBlindingInfo

public void setBlindingInfo(java.security.SecureRandom rng,
                            CryptixRSAPublicKey pubKey)
set the RNG for blinding

Specified by:
setBlindingInfo in interface Blindable
Parameters:
rng - a secure RNG

main

public static final void main(java.lang.String[] args)
Entry point for very basic self_test.


self_test

public static void self_test(java.io.PrintWriter out)
                      throws java.lang.Exception
Throws:
java.lang.Exception


Copyright (c) 1999-2001 Claymore Systems, Inc., All Rights Reserved.