OpenSSL密码库算法笔记——第5.2章 椭圆曲线算法的函数架构图

OpenSSL密码库算法笔记——第5.2章 椭圆曲线算法的函数架构图椭圆曲线算法中涉及的函数纷繁复杂,比如为了实现“复制点群”功能,就定义了四个函数,有:intEC_GROUP_copy(EC_GROUP*dest,constEC_GROUP*src)、intec_GFp_mont_group_copy(EC_GROUP*dest,constEC_GROUP*src)、intec_GFp_simple_group_copy(…

大家好,又见面了,我是你们的朋友全栈君。

椭圆曲线算法中涉及的函数纷繁复杂,比如为了实现“复制点群”功能,就定义了四个函数,有:

int EC_GROUP_copy (EC_GROUP *dest, const EC_GROUP *src)

int ec_GFp_mont_group_copy (EC_GROUP *dest, const EC_GROUP *src)

int ec_GFp_simple_group_copy (EC_GROUP *dest, const EC_GROUP *src)

int ec_GF2m_simple_group_copy (EC_GROUP *dest, const EC_GROUP *src)

怎么会有这么多函数呢,它们之间有什么关系呢?在这一节里将会向你详细解释。

首先,实现椭圆曲线中算法的函数大部分在文件ec_lib.cecp_mont.cecp_smpl.cec2_smpl.c里面。这四个文件所起作用各不相同:

文件

大致作用

备注

ec_lib.c

提供统一的对外接口

个别函数接口未统一

ecp_mont.c

专门处理field_data1、field_data2和函数field_mod_func

只针对素域时处理点群的部分函数

ecp_smpl.c

素域底层基本功能的具体实现

只针对素域

ec2_smpl.c

二元域底层基本功能的具体实现

只针对二元域

5.1 ec_lib.cecp_mont.cecp_smpl.cec2_smpl.c的作用

接着,来看看它们之间的关系。

  1. ec_lib.c中的函数(无论接口是否统一)会根据有限域类型调用ecp_mont.c素域、点群)ecp_smpl.c(素域)或者ec2_smpl.c(二元域)。
  2. 对素域而言,ecp_mont.c专门处理field_data1、field_data2和函数field_mod_func(二元域没有这三个参数),剩下的底层基本功能的具体实现需要去调用ecp_smpl.c。如果不需要处理field_data1、field_data2和函数field_mod_func,则直接调用ecp_smpl.c,而不需要调用ecp_ mont.c
  3. 对二元域而言,ec2_smpl.c是底层基本功能的具体实现,被ec_lib.c直接调用。

以上关系的图示如下:

OpenSSL密码库算法笔记——第5.2章 椭圆曲线算法的函数架构图

5.2 ec_lib.cecp_mont.cecp_smpl.cec2_smpl.c的调用关系

        接下来,举两个例子来说明。

例1:分析本小节开始部分提到的“复制点群”各函数之间的相互关系。

注意:以下用记号“EC_GROUP_copy @ec_lib.c”表示函数EC_GROUP_copy是在文件ec_lib.c中,其余类似。

OpenSSL密码库算法笔记——第5.2章 椭圆曲线算法的函数架构图

5.3 “复制点群”函数的调用关系

例2:“设置群信息”。该例中不需要处理field_data1、field_data2和函数field_mod_func,所以就没有调用ecp_mont.c文件,而是直接调用ecp_smpl.c

OpenSSL密码库算法笔记——第5.2章 椭圆曲线算法的函数架构图

5.4 “设置群信息”函数的调用关系

        最后再多说两句。其实每个函数的函数名都写的非常清楚,从函数名中就可以读出该函数是在哪个文件中,是对素域还是二元域进行操作,亦或是作为一个统一的接口。

  1. 如果函数名中带有“GFp”,则函数是对素域进行操作;如果函数名中带有“GF2m”,则函数是对二元域进行操作。
  2. 如果函数名中带有“mont”,则函数在ecp_mont.c文件中。
  3. 如果函数名中带有“smpl”,则函数在ecp_smpl.c或者ec2m_smpl.c文件中。至于具体在哪个文件,就看文件名里面是带有“GFp”还是“GF2m”。

另外,ec_lib.c中还有部分函数的接口并没有统一(比如例2),其实这部分函数同样可以做到接口的统一,但这是后一步的工作了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162135.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月20日 下午1:46
下一篇 2022年7月20日 下午1:46


相关推荐

  • varchar与char的转换_character with byte sequence

    varchar与char的转换_character with byte sequence储存不区分大小写的字符数据TINYTEXT最大长度是255(2^8–1)个字符。TEXT最大长度是65535(2^16–1)个字符。MEDIUMTEXT最大长度是16777215(2^24–1)个字符。LONGTEXT最大长度是4294967295(2^32–1)个字符Varchar对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个…

    2022年8月13日
    15
  • 软件行业职业规划

    软件行业职业规划每个 IT 心中都有一个自己的职业生涯规划 而且不得不承认 在这个行业里面工作时间长了 难免会丧失很多激情 一下是个人的职业规划 希望这个激情的火种能继续燃烧

    2026年3月19日
    2
  • java冒泡排序经典代码_Java干货分享:冒泡排序

    java冒泡排序经典代码_Java干货分享:冒泡排序不管学习什么编程语言,冒泡排序都是每一个走上IT路的小伙伴的必经之路。但是还有好多小伙伴对冒泡排序摸不着头脑,今天知了堂小编就来分享一下经典算法——冒泡排序。首先咱们举个金鱼吐泡泡的例子来理解冒泡排序的过程:金鱼吐出的一连串泡泡就是我们要排序的数据,数据就像泡泡浮上水面一样一个一个被排好序,吐出的泡泡越大就会越快浮出水面,相应的,数据里某一个数字越大,那么就能越快的被排好序,当然最大的数字也是第一…

    2022年7月7日
    20
  • 光流法小结[通俗易懂]

    光流法小结[通俗易懂]1.定义空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。也就是说,由空间域到图像平面的投影。而通俗来讲,把图像中的每一个点的瞬时速度和方向找出来就是光流。2.光流有什么用通过光流判断物体距离我们的远近。一般而言,远景的物体相对来说光流较小,而近景物体

    2022年7月23日
    12
  • Openstack组件部署 — Keystone Install & Create service entity and API endpoints

    Openstack组件部署 — Keystone Install & Create service entity and API endpoints

    2021年9月15日
    50
  • 阿里AI战略的B面:千问包圆AI硬件

    阿里AI战略的B面:千问包圆AI硬件

    2026年3月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号