Annotation of truecrypt/common/crypto.h, revision 1.1.1.1

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);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.