net.rim.device.api.crypto
Class TripleDESCBCEncryptorEngine

java.lang.Object
  extended by net.rim.device.api.crypto.TripleDESCBCEncryptorEngine
All Implemented Interfaces:
BlockEncryptorEngine, BlockEncryptorEngineExt, SymmetricKeyEncryptorEngine

public final class TripleDESCBCEncryptorEngine
extends Object
implements SymmetricKeyEncryptorEngine, BlockEncryptorEngineExt

Implements the raw functionality of the TripleDES algorithm.

The TripleDES algorithm proposed by NIST utilizes the standard DES algorithm in an alternating encryption then decryption operation. That is, EDE (Encryption/Decryption/Encryption) performing three DES operations and hence its name. This cipher is also commonly referred to as the DESede cipher.

Our implementation provides two types of TripleDES. Namely, two key and three key TripleDES. That is, two key TripleDES uses two different keys -- one for the encryption operations and one for the decryption operation. Three key TripleDES uses a different key for each operation.

The key length is 128 bits or 192 bits depending on whether you are using two key or three key TripleDES. Note that the effective key length is actually 112 bits or 168 bits after removing the parity bits from the DES operations. The block size is 64 bits.

If possible, three key TripleDES should be used instead of two key TripleDES due to the larger keysize and specific attacks against two key TripleDES.

We implemented TripleDES as it's defined in NIST's FIPS 46-3.

This decryptor engine implements the CBC mode of operation as well.

See Also:
TripleDESCBCDecryptorEngine, CBCDecryptorEngine, TripleDESDecryptorEngine, TripleDESKey
Category:
Signed: This element is only accessible by signed applications. If you intend to use this element, please visit http://www.blackberry.com/go/codesigning to obtain a set of code signing keys. Code signing is only required for applications running on BlackBerry smartphones; development on BlackBerry Smartphone Simulators can occur without code signing.
Since:
BlackBerry API 5.0.0

Field Summary
Category: Signed static int BLOCK_LENGTH
          Represents the block length in bytes for the algorithm, namely 8 bytes.
 
Constructor Summary
Category: Signed TripleDESCBCEncryptorEngine(TripleDESKey key, InitializationVector iv)
          Creates a TripleDESCBCEncryptorEngine object based upon a TripleDES key as input, and initializes this key for use with the algorithm.
 
Method Summary
Category: Signed  void encrypt(byte[] plaintext, int plaintextOffset, byte[] ciphertext, int ciphertextOffset)
          Encrypts a block of the given plaintext into a block of ciphertext.
Category: Signed  void encrypt(byte[] plaintext, int plaintextOffset, byte[] ciphertext, int ciphertextOffset, int numBlocks)
          Encrypts a series of blocks of the given plaintext into a series of blocks of ciphertext.
Category: Signed  String getAlgorithm()
          Returns the name of the algorithm along with the mode, eg "TripleDES/CBC"
Category: Signed  int getBlockLength()
          Returns the block length that the engine uses when encrypting data.
Category: Signed  InitializationVector getIV()
          Returns the initialization vector associated with this encryptor engine.
Category: Signed  void setIV(InitializationVector iv)
          Sets the initialization vector associated with this encryptor engine.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 



Field Detail

BLOCK_LENGTH

public static final int BLOCK_LENGTH
Represents the block length in bytes for the algorithm, namely 8 bytes.

See Also:
Constant Field Values
Category:
Signed: This element is only accessible by signed applications. If you intend to use this element, please visit http://www.blackberry.com/go/codesigning to obtain a set of code signing keys. Code signing is only required for applications running on BlackBerry smartphones; development on BlackBerry Smartphone Simulators can occur without code signing.
Since:
BlackBerry API 5.0.0


Constructor Detail

TripleDESCBCEncryptorEngine

public TripleDESCBCEncryptorEngine(TripleDESKey key,
                                   InitializationVector iv)
                            throws CryptoTokenException,
                                   CryptoUnsupportedOperationException
Creates a TripleDESCBCEncryptorEngine object based upon a TripleDES key as input, and initializes this key for use with the algorithm.

Parameters:
key - The TripleDESKey object to use for encryption.
iv - An initialization vector used for seeding the engine.
Throws:
CryptoTokenException - Thrown when a problem occurs with a crypto token or the crypto token is invalid.
CryptoUnsupportedOperationException - Thrown if a call is made to an unsupported operation.
Category:
Signed: This element is only accessible by signed applications. If you intend to use this element, please visit http://www.blackberry.com/go/codesigning to obtain a set of code signing keys. Code signing is only required for applications running on BlackBerry smartphones; development on BlackBerry Smartphone Simulators can occur without code signing.
Since:
BlackBerry API 5.0.0


Method Detail

getAlgorithm

public String getAlgorithm()
Returns the name of the algorithm along with the mode, eg "TripleDES/CBC"

