您好我正在处理可堆叠文件系统WrapFS并尝试在其上实施AES-GCM密码来加密存储在底层文件系统中的数据。我在处理内核级AES的GCM模式时遇到了重大麻烦。但是我在CTR模式下成功实现了AES,下面附有相同的代码。有人能指出我如何将其修改为AES-GCM吗?
我看了link,但这并没有多大帮助。 我正在寻找两件事:1。)如何将认证标签与加密数据一起存储在写入的文件中2.以及如何通过发送和接收来自较低文件系统来处理AES-GCM的IV。
由于
int decrypt_encrypt_page(struct page *src_page,
struct page *dst_page,
char *key,
int key_len,
int encrypt)
{
int ret = 0;
struct scatterlist src_sg, dst_sg;
struct crypto_blkcipher *tfm;
struct blkcipher_desc desc;
sg_init_table(&src_sg, 1);
sg_init_table(&dst_sg, 1);
sg_set_page(&src_sg, src_page, PAGE_SIZE, 0);
sg_set_page(&dst_sg, dst_page, PAGE_SIZE, 0);
tfm = crypto_alloc_blkcipher(default_algo, 0, 0);
if (IS_ERR(tfm)) {
printk(KERN_ERR "failed to load transform for %s: %ld\n",
default_algo,
PTR_ERR(tfm));
ret = IS_ERR(tfm);
goto out;
}
desc.tfm = tfm;
desc.flags = 0;
ret = crypto_blkcipher_setkey(tfm, key, key_len);
if (ret) {
printk(KERN_ERR "setkey() failed flags=%x\n",
crypto_blkcipher_get_flags(tfm));
goto out;
}
if (encrypt)
ret = crypto_blkcipher_encrypt(&desc, &dst_sg, &src_sg, PAGE_SIZE);
else
ret = crypto_blkcipher_decrypt(&desc, &dst_sg, &src_sg, PAGE_SIZE);
if (ret)
printk(KERN_INFO "Some error occured while encrypting.\n");
out:
crypto_free_blkcipher(tfm);
return ret;
}