main.c:main() -> session.c:session() -> admin_handler()/isakmp.c:isakmp_handler()#/pfkey_handler() -> isakmp.c:isakmp_main()
->isakmp.c:ph1_main() -> isakmp_inf.c:isakmp_info_send_n1() -> isakmp_inf.c:isakmp_info_send_common() ->
oakley.c:oakley_do_encrypt() -> isakmp_inf.c:isakmp_send()
oakley.c:oakley_do_encrypt() -> algorithm.c:alg_oakley_encdef_encrypt() -> algorithm.c:alg_oakley_encdef()取得加密算法f ->
crypto_openssl.c:f->encrypt()以blowfish为例则调用eay_bf_encrypt() -> evp_crypt() -> 调用openssl 库函数实现加密
具体的加密算法和函数定义在全局struct enc_algorithm oakley_encdef[]中:
struct enc_algorithm {
char *name;
int type;
int doi;
int blocklen;
vchar_t *(*encrypt) __P((vchar_t *, vchar_t *, vchar_t *));
vchar_t *(*decrypt) __P((vchar_t *, vchar_t *, vchar_t *));
int (*weakkey) __P((vchar_t *));
int (*keylen) __P((int));
};
通过比较doi找到具体的算法函数例如:eay_bf_encrypt
pfkey_handler()处理与kernel 的交互信息
阅读(845) | 评论(0) | 转发(0) |