58 lines
1.8 KiB
C
58 lines
1.8 KiB
C
#ifndef _XTS_SMALL_H_
|
|
#define _XTS_SMALL_H_
|
|
|
|
#include "aes_small.h"
|
|
#ifndef AES_ONLY
|
|
#include "twofish_small.h"
|
|
#include "serpent_small.h"
|
|
#endif
|
|
|
|
#ifndef AES_ONLY
|
|
#define CF_AES 0
|
|
#define CF_TWOFISH 1
|
|
#define CF_SERPENT 2
|
|
#define CF_AES_TWOFISH 3
|
|
#define CF_TWOFISH_SERPENT 4
|
|
#define CF_SERPENT_AES 5
|
|
#define CF_AES_TWOFISH_SERPENT 6
|
|
#define CF_CIPHERS_NUM 7
|
|
#else
|
|
#define CF_AES 0
|
|
#define CF_CIPHERS_NUM 1
|
|
#endif
|
|
|
|
#define XTS_SECTOR_SIZE 512
|
|
#define XTS_BLOCK_SIZE 16
|
|
#define XTS_BLOCKS_IN_SECTOR (XTS_SECTOR_SIZE / XTS_BLOCK_SIZE)
|
|
#define XTS_KEY_SIZE 32
|
|
|
|
#ifdef AES_ONLY
|
|
#define MAX_CIPHER_KEY (sizeof(aes256_key))
|
|
#define XTS_FULL_KEY (XTS_KEY_SIZE*2)
|
|
#else
|
|
#define MAX_CIPHER_KEY (sizeof(aes256_key) + sizeof(twofish256_key) + sizeof(serpent256_key))
|
|
#define XTS_FULL_KEY (XTS_KEY_SIZE*3*2)
|
|
#endif
|
|
|
|
#pragma warning(disable:4324)
|
|
typedef __declspec(align(16)) struct _xts_key {
|
|
unsigned char crypt_k[MAX_CIPHER_KEY];
|
|
unsigned char tweak_k[MAX_CIPHER_KEY];
|
|
#ifndef AES_ONLY
|
|
void **algs;
|
|
int max;
|
|
unsigned long ctxsz;
|
|
#endif
|
|
} xts_key;
|
|
#pragma warning(default:4324)
|
|
|
|
void xts_set_key(const unsigned char *key, int alg, xts_key *skey);
|
|
void xts_encrypt(const unsigned char *in, unsigned char *out, unsigned long len, unsigned __int64 offset, xts_key *key);
|
|
void xts_decrypt(const unsigned char *in, unsigned char *out, unsigned long len, unsigned __int64 offset, xts_key *key);
|
|
int xts_init(int hw_crypt);
|
|
|
|
typedef void (*xts_setkey_proc)(const unsigned char *key, int alg, xts_key *skey);
|
|
typedef void (*xts_crypt_proc) (const unsigned char *in, unsigned char *out, unsigned long len, unsigned __int64 offset, xts_key *key);
|
|
typedef void (*xts_init_proc) (int hw_crypt);
|
|
|
|
#endif |