Ковыряю стандартный модуль ядра aes-generic. Пытаюсь понять, как работает. Вроде начало понятно, надо создать структурку типа struct crypto_alg, заполнить ее соответствующие поля и записать туда же указатели на функции crypto_aes_set_key, aes_encrypt и aes_decrypt. Эти функции необходимо реализовать в коде. Ничего не меняю, опять же смотрю стандартную реализацию.
int crypto_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
unsigned int key_len)
{
struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
u32 *flags = &tfm->crt_flags;
int ret;
ret = crypto_aes_expand_key(ctx, in_key, key_len);
if (!ret)
return 0;
*flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
return -EINVAL;
}
struct crypto_aes_ctx {
u32 key_enc[AES_MAX_KEYLENGTH_U32];
u32 key_dec[AES_MAX_KEYLENGTH_U32];
u32 key_length;
};
struct crypto_tfm {
u32 crt_flags;
union {
struct cipher_tfm cipher;
struct digest_tfm digest;
struct compress_tfm compress;
} crt_u;
struct crypto_alg *__crt_alg;
};
int crypto_aes_expand_key(struct crypto_aes_ctx *ctx, const u8 *in_key, unsigned int key_len)
{
const __le32 *key = (const __le32 *)in_key;
u32 i, t, u, v, w, j;
#ifdef __DEBUG__
u8 ic;
static u8 callnum;
printk("@setkey: %d \n", callnum++);
for(ic = 0; ic < key_len; ic++) printk(" %d", *(in_key++));
printk( "\nlen: %d \n", key_len );
#endif
insmod aes_generic_test.ko
cryptsetup -c aestest luksFormat test.img
[20424.784155] @setkey: 0
[20424.784158] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
len: 32
[20424.833566] @setkey: 1
[20424.833632] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
len: 32
[20427.779761] @setkey: 2
[20427.779761] 130 92 60 220 127 250 172 229 23 142 121 102 90 147 86 68 83 26 104 151 161 177 175 125 248 18 91 57 36 187 180 43
len: 32
[20427.779761] @setkey: 3
[20427.779761] 130 92 60 220 127 250 172 229 23 142 121 102 90 147 86 68 83 26 104 151 161 177 175 125 248 18 91 57 36 187 180 43
len: 32
[21096.884222] @setkey: 4
[21096.884226] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
len: 32
[21096.897071] @setkey: 5
[21096.897077] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
len: 32
[21099.761775] @setkey: 6
[21099.771637] 247 128 66 45 202 109 37 95 162 76 218 185 161 120 54 193 40 30 45 78 116 189 142 58 123 196 127 156 184 82 145 154
len: 32
[21099.775441] @setkey: 7
[21099.775470] 247 128 66 45 202 109 37 95 162 76 218 185 161 120 54 193 40 30 45 78 116 189 142 58 123 196 127 156 184 82 145 154
len: 32
[21217.221897] @setkey: 0
[21217.221897] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
len: 32
[21217.229780] @setkey: 1
[21217.229783] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
len: 32
[21220.164857] @setkey: 2
[21220.164857] 141 102 75 227 249 233 47 193 248 96 3 193 14 9 146 192 249 134 63 180 15 82 95 186 75 118 217 162 46 181 170 253
len: 32
[21220.164857] @setkey: 3
[21220.164857] 141 102 75 227 249 233 47 193 248 96 3 193 14 9 146 192 249 134 63 180 15 82 95 186 75 118 217 162 46 181 170 253
len: 32