Specified by:
getAlgorithm in interface BlockEncryptorEngine
Returns:
A string representing the name of the encryption algorithm.
Category:
Signed: This element is only accessible by signed applications. If you intend to use this element, please visit http://www.blackberry.com/go/codesigning to obtain a set of code signing keys. Code signing is only required for applications running on BlackBerry smartphones; development on BlackBerry Smartphone Simulators can occur without code signing.
Since:
BlackBerry API 5.0.0

setIV

public void setIV(InitializationVector iv)
Sets the initialization vector associated with this encryptor engine.

Parameters:
iv - An initialization vector used for seeding the engine.
See Also:
TripleDESCBCEncryptorEngine.getIV()
Category:
Signed: This element is only accessible by signed applications. If you intend to use this element, please visit http://www.blackberry.com/go/codesigning to obtain a set of code signing keys. Code signing is only required for applications running on BlackBerry smartphones; development on BlackBerry Smartphone Simulators can occur without code signing.
Since:
BlackBerry API 5.0.0

getIV

public InitializationVector getIV()
Returns the initialization vector associated with this encryptor engine.

Returns:
The initialization vector.
See Also:
TripleDESCBCEncryptorEngine.setIV(net.rim.device.api.crypto.InitializationVector)
Category:
Signed: This element is only accessible by signed applications. If you intend to use this element, please visit http://www.blackberry.com/go/codesigning to obtain a set of code signing keys. Code signing is only required for applications running on BlackBerry smartphones; development on BlackBerry Smartphone Simulators can occur without code signing.
Since:
BlackBerry API 5.0.0

getBlockLength

public int getBlockLength()
Returns the block length that the engine uses when encrypting data.

Specified by:
getBlockLength in interface BlockEncryptorEngine
Returns:
An integer representing the block length in bytes.
Category:
Signed: This element is only accessible by signed applications. If you intend to use this element, please visit http://www.blackberry.com/go/codesigning to obtain a set of code signing keys. Code signing is only required for applications running on BlackBerry smartphones; development on BlackBerry Smartphone Simulators can occur without code signing.
Since:
BlackBerry API 5.0.0

encrypt

public void encrypt(byte[] plaintext,
                    int plaintextOffset,
                    byte[] ciphertext,
                    int ciphertextOffset)
             throws CryptoTokenException
Description copied from interface: BlockEncryptorEngine
Encrypts a block of the given plaintext into a block of ciphertext.

Specified by:
encrypt in interface BlockEncryptorEngine
Parameters:
plaintext - A byte array containing the input that is to be encrypted.
plaintextOffset - The starting offset, or initial byte position, of the data within the input array.
ciphertext - A byte array to hold the ciphertext output from the method.
ciphertextOffset - The starting offset, or initial byte position, of the data within the output array.
Throws:
CryptoTokenException - Thrown when an problem occurs with the crypto token or the crypto token is invalid.
Category:
Signed: This element is only accessible by signed applications. If you intend to use this element, please visit http://www.blackberry.com/go/codesigning to obtain a set of code signing keys. Code signing is only required for applications running on BlackBerry smartphones; development on BlackBerry Smartphone Simulators can occur without code signing.
Since:
BlackBerry API 5.0.0

encrypt

public void encrypt(byte[] plaintext,
                    int plaintextOffset,
                    byte[] ciphertext,
                    int ciphertextOffset,
                    int numBlocks)
             throws CryptoTokenException
Description copied from interface: BlockEncryptorEngineExt
Encrypts a series of blocks of the given plaintext into a series of blocks of ciphertext.

Specified by:
encrypt in interface BlockEncryptorEngineExt
Parameters:
plaintext - A byte array containing the input that is to be encrypted.
plaintextOffset - The starting offset, or initial byte position, of the data within the input array.
ciphertext - A byte array to hold the ciphertext output from the method.
ciphertextOffset - The starting offset, or initial byte position, of the data within the output array.
numBlocks - The number of blocks to encrypt.
Throws:
CryptoTokenException - Thrown when an problem occurs with the crypto token or the crypto token is invalid.
Category:
Signed: This element is only accessible by signed applications. If you intend to use this element, please visit http://www.blackberry.com/go/codesigning to obtain a set of code signing keys. Code signing is only required for applications running on BlackBerry smartphones; development on BlackBerry Smartphone Simulators can occur without code signing.
Since:
BlackBerry API 5.0.0





Copyright 1999-2010 Research In Motion Limited. 295 Phillip Street, Waterloo, Ontario, Canada, N2L 3W8. All Rights Reserved.
Copyright 1993-2003 Sun Microsystems, Inc. 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. All Rights Reserved.
Copyright 2002-2003 Nokia Corporation All Rights Reserved.
Java is a trademark of Sun Microsystems, Inc.