由于内核驱动运行于内核空间,而Linux的crypto API本身并不推荐开放给用户空间调用,如果要测试该驱动,理论上的办法是在内核里再写一个模块,像kernel自带的tcrypt那样,insmod
这个新模块,用类似modprobe tcrypt sec=1 mode=200
的方式测试。然而这个方法对于需要大量调用固定测试向量的testbench非常不友好,于是还是寻求从用户空间自由自在编写测试框架的办法。
在Google上找到了一个叫Herbert Xu提交到内核源码里的一个接口,头文件if_alg.h
,实现文件af_alg.c
。此接口将crypto API的调用(本来用于IPSec)封装到一个socket通道中,通过在用户空间调用此socket,就可以将参数传到crypto API中,完成内核调用。
原作者以前在新闻组给出的代码有点问题,老是内核出错。参照另一位github大牛的代码发现,原来是少了对数组的初始化
cbuf[CMSG_SPACE(4) + CMSG_SPACE(20)] = {0};
```
编译完成后一切正常。
作者似乎是通过一些内部的管道,将数据传入。Linux博大精深,实在无力深究。
Comments