原标题:Linux加解密支持模块代码详细分析之核心文件分析(1)
2.4.核心文件分析2.4.1.文件一algapi.c2.4.1.1.文件描述本文件名称:algapi.c
algapi.c文件完整路径为linux-3.5.4/crypto/algapi.c,该文件主要描述了算法加密程序应用接口的实现,文件以内核模块的形式实现。
路径:linux-3.5.4/crypto/algapi.c
涉及主要函数:__crypto_register_alg crypto_alg_tested crypto_register_alg crypto_remove_alg crypto_unregister_alg crypto_register_template crypto_unregister_templat__crypto_lookup_template crypto_register_instance crypto_unregister_instance crypto_alloc_instance2 crypto_alloc_instance
2.4.1.2.主要变量及宏定义
algapi.c文件中涉及的主要变量见下表2-1。
表2-1 文件algapi.c中主要变量解释
变量名称
变量类型
变量说明
alg
struct crypto_alg
变量包含在函数crypto_larval_error中,指向算法抽象统一接口。
driver_name
char *
变量包含在函数crypto_set_driver_name中,算法驱动名称。
inst
struct crypto_instance
*
变量包含在函数crypto_destroy_instance中,算法实例对象。
tmpl
struct crypto_template *
变量包含在函数crypto_destroy_instance中,算法模板对象。
spawn
struct crypto_spawn *
变量包含在函数crypto_more_spawns中,
larval
struct crypto_larval *
变量包含在函数__crypto_register_alg中,一种算法。
err
int
变量包含在函数crypto_wait_for_test中,算法事件通知的返回值。
ret
int
变量包含在函数crypto_unregister_alg中,算法删除的返回值。
q
struct crypto_template *
变量包含在函数crypto_register_template中,算法模板。
list
struct hlist_head *
变量包含在函数crypto_unregister_template中,Hash链表的头节点。
p
struct hlist_node *
变量包含在函数crypto_unregister_template中,hash链表的节点。
tfm
struct crypto_tfm
变量包含在函数crypto_spawn_tfm中,算法对象返回值。
p
char *
变量包含在函数crypto_alloc_instance中,分配内核空间地址。
request
struct list_head *
变量包含在函数__crypto_dequeue_request中,双链表。
2.4.1.3.结构体定义
1. 结构体crypto_alg是对不同算法库进行统一抽象的接口,主要用于算法实现时对里面成员进行赋值操作。具体定义如下。
struct{
struct;
;
unsigned int;
unsigned int;
const char[];
union {
struct;
struct;
struct;
};
struct*;
};
如上所述,结构体crypto_alg中各字段的信息见下表2-2。
表2-2 结构体crypto_alg中各字段解释
字段名
类型
字段说明
cra_list
struct list_head
算法以双链表结构组织
cra_flags
u32
算法的标志信息
cra_blocksize
unsigned int
算法分组大小
cra_ctxsize
unsigned int
算法上下文大小
cra_alignmask
unsigned int
算法的对齐掩码
算法优先级
算法引用计数
char
算法名
char
算法驱动名称
struct *
算法类型
struct
异步分组算法
struct
认证加密算法
struct
分组加密算法
struct
对称加密算法
struct
压缩算法
struct
随机数生成算法
int *
算法初始化钩子函数
void *
算法退出钩子函数
void *
算法销毁钩子函数
struct *
算法模块
2. 结构体crypto_instance是对算法实例进行描述的,这里算法实例仅仅和算法联系起来的,具体的算法还需要在算法调用时才会实现,也就是说算法实例表明存在这样的算法。具体结构及解释如下所示。
struct{
struct;
struct*;
struct;
void*[];
};
结构体crypto_instance中各字段的信息见下表2-3。
表2-3 结构体crypto_instance中各字段解释
字段名
类型
字段说明
struct
算法统一抽象接口
struct
算法模板
struct
算法实例的组织方式
void *[]
责任编辑: