cryptix.provider.cipher
Class SPEED

java.lang.Object
  |
  +--xjava.security.IJCE_Traceable
        |
        +--xjava.security.Cipher
              |
              +--cryptix.provider.cipher.SPEED
All Implemented Interfaces:
Parameterized, SymmetricCipher

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:

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:

  1. 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.6 $

Since:
Cryptix 2.2.2
Author:
Systemics Ltd, David Hopwood

Fields inherited from class xjava.security.Cipher
DECRYPT, ENCRYPT, UNINITIALIZED
 
Fields inherited from class xjava.security.IJCE_Traceable
tracing
 
Constructor Summary
SPEED()
          Constructs a SPEED cipher object, in the UNINITIALIZED state.
 
Method Summary
protected  void blockDecrypt(byte[] in, int in_offset, byte[] out, int out_offset)
          Decrypts a block.
protected  void blockEncrypt(byte[] in, int in_offset, byte[] out, int out_offset)
          Encrypts a block.
 java.lang.Object clone()
          Always throws a CloneNotSupportedException (cloning of ciphers is not supported for security reasons).
(package private)  void dump()
           
protected  int engineBlockSize()
          SPI: Return the data block length of this cipher.
protected  java.lang.Object engineGetParameter(java.lang.String param)
          SPI: Gets the value of the specified algorithm parameter.
 void engineInitDecrypt(java.security.Key key)
          SPI: Initializes this cipher for decryption, using the specified key.
 void engineInitEncrypt(java.security.Key key)
          SPI: Initializes this cipher for encryption, using the specified key.
protected  void engineSetParameter(java.lang.String param, java.lang.Object value)
          SPI: Sets the specified algorithm parameter to the specified value.
protected  int engineUpdate(byte[] in, int inOffset, int inLen, byte[] out, int outOffset)
          SPI: This is the main engine method for updating data.
protected  void finalize()
          Cleans up resources used by this instance, if necessary.
static LinkStatus getLinkStatus()
          Gets an object representing the native linking status of this class.
 int getRounds()
          Returns the currently set number of rounds for this instance.
static void main(java.lang.String[] argv)
          Entry point for self_test.
static void self_test(java.io.PrintWriter out, java.lang.String[] argv)
          Runs algorithm through test data, including certification data provided in paper.
 void setBlockSize(int blocksize)
          Sets the block size in bytes for this cipher.
 void setRounds(int rounds)
          Sets the number of rounds for this cipher.
 
Methods inherited from class xjava.security.Cipher
blockSize, crypt, crypt, crypt, doFinal, doFinal, doFinal, doFinal, engineCiphertextBlockSize, engineCrypt, engineInBufferSize, engineOutBufferSize, enginePlaintextBlockSize, engineSetPaddingScheme, getAlgorithm, getAlgorithms, getAlgorithms, getCiphertextBlockSize, getInputBlockSize, getInstance, getInstance, getInstance, getMode, getOutputBlockSize, getPadding, getPaddingScheme, getParameter, getPlaintextBlockSize, getProvider, getState, inBufferSize, inBufferSizeFinal, initDecrypt, initEncrypt, isPaddingBlockCipher, outBufferSize, outBufferSizeFinal, setParameter, toString, update, update, update, update
 
Methods inherited from class xjava.security.IJCE_Traceable
, disableTracing, enableTracing, traceMethod, traceResult, traceResult, traceVoidMethod
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

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".
Method Detail

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 java.lang.Object

clone

public final java.lang.Object clone()
                             throws java.lang.CloneNotSupportedException
Always throws a CloneNotSupportedException (cloning of ciphers is not supported for security reasons).
Overrides:
clone in class Cipher
Following copied from class: xjava.security.Cipher
Throws:
java.lang.CloneNotSupportedException - if the cipher is not cloneable.

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.
Overrides:
engineBlockSize in class Cipher
Returns:
the block length in bytes.

engineInitEncrypt

public void engineInitEncrypt(java.security.Key key)
                       throws java.security.InvalidKeyException
SPI: Initializes this cipher for encryption, using the specified key.
Overrides:
engineInitEncrypt in class Cipher
Parameters:
key - the key to use for encryption.
Throws:
java.security.InvalidKeyException - if one of the following occurs:
  • key.getEncoded() == null;
  • The length of the user key array is not ...

engineInitDecrypt

public void engineInitDecrypt(java.security.Key key)
                       throws java.security.InvalidKeyException,
                              CryptixException
SPI: Initializes this cipher for decryption, using the specified key.
Overrides:
engineInitDecrypt in class Cipher
Parameters:
key - the key to use for decryption.
Throws:
java.security.InvalidKeyException - if one of the following occurs:
  • key.getEncoded() == null;
  • The length of the user key array is not ...

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.

Overrides:
engineUpdate in class Cipher
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.

engineSetParameter

protected void engineSetParameter(java.lang.String param,
                                  java.lang.Object value)
                           throws NoSuchParameterException,
                                  java.security.InvalidParameterException,
                                  InvalidParameterTypeException
SPI: Sets the specified algorithm parameter to the specified value.

SPEED has two parameters:

Overrides:
engineSetParameter in class Cipher
Parameters:
param - the string name of the parameter.
value - the parameter value.
Throws:
java.security.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.
InvalidParameterTypeException - if value is of the wrong type.

engineGetParameter

protected java.lang.Object engineGetParameter(java.lang.String param)
                                       throws NoSuchParameterException,
                                              java.security.InvalidParameterException
SPI: Gets the value of the specified algorithm parameter.

SPEED has two parameters:

Overrides:
engineGetParameter in class Cipher
Parameters:
param - the string name of the parameter.
Returns:
the object that represents the parameter value, or null if there is none.

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:
java.lang.IllegalStateException - if this cipher is not uninitialised.
java.security.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:
java.lang.IllegalStateException - if this cipher is not uninitialised.
java.lang.IllegalArgumentException - if the given number of rounds is not supported.

dump

void dump()

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(java.lang.String[] argv)
Entry point for self_test.

self_test

public static void self_test(java.io.PrintWriter out,
                             java.lang.String[] argv)
                      throws java.lang.Exception
Runs algorithm through test data, including certification data provided in paper.