diff options
Diffstat (limited to 'src/mongo/crypto/tom/tomcrypt_cipher.h')
-rw-r--r-- | src/mongo/crypto/tom/tomcrypt_cipher.h | 970 |
1 files changed, 0 insertions, 970 deletions
diff --git a/src/mongo/crypto/tom/tomcrypt_cipher.h b/src/mongo/crypto/tom/tomcrypt_cipher.h deleted file mode 100644 index 43efbacc752..00000000000 --- a/src/mongo/crypto/tom/tomcrypt_cipher.h +++ /dev/null @@ -1,970 +0,0 @@ -/* Copyright 2014 MongoDB Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* ---- SYMMETRIC KEY STUFF ----- - * - * We put each of the ciphers scheduled keys in their own structs then we put all of - * the key formats in one union. This makes the function prototypes easier to use. - */ -#ifdef LTC_BLOWFISH -struct blowfish_key { - ulong32 S[4][256]; - ulong32 K[18]; -}; -#endif - -#ifdef LTC_RC5 -struct rc5_key { - int rounds; - ulong32 K[50]; -}; -#endif - -#ifdef LTC_RC6 -struct rc6_key { - ulong32 K[44]; -}; -#endif - -#ifdef LTC_SAFERP -struct saferp_key { - unsigned char K[33][16]; - long rounds; -}; -#endif - -#ifdef LTC_RIJNDAEL -struct rijndael_key { - ulong32 eK[60], dK[60]; - int Nr; -}; -#endif - -#ifdef LTC_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 LTC_XTEA -struct xtea_key { - unsigned long A[32], B[32]; -}; -#endif - -#ifdef LTC_TWOFISH -#ifndef LTC_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 LTC_SAFER -#define LTC_SAFER_K64_DEFAULT_NOF_ROUNDS 6 -#define LTC_SAFER_K128_DEFAULT_NOF_ROUNDS 10 -#define LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS 8 -#define LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS 10 -#define LTC_SAFER_MAX_NOF_ROUNDS 13 -#define LTC_SAFER_BLOCK_LEN 8 -#define LTC_SAFER_KEY_LEN (1 + LTC_SAFER_BLOCK_LEN * (1 + 2 * LTC_SAFER_MAX_NOF_ROUNDS)) -typedef unsigned char safer_block_t[LTC_SAFER_BLOCK_LEN]; -typedef unsigned char safer_key_t[LTC_SAFER_KEY_LEN]; -struct safer_key { - safer_key_t key; -}; -#endif - -#ifdef LTC_RC2 -struct rc2_key { - unsigned xkey[64]; -}; -#endif - -#ifdef LTC_DES -struct des_key { - ulong32 ek[32], dk[32]; -}; - -struct des3_key { - ulong32 ek[3][32], dk[3][32]; -}; -#endif - -#ifdef LTC_CAST5 -struct cast5_key { - ulong32 K[32], keylen; -}; -#endif - -#ifdef LTC_NOEKEON -struct noekeon_key { - ulong32 K[4], dK[4]; -}; -#endif - -#ifdef LTC_SKIPJACK -struct skipjack_key { - unsigned char key[10]; -}; -#endif - -#ifdef LTC_KHAZAD -struct khazad_key { - ulong64 roundKeyEnc[8 + 1]; - ulong64 roundKeyDec[8 + 1]; -}; -#endif - -#ifdef LTC_ANUBIS -struct anubis_key { - int keyBits; - int R; - ulong32 roundKeyEnc[18 + 1][4]; - ulong32 roundKeyDec[18 + 1][4]; -}; -#endif - -#ifdef LTC_MULTI2 -struct multi2_key { - int N; - ulong32 uk[8]; -}; -#endif - -typedef union Symmetric_key { -#ifdef LTC_DES - struct des_key des; - struct des3_key des3; -#endif -#ifdef LTC_RC2 - struct rc2_key rc2; -#endif -#ifdef LTC_SAFER - struct safer_key safer; -#endif -#ifdef LTC_TWOFISH - struct twofish_key twofish; -#endif -#ifdef LTC_BLOWFISH - struct blowfish_key blowfish; -#endif -#ifdef LTC_RC5 - struct rc5_key rc5; -#endif -#ifdef LTC_RC6 - struct rc6_key rc6; -#endif -#ifdef LTC_SAFERP - struct saferp_key saferp; -#endif -#ifdef LTC_RIJNDAEL - struct rijndael_key rijndael; -#endif -#ifdef LTC_XTEA - struct xtea_key xtea; -#endif -#ifdef LTC_CAST5 - struct cast5_key cast5; -#endif -#ifdef LTC_NOEKEON - struct noekeon_key noekeon; -#endif -#ifdef LTC_SKIPJACK - struct skipjack_key skipjack; -#endif -#ifdef LTC_KHAZAD - struct khazad_key khazad; -#endif -#ifdef LTC_ANUBIS - struct anubis_key anubis; -#endif -#ifdef LTC_KSEED - struct kseed_key kseed; -#endif -#ifdef LTC_KASUMI - struct kasumi_key kasumi; -#endif -#ifdef LTC_MULTI2 - struct multi2_key multi2; -#endif - void* data; -} symmetric_key; - -#ifdef LTC_ECB_MODE -/** A block cipher ECB structure */ -typedef struct { - /** The index of the cipher chosen */ - int cipher, - /** The block size of the given cipher */ - blocklen; - /** The scheduled key */ - symmetric_key key; -} symmetric_ECB; -#endif - -#ifdef LTC_CFB_MODE -/** A block cipher CFB structure */ -typedef struct { - /** The index of the cipher chosen */ - int cipher, - /** The block size of the given cipher */ - blocklen, - /** The padding offset */ - padlen; - /** The current IV */ - unsigned char IV[MAXBLOCKSIZE], - /** The pad used to encrypt/decrypt */ - pad[MAXBLOCKSIZE]; - /** The scheduled key */ - symmetric_key key; -} symmetric_CFB; -#endif - -#ifdef LTC_OFB_MODE -/** A block cipher OFB structure */ -typedef struct { - /** The index of the cipher chosen */ - int cipher, - /** The block size of the given cipher */ - blocklen, - /** The padding offset */ - padlen; - /** The current IV */ - unsigned char IV[MAXBLOCKSIZE]; - /** The scheduled key */ - symmetric_key key; -} symmetric_OFB; -#endif - -#ifdef LTC_CBC_MODE -/** A block cipher CBC structure */ -typedef struct { - /** The index of the cipher chosen */ - int cipher, - /** The block size of the given cipher */ - blocklen; - /** The current IV */ - unsigned char IV[MAXBLOCKSIZE]; - /** The scheduled key */ - symmetric_key key; -} symmetric_CBC; -#endif - - -#ifdef LTC_CTR_MODE -/** A block cipher CTR structure */ -typedef struct { - /** The index of the cipher chosen */ - int cipher, - /** The block size of the given cipher */ - blocklen, - /** The padding offset */ - padlen, - /** The mode (endianess) of the CTR, 0==little, 1==big */ - mode, - /** counter width */ - ctrlen; - - /** The counter */ - unsigned char ctr[MAXBLOCKSIZE], - /** The pad used to encrypt/decrypt */ - pad[MAXBLOCKSIZE]; - /** The scheduled key */ - symmetric_key key; -} symmetric_CTR; -#endif - - -#ifdef LTC_LRW_MODE -/** A LRW structure */ -typedef struct { - /** The index of the cipher chosen (must be a 128-bit block cipher) */ - int cipher; - - /** The current IV */ - unsigned char IV[16], - - /** the tweak key */ - tweak[16], - - /** The current pad, it's the product of the first 15 bytes against the tweak key */ - pad[16]; - - /** The scheduled symmetric key */ - symmetric_key key; - -#ifdef LRW_TABLES - /** The pre-computed multiplication table */ - unsigned char PC[16][256][16]; -#endif -} symmetric_LRW; -#endif - -#ifdef LTC_F8_MODE -/** A block cipher F8 structure */ -typedef struct { - /** The index of the cipher chosen */ - int cipher, - /** The block size of the given cipher */ - blocklen, - /** The padding offset */ - padlen; - /** The current IV */ - unsigned char IV[MAXBLOCKSIZE], MIV[MAXBLOCKSIZE]; - /** Current block count */ - ulong32 blockcnt; - /** The scheduled key */ - symmetric_key key; -} symmetric_F8; -#endif - - -/** cipher descriptor table, last entry has "name == NULL" to mark the end of table */ -extern struct ltc_cipher_descriptor { - /** name of cipher */ - char* name; - /** internal ID */ - unsigned char ID; - /** min keysize (octets) */ - int min_key_length, - /** max keysize (octets) */ - max_key_length, - /** block size (octets) */ - block_length, - /** default number of rounds */ - default_rounds; - /** Setup the cipher - @param key The input symmetric key - @param keylen The length of the input key (octets) - @param num_rounds The requested number of rounds (0==default) - @param skey [out] The destination of the scheduled key - @return CRYPT_OK if successful - */ - int (*setup)(const unsigned char* key, int keylen, int num_rounds, symmetric_key* skey); - /** Encrypt a block - @param pt The plaintex - @param ct [out] The ciphertex - @param skey The scheduled key - @return CRYPT_OK if successful - */ - int (*ecb_encrypt)(const unsigned char* pt, unsigned char* ct, symmetric_key* skey); - /** Decrypt a block - @param ct The ciphertex - @param pt [out] The plaintex - @param skey The scheduled key - @return CRYPT_OK if successful - */ - int (*ecb_decrypt)(const unsigned char* ct, unsigned char* pt, symmetric_key* skey); - /** Test the block cipher - @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled - */ - int (*test)(void); - - /** Terminate the contex - @param skey The scheduled key - */ - void (*done)(symmetric_key* skey); - - /** Determine a key size - @param keysize [in/out] The size of the key desired and the suggested size - @return CRYPT_OK if successful - */ - int (*keysize)(int* keysize); - - /** Accelerators **/ - /** Accelerated ECB encryption - @param pt Plaintex - @param ct Ciphertex - @param blocks The number of complete blocks to process - @param skey The scheduled key contex - @return CRYPT_OK if successful - */ - int (*accel_ecb_encrypt)(const unsigned char* pt, - unsigned char* ct, - unsigned long blocks, - symmetric_key* skey); - - /** Accelerated ECB decryption - @param pt Plaintex - @param ct Ciphertex - @param blocks The number of complete blocks to process - @param skey The scheduled key contex - @return CRYPT_OK if successful - */ - int (*accel_ecb_decrypt)(const unsigned char* ct, - unsigned char* pt, - unsigned long blocks, - symmetric_key* skey); - - /** Accelerated CBC encryption - @param pt Plaintex - @param ct Ciphertex - @param blocks The number of complete blocks to process - @param IV The initial value (input/output) - @param skey The scheduled key contex - @return CRYPT_OK if successful - */ - int (*accel_cbc_encrypt)(const unsigned char* pt, - unsigned char* ct, - unsigned long blocks, - unsigned char* IV, - symmetric_key* skey); - - /** Accelerated CBC decryption - @param pt Plaintex - @param ct Ciphertex - @param blocks The number of complete blocks to process - @param IV The initial value (input/output) - @param skey The scheduled key contex - @return CRYPT_OK if successful - */ - int (*accel_cbc_decrypt)(const unsigned char* ct, - unsigned char* pt, - unsigned long blocks, - unsigned char* IV, - symmetric_key* skey); - - /** Accelerated CTR encryption - @param pt Plaintex - @param ct Ciphertex - @param blocks The number of complete blocks to process - @param IV The initial value (input/output) - @param mode little or big endian counter (mode=0 or mode=1) - @param skey The scheduled key contex - @return CRYPT_OK if successful - */ - int (*accel_ctr_encrypt)(const unsigned char* pt, - unsigned char* ct, - unsigned long blocks, - unsigned char* IV, - int mode, - symmetric_key* skey); - - /** Accelerated LRW - @param pt Plaintex - @param ct Ciphertex - @param blocks The number of complete blocks to process - @param IV The initial value (input/output) - @param tweak The LRW tweak - @param skey The scheduled key contex - @return CRYPT_OK if successful - */ - int (*accel_lrw_encrypt)(const unsigned char* pt, - unsigned char* ct, - unsigned long blocks, - unsigned char* IV, - const unsigned char* tweak, - symmetric_key* skey); - - /** Accelerated LRW - @param ct Ciphertex - @param pt Plaintex - @param blocks The number of complete blocks to process - @param IV The initial value (input/output) - @param tweak The LRW tweak - @param skey The scheduled key contex - @return CRYPT_OK if successful - */ - int (*accel_lrw_decrypt)(const unsigned char* ct, - unsigned char* pt, - unsigned long blocks, - unsigned char* IV, - const unsigned char* tweak, - symmetric_key* skey); - - /** Accelerated CCM packet (one-shot) - @param key The secret key to use - @param keylen The length of the secret key (octets) - @param uskey A previously scheduled key [optional can be NULL] - @param nonce The session nonce [use once] - @param noncelen The length of the nonce - @param header The header for the session - @param headerlen The length of the header (octets) - @param pt [out] The plaintex - @param ptlen The length of the plaintext (octets) - @param ct [out] The ciphertex - @param tag [out] The destination tag - @param taglen [in/out] The max size and resulting size of the authentication tag - @param direction Encrypt or Decrypt direction (0 or 1) - @return CRYPT_OK if successful - */ - 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); - - /** Accelerated GCM packet (one shot) - @param key The secret key - @param keylen The length of the secret key - @param IV The initial vector - @param IVlen The length of the initial vector - @param adata The additional authentication data (header) - @param adatalen The length of the adata - @param pt The plaintex - @param ptlen The length of the plaintext (ciphertext length is the same) - @param ct The ciphertex - @param tag [out] The MAC tag - @param taglen [in/out] The MAC tag length - @param direction Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT) - @return CRYPT_OK on success - */ - 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); - - /** Accelerated one shot LTC_OMAC - @param key The secret key - @param keylen The key length (octets) - @param in The message - @param inlen Length of message (octets) - @param out [out] Destination for tag - @param outlen [in/out] Initial and final size of ou - @return CRYPT_OK on success - */ - int (*omac_memory)(const unsigned char* key, - unsigned long keylen, - const unsigned char* in, - unsigned long inlen, - unsigned char* out, - unsigned long* outlen); - - /** Accelerated one shot XCBC - @param key The secret key - @param keylen The key length (octets) - @param in The message - @param inlen Length of message (octets) - @param out [out] Destination for tag - @param outlen [in/out] Initial and final size of ou - @return CRYPT_OK on success - */ - int (*xcbc_memory)(const unsigned char* key, - unsigned long keylen, - const unsigned char* in, - unsigned long inlen, - unsigned char* out, - unsigned long* outlen); - - /** Accelerated one shot F9 - @param key The secret key - @param keylen The key length (octets) - @param in The message - @param inlen Length of message (octets) - @param out [out] Destination for tag - @param outlen [in/out] Initial and final size of ou - @return CRYPT_OK on success - @remark Requires manual padding - */ - 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 LTC_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 LTC_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 LTC_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 LTC_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 LTC_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 LTC_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 LTC_RIJNDAEL - -/* make aes an alias */ -#define aes_setup rijndael_setup -#define aes_ecb_encrypt rijndael_ecb_encryp -#define aes_ecb_decrypt rijndael_ecb_decryp -#define aes_test rijndael_tes -#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_encryp -#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 LTC_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 LTC_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 LTC_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 LTC_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 LTC_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 LTC_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 LTC_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 LTC_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 LTC_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_MULTI2 -int multi2_setup(const unsigned char* key, int keylen, int num_rounds, symmetric_key* skey); -int multi2_ecb_encrypt(const unsigned char* pt, unsigned char* ct, symmetric_key* skey); -int multi2_ecb_decrypt(const unsigned char* ct, unsigned char* pt, symmetric_key* skey); -int multi2_test(void); -void multi2_done(symmetric_key* skey); -int multi2_keysize(int* keysize); -extern const struct ltc_cipher_descriptor multi2_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 0x0000 -#define CTR_COUNTER_BIG_ENDIAN 0x1000 -#define LTC_CTR_RFC3686 0x2000 - -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); - -/* don't call */ -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 - -#ifdef LTC_XTS_MODE -typedef struct { - symmetric_key key1, key2; - int cipher; -} symmetric_xts; - -int xts_start(int cipher, - const unsigned char* key1, - const unsigned char* key2, - unsigned long keylen, - int num_rounds, - symmetric_xts* xts); - -int xts_encrypt(const unsigned char* pt, - unsigned long ptlen, - unsigned char* ct, - const unsigned char* tweak, - symmetric_xts* xts); -int xts_decrypt(const unsigned char* ct, - unsigned long ptlen, - unsigned char* pt, - const unsigned char* tweak, - symmetric_xts* xts); - -void xts_done(symmetric_xts* xts); -int xts_test(void); -void xts_mult_x(unsigned char* I); -#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) - -/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_cipher.h,v $ */ -/* $Revision: 1.54 $ */ -/* $Date: 2007/05/12 14:37:41 $ */ |