发明名称 一种基于NEON引擎的向量化Montgomery模乘器的设计方法
摘要 本发明公开了一种基于NEON引擎的向量化Montgomery模乘器的设计方法,它包括以下步骤:S1:数据输入;S2:数据初始化;S3:数据迭代计算;S4:根据迭代结果,将Z和CT进行累加更新Z的值;S5:对计算结果Z进行溢出判断和处理。本发明通过将进位数据进行独立缓存的方式,减少每次迭代对进位数据的累加,仅在最后一次迭代完成后对进位数据进行一次累加,使得高、低位数据之间的运算不存在依赖关系,从而可以通过NEON引擎进行向量化的数据并行处理,具体的,本发明可以提高基于ARM Cortex-A系列芯片的MMM运算速度,从而提高公钥加密体系的整体性能。
申请公布号 CN104951279A 申请公布日期 2015.09.30
申请号 CN201510280570.5 申请日期 2015.05.27
申请人 四川卫士通信息安全平台技术有限公司 发明人 吴汶泰
分类号 G06F9/302(2006.01)I 主分类号 G06F9/302(2006.01)I
代理机构 成都金英专利代理事务所(普通合伙) 51218 代理人 袁英
主权项 一种基于NEON引擎的向量化Montgomery模乘器的设计方法,其特征在于:它包括以下步骤:S1:数据输入:将操作数A、B、M和n0加载寄存器中,其中B<sub>i</sub>在每一轮数据迭代计算步骤之初加载;整数Z=(Z<sub>s‑1</sub>,…,Z<sub>0</sub>)<sub>r</sub>,M=(M<sub>s‑1</sub>,…,M<sub>0</sub>)<sub>r</sub>,A=(A<sub>s‑1</sub>,…,A<sub>0</sub>)<sub>r</sub>,B<sub>i</sub>,T,其中r=2<sup>w</sup>,<img file="FDA0000725870750000011.GIF" wi="173" he="101" />n0=M’modr;n为模长,单位为bit;w是字的位宽,单位为bit;s为迭代次数;所述的寄存器采用NEON引擎提供的扩展寄存器组;S2:数据初始化:对三个临时向量数组赋初值0,所述的三个临时向量数组由结果Z、临时数据C和进位数据CT组成;其中,Z=(Z<sub>s‑1</sub>,…,Z<sub>0</sub>)<sub>r</sub>,C=(C<sub>s‑1</sub>,…,C<sub>0</sub>)<sub>r</sub>,CT=(CT<sub>s‑1</sub>,…,CT)<sub>r</sub>;所述的临时数据C、进位数据CT以及结果Z都通过扩展寄存器组进行缓存;S3:数据迭代计算,在每一次中进行迭代的时候,通过NEON引擎计算得到的进位数据CT直接通过扩展寄存器组进行缓存,并用于下一次迭代的向量化计算过程;包括以下子步骤:S31:定义变量i=0;S32:计算普通常量T:T←(Z<sub>0</sub>+A<sub>0</sub>×B<sub>i</sub>)×M’modr;S33:以字为单位,通过向量乘加的方式计算结果Z和临时数据C:C,Z←(Z+A×B<sub>i</sub>),并将计算数据进行存储;S34:以字为单位,通过临时数据C,通过向量加的方式重新计算进位数据CT:CT←C+CT,并将计算数据进行存储;S35:通过向量乘加的方式计算结果Z和临时数据C:C,Z←(Z+M×T),并将计算数据进行存储;S36:以字为单位,通过向量加的方式将步骤S35中得到的C和Z的值重新计算进位数据CT以及结果Z:CT,Z←(C+CT+Z)/r,并将计算数据进行存储;S37:判断i的值是否小于s:(1)如果i的值小于s,则将i的值加1后,返回步骤S32;(2)如果i的值不小于s,则进入步骤S4;S4:累加更新:将进位数据CT和结果Z进行累加更新Z的值:Z←Z+CT;S5:越位判断:判断Z的值是否大于M,对计算结果Z的值更新:(1)若Z的值大于M,则将Z‑M的值赋给Z,并输出Z的值;(2)若Z的值不大于M,则输出Z的值。
地址 610000 四川省成都市高新区云华路333号2幢