首页
社区
课程
招聘
求解释这段代码的具体含义 c++的
发表于: 2013-4-6 00:14 7109

求解释这段代码的具体含义 c++的

2013-4-6 00:14
7109
void GetHDKey()
{
    ec_key=NULL;
    ec_group=NULL;
    ec_point=NULL;
    ec_point2=NULL;

    ec_key=EC_KEY_new_by_curve_name(708);
    if (ec_key)
    {
        ec_group=(EC_GROUP *)EC_KEY_get0_group(ec_key);
        if (ec_group)
        {
            ec_point=EC_POINT_new(ec_group);
            if (ec_point)
            {
                int ret=EC_KEY_generate_key(ec_key);

                //printf("ret=%d\n",size);
                if (ret==1)
                {
                    ec_point2=(EC_POINT *)EC_KEY_get0_public_key(ec_key);
                    if (ec_point2)
                    {
                     
                        size_t len = EC_POINT_point2oct(ec_group, ec_point2, (point_conversion_form_t)2, hdKey, 64, 0);
                    }
                }
            }

        }

    }

}

看字面上是 获取硬盘Key , EC_KEY_new_by_curve_name 这些的都是调用 openssl的 ec.h 文件

求解释这段代码的具体含义

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
if==如果
2013-4-6 01:10
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这我也知道。。。
2013-4-6 10:21
0
雪    币: 243
活跃值: (209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
估计是CA认证类的
2013-4-6 13:07
0
雪    币: 24
活跃值: (27)
能力值: ( 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 *);
                }
            }

        }

    }

}
2013-4-8 18:37
0
雪    币: 24
活跃值: (27)
能力值: ( 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()函数应该决定了此函数的作用。

以上均是个人分析,仅供参考,还望高手指教。
2013-4-8 18:52
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢楼上的解答。。不过我只想知道这个东西是干嘛用的。。

如果还是没有其他回答的话分就给你了。谢谢。
2013-4-12 21:10
0
雪    币: 266
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
生成一个ECDH密钥,用于加密。使用ECDH安全性还是很高的,即使你拿到DH密钥,与公钥,也无法计算出加解密密钥。
2013-4-15 18:15
0
游客
登录 | 注册 方可回帖
返回
//