crypto.h
来自「加密硬盘、分区、虚拟盘的程序源码」· C头文件 代码 · 共 143 行
H
143 行
/* Copyright (C) 2004 TrueCrypt Team, truecrypt.org
This product uses components written by Paul Le Roux <pleroux@swprofessionals.com> */
// User text input limits
#ifndef _DEBUG
#define MIN_PASSWORD 12
#else
#define MIN_PASSWORD 0
#endif
#define MAX_PASSWORD 64
// User key
#define USERKEY_ITERATIONS 2000
#define USERKEY_SALT_SIZE 64
// Disk key + IV
#define DISKKEY_SIZE 256
#define DISK_IV_SIZE 32
// Volume header byte offsets
#define HEADER_USERKEY_SALT 0
#define HEADER_ENCRYPTEDDATA USERKEY_SALT_SIZE
#define HEADER_DISKKEY 256
// Volume header sizes
#define HEADER_SIZE 512
#define HEADER_ENCRYPTEDDATASIZE (HEADER_SIZE - HEADER_ENCRYPTEDDATA)
// PKCS5 PRF hash algorithm ID
#define SHA1 1
#define RIPEMD160 2
/* The encryption algorithm ID */
#define NONE 0
#define BLOWFISH 1
#define CAST 2
#define IDEA 3
#define TRIPLEDES 4
#define DES56 100 // Used only for DES test vectors
#define LAST_CIPHER_ID 4 // Last cipher used for volume encryption
// Length in bytes of the longest key used by encryption algorithms
#define MAX_CIPHER_KEY 56 // Blowfish 448 bits
/* Length of scheduled keys */
#define IDEA_KS 104
#define DES_KS 128
#define TRIPLEDES_KS (DES_KS*3)
#define BLOWFISH_KS 4168
#define CAST_KS 128
#define MAX_EXPANDED_KEY 4168
#include "des.h"
#include "blowfish.h"
#include "idea.h"
#include "sha.h"
#include "sha1.h"
#include "cast.h"
/* _cdecl is needed here because the device driver defaults to stdcall */
typedef void (_cdecl * sector_func) (unsigned long *, unsigned __int64, unsigned long,
unsigned char *, unsigned char *, int);
typedef struct keyInfo_t
{
int noIterations; /* No.of times to iterate setup */
int keyLength; /* Length of the key */
char userKey[MAX_PASSWORD]; /* Max pass, WITHOUT +1 for the NULL */
char key_salt[USERKEY_SALT_SIZE]; /* Key setup salt */
char key[DISKKEY_SIZE]; /* The keying material itself */
} KEY_INFO, *PKEY_INFO;
typedef struct CRYPTO_INFO_t
{
/* cipher information */
int cipher;
sector_func encrypt_sector;
sector_func decrypt_sector;
unsigned char iv[DISK_IV_SIZE];
unsigned char ks[MAX_EXPANDED_KEY];
/* volume information */
unsigned char master_decrypted_key[DISKKEY_SIZE];
unsigned char key_salt[USERKEY_SALT_SIZE];
int noIterations;
int pkcs5;
unsigned __int64 volume_creation_time;
unsigned __int64 header_creation_time;
} CRYPTO_INFO, *PCRYPTO_INFO;
#define decipher_block(cipher, data, ks) \
{\
if (cipher == BLOWFISH) BF_decrypt ((void *) data, (void *) ks); \
else if (cipher == IDEA) ideaCrypt ((void *) data,(void *) data, (void *) ((char *) ks + IDEA_KS)); \
else if (cipher == DES56) des_encrypt ((void *) data, (void *) ks, 0); \
else if (cipher == CAST) CAST_ecb_encrypt((void *) data,(void *) data,(void*)ks,0); \
else if (cipher == TRIPLEDES) des_ecb3_encrypt ((void *) data,(void *) data, (void *) ks, \
(void*)((char*)ks+DES_KS),(void*)((char*)ks+DES_KS*2),0); \
}
#define encipher_block(cipher, data, ks) \
{\
if (cipher == BLOWFISH) BF_encrypt ((void *) data, (void *) ks); \
else if (cipher == IDEA) ideaCrypt ((void *) data, (void *) data, (void *) ks); \
else if (cipher == DES56) des_encrypt ((void *) data, (void *) ks, 1); \
else if (cipher == CAST) CAST_ecb_encrypt((void *) data,(void *) data,(void*)ks,1); \
else if (cipher == TRIPLEDES) des_ecb3_encrypt ((void *) data,(void *) data, (void *) ks, \
(void*)((char*)ks+DES_KS),(void*)((char*)ks+DES_KS*2),1); \
}
#define init_cipher(cipher, key, ks) \
{\
if (cipher == BLOWFISH) BF_set_key ((void*)ks, 56, (void*) (key)); \
else if (cipher == IDEA) ideaExpandKey ((void*) (key), (void*)ks, (void *) ((char *) ks + IDEA_KS)); \
else if (cipher == DES56) des_key_sched ((void*) (key), (void*)ks); \
else if (cipher == CAST) CAST_set_key((void*)ks, 16, (void*)(key)); \
else if (cipher == TRIPLEDES) { \
des_key_sched ((void*) (key), (void*)ks); \
des_key_sched ((void*) ((char*)(key)+8), (void*)((char*)ks+DES_KS)); \
des_key_sched ((void*) ((char*)(key)+16), (void*)((char*)ks+DES_KS*2)); \
} \
}
#define is_valid_tc_cipher(cipher) \
(cipher == BLOWFISH || \
cipher == IDEA || \
cipher == DES56 || \
cipher == CAST || \
cipher == TRIPLEDES)
PCRYPTO_INFO crypto_open (void);
void crypto_loadkey (PKEY_INFO keyInfo, char *lpszUserKey, int nUserKeyLen);
void crypto_close (PCRYPTO_INFO cryptoInfo);
int get_block_size (int cipher);
int get_key_size (int cipher);
char * get_cipher_name (int cipher);
char * get_hash_name (int pkcs5);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?