Cipherpublic abstract class Cipher extends Object Implements an abstract class that generalizes all ciphers. It is
modelled after javax.crypto.Cipher. |
Fields Summary |
---|
protected static final int | MODE_UNINITIALIZEDFlag to indicate the current cipher algorithm is unknown. | public static final int | ENCRYPT_MODEUsed in init to indicate encryption mode. | public static final int | DECRYPT_MODEUsed in init to indicate decryption mode. |
Constructors Summary |
---|
protected Cipher()Protected constructor.
|
Methods Summary |
---|
public abstract int | doFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)Encrypts or decrypts data in a single-part operation, or finishes a
multiple-part operation. The data is encrypted or decrypted,
depending on how this cipher was initialized.
The first inputLen bytes in the input
buffer, starting at inputOffset inclusive, and any input
bytes that may have been buffered during a previous
update operation, are processed, with padding
(if requested) being applied.
The result is stored in the output buffer, starting at
outputOffset inclusive.
If the output buffer is too small to hold the result,
a ShortBufferException is thrown. In this case, repeat this
call with a larger output buffer.
Upon finishing, this method resets this cipher object to the state
it was in when previously initialized via a call to init .
That is, the object is reset and available to encrypt or decrypt
(depending on the operation mode that was specified in the call to
init ) more data.
Note: if any exception is thrown, this cipher object may need to
be reset before it can be used again.
Note: this method should be copy-safe, which means the
input and output buffers can reference
the same byte array and no unprocessed input data is overwritten
when the result is copied into the output buffer.
| public byte[] | getIV()Returns the initialization vector (IV) in a new buffer.
This is useful in the case where a random IV was created.
return null;
| public static final com.sun.midp.crypto.Cipher | getInstance(java.lang.String transformation)Generates a Cipher object that implements the specified
transformation.
Cipher cipher = null;
String alg = ("" + transformation).toUpperCase().trim();
String chainingMode = "";
String padding = "";
if (alg.indexOf("/") != -1) {
int first = alg.indexOf("/");
int second = alg.indexOf("/", first + 1);
if (second == alg.lastIndexOf('/")) {
chainingMode = alg.substring(first + 1, second).trim();
padding = alg.substring(second + 1).trim();
alg = alg.substring(0, first).trim();
}
}
// We have the generic equivalent of RC4: ARC4 or ARCFOUR.
if (alg.equals("RC4") || alg.equals("ARCFOUR")) {
alg = "ARC4";
}
try {
Class cipherClass;
cipherClass = Class.forName("com.sun.midp.crypto." + alg);
cipher = (Cipher)cipherClass.newInstance();
} catch (Throwable t) {
throw new NoSuchAlgorithmException(transformation);
}
try {
cipher.setChainingModeAndPadding(chainingMode, padding);
} catch (IllegalArgumentException iae) {
// throw NoSuchAlgorithmException if the chainingMode is invalid
// (setChainingModeAndPadding() throws IllegalArgumentException
// in this case)
throw new NoSuchAlgorithmException(transformation);
}
return cipher;
| public void | init(int opmode, Key key)Initializes this cipher with a key.
The cipher is initialized for one of the following operations:
encryption, decryption, depending
on the value of opmode .
If this cipher requires any algorithm parameters that cannot be
derived from the given key , the underlying cipher
implementation is supposed to generate the required parameters itself
(using provider-specific default or random values) if it is being
initialized for encryption, and raise an
InvalidKeyException if it is being
initialized for decryption.
Note that when a Cipher object is initialized, it loses all
previously-acquired state. In other words, initializing a Cipher is
equivalent to creating a new instance of that Cipher and initializing
it.
try {
init(opmode, key, null);
} catch (InvalidAlgorithmParameterException e) {
throw new InvalidKeyException();
}
| public abstract void | init(int opmode, Key key, CryptoParameter params)Initializes this cipher with a key and a set of algorithm
parameters.
The cipher is initialized for one of the following operations:
encryption or decryption depending
on the value of opmode .
If this cipher requires any algorithm parameters and
params is null, the underlying cipher implementation is
supposed to generate the required parameters itself (using
provider-specific default or random values) if it is being
initialized for encryption, and raise an
InvalidAlgorithmParameterException if it is being
initialized for decryption.
Note that when a Cipher object is initialized, it loses all
previously-acquired state. In other words, initializing a Cipher is
equivalent to creating a new instance of that Cipher and initializing
it.
| protected abstract void | setChainingModeAndPadding(java.lang.String mode, java.lang.String padding)Called by the factory method to set the mode and padding parameters.
Need because Class.newInstance does not take args.
| public abstract int | update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)Continues a multiple-part encryption or decryption operation
(depending on how this cipher was initialized), processing another data
part.
The first inputLen bytes in the input
buffer, starting at inputOffset inclusive, are processed,
and the result is stored in the output buffer, starting at
outputOffset inclusive.
If the output buffer is too small to hold the result,
a ShortBufferException is thrown. In this case, repeat this
call with a larger output buffer.
If inputLen is zero, this method returns
a length of zero.
Note: this method should be copy-safe, which means the
input and output buffers can reference
the same byte array and no unprocessed input data is overwritten
when the result is copied into the output buffer.
|
|