1#include "logicalaccess/plugins/crypto/lla_crypto_api.hpp"
30 unsigned char K[33][16];
51 KOi1[8], KOi2[8], KOi3[8],
52 KIi1[8], KIi2[8], KIi3[8];
58 unsigned long A[32], B[32];
63#ifndef LTC_TWOFISH_SMALL
70 unsigned char S[32], start;
76#define LTC_SAFER_K64_DEFAULT_NOF_ROUNDS 6
77#define LTC_SAFER_K128_DEFAULT_NOF_ROUNDS 10
78#define LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS 8
79#define LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS 10
80#define LTC_SAFER_MAX_NOF_ROUNDS 13
81#define LTC_SAFER_BLOCK_LEN 8
82#define LTC_SAFER_KEY_LEN (1 + LTC_SAFER_BLOCK_LEN * (1 + 2 * LTC_SAFER_MAX_NOF_ROUNDS))
83typedef unsigned char safer_block_t[LTC_SAFER_BLOCK_LEN];
84typedef unsigned char safer_key_t[LTC_SAFER_KEY_LEN];
85struct safer_key { safer_key_t key; };
89struct rc2_key {
unsigned xkey[64]; };
116 unsigned char key[10];
131 ulong32 roundKeyEnc[18 + 1][4];
132 ulong32 roundKeyDec[18 + 1][4];
153 struct des3_key des3;
159 struct safer_key safer;
162 struct twofish_key twofish;
165 struct blowfish_key blowfish;
174 struct saferp_key saferp;
177 struct rijndael_key rijndael;
180 struct xtea_key xtea;
183 struct cast5_key cast5;
186 struct noekeon_key noekeon;
189 struct skipjack_key skipjack;
192 struct khazad_key khazad;
195 struct anubis_key anubis;
198 struct kseed_key kseed;
201 struct kasumi_key kasumi;
204 struct multi2_key multi2;
207 struct camellia_key camellia;
302 unsigned char IV[16],
315 unsigned char PC[16][256][16];
481 const unsigned char *key,
unsigned long keylen,
483 const unsigned char *nonce,
unsigned long noncelen,
484 const unsigned char *header,
unsigned long headerlen,
485 unsigned char *pt,
unsigned long ptlen,
487 unsigned char *tag,
unsigned long *taglen,
506 const unsigned char *key,
unsigned long keylen,
507 const unsigned char *IV,
unsigned long IVlen,
508 const unsigned char *adata,
unsigned long adatalen,
509 unsigned char *pt,
unsigned long ptlen,
511 unsigned char *tag,
unsigned long *taglen,
524 const unsigned char *key,
unsigned long keylen,
525 const unsigned char *in,
unsigned long inlen,
526 unsigned char *out,
unsigned long *outlen);
538 const unsigned char *key,
unsigned long keylen,
539 const unsigned char *in,
unsigned long inlen,
540 unsigned char *out,
unsigned long *outlen);
553 const unsigned char *key,
unsigned long keylen,
554 const unsigned char *in,
unsigned long inlen,
555 unsigned char *out,
unsigned long *outlen);
559int blowfish_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
560int blowfish_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
561int blowfish_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
562int blowfish_test(
void);
564int blowfish_keysize(
int *keysize);
569int rc5_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
570int rc5_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
571int rc5_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
579int rc6_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
580int rc6_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
581int rc6_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
589int rc2_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
590int rc2_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
591int rc2_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
599int saferp_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
600int saferp_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
601int saferp_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
602int saferp_test(
void);
604int saferp_keysize(
int *
keysize);
609int safer_k64_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
610int safer_sk64_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
611int safer_k128_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
612int safer_sk128_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
613int safer_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *key);
614int safer_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *key);
615int safer_k64_test(
void);
616int safer_sk64_test(
void);
617int safer_sk128_test(
void);
619int safer_64_keysize(
int *
keysize);
620int safer_128_keysize(
int *
keysize);
621extern const struct ltc_cipher_descriptor safer_k64_desc, safer_k128_desc, safer_sk64_desc, safer_sk128_desc;
627#define aes_setup rijndael_setup
628#define aes_ecb_encrypt rijndael_ecb_encrypt
629#define aes_ecb_decrypt rijndael_ecb_decrypt
630#define aes_test rijndael_test
631#define aes_done rijndael_done
632#define aes_keysize rijndael_keysize
634#define aes_enc_setup rijndael_enc_setup
635#define aes_enc_ecb_encrypt rijndael_enc_ecb_encrypt
636#define aes_enc_keysize rijndael_enc_keysize
638int rijndael_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
639int rijndael_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
640int rijndael_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
641int rijndael_test(
void);
643int rijndael_keysize(
int *
keysize);
644int rijndael_enc_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
645int rijndael_enc_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
647int rijndael_enc_keysize(
int *
keysize);
653int xtea_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
654int xtea_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
655int xtea_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
663int twofish_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
664int twofish_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
665int twofish_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
666int twofish_test(
void);
668int twofish_keysize(
int *
keysize);
673LLA_CRYPTO_API
int des_setup(
const unsigned char *key,
int keylen,
int num_rounds,
675LLA_CRYPTO_API
int des_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
677LLA_CRYPTO_API
int des_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
682LLA_CRYPTO_API
int des3_setup(
const unsigned char *key,
int keylen,
int num_rounds,
684LLA_CRYPTO_API
int des3_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
686LLA_CRYPTO_API
int des3_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
690LLA_CRYPTO_API
int des3_keysize(
int *
keysize);
697int cast5_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
698int cast5_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
699int cast5_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
702int cast5_keysize(
int *
keysize);
707int noekeon_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
708int noekeon_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
709int noekeon_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
710int noekeon_test(
void);
712int noekeon_keysize(
int *
keysize);
717int skipjack_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
718int skipjack_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
719int skipjack_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
720int skipjack_test(
void);
722int skipjack_keysize(
int *
keysize);
727int khazad_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
728int khazad_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
729int khazad_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
730int khazad_test(
void);
732int khazad_keysize(
int *
keysize);
737int anubis_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
738int anubis_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
739int anubis_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
740int anubis_test(
void);
742int anubis_keysize(
int *
keysize);
747int kseed_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
748int kseed_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
749int kseed_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
752int kseed_keysize(
int *
keysize);
757int kasumi_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
758int kasumi_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
759int kasumi_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
760int kasumi_test(
void);
762int kasumi_keysize(
int *
keysize);
767int multi2_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
768int multi2_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
769int multi2_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
770int multi2_test(
void);
772int multi2_keysize(
int *
keysize);
777int camellia_setup(
const unsigned char *key,
int keylen,
int num_rounds,
symmetric_key *skey);
778int camellia_ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
symmetric_key *skey);
779int camellia_ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
symmetric_key *skey);
780int camellia_test(
void);
782int camellia_keysize(
int *
keysize);
787int ecb_start(
int cipher,
const unsigned char *key,
788 int keylen,
int num_rounds, symmetric_ECB *ecb);
789int ecb_encrypt(
const unsigned char *pt,
unsigned char *ct,
unsigned long len, symmetric_ECB *ecb);
790int ecb_decrypt(
const unsigned char *ct,
unsigned char *pt,
unsigned long len, symmetric_ECB *ecb);
791int ecb_done(symmetric_ECB *ecb);
795int cfb_start(
int cipher,
const unsigned char *IV,
const unsigned char *key,
796 int keylen,
int num_rounds, symmetric_CFB *cfb);
797int cfb_encrypt(
const unsigned char *pt,
unsigned char *ct,
unsigned long len, symmetric_CFB *cfb);
798int cfb_decrypt(
const unsigned char *ct,
unsigned char *pt,
unsigned long len, symmetric_CFB *cfb);
799int cfb_getiv(
unsigned char *IV,
unsigned long *len, symmetric_CFB *cfb);
800int cfb_setiv(
const unsigned char *IV,
unsigned long len, symmetric_CFB *cfb);
801int cfb_done(symmetric_CFB *cfb);
805int ofb_start(
int cipher,
const unsigned char *IV,
const unsigned char *key,
806 int keylen,
int num_rounds, symmetric_OFB *ofb);
807int ofb_encrypt(
const unsigned char *pt,
unsigned char *ct,
unsigned long len, symmetric_OFB *ofb);
808int ofb_decrypt(
const unsigned char *ct,
unsigned char *pt,
unsigned long len, symmetric_OFB *ofb);
809int ofb_getiv(
unsigned char *IV,
unsigned long *len, symmetric_OFB *ofb);
810int ofb_setiv(
const unsigned char *IV,
unsigned long len, symmetric_OFB *ofb);
811int ofb_done(symmetric_OFB *ofb);
815int cbc_start(
int cipher,
const unsigned char *IV,
const unsigned char *key,
816 int keylen,
int num_rounds, symmetric_CBC *cbc);
817int cbc_encrypt(
const unsigned char *pt,
unsigned char *ct,
unsigned long len, symmetric_CBC *cbc);
818int cbc_decrypt(
const unsigned char *ct,
unsigned char *pt,
unsigned long len, symmetric_CBC *cbc);
819int cbc_getiv(
unsigned char *IV,
unsigned long *len, symmetric_CBC *cbc);
820int cbc_setiv(
const unsigned char *IV,
unsigned long len, symmetric_CBC *cbc);
821int cbc_done(symmetric_CBC *cbc);
826#define CTR_COUNTER_LITTLE_ENDIAN 0x0000
827#define CTR_COUNTER_BIG_ENDIAN 0x1000
828#define LTC_CTR_RFC3686 0x2000
830int ctr_start(
int cipher,
831 const unsigned char *IV,
832 const unsigned char *key,
int keylen,
833 int num_rounds,
int ctr_mode,
835int ctr_encrypt(
const unsigned char *pt,
unsigned char *ct,
unsigned long len, symmetric_CTR *ctr);
836int ctr_decrypt(
const unsigned char *ct,
unsigned char *pt,
unsigned long len, symmetric_CTR *ctr);
837int ctr_getiv(
unsigned char *IV,
unsigned long *len, symmetric_CTR *ctr);
838int ctr_setiv(
const unsigned char *IV,
unsigned long len, symmetric_CTR *ctr);
839int ctr_done(symmetric_CTR *ctr);
848int lrw_start(
int cipher,
849 const unsigned char *IV,
850 const unsigned char *key,
int keylen,
851 const unsigned char *tweak,
854int lrw_encrypt(
const unsigned char *pt,
unsigned char *ct,
unsigned long len, symmetric_LRW *lrw);
855int lrw_decrypt(
const unsigned char *ct,
unsigned char *pt,
unsigned long len, symmetric_LRW *lrw);
856int lrw_getiv(
unsigned char *IV,
unsigned long *len, symmetric_LRW *lrw);
857int lrw_setiv(
const unsigned char *IV,
unsigned long len, symmetric_LRW *lrw);
858int lrw_done(symmetric_LRW *lrw);
862int lrw_process(
const unsigned char *pt,
unsigned char *ct,
unsigned long len,
int mode, symmetric_LRW *lrw);
866int f8_start(
int cipher,
const unsigned char *IV,
867 const unsigned char *key,
int keylen,
868 const unsigned char *salt_key,
int skeylen,
869 int num_rounds, symmetric_F8 *f8);
870int f8_encrypt(
const unsigned char *pt,
unsigned char *ct,
unsigned long len, symmetric_F8 *f8);
871int f8_decrypt(
const unsigned char *ct,
unsigned char *pt,
unsigned long len, symmetric_F8 *f8);
872int f8_getiv(
unsigned char *IV,
unsigned long *len, symmetric_F8 *f8);
873int f8_setiv(
const unsigned char *IV,
unsigned long len, symmetric_F8 *f8);
874int f8_done(symmetric_F8 *f8);
875int f8_test_mode(
void);
884int xts_start(
int cipher,
885 const unsigned char *key1,
886 const unsigned char *key2,
887 unsigned long keylen,
892 const unsigned char *pt,
unsigned long ptlen,
894 const unsigned char *tweak,
897 const unsigned char *ct,
unsigned long ptlen,
899 const unsigned char *tweak,
902void xts_done(symmetric_xts *xts);
904void xts_mult_x(
unsigned char *I);
Definition: tomcrypt_cipher.h:341
int(* test)(void)
Definition: tomcrypt_cipher.h:379
char * name
Definition: tomcrypt_cipher.h:343
void(* done)(symmetric_key *skey)
Definition: tomcrypt_cipher.h:384
int(* accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, symmetric_key *skey)
Definition: tomcrypt_cipher.h:400
int max_key_length
Definition: tomcrypt_cipher.h:349
int(* ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
Definition: tomcrypt_cipher.h:375
int(* setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
Definition: tomcrypt_cipher.h:361
int default_rounds
Definition: tomcrypt_cipher.h:353
int(* accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, symmetric_key *skey)
Definition: tomcrypt_cipher.h:409
int(* accel_lrw_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey)
Definition: tomcrypt_cipher.h:462
int(* accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, int mode, symmetric_key *skey)
Definition: tomcrypt_cipher.h:440
int(* ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
Definition: tomcrypt_cipher.h:368
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)
Definition: tomcrypt_cipher.h:505
unsigned char ID
Definition: tomcrypt_cipher.h:345
int(* keysize)(int *keysize)
Definition: tomcrypt_cipher.h:390
int(* xcbc_memory)(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen)
Definition: tomcrypt_cipher.h:537
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)
Definition: tomcrypt_cipher.h:480
int min_key_length
Definition: tomcrypt_cipher.h:347
int(* accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, symmetric_key *skey)
Definition: tomcrypt_cipher.h:429
int(* omac_memory)(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen)
Definition: tomcrypt_cipher.h:523
int(* f9_memory)(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen)
Definition: tomcrypt_cipher.h:552
int(* accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, symmetric_key *skey)
Definition: tomcrypt_cipher.h:419
int block_length
Definition: tomcrypt_cipher.h:351
int(* accel_lrw_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey)
Definition: tomcrypt_cipher.h:451
#define MAXBLOCKSIZE
Definition: tomcrypt.h:34
int find_cipher_any(const char *name, int blocklen, int keylen)
Definition: crypt_find_cipher_any.cpp:25
union Symmetric_key symmetric_key
LLA_CRYPTO_API int unregister_cipher(const struct ltc_cipher_descriptor *cipher)
Definition: crypt_unregister_cipher.cpp:23
LLA_CRYPTO_API struct ltc_cipher_descriptor cipher_descriptor[]
LLA_CRYPTO_API int register_cipher(const struct ltc_cipher_descriptor *cipher)
Definition: crypt_register_cipher.cpp:23
int find_cipher_id(unsigned char ID)
Definition: crypt_find_cipher_id.cpp:23
LLA_CRYPTO_API int cipher_is_valid(int idx)
Definition: crypt_cipher_is_valid.cpp:23
LLA_CRYPTO_API int find_cipher(const char *name)
Definition: crypt_find_cipher.cpp:23
#define LTC_MUTEX_PROTO(x)
Definition: tomcrypt_custom.h:416
unsigned long ulong32
Definition: tomcrypt_macros.h:16
unsigned long long ulong64
Definition: tomcrypt_macros.h:7
Definition: tomcrypt_cipher.h:150
void * data
Definition: tomcrypt_cipher.h:209