/*
* CAST-256, algorithm by Carlisle Adams (Entrust Technologies)
*
* candidate for AES (Advanced Encryption Standard)
*
* Implementation is Copyright (c) 1999 by Michael Neumann (neumann@s-direktnet.de)
* 22.04.1999
*
* key-size is 256 bit
*
* version 2.0
*
*/
#ifndef __CAST_256_HEADER__
#define __CAST_256_HEADER__
typedef unsigned long ulong;
typedef unsigned char uchar;
// structure for generated keys
struct subkeys {
ulong km[12][4];
ulong kr[12][4];
~subkeys() {zero();}
void zero()
{
for(int i=0;i<12;i++)
for(int j=0;j<4;j++) km[i][j] = kr[i][j] = 0;
}
};
// structure for 256-bit key
struct bitblock_256 {
ulong b[8];
~bitblock_256() {zero();}
void zero()
{
for(int i=0;i<8;i++) b[i] = 0;
}
};
// structure for 128-bit data-block
struct bitblock_128 {
ulong b[4];
~bitblock_128() {zero();}
void zero()
{
for(int i=0;i<4;i++) b[i] = 0;
}
};
enum CRYPT_MODE {ENCRYPT, DECRYPT};
extern void cast256_crypt_block(bitblock_128 &b, subkeys &sk);
extern void generate_subkeys(bitblock_256 &k, subkeys &sk, CRYPT_MODE m);
#endif