[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Question about implementation
Hi all,
I'm the student who want to encrypt, decrypt some data in
kernel mode. I've stuck for serveral days, but I still cannot
figure it out why I can't really encrypt the data. Could you
please point out what's problem that I've made.
Thanks so much.
Code:
#define __KERNEL__
#define MODULE
#include <linux/module.h>
#ifdef CONFIG_KMOD
#include <linux/kmod.h>
#endif
#include <linux/string.h>
//#include <linux/mm.h>
#include <linux/init.h>
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/malloc.h>
#include <linux/crypto.h>
#include <asm-i386/types.h>
#include <linux/inet.h>
#define DEBUG
struct cipher_context *cx;
struct cipher_implementation *ci;
unsigned char key1[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00};
void dump_u32_buffer(u32 *buf, int number)
{
int i;
for(i=0;i<number;i++)
{
printk("%08x ",buf[i]);
if(i && ((i+1)%4)==0)
printk("\n");
else
printk(" ");
}
if((i%4)!=0)
printk("\n");
}
static int init_cipher()
{
char plain_text[11] = "readline26\n";
char * cipher_text = NULL;
__u32 input1 = 0;
__u32 output1 = 0;
ci = find_cipher_by_name("rijndael-ecb", 1);
if (!ci) {
printk("Find cipher error.\n");
return 1;
}
if ( (cx = (struct cipher_context *) kmalloc(sizeof(struct
cipher_context), GFP_KERNEL)) == NULL) {
printk("Creation of cipher_context failed..\n");
return 1;
}
cx = ci->realloc_context(NULL, ci, sizeof(key1));
cx->ci = ci;
ci->wipe_context(cx);
ci->set_key(cx, key1, sizeof(key1));
printk("%s\n", plain_text);
input1 = (__u32)plain_text;
printk("B4 Encrypt:\n");
dump_u32_buffer(&input1, sizeof(input1));
ci->encrypt(cx, (u8 *)&input1, (u8 *) &output1,
sizeof(&input1));
printk("\nEncrypt:\n");
dump_u32_buffer(&output1, sizeof(output1));
ci->decrypt(cx, (u8 *)&output1, (u8 *) &input1,
sizeof(&input1));
printk("\nDecrypt:\n");
dump_u32_buffer(&input1, sizeof(input1));
printk("\nString :\n");
cipher_text = (char *)&input1;
printk("%s\n", (char*)input1);
return 0;
}
static int __init init(void)
{
printk("Init..\n");
#ifdef DEBUG
while(MOD_IN_USE)
MOD_DEC_USE_COUNT;
MOD_INC_USE_COUNT;
#endif
return init_cipher();
}
static void __exit fini(void)
{
kfree(cx->keyinfo);
kfree(cx);
printk("Finish..\n");
}
module_init(init);
module_exit(fini);
Very respectfully,
marco.
Linux-crypto: cryptography in and on the Linux system
Archive: http://mail.nl.linux.org/linux-crypto/