能力值:
( LV2,RANK:10 )
2 楼
if==如果
能力值:
( LV2,RANK:10 )
3 楼
这我也知道。。。
能力值:
( LV2,RANK:10 )
4 楼
估计是CA认证类的
能力值:
( LV2,RANK:10 )
5 楼
感觉代码并不是很全;
void GetHDKey()
{
ec_key=NULL;
ec_group=NULL;
ec_point=NULL;
ec_point2=NULL;
ec_key=EC_KEY_new_by_curve_name(708); ;创建了一个ec_key,具体参数在ec_key.c中会找到EC_KEY_new(),于此同时创建了ec_group的值
;708这个值是有意义的,决定 field_type = NID_X9_62_prime_field,及group的生成函数(共有两种)。 本题是选(group = EC_GROUP_new_curve_GFp(p, a, b, ctx)
if (ec_key)
{
ec_group=(EC_GROUP *)EC_KEY_get0_group(ec_key); ;相当于赋值语句,EC_KEY_get0_group(ec_key);中就一个rerun语句。
if (ec_group)
{
ec_point=EC_POINT_new(ec_group);
if (ec_point)
{
int ret=EC_KEY_generate_key(ec_key); ;根据上面函数所产生的部分之生成KEY,成功返回值是1,不成功返回值是0;(ec_key.c)
//printf("ret=%d\n",size);
if (ret==1)
{
ec_point2=(EC_POINT *)EC_KEY_get0_public_key(ec_key); ;也是个类似赋值的语句,该函数中只有一个return。
if (ec_point2)
{
size_t len = EC_POINT_point2oct(ec_group, ec_point2, (point_conversion_form_t)2, hdKey, 64, 0);
}
;此函数调用了group->meth->point2oct(group, point, form, buf, len, ctx);但是我找了大部分了openssl文件夹,没有找到point2oct()函数体,只看到其声明在ec_lcl.h中 size_t (*point2oct)(const EC_GROUP *, const EC_POINT *, point_conversion_form_t form,unsigned char *buf, size_t len, BN_CTX *);
}
}
}
}
}
能力值:
( LV2,RANK:10 )
6 楼
楼主要是找到(*point2oct)函数体时告诉我下啊;
总结:我是用celerity和 Notepad+ 来打开所有的代码。(crpto/ec)。 celerity看代码结构不错。 notepad+可以在所有打开的文件中搜索关键字。个人感觉openssl的注释做的非常不好,读源代码基本看不到注释(也没有一本书可以介绍其源码,文档还不全)。
本段代码三个主要部分:EC_KEY_new_by_curve_name(708);EC_KEY_generate_key(ec_key); size_t len = EC_POINT_point2oct(ec_group, ec_point2, (point_conversion_form_t)2, hdKey, 64, 0); 应该算是:初始化, 生成key。 生成len。第三个函数在 ec_lib.c中,还没搞懂什么意思。 楼主自己在参详一下吧。
感觉这个代码hdkey这个参数没给啊!!!! EC_POINT_point2oct()函数应该决定了此函数的作用。
以上均是个人分析,仅供参考,还望高手指教。
能力值:
( LV2,RANK:10 )
7 楼
谢谢楼上的解答。。不过我只想知道这个东西是干嘛用的。。
如果还是没有其他回答的话分就给你了。谢谢。
能力值:
( LV2,RANK:10 )
8 楼
生成一个ECDH密钥,用于加密。使用ECDH安全性还是很高的,即使你拿到DH密钥,与公钥,也无法计算出加解密密钥。