?? mycrypt_cipher.h
字號:
/* ---- 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 BLOWFISHstruct blowfish_key { ulong32 S[4][256]; ulong32 K[18];};#endif#ifdef RC5struct rc5_key { int rounds; ulong32 K[50];};#endif#ifdef RC6struct rc6_key { ulong32 K[44];};#endif#ifdef SAFERPstruct saferp_key { unsigned char K[33][16]; long rounds;};#endif#ifdef RIJNDAELstruct rijndael_key { ulong32 eK[64], dK[64]; int Nr;};#endif#ifdef XTEAstruct 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 RC2struct rc2_key { unsigned xkey[64]; };#endif#ifdef DESstruct des_key { ulong32 ek[32], dk[32];};struct des3_key { ulong32 ek[3][32], dk[3][32];};#endif#ifdef CAST5struct cast5_key { ulong32 K[32], keylen;};#endif#ifdef NOEKEONstruct noekeon_key { ulong32 K[4], dK[4];};#endif#ifdef SKIPJACK struct skipjack_key { unsigned char key[10];};#endiftypedef 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} symmetric_key;/* A block cipher ECB structure */typedef struct { int cipher, blocklen; symmetric_key key;} symmetric_ECB;/* A block cipher CFB structure */typedef struct { int cipher, blocklen, padlen; unsigned char IV[MAXBLOCKSIZE], pad[MAXBLOCKSIZE]; symmetric_key key;} symmetric_CFB;/* A block cipher OFB structure */typedef struct { int cipher, blocklen, padlen; unsigned char IV[MAXBLOCKSIZE]; symmetric_key key;} symmetric_OFB;/* A block cipher CBC structure */typedef struct Symmetric_CBC { int cipher, blocklen; unsigned char IV[MAXBLOCKSIZE]; symmetric_key key;} symmetric_CBC;/* A block cipher CTR structure */typedef struct Symmetric_CTR { int cipher, blocklen, padlen, mode; unsigned char ctr[MAXBLOCKSIZE], pad[MAXBLOCKSIZE]; symmetric_key key;} symmetric_CTR;/* cipher descriptor table, last entry has "name == NULL" to mark the end of table */extern struct _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 keylength, int num_rounds, symmetric_key *skey); void (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *key); void (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *key); int (*test)(void); int (*keysize)(int *desired_keysize);} cipher_descriptor[];#ifdef BLOWFISHextern int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int blowfish_test(void);extern int blowfish_keysize(int *desired_keysize);extern const struct _cipher_descriptor blowfish_desc;#endif#ifdef RC5extern int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int rc5_test(void);extern int rc5_keysize(int *desired_keysize);extern const struct _cipher_descriptor rc5_desc;#endif#ifdef RC6extern int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int rc6_test(void);extern int rc6_keysize(int *desired_keysize);extern const struct _cipher_descriptor rc6_desc;#endif#ifdef RC2extern int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void rc2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void rc2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int rc2_test(void);extern int rc2_keysize(int *desired_keysize);extern const struct _cipher_descriptor rc2_desc;#endif#ifdef SAFERPextern int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int saferp_test(void);extern int saferp_keysize(int *desired_keysize);extern const struct _cipher_descriptor saferp_desc;#endif#ifdef SAFERextern int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int safer_k64_test(void);extern int safer_sk64_test(void);extern int safer_sk128_test(void);extern int safer_64_keysize(int *desired_keysize);extern int safer_128_keysize(int *desired_keysize);extern const struct _cipher_descriptor safer_k64_desc, safer_k128_desc, safer_sk64_desc, safer_sk128_desc;#endif#ifdef RIJNDAEL/* make aes an alias */#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_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_keysizeextern int rijndael_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int rijndael_test(void);extern int rijndael_keysize(int *desired_keysize);extern int rijndael_enc_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void rijndael_enc_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern int rijndael_enc_keysize(int *desired_keysize);extern const struct _cipher_descriptor rijndael_desc, aes_desc;extern const struct _cipher_descriptor rijndael_enc_desc, aes_enc_desc;#endif#ifdef XTEAextern int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int xtea_test(void);extern int xtea_keysize(int *desired_keysize);extern const struct _cipher_descriptor xtea_desc;#endif#ifdef TWOFISHextern int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int twofish_test(void);extern int twofish_keysize(int *desired_keysize);extern const struct _cipher_descriptor twofish_desc;#endif#ifdef DESextern int des_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int des_test(void);extern int des_keysize(int *desired_keysize);extern int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int des3_test(void);extern int des3_keysize(int *desired_keysize);extern const struct _cipher_descriptor des_desc, des3_desc;#endif#ifdef CAST5extern int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int cast5_test(void);extern int cast5_keysize(int *desired_keysize);extern const struct _cipher_descriptor cast5_desc;#endif#ifdef NOEKEONextern int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int noekeon_test(void);extern int noekeon_keysize(int *desired_keysize);extern const struct _cipher_descriptor noekeon_desc;#endif#ifdef SKIPJACKextern int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);extern void skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);extern void skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);extern int skipjack_test(void);extern int skipjack_keysize(int *desired_keysize);extern const struct _cipher_descriptor skipjack_desc;#endif#ifdef ECBextern int ecb_start(int cipher, const unsigned char *key, int keylen, int num_rounds, symmetric_ECB *ecb);extern int ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_ECB *ecb);extern int ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_ECB *ecb);#endif#ifdef CFBextern int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key, int keylen, int num_rounds, symmetric_CFB *cfb);extern int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CFB *cfb);extern int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CFB *cfb);extern int cfb_getiv(unsigned char *IV, unsigned long *len, symmetric_CFB *cfb);extern int cfb_setiv(const unsigned char *IV, unsigned long len, symmetric_CFB *cfb);#endif#ifdef OFBextern int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, int keylen, int num_rounds, symmetric_OFB *ofb);extern int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb);extern int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_OFB *ofb);extern int ofb_getiv(unsigned char *IV, unsigned long *len, symmetric_OFB *ofb);extern int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb);#endif#ifdef CBCextern int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key, int keylen, int num_rounds, symmetric_CBC *cbc);extern int cbc_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_CBC *cbc);extern int cbc_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_CBC *cbc);extern int cbc_getiv(unsigned char *IV, unsigned long *len, symmetric_CBC *cbc);extern int cbc_setiv(const unsigned char *IV, unsigned long len, symmetric_CBC *cbc);#endif#ifdef CTRextern int ctr_start(int cipher, const unsigned char *IV, const unsigned char *key, int keylen, int num_rounds, symmetric_CTR *ctr);extern int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr);extern int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CTR *ctr);extern int ctr_getiv(unsigned char *IV, unsigned long *len, symmetric_CTR *ctr);extern int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr);#endif extern int find_cipher(const char *name);extern int find_cipher_any(const char *name, int blocklen, int keylen);extern int find_cipher_id(unsigned char ID);extern int register_cipher(const struct _cipher_descriptor *cipher);extern int unregister_cipher(const struct _cipher_descriptor *cipher);extern int cipher_is_valid(int idx);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -