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


相关推荐

  • vscode配置java环境最新_VScode中文

    vscode配置java环境最新_VScode中文VScode配置Java环境1.VisualStudioCode介绍VisualStudioCode(简称“VSCode”)是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于MacOSX、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器,可在桌面上运行,并且可用于Windows,macOS和Linux。它具有对JavaScript,TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如

    2022年10月4日
    0
  • WPF 教程(wpf架构)

    WPF介绍了一个非常方便的概念:把数据储存为一种资源,无论是本地控件、本地窗口还是全局应用。数据可以是任何你想要的东西,从实际的信息到WPF控件的层次结构都行。这非常有用,你可以把数据放在一个地方,然后在其他地方调用它。这个概念被广泛用在样式和模版,我们后面会详细讲到。也可以用在很多别的地方,就像本章要说明的地方,例子如下:

    2022年4月16日
    48
  • C语言的标识符命名规则

    C语言的标识符命名规则

    2021年9月27日
    54
  • potPlayer 快捷键[通俗易懂]

    potPlayer 快捷键[通俗易懂]空格:播放/暂停 Enter/Alt+Enter:全屏  c–加速  x–减速  z–恢复原速度,再次则恢复上次速度(类似以前电视机的【回看】功能) Tab:显示当前播放视频信息 H:书签管理器 P:添加书签 M:静音 第一行除【p】外:调整图像色彩、亮度、对比度、饱和度、复位 D:定位上一帧,省去截屏与倒退的烦恼 F:定位下一帧 G:直接输入定位位置 0:…

    2022年5月11日
    166
  • Laravel的三种安装方法总结

    Laravel的三种安装方法总结

    2021年10月21日
    43
  • ajaxpro 原理[通俗易懂]

    ajaxpro 原理[通俗易懂]应当承认我这人实在算不上弄潮儿,Ajax早已流行得一塌糊涂,我却始终没有来研究一下这个东东。上次做网站的时候,BOSS就跟我讲过,可以参考一下Ajax的技术,我嘴上答应,心里却不是十分的在乎。究其原因,一来是我这人比较固步自封,二来起初确实也没太相信Ajax真有BO

    2022年7月12日
    41

发表回复

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

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