#ifdef BLOWFISH
struct
blowfish_key {
ulong32 S[4][256];
ulong32 K[18];
};
#endif
#ifdef RC5
struct
rc5_key {
int
rounds;
ulong32 K[50];
};
#endif
#ifdef RC6
struct
rc6_key {
ulong32 K[44];
};
#endif
#ifdef SAFERP
struct
saferp_key {
unsigned
char
K[33][16];
long
rounds;
};
#endif
#ifdef RIJNDAEL
struct
rijndael_key {
ulong32 eK[60], dK[60];
int
Nr;
};
#endif
#ifdef KSEED
struct
kseed_key {
ulong32 K[32], dK[32];
};
#endif
#ifdef LTC_KASUMI
struct
kasumi_key {
ulong32 KLi1[8], KLi2[8],
KOi1[8], KOi2[8], KOi3[8],
KIi1[8], KIi2[8], KIi3[8];
};
#endif
#ifdef XTEA
struct
xtea_key {
unsigned
long
A[32], B[32];
};
#endif
#ifdef TWOFISH
#ifndef TWOFISH_SMALL
struct
twofish_key {
ulong32 S[4][256], K[40];
};
#else
struct
twofish_key {
ulong32 K[40];
unsigned
char
S[32], start;
};
#endif
#endif
#ifdef SAFER
#define SAFER_K64_DEFAULT_NOF_ROUNDS 6
#define SAFER_K128_DEFAULT_NOF_ROUNDS 10
#define SAFER_SK64_DEFAULT_NOF_ROUNDS 8
#define SAFER_SK128_DEFAULT_NOF_ROUNDS 10
#define SAFER_MAX_NOF_ROUNDS 13
#define SAFER_BLOCK_LEN 8
#define SAFER_KEY_LEN (1 + SAFER_BLOCK_LEN * (1 + 2 * SAFER_MAX_NOF_ROUNDS))
typedef
unsigned
char
safer_block_t[SAFER_BLOCK_LEN];
typedef
unsigned
char
safer_key_t[SAFER_KEY_LEN];
struct
safer_key { safer_key_t key; };
#endif
#ifdef RC2
struct
rc2_key { unsigned xkey[64]; };
#endif
#ifdef DES
struct
des_key {
ulong32 ek[32], dk[32];
};
struct
des3_key {
ulong32 ek[3][32], dk[3][32];
};
#endif
#ifdef CAST5
struct
cast5_key {
ulong32 K[32], keylen;
};
#endif
#ifdef NOEKEON
struct
noekeon_key {
ulong32 K[4], dK[4];
};
#endif
#ifdef SKIPJACK
struct
skipjack_key {
unsigned
char
key[10];
};
#endif
#ifdef KHAZAD
struct
khazad_key {
ulong64 roundKeyEnc[8 + 1];
ulong64 roundKeyDec[8 + 1];
};
#endif
#ifdef ANUBIS
struct
anubis_key {
int
keyBits;
int
R;
ulong32 roundKeyEnc[18 + 1][4];
ulong32 roundKeyDec[18 + 1][4];
};
#endif
typedef
union
Symmetric_key {
#ifdef DES
struct
des_key des;
struct
des3_key des3;
#endif
#ifdef RC2
struct
rc2_key rc2;
#endif
#ifdef SAFER
struct
safer_key safer;
#endif
#ifdef TWOFISH
struct
twofish_key twofish;
#endif
#ifdef BLOWFISH
struct
blowfish_key blowfish;
#endif
#ifdef RC5
struct
rc5_key rc5;
#endif
#ifdef RC6
struct
rc6_key rc6;
#endif
#ifdef SAFERP
struct
saferp_key saferp;
#endif
#ifdef RIJNDAEL
struct
rijndael_key rijndael;
#endif
#ifdef XTEA
struct
xtea_key xtea;
#endif
#ifdef CAST5
struct
cast5_key cast5;
#endif
#ifdef NOEKEON
struct
noekeon_key noekeon;
#endif
#ifdef SKIPJACK
struct
skipjack_key skipjack;
#endif
#ifdef KHAZAD
struct
khazad_key khazad;
#endif
#ifdef ANUBIS
struct
anubis_key anubis;
#endif
#ifdef KSEED
struct
kseed_key kseed;
#endif
#ifdef LTC_KASUMI
struct
kasumi_key kasumi;
#endif
void
*data;
} symmetric_key;
#ifdef LTC_ECB_MODE
typedef
struct
{
int
cipher,
blocklen;
symmetric_key key;
} symmetric_ECB;
#endif
#ifdef LTC_CFB_MODE
typedef
struct
{
int
cipher,
blocklen,
padlen;
unsigned
char
IV[MAXBLOCKSIZE],
pad[MAXBLOCKSIZE];
symmetric_key key;
} symmetric_CFB;
#endif
#ifdef LTC_OFB_MODE
typedef
struct
{
int
cipher,
blocklen,
padlen;
unsigned
char
IV[MAXBLOCKSIZE];
symmetric_key key;
} symmetric_OFB;
#endif
#ifdef LTC_CBC_MODE
typedef
struct
{
int
cipher,
blocklen;
unsigned
char
IV[MAXBLOCKSIZE];
symmetric_key key;
} symmetric_CBC;
#endif
#ifdef LTC_CTR_MODE
typedef
struct
{
int
cipher,
blocklen,
padlen,
mode;
unsigned
char
ctr[MAXBLOCKSIZE],
pad[MAXBLOCKSIZE];
symmetric_key key;
} symmetric_CTR;
#endif
#ifdef LTC_LRW_MODE
typedef
struct
{
int
cipher;
unsigned
char
IV[16],
tweak[16],
pad[16];
symmetric_key key;
#ifdef LRW_TABLES
unsigned
char
PC[16][256][16];
#endif
} symmetric_LRW;
#endif
#ifdef LTC_F8_MODE
typedef
struct
{
int
cipher,
blocklen,
padlen;
unsigned
char
IV[MAXBLOCKSIZE],
MIV[MAXBLOCKSIZE];
ulong32 blockcnt;
symmetric_key key;
} symmetric_F8;
#endif
extern
struct
ltc_cipher_descriptor {
char
*name;
unsigned
char
ID;
int
min_key_length,
max_key_length,
block_length,
default_rounds;
int
(*setup)(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
(*ecb_encrypt)(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
(*ecb_decrypt)(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
(*test)(
void
);
void
(*done)(symmetric_key *skey);
int
(*keysize)(
int
*keysize);
int
(*accel_ecb_encrypt)(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
blocks, symmetric_key *skey);
int
(*accel_ecb_decrypt)(
const
unsigned
char
*ct, unsigned
char
*pt, unsigned
long
blocks, symmetric_key *skey);
int
(*accel_cbc_encrypt)(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
blocks, unsigned
char
*IV, symmetric_key *skey);
int
(*accel_cbc_decrypt)(
const
unsigned
char
*ct, unsigned
char
*pt, unsigned
long
blocks, unsigned
char
*IV, symmetric_key *skey);
int
(*accel_ctr_encrypt)(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
blocks, unsigned
char
*IV,
int
mode, symmetric_key *skey);
int
(*accel_lrw_encrypt)(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
blocks, unsigned
char
*IV,
const
unsigned
char
*tweak, symmetric_key *skey);
int
(*accel_lrw_decrypt)(
const
unsigned
char
*ct, unsigned
char
*pt, unsigned
long
blocks, unsigned
char
*IV,
const
unsigned
char
*tweak, symmetric_key *skey);
int
(*accel_ccm_memory)(
const
unsigned
char
*key, unsigned
long
keylen,
symmetric_key *uskey,
const
unsigned
char
*nonce, unsigned
long
noncelen,
const
unsigned
char
*header, unsigned
long
headerlen,
unsigned
char
*pt, unsigned
long
ptlen,
unsigned
char
*ct,
unsigned
char
*tag, unsigned
long
*taglen,
int
direction);
int
(*accel_gcm_memory)(
const
unsigned
char
*key, unsigned
long
keylen,
const
unsigned
char
*IV, unsigned
long
IVlen,
const
unsigned
char
*adata, unsigned
long
adatalen,
unsigned
char
*pt, unsigned
long
ptlen,
unsigned
char
*ct,
unsigned
char
*tag, unsigned
long
*taglen,
int
direction);
int
(*omac_memory)(
const
unsigned
char
*key, unsigned
long
keylen,
const
unsigned
char
*in, unsigned
long
inlen,
unsigned
char
*out, unsigned
long
*outlen);
int
(*xcbc_memory)(
const
unsigned
char
*key, unsigned
long
keylen,
const
unsigned
char
*in, unsigned
long
inlen,
unsigned
char
*out, unsigned
long
*outlen);
int
(*f9_memory)(
const
unsigned
char
*key, unsigned
long
keylen,
const
unsigned
char
*in, unsigned
long
inlen,
unsigned
char
*out, unsigned
long
*outlen);
} cipher_descriptor[];
#ifdef BLOWFISH
int
blowfish_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
blowfish_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
blowfish_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
blowfish_test(
void
);
void
blowfish_done(symmetric_key *skey);
int
blowfish_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor blowfish_desc;
#endif
#ifdef RC5
int
rc5_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
rc5_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
rc5_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
rc5_test(
void
);
void
rc5_done(symmetric_key *skey);
int
rc5_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor rc5_desc;
#endif
#ifdef RC6
int
rc6_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
rc6_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
rc6_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
rc6_test(
void
);
void
rc6_done(symmetric_key *skey);
int
rc6_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor rc6_desc;
#endif
#ifdef RC2
int
rc2_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
rc2_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
rc2_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
rc2_test(
void
);
void
rc2_done(symmetric_key *skey);
int
rc2_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor rc2_desc;
#endif
#ifdef SAFERP
int
saferp_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
saferp_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
saferp_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
saferp_test(
void
);
void
saferp_done(symmetric_key *skey);
int
saferp_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor saferp_desc;
#endif
#ifdef SAFER
int
safer_k64_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
safer_sk64_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
safer_k128_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
safer_sk128_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
safer_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *key);
int
safer_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *key);
int
safer_k64_test(
void
);
int
safer_sk64_test(
void
);
int
safer_sk128_test(
void
);
void
safer_done(symmetric_key *skey);
int
safer_64_keysize(
int
*keysize);
int
safer_128_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor safer_k64_desc, safer_k128_desc, safer_sk64_desc, safer_sk128_desc;
#endif
#ifdef RIJNDAEL
#define aes_setup rijndael_setup
#define aes_ecb_encrypt rijndael_ecb_encrypt
#define aes_ecb_decrypt rijndael_ecb_decrypt
#define aes_test rijndael_test
#define aes_done rijndael_done
#define aes_keysize rijndael_keysize
#define aes_enc_setup rijndael_enc_setup
#define aes_enc_ecb_encrypt rijndael_enc_ecb_encrypt
#define aes_enc_keysize rijndael_enc_keysize
int
rijndael_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
rijndael_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
rijndael_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
rijndael_test(
void
);
void
rijndael_done(symmetric_key *skey);
int
rijndael_keysize(
int
*keysize);
int
rijndael_enc_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
rijndael_enc_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
void
rijndael_enc_done(symmetric_key *skey);
int
rijndael_enc_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor rijndael_desc, aes_desc;
extern
const
struct
ltc_cipher_descriptor rijndael_enc_desc, aes_enc_desc;
#endif
#ifdef XTEA
int
xtea_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
xtea_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
xtea_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
xtea_test(
void
);
void
xtea_done(symmetric_key *skey);
int
xtea_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor xtea_desc;
#endif
#ifdef TWOFISH
int
twofish_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
twofish_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
twofish_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
twofish_test(
void
);
void
twofish_done(symmetric_key *skey);
int
twofish_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor twofish_desc;
#endif
#ifdef DES
int
des_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
des_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
des_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
des_test(
void
);
void
des_done(symmetric_key *skey);
int
des_keysize(
int
*keysize);
int
des3_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
des3_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
des3_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
des3_test(
void
);
void
des3_done(symmetric_key *skey);
int
des3_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor des_desc, des3_desc;
#endif
#ifdef CAST5
int
cast5_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
cast5_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
cast5_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
cast5_test(
void
);
void
cast5_done(symmetric_key *skey);
int
cast5_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor cast5_desc;
#endif
#ifdef NOEKEON
int
noekeon_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
noekeon_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
noekeon_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
noekeon_test(
void
);
void
noekeon_done(symmetric_key *skey);
int
noekeon_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor noekeon_desc;
#endif
#ifdef SKIPJACK
int
skipjack_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
skipjack_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
skipjack_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
skipjack_test(
void
);
void
skipjack_done(symmetric_key *skey);
int
skipjack_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor skipjack_desc;
#endif
#ifdef KHAZAD
int
khazad_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
khazad_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
khazad_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
khazad_test(
void
);
void
khazad_done(symmetric_key *skey);
int
khazad_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor khazad_desc;
#endif
#ifdef ANUBIS
int
anubis_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
anubis_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
anubis_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
anubis_test(
void
);
void
anubis_done(symmetric_key *skey);
int
anubis_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor anubis_desc;
#endif
#ifdef KSEED
int
kseed_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
kseed_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
kseed_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
kseed_test(
void
);
void
kseed_done(symmetric_key *skey);
int
kseed_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor kseed_desc;
#endif
#ifdef LTC_KASUMI
int
kasumi_setup(
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_key *skey);
int
kasumi_ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, symmetric_key *skey);
int
kasumi_ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, symmetric_key *skey);
int
kasumi_test(
void
);
void
kasumi_done(symmetric_key *skey);
int
kasumi_keysize(
int
*keysize);
extern
const
struct
ltc_cipher_descriptor kasumi_desc;
#endif
#ifdef LTC_ECB_MODE
int
ecb_start(
int
cipher,
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_ECB *ecb);
int
ecb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
len, symmetric_ECB *ecb);
int
ecb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, unsigned
long
len, symmetric_ECB *ecb);
int
ecb_done(symmetric_ECB *ecb);
#endif
#ifdef LTC_CFB_MODE
int
cfb_start(
int
cipher,
const
unsigned
char
*IV,
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_CFB *cfb);
int
cfb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
len, symmetric_CFB *cfb);
int
cfb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, unsigned
long
len, symmetric_CFB *cfb);
int
cfb_getiv(unsigned
char
*IV, unsigned
long
*len, symmetric_CFB *cfb);
int
cfb_setiv(
const
unsigned
char
*IV, unsigned
long
len, symmetric_CFB *cfb);
int
cfb_done(symmetric_CFB *cfb);
#endif
#ifdef LTC_OFB_MODE
int
ofb_start(
int
cipher,
const
unsigned
char
*IV,
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_OFB *ofb);
int
ofb_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
len, symmetric_OFB *ofb);
int
ofb_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, unsigned
long
len, symmetric_OFB *ofb);
int
ofb_getiv(unsigned
char
*IV, unsigned
long
*len, symmetric_OFB *ofb);
int
ofb_setiv(
const
unsigned
char
*IV, unsigned
long
len, symmetric_OFB *ofb);
int
ofb_done(symmetric_OFB *ofb);
#endif
#ifdef LTC_CBC_MODE
int
cbc_start(
int
cipher,
const
unsigned
char
*IV,
const
unsigned
char
*key,
int
keylen,
int
num_rounds, symmetric_CBC *cbc);
int
cbc_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
len, symmetric_CBC *cbc);
int
cbc_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, unsigned
long
len, symmetric_CBC *cbc);
int
cbc_getiv(unsigned
char
*IV, unsigned
long
*len, symmetric_CBC *cbc);
int
cbc_setiv(
const
unsigned
char
*IV, unsigned
long
len, symmetric_CBC *cbc);
int
cbc_done(symmetric_CBC *cbc);
#endif
#ifdef LTC_CTR_MODE
#define CTR_COUNTER_LITTLE_ENDIAN 0
#define CTR_COUNTER_BIG_ENDIAN 1
#define LTC_CTR_RFC3686 2
int
ctr_start(
int
cipher,
const
unsigned
char
*IV,
const
unsigned
char
*key,
int
keylen,
int
num_rounds,
int
ctr_mode,
symmetric_CTR *ctr);
int
ctr_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
len, symmetric_CTR *ctr);
int
ctr_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, unsigned
long
len, symmetric_CTR *ctr);
int
ctr_getiv(unsigned
char
*IV, unsigned
long
*len, symmetric_CTR *ctr);
int
ctr_setiv(
const
unsigned
char
*IV, unsigned
long
len, symmetric_CTR *ctr);
int
ctr_done(symmetric_CTR *ctr);
int
ctr_test(
void
);
#endif
#ifdef LTC_LRW_MODE
#define LRW_ENCRYPT 0
#define LRW_DECRYPT 1
int
lrw_start(
int
cipher,
const
unsigned
char
*IV,
const
unsigned
char
*key,
int
keylen,
const
unsigned
char
*tweak,
int
num_rounds,
symmetric_LRW *lrw);
int
lrw_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
len, symmetric_LRW *lrw);
int
lrw_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, unsigned
long
len, symmetric_LRW *lrw);
int
lrw_getiv(unsigned
char
*IV, unsigned
long
*len, symmetric_LRW *lrw);
int
lrw_setiv(
const
unsigned
char
*IV, unsigned
long
len, symmetric_LRW *lrw);
int
lrw_done(symmetric_LRW *lrw);
int
lrw_test(
void
);
int
lrw_process(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
len,
int
mode, symmetric_LRW *lrw);
#endif
#ifdef LTC_F8_MODE
int
f8_start(
int
cipher,
const
unsigned
char
*IV,
const
unsigned
char
*key,
int
keylen,
const
unsigned
char
*salt_key,
int
skeylen,
int
num_rounds, symmetric_F8 *f8);
int
f8_encrypt(
const
unsigned
char
*pt, unsigned
char
*ct, unsigned
long
len, symmetric_F8 *f8);
int
f8_decrypt(
const
unsigned
char
*ct, unsigned
char
*pt, unsigned
long
len, symmetric_F8 *f8);
int
f8_getiv(unsigned
char
*IV, unsigned
long
*len, symmetric_F8 *f8);
int
f8_setiv(
const
unsigned
char
*IV, unsigned
long
len, symmetric_F8 *f8);
int
f8_done(symmetric_F8 *f8);
int
f8_test_mode(
void
);
#endif
int
find_cipher(
const
char
*name);
int
find_cipher_any(
const
char
*name,
int
blocklen,
int
keylen);
int
find_cipher_id(unsigned
char
ID);
int
register_cipher(
const
struct
ltc_cipher_descriptor *cipher);
int
unregister_cipher(
const
struct
ltc_cipher_descriptor *cipher);
int
cipher_is_valid(
int
idx);
LTC_MUTEX_PROTO(ltc_cipher_mutex)