Annotation of truecrypt/common/crypto.h, revision 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.