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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python 二次开发 AutoCAD 简介「建议收藏」

    Python 二次开发 AutoCAD 简介「建议收藏」一、前沿cad是python是ActiveX是pyautocad模块由俄罗斯工程师开发,因参考实例较少,工程需要,现将模块中一些基本的用法,做出简要说明,叙述力求简洁明了,因个人水平有限,文中难免有所疏漏,还请各位大神不吝批评指正。…

    2022年6月5日
    38
  • onedrive个人版免费扩容_onedrive扩容25t

    onedrive个人版免费扩容_onedrive扩容25tSkyDriveRenamedOneDriveSkyDriveProRenamed OneDriveforBusinessInvitefriendstojoinOneDriveForeachfriendwhosignsintoOneDriveasanewcustomer,bothyouandyourfriendwillreceiveanextra0.5

    2022年9月8日
    0
  • HttpClient详细解释

    HttpClient详细解释Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会

    2025年6月1日
    4
  • c语言中字符串比较的库函数是什么_c语言比较字符串大小

    c语言中字符串比较的库函数是什么_c语言比较字符串大小在单片机串口实现字符串命令解析这篇文章中分析了在串口通信中如何去解析字符串命令,这篇文章就来讨论下字符串比较的方法都有哪些?说起比较运算,肯定第一时间想到了C语言中关于比较的相关运算符“>、<、!=、>=、<=、==”,那么要比较两个字符串是否相等是不是直接用“==”比较就行了。下面就来看看这种方法行不行?先看一个例子voidmain(void){chars1[]=”abc”;chars2[]…

    2025年7月24日
    3
  • idea2021.4.3 激活码【在线破解激活】[通俗易懂]

    idea2021.4.3 激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    54
  • 深度学习: ILSVRC竞赛

    深度学习: ILSVRC竞赛LargeScaleVisualRecognitionChallenge(ILSVRC):-ILSVR全称ImageNetLargeScaleVisualRecognitionCompetition举办单位ImageNet首届2010(AlexNet夺冠)终届2017(SENet夺冠)…

    2022年8月30日
    1

发表回复

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

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