All Packages Class Hierarchy This Package Previous Next Index
Class cryptix.provider.cipher.SPEED
java.lang.Object
|
+----java.security.IJCE_Traceable
|
+----java.security.Cipher
|
+----cryptix.provider.cipher.SPEED
- public final class SPEED
- extends Cipher
- implements SymmetricCipher
SPEED is a block cipher with variable key size, data block size and number
of rounds (in the style of RC5).
These parameters are set as follows:
- The key size is taken from the encoded form of the key passed to
initEncrypt
or initDecrypt
. It can be
any even number of bytes from 6 to 32 (6, 8, 10, ... 32).
- The length of the data block defaults to the value of the parameter
"Alg.blockSize.SPEED", or 8 bytes (c.f. IDEA and DES) if that parameter
is not found.
It can be set by calling setBlockSize(), and can be 8, 16, or 32 bytes.
- The number of rounds defaults to the value of the parameter
"Alg.rounds.SPEED", or 64 (which gives 'adequate' security according
to the paper below) if that parameter is not found.
It can be set by calling setRounds(), and can be any number from 32
upwards, divisible by 4 (32, 36, ...).
These are recommended settings for 'adequate' security:
+--------------------------------------------------+
| block size | key length | rounds |
|==================================================|
| 8 | >= 8 | >= 64 |
|--------------------------------------------------|
| 16 | >= 8 | >= 48 |
|--------------------------------------------------|
| 32 | >= 8 | >= 48 |
+--------------------------------------------------+
SPEED was designed by Yuliang Zheng,
and is in the public domain.
References:
- Y. Zheng
"The SPEED Cipher,"
Proceedings of Financial Cryptography 97,
Springer-Verlag (forthcoming).
FC97 held at Anguilla, BWI, 24-28 February 1997.
Copyright © 1997
Systemics Ltd on behalf of the
Cryptix Development Team.
All rights reserved.
$Revision: 1.5 $
- Author:
- Systemics Ltd, David Hopwood
-
SPEED()
- Constructs a SPEED cipher object, in the UNINITIALIZED state.
-
blockDecrypt(byte[], int, byte[], int)
- Decrypts a block.
-
blockEncrypt(byte[], int, byte[], int)
- Encrypts a block.
-
clone()
- Always throws a CloneNotSupportedException (cloning of ciphers is not
supported for security reasons).
-
engineBlockSize()
- SPI: Return the data block length of this cipher.
-
engineGetParameter(String)
- SPI: Gets the value of the specified algorithm parameter.
-
engineInitDecrypt(Key)
- SPI: Initializes this cipher for decryption, using the
specified key.
-
engineInitEncrypt(Key)
- SPI: Initializes this cipher for encryption, using the
specified key.
-
engineSetParameter(String, Object)
- SPI: Sets the specified algorithm parameter to the specified
value.
-
engineUpdate(byte[], int, int, byte[], int)
- SPI: This is the main engine method for updating data.
-
finalize()
- Cleans up resources used by this instance, if necessary.
-
getLinkStatus()
- Gets an object representing the native linking status of this class.
-
getRounds()
- Returns the currently set number of rounds for this instance.
-
main(String[])
- Entry point for self_test.
-
self_test(PrintWriter, String[])
- Runs algorithm through test data, including certification data
provided in paper.
-
setBlockSize(int)
- Sets the block size in bytes for this cipher.
-
setRounds(int)
- Sets the number of rounds for this cipher.
SPEED
public SPEED()
- Constructs a SPEED cipher object, in the UNINITIALIZED state.
This calls the Cipher constructor with implBuffering false,
implPadding false and the provider set to "Cryptix".
getLinkStatus
public static LinkStatus getLinkStatus()
- Gets an object representing the native linking status of this class.
finalize
protected final void finalize()
- Cleans up resources used by this instance, if necessary.
- Overrides:
- finalize in class Object
clone
public final Object clone() throws CloneNotSupportedException
- Always throws a CloneNotSupportedException (cloning of ciphers is not
supported for security reasons).
- Overrides:
- clone in class Cipher
engineBlockSize
protected int engineBlockSize()
- SPI: Return the data block length of this cipher.
Default (8 bytes) is returned before instantiation,
actual length used by object returned after instantiation.
- Returns:
- the block length in bytes.
- Overrides:
- engineBlockSize in class Cipher
engineInitEncrypt
public void engineInitEncrypt(Key key) throws InvalidKeyException
- SPI: Initializes this cipher for encryption, using the
specified key.
- Parameters:
- key - the key to use for encryption.
- Throws: InvalidKeyException
- if one of the following occurs:
- key.getEncoded() == null;
- The length of the user key array is not ...
- Overrides:
- engineInitEncrypt in class Cipher
engineInitDecrypt
public void engineInitDecrypt(Key key) throws InvalidKeyException, CryptixException
- SPI: Initializes this cipher for decryption, using the
specified key.
- Parameters:
- key - the key to use for decryption.
- Throws: InvalidKeyException
- if one of the following occurs:
- key.getEncoded() == null;
- The length of the user key array is not ...
- Overrides:
- engineInitDecrypt in class Cipher
engineUpdate
protected int engineUpdate(byte in[],
int inOffset,
int inLen,
byte out[],
int outOffset)
- SPI: This is the main engine method for updating data.
in and out may be the same array, and the input and output
regions may overlap.
- Parameters:
- 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.
- Returns:
- the number of bytes written.
- Throws: CryptixException
- if the native library is being used, and it
reports an error.
- Overrides:
- engineUpdate in class Cipher
engineSetParameter
protected void engineSetParameter(String param,
Object value) throws NoSuchParameterException, InvalidParameterException, InvalidParameterTypeException
- SPI: Sets the specified algorithm parameter to the specified
value.
SPEED has two parameters:
- "rounds", which specifies the number of rounds for this instance
as a decimal String.
- "blockSize", which specifies the block size for this instance,
also as a decimal String.
- Parameters:
- param - the string name of the parameter.
- value - the parameter value.
- Throws: InvalidParameterException
- if param is an invalid
parameter for this cipher implementation, the
parameter is already set and cannot be set again, a
security exception occurs, and so on.
- Throws: InvalidParameterTypeException
- if value is of the wrong
type.
- Overrides:
- engineSetParameter in class Cipher
engineGetParameter
protected Object engineGetParameter(String param) throws NoSuchParameterException, InvalidParameterException
- SPI: Gets the value of the specified algorithm parameter.
SPEED has two parameters:
- "rounds", which specifies the number of rounds for this instance
as a decimal String.
- "blockSize", which specifies the block size for this instance,
also as a decimal String.
- Parameters:
- param - the string name of the parameter.
- Returns:
- the object that represents the parameter value, or null if there
is none.
- Overrides:
- engineGetParameter in class Cipher
setRounds
public void setRounds(int rounds)
- Sets the number of rounds for this cipher. Allowed only when this
cipher is in the UNINITIALIZED state; otherwise an exception is
thrown.
If the specified number is invalid, an IllegalArgumentException is
thrown.
- Parameters:
- rounds - the desired number of rounds: >= 32, multiple of 4
- Throws: IllegalStateException
- if this cipher is not uninitialised.
- Throws: InvalidParameterException
- if the given number of rounds is
not supported.
getRounds
public int getRounds()
- Returns the currently set number of rounds for this instance.
- Returns:
- the number of rounds.
setBlockSize
public void setBlockSize(int blocksize)
- Sets the block size in bytes for this cipher. Allowed only when this
cipher is in the UNINITIALIZED state; otherwise an exception is
thrown.
If the specified number is invalid, an IllegalArgumentException is
thrown.
- Parameters:
- blocksize - the desired block size in bytes: 8, 16 or 32
- Throws: IllegalStateException
- if this cipher is not uninitialised.
- Throws: IllegalArgumentException
- if the given number of rounds is
not supported.
blockEncrypt
protected void blockEncrypt(byte in[],
int in_offset,
byte out[],
int out_offset)
- Encrypts a block. The in and out buffers can be the same.
- Parameters:
- in - The data to be encrypted.
- in_offset - The start of data within the in buffer.
- out - The encrypted data.
- out_offset - The start of data within the out buffer.
blockDecrypt
protected void blockDecrypt(byte in[],
int in_offset,
byte out[],
int out_offset)
- Decrypts a block. The in and out buffers can be the same.
- Parameters:
- in - The data to be decrypted.
- in_offset - The start of data within the in buffer.
- out - The decrypted data.
- out_offset - The start of data within the out buffer.
main
public static final void main(String argv[])
- Entry point for self_test.
self_test
public static void self_test(PrintWriter out,
String argv[]) throws Exception
- Runs algorithm through test data, including certification data
provided in paper.
All Packages Class Hierarchy This Package Previous Next Index