Hi all,

In order to test kernel crypto API, I tried different methods for computing a SHA1 digest. First, I tried sockets with AF_ALG. Then, I tried ioctl with /dev/crypto after loading cryptodev.ko module. These two methods returned the same hash value as the one computed by OpenSSL over the same input buffer. My input is simply a 5 bytes table where each byte is equal to 0x0a. The SHA1 output is the following: 31 78 9a ce 8f db 0f ae 29 76 e8 30 3b 61 4c 51 d0 a1 39 a9.

Then, I tried scatterlist crypto API. So, I tested the following module:
int init_module(void)
{
uint8_t i=0, buf[20]={0}, m[5]={0x0a,0x0a,0x0a,0x0a,0x0a};
struct scatterlist sg;
struct hash_desc desc;

    MODULE_LICENSE("GPL");
    MODULE_DESCRIPTION("sha1 test with crypto API");
    MODULE_AUTHOR("aymen<aymen.irt@gmail.com>");
    MODULE_ALIAS("cryptoapi test");

    printk(KERN_INFO "\nScatterlist crypto API test\n");   
    desc.flags = 0;
    desc.tfm = crypto_alloc_hash("sha1", 0, CRYPTO_ALG_ASYNC);
    if(!desc.tfm){
        printk(KERN_INFO "Error\n");
    }
   
    sg_init_one(&sg, m, 5);
   
    crypto_hash_init(&desc);
    crypto_hash_update(&desc, &sg, 1);
    crypto_hash_final(&desc, buf);
    crypto_free_hash(desc.tfm);

    printk("\n");
    for (i=0; i<20; i++)
                printk("%02x ", buf[i]);
        printk("\n");
return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "\nScatterlist crypto API test end...\n");
}

My problem is when I insmod my test_cryptoapi.ko, i get a wrong SHA1 output. In fact, I get the following SHA1 digest:  ad c8 3b 19 e7 93 49 1b 1c 6e a0 fd 8b 46 cd 9f 32 e5 92 fc.

I would be grateful for any hint about this problem.

Best regards,
Aymen