net.i2p.crypto
Class CryptixAESEngine

java.lang.Object
  extended by net.i2p.crypto.AESEngine
      extended by net.i2p.crypto.CryptixAESEngine

public class CryptixAESEngine
extends AESEngine

Wrapper for AES cypher operation using Cryptix's Rijndael implementation. Implements CBC with a 16 byte IV. Problems: Only supports data of size mod 16 bytes - no inherent padding.

Author:
jrandom, thecrypto

Field Summary
 
Fields inherited from class net.i2p.crypto.AESEngine
_context, _log
 
Constructor Summary
CryptixAESEngine(I2PAppContext context)
          see comments for main() below private static final boolean USE_SYSTEM_AES; static { boolean systemOK = false; try { systemOK = Cipher.getMaxAllowedKeyLength("AES") >= 256; } catch (GeneralSecurityException gse) { // a NoSuchAlgorithmException } catch (NoSuchMethodError nsme) { // JamVM, gij try { Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); SecretKeySpec key = new SecretKeySpec(new byte[32], "AES"); cipher.init(Cipher.ENCRYPT_MODE, key); systemOK = true; } catch (GeneralSecurityException gse) { } } USE_SYSTEM_AES = systemOK; //System.out.println("Using system AES? " + systemOK); }
 
Method Summary
 void decrypt(byte[] payload, int payloadIndex, byte[] out, int outIndex, SessionKey sessionKey, byte[] iv, int length)
          Decrypt the data with the session key
 void decrypt(byte[] payload, int payloadIndex, byte[] out, int outIndex, SessionKey sessionKey, byte[] iv, int ivOffset, int length)
          Decrypt the data with the session key.
 void decryptBlock(byte[] payload, int inIndex, SessionKey sessionKey, byte[] rv, int outIndex)
          decrypt exactly 16 bytes of data with the session key provided
 void encrypt(byte[] payload, int payloadIndex, byte[] out, int outIndex, SessionKey sessionKey, byte[] iv, int length)
          Encrypt the payload with the session key
 void encrypt(byte[] payload, int payloadIndex, byte[] out, int outIndex, SessionKey sessionKey, byte[] iv, int ivOffset, int length)
          Encrypt the payload with the session key.
 void encryptBlock(byte[] payload, int inIndex, SessionKey sessionKey, byte[] out, int outIndex)
          encrypt exactly 16 bytes using the session key
 
Methods inherited from class net.i2p.crypto.AESEngine
safeDecrypt, safeEncrypt
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CryptixAESEngine

public CryptixAESEngine(I2PAppContext context)
see comments for main() below private static final boolean USE_SYSTEM_AES; static { boolean systemOK = false; try { systemOK = Cipher.getMaxAllowedKeyLength("AES") >= 256; } catch (GeneralSecurityException gse) { // a NoSuchAlgorithmException } catch (NoSuchMethodError nsme) { // JamVM, gij try { Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); SecretKeySpec key = new SecretKeySpec(new byte[32], "AES"); cipher.init(Cipher.ENCRYPT_MODE, key); systemOK = true; } catch (GeneralSecurityException gse) { } } USE_SYSTEM_AES = systemOK; //System.out.println("Using system AES? " + systemOK); }

Method Detail

encrypt

public void encrypt(byte[] payload,
                    int payloadIndex,
                    byte[] out,
                    int outIndex,
                    SessionKey sessionKey,
                    byte[] iv,
                    int length)
Description copied from class: AESEngine
Encrypt the payload with the session key

Overrides:
encrypt in class AESEngine
Parameters:
iv - must be 16 bytes
length - must be a multiple of 16
payload - data to be encrypted
payloadIndex - index into the payload to start encrypting
out - where to store the result
outIndex - where in out to start writing
sessionKey - private esession key to encrypt to

encrypt

public void encrypt(byte[] payload,
                    int payloadIndex,
                    byte[] out,
                    int outIndex,
                    SessionKey sessionKey,
                    byte[] iv,
                    int ivOffset,
                    int length)
Description copied from class: AESEngine
Encrypt the payload with the session key. This just copies payload to out, see extension for the real thing.

Overrides:
encrypt in class AESEngine
Parameters:
iv - must be 16 bytes
length - must be a multiple of 16
payload - data to be encrypted
payloadIndex - index into the payload to start encrypting
out - where to store the result
outIndex - where in out to start writing
sessionKey - private esession key to encrypt to

decrypt

public void decrypt(byte[] payload,
                    int payloadIndex,
                    byte[] out,
                    int outIndex,
                    SessionKey sessionKey,
                    byte[] iv,
                    int length)
Description copied from class: AESEngine
Decrypt the data with the session key

Overrides:
decrypt in class AESEngine
Parameters:
payload - data to be decrypted
payloadIndex - index into the payload to start decrypting
out - where to store the cleartext
outIndex - where in out to start writing
sessionKey - private session key to decrypt to
iv - IV for CBC
length - how much data to decrypt

decrypt

public void decrypt(byte[] payload,
                    int payloadIndex,
                    byte[] out,
                    int outIndex,
                    SessionKey sessionKey,
                    byte[] iv,
                    int ivOffset,
                    int length)
Description copied from class: AESEngine
Decrypt the data with the session key. This just copies payload to out, see extension for the real thing.

Overrides:
decrypt in class AESEngine
Parameters:
payload - data to be decrypted
payloadIndex - index into the payload to start decrypting
out - where to store the cleartext
outIndex - where in out to start writing
sessionKey - private session key to decrypt to
iv - IV for CBC
length - how much data to decrypt

encryptBlock

public final void encryptBlock(byte[] payload,
                               int inIndex,
                               SessionKey sessionKey,
                               byte[] out,
                               int outIndex)
encrypt exactly 16 bytes using the session key

Overrides:
encryptBlock in class AESEngine
Parameters:
payload - plaintext data, 16 bytes starting at inIndex
sessionKey - private session key
out - out parameter, 16 bytes starting at outIndex

decryptBlock

public final void decryptBlock(byte[] payload,
                               int inIndex,
                               SessionKey sessionKey,
                               byte[] rv,
                               int outIndex)
decrypt exactly 16 bytes of data with the session key provided

Overrides:
decryptBlock in class AESEngine
Parameters:
payload - encrypted data, 16 bytes starting at inIndex
sessionKey - private session key
rv - out parameter, 16 bytes starting at outIndex