gnu.crypto.cipher

Class Serpent

public class Serpent extends BaseCipher

Serpent is a 32-round substitution-permutation network block cipher, operating on 128-bit blocks and accepting keys of 128, 192, and 256 bits in length. At each round the plaintext is XORed with a 128 bit portion of the session key -- a 4224 bit key computed from the input key -- then one of eight S-boxes are applied, and finally a simple linear transformation is done. Decryption does the exact same thing in reverse order, and using the eight inverses of the S-boxes.

Serpent was designed by Ross Anderson, Eli Biham, and Lars Knudsen as a proposed cipher for the Advanced Encryption Standard.

Serpent can be sped up greatly by replacing S-box substitution with a sequence of binary operations, and the optimal implementation depends upon finding the fastest sequence of binary operations that reproduce this substitution. This implementation uses the S-boxes discovered by Dag Arne Osvik, which are optimized for the Pentium family of processors.

References:

  1. Serpent: A Candidate Block Cipher for the Advanced Encryption Standard.

Version: $Revision: 1.9 $

Constructor Summary
Serpent()
Trivial zero-argument constructor.
Method Summary
IteratorblockSizes()
Objectclone()
voiddecrypt(byte[] in, int i, byte[] out, int o, Object K, int bs)
voidencrypt(byte[] in, int i, byte[] out, int o, Object K, int bs)
IteratorkeySizes()
ObjectmakeKey(byte[] kb, int blockSize)
booleanselfTest()

Constructor Detail

Serpent

public Serpent()
Trivial zero-argument constructor.

Method Detail

blockSizes

public Iterator blockSizes()

clone

public Object clone()

decrypt

public void decrypt(byte[] in, int i, byte[] out, int o, Object K, int bs)

encrypt

public void encrypt(byte[] in, int i, byte[] out, int o, Object K, int bs)

keySizes

public Iterator keySizes()

makeKey

public Object makeKey(byte[] kb, int blockSize)

selfTest

public boolean selfTest()
Copyright © 2001, 2002, 2003 Free Software Foundation, Inc. All Rights Reserved.