|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--xjava.security.IJCE_Traceable | +--xjava.security.Cipher | +--cryptix.provider.rsa.RawRSACipher
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:
Copyright © 1997
Systemics Ltd on behalf of the
Cryptix Development Team.
All rights reserved.
$Revision: 1.11 $
Fields inherited from class xjava.security.Cipher |
DECRYPT, ENCRYPT, UNINITIALIZED |
Fields inherited from class xjava.security.IJCE_Traceable |
tracing |
Constructor Summary | |
RawRSACipher()
Constructs a RawRSA cipher object, in the UNINITIALIZED state. |
Method Summary | |
protected int |
engineCiphertextBlockSize()
SPI: Returns the length of a ciphertext block, in bytes. |
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)
SPI: This is the main engine method for updating data. |
static void |
main(java.lang.String[] args)
Entry point for very basic self_test . |
static void |
self_test(java.io.PrintWriter out)
|
Methods inherited from class xjava.security.IJCE_Traceable |
|
Methods inherited from class java.lang.Object |
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Constructor Detail |
public RawRSACipher()
Method Detail |
protected void engineInitEncrypt(java.security.Key key) throws java.security.InvalidKeyException
engineInitEncrypt
in class Cipher
key
- the public key to be used for encryption.java.security.InvalidKeyException
- if the key class does not implement
java.security.interfaces.RSAPublicKey.protected void engineInitDecrypt(java.security.Key key) throws java.security.InvalidKeyException
engineInitDecrypt
in class Cipher
key
- the private key to be used for decryption.java.security.InvalidKeyException
- if the key class does not implement
java.security.interfaces.RSAPrivateKey.protected int enginePlaintextBlockSize()
enginePlaintextBlockSize
in class Cipher
CryptixException
- if the cipher object is uninitialized.protected int engineCiphertextBlockSize()
Cipher
The value may change when initEncrypt
or
initDecrypt
is called, but it should not change at
other times.
The default implementation returns engineBlockSize()
.
engineCiphertextBlockSize
in class Cipher
xjava.security.Cipher
protected int engineUpdate(byte[] in, int inOffset, int inLen, byte[] out, int outOffset)
Cipher
When implBuffering
is true, this method will be called
with the same data that is passed to update
or
crypt
(i.e. there will be exactly one call to
engineUpdate
for each call to update
or
crypt
).
When implBuffering
is false, the Cipher superclass will
ensure that when it calls this method, inLen is a non-negative
multiple of getInputBlockSize()
.
in and out may be the same array, and the input and output regions may overlap. A cipher implementation should not use any part of in or out as working storage for intermediate steps of the algorithm. It should copy only the final result into the out array.
SECURITY: if array arguments are passed to native code, the implementation must ensure that a buffer overflow or illegal memory access cannot occur, regardless of the arguments passed to this method. I.e. the native library should not be called if:
in == null || out == null || inLen < 0 || inLen % (block size) != 0 || inOffset < 0 || (long)inOffset + inLen > in.length || outOffset < 0 || (long)outOffset + (number of bytes to be written) > out.length
Note that the (long)
casts are essential, because
inOffset or outOffset could be close to
Integer.MAX_VALUE
. The native method being called
should be private. This is important because untrusted code could
subclass the cipher implementation, and call this method directly
with any arguments.
engineUpdate
in class Cipher
xjava.security.Cipher
in
- the input data.inOffset
- the offset into in specifying where the
data starts.inLen
- the length of the subarray.out
- the output array.outOffset
- the offset indicating where to start writing into
the out array.public static final void main(java.lang.String[] args)
self_test
.public static void self_test(java.io.PrintWriter out) throws java.lang.Exception
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |