|
|
1.1 ! root 1: /* Copyright (C) 2004 TrueCrypt Team, truecrypt.org ! 2: This product uses components written by Paul Le Roux <[email protected]> */ ! 3: ! 4: ! 5: // User text input limits ! 6: #ifndef _DEBUG ! 7: #define MIN_PASSWORD 12 ! 8: #else ! 9: #define MIN_PASSWORD 0 ! 10: #endif ! 11: #define MAX_PASSWORD 64 ! 12: ! 13: // User key ! 14: #define USERKEY_ITERATIONS 2000 ! 15: #define USERKEY_SALT_SIZE 64 ! 16: ! 17: // Disk key + IV ! 18: #define DISKKEY_SIZE 256 ! 19: #define DISK_IV_SIZE 32 ! 20: ! 21: // Volume header byte offsets ! 22: #define HEADER_USERKEY_SALT 0 ! 23: #define HEADER_ENCRYPTEDDATA USERKEY_SALT_SIZE ! 24: #define HEADER_DISKKEY 256 ! 25: ! 26: // Volume header sizes ! 27: #define HEADER_SIZE 512 ! 28: #define HEADER_ENCRYPTEDDATASIZE (HEADER_SIZE - HEADER_ENCRYPTEDDATA) ! 29: ! 30: // PKCS5 PRF hash algorithm ID ! 31: #define SHA1 1 ! 32: #define RIPEMD160 2 ! 33: ! 34: /* The encryption algorithm ID */ ! 35: #define NONE 0 ! 36: #define BLOWFISH 1 ! 37: #define CAST 2 ! 38: #define IDEA 3 ! 39: #define TRIPLEDES 4 ! 40: #define DES56 100 // Used only for DES test vectors ! 41: ! 42: #define LAST_CIPHER_ID 4 // Last cipher used for volume encryption ! 43: ! 44: // Length in bytes of the longest key used by encryption algorithms ! 45: #define MAX_CIPHER_KEY 56 // Blowfish 448 bits ! 46: ! 47: /* Length of scheduled keys */ ! 48: #define IDEA_KS 104 ! 49: #define DES_KS 128 ! 50: #define TRIPLEDES_KS (DES_KS*3) ! 51: #define BLOWFISH_KS 4168 ! 52: #define CAST_KS 128 ! 53: ! 54: #define MAX_EXPANDED_KEY 4168 ! 55: ! 56: #include "des.h" ! 57: #include "blowfish.h" ! 58: #include "idea.h" ! 59: #include "sha.h" ! 60: #include "sha1.h" ! 61: #include "cast.h" ! 62: ! 63: /* _cdecl is needed here because the device driver defaults to stdcall */ ! 64: typedef void (_cdecl * sector_func) (unsigned long *, unsigned __int64, unsigned long, ! 65: unsigned char *, unsigned char *, int); ! 66: ! 67: typedef struct keyInfo_t ! 68: { ! 69: int noIterations; /* No.of times to iterate setup */ ! 70: int keyLength; /* Length of the key */ ! 71: char userKey[MAX_PASSWORD]; /* Max pass, WITHOUT +1 for the NULL */ ! 72: char key_salt[USERKEY_SALT_SIZE]; /* Key setup salt */ ! 73: char key[DISKKEY_SIZE]; /* The keying material itself */ ! 74: } KEY_INFO, *PKEY_INFO; ! 75: ! 76: typedef struct CRYPTO_INFO_t ! 77: { ! 78: /* cipher information */ ! 79: int cipher; ! 80: sector_func encrypt_sector; ! 81: sector_func decrypt_sector; ! 82: unsigned char iv[DISK_IV_SIZE]; ! 83: unsigned char ks[MAX_EXPANDED_KEY]; ! 84: ! 85: /* volume information */ ! 86: unsigned char master_decrypted_key[DISKKEY_SIZE]; ! 87: unsigned char key_salt[USERKEY_SALT_SIZE]; ! 88: int noIterations; ! 89: int pkcs5; ! 90: ! 91: unsigned __int64 volume_creation_time; ! 92: unsigned __int64 header_creation_time; ! 93: } CRYPTO_INFO, *PCRYPTO_INFO; ! 94: ! 95: #define decipher_block(cipher, data, ks) \ ! 96: {\ ! 97: if (cipher == BLOWFISH) BF_decrypt ((void *) data, (void *) ks); \ ! 98: else if (cipher == IDEA) ideaCrypt ((void *) data,(void *) data, (void *) ((char *) ks + IDEA_KS)); \ ! 99: else if (cipher == DES56) des_encrypt ((void *) data, (void *) ks, 0); \ ! 100: else if (cipher == CAST) CAST_ecb_encrypt((void *) data,(void *) data,(void*)ks,0); \ ! 101: else if (cipher == TRIPLEDES) des_ecb3_encrypt ((void *) data,(void *) data, (void *) ks, \ ! 102: (void*)((char*)ks+DES_KS),(void*)((char*)ks+DES_KS*2),0); \ ! 103: } ! 104: ! 105: #define encipher_block(cipher, data, ks) \ ! 106: {\ ! 107: if (cipher == BLOWFISH) BF_encrypt ((void *) data, (void *) ks); \ ! 108: else if (cipher == IDEA) ideaCrypt ((void *) data, (void *) data, (void *) ks); \ ! 109: else if (cipher == DES56) des_encrypt ((void *) data, (void *) ks, 1); \ ! 110: else if (cipher == CAST) CAST_ecb_encrypt((void *) data,(void *) data,(void*)ks,1); \ ! 111: else if (cipher == TRIPLEDES) des_ecb3_encrypt ((void *) data,(void *) data, (void *) ks, \ ! 112: (void*)((char*)ks+DES_KS),(void*)((char*)ks+DES_KS*2),1); \ ! 113: } ! 114: ! 115: #define init_cipher(cipher, key, ks) \ ! 116: {\ ! 117: if (cipher == BLOWFISH) BF_set_key ((void*)ks, 56, (void*) (key)); \ ! 118: else if (cipher == IDEA) ideaExpandKey ((void*) (key), (void*)ks, (void *) ((char *) ks + IDEA_KS)); \ ! 119: else if (cipher == DES56) des_key_sched ((void*) (key), (void*)ks); \ ! 120: else if (cipher == CAST) CAST_set_key((void*)ks, 16, (void*)(key)); \ ! 121: else if (cipher == TRIPLEDES) { \ ! 122: des_key_sched ((void*) (key), (void*)ks); \ ! 123: des_key_sched ((void*) ((char*)(key)+8), (void*)((char*)ks+DES_KS)); \ ! 124: des_key_sched ((void*) ((char*)(key)+16), (void*)((char*)ks+DES_KS*2)); \ ! 125: } \ ! 126: } ! 127: ! 128: #define is_valid_tc_cipher(cipher) \ ! 129: (cipher == BLOWFISH || \ ! 130: cipher == IDEA || \ ! 131: cipher == DES56 || \ ! 132: cipher == CAST || \ ! 133: cipher == TRIPLEDES) ! 134: ! 135: ! 136: PCRYPTO_INFO crypto_open (void); ! 137: void crypto_loadkey (PKEY_INFO keyInfo, char *lpszUserKey, int nUserKeyLen); ! 138: void crypto_close (PCRYPTO_INFO cryptoInfo); ! 139: int get_block_size (int cipher); ! 140: int get_key_size (int cipher); ! 141: char * get_cipher_name (int cipher); ! 142: char * get_hash_name (int pkcs5);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.