龙芯平台下sm2算法中进位加法和借位减法的实现方法

文档序号:37424842发布日期:2024-03-25 19:12阅读:13来源:国知局
龙芯平台下sm2算法中进位加法和借位减法的实现方法

本发明属于计算机性能,尤其涉及龙芯平台下sm2算法中进位加法和借位减法的实现方法。


背景技术:

1、本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。

2、为满足公钥密码安全需求,sm2椭圆曲线标准的数字签名算法得到广泛应用,极大提升密码工作的科学化、规范化、法治化水平,有力促进密码技术进步、产业发展和规范应用,作为密码系列标准的重要组成部分,sm2的研究将进一步引起学术及工程领域的重视。

3、2020年,龙芯中科基于二十年的cpu研制和生态建设积累推出了龙架构(loongarch),包括基础架构部分和向量指令、虚拟化、二进制翻译等扩展部分,近2000条指令,龙架构具有较好的自主性、先进性与兼容性,指令系统是软件生态的起点,只有从指令系统的根源上实现自主,才能打破软件生态发展受制于人的锁链,龙架构可以提供自主、安全、可靠的处理器;sm2算法的高效实现可以用于保护通信的机密性和数据完整性;这对于敏感数据的加密和传输至关重要,尤其是在金融、电子政务和医疗领域;总之,在龙架构下高效实现sm2算法对于国内信息安全和技术自主性都具有重要的意义。

4、在龙架构中sm2算法的高效实现的过程中,存在大量的数据运算,比如模加模减等操作,然而在龙架构中,并不能处理溢出,例如add指令中,参与运算的两寄存器相加之后的结果保存在结果寄存器中,但是没有寄存器用来表明数据是否溢出;在常规的溢出处理方案中,存在一定的问题:

5、1)64位寄存器当做32位,寄存器更高位作为进位,这种方案存在的问题是会花费更多的指令和寄存器空间,导致更多的内存读写,算法效率下降。

6、2)将其中两个操作数与结果进行比较,源操作数小于结果则进位为0,源操作数大于结果则进位为1;这种方案无法区别源操作数为0xffffffffffffffff、进位为1和源操作数为0x000000000000000、进位为0的情况,导致结果出错。

7、因此,在龙芯平台下sm2算法中,依然无法高效处理进位加法和借位减法的溢出问题,导致sm2算法运算的效率不高。


技术实现思路

1、为克服上述现有技术的不足,本发明提供了龙芯平台下sm2算法中进位加法和借位减法的实现方法,提出了一种新的进位和借位的计算公式,进而对进位加法和借位减法进行改进,从而高效解决进位加法和借位减法的溢出问题,提高运算的效率,改善龙芯平台下sm2算法的性能。

2、为实现上述目的,本发明的一个或多个实施例提供了如下技术方案:

3、本发明第一方面提供了龙芯平台下sm2算法中进位加法的实现方法。

4、龙芯平台下sm2算法中进位加法的实现方法,包括:

5、获取龙芯平台下sm2算法中待进行加法的两个操作数,并将其转为二进制表示,分别存储到寄存器中;

6、按照最低位到最高位的顺序,进行对应位置的二进制加法运算,输出运算结果及最高位的进位;

7、其中,所述进位的公式为:

8、di=(!ei)&(fi+gi),

9、di表示第i位的进位,ei、fi、gi分别表示ai<ci、bi是否等于0、前一位进位的取值,ai、bi分别表示第一操作数和第二操作数的第i位,ci表示第i位相加的运算结果。

10、进一步的,所述龙芯平台下sm2算法中,所述操作数为256位,所述寄存器的存储容量为64位;

11、所述分别存储到寄存器中,是用4个64位寄存器保存256位的操作数,具体为:

12、根据寄存器的存储容量,对二进制表示的操作数进行段划分;

13、将每段二进制位存到不同的寄存器中。

14、进一步的,所述将每段二进制位存到不同的寄存器中,具体为:

15、寄存器存储第一个操作数a的最低位a0,寄存器存储第一个操作数a的最高位an;

16、寄存器存储第二个操作数b的最低位b0,寄存器存储第二个操作数b的最高位nn。

17、进一步的,所述进行对应位置的二进制加法运算,具体为:

18、ci=ai+bi+di-1,

19、其中,ai、bi分别表示第一操作数和第二操作数的第i位,ci表示第i位相加的运算结果,di-1表示第i-1位的进位。

20、进一步的,还包括模加,具体为:

21、在得到最终的运算结果及最高位的进位后,依据最高位的进位,判断是否溢出,溢出则进行取模操作,输出操作结果。

22、本发明第二方面提供了龙芯平台下sm2算法中借位减法的实现方法。

23、龙芯平台下sm2算法中借位减法的实现方法,包括:

24、获取龙芯平台下sm2算法中待进行减法的两个操作数,并将其转为二进制表示,分别存储到寄存器中;

25、按照最低位到最高位的顺序,进行对应位置的二进制减法运算,输出运算结果及最高位的借位;

26、其中,所述借位的公式为:

27、di=(!ei)&(fi+gi),

28、di表示第i位的借位,ei、fi、gi分别表示ai>ci、bi是否等于0、前一位借位的取值,ai、bi分别表示第一操作数和第二操作数的第i位,ci表示第i位相减的运算结果。

29、进一步的,所述进行对应位置的二进制减法运算,具体为:

30、ci=ai-bi-di-1,

31、其中,ai、bi分别表示第一操作数和第二操作数的第i位,ci表示第i位相减的运算结果,di-1表示第i-1位的借位。

32、进一步的,还包括模减,具体为:

33、在得到最终的运算结果及最高位的借位后,依据最高位的借位,判断是否溢出,溢出则进行取模操作,输出操作结果。

34、本发明第三方面提供了龙芯平台下sm2算法中进位加法器。

35、龙芯平台下sm2算法中进位加法器,包括存储模块和运算模块:

36、存储模块,被配置为:获取龙芯平台下sm2算法中待进行加法的两个操作数,并将其转为二进制表示,分别存储到寄存器中;

37、运算模块,被配置为:按照最低位到最高位的顺序,进行对应位置的二进制加法运算,输出运算结果及最高位的进位;

38、其中,所述进位的公式为:

39、di=(!ei)&(fi+gi),

40、di表示第i位的进位,ei、fi、gi分别表示ai<ci、bi是否等于0、前一位进位的取值,ai、bi分别表示第一操作数和第二操作数的第i位,ci表示第i位相加的运算结果。

41、本发明第四方面提供了龙芯平台下sm2算法中借位减法器。

42、龙芯平台下sm2算法中借位减法器,包括存储模块和运算模块:

43、存储模块,被配置为:获取龙芯平台下sm2算法中待进行减法的两个操作数,并将其转为二进制表示,分别存储到寄存器中;

44、运算模块,被配置为:按照最低位到最高位的顺序,进行对应位置的二进制减法运算,输出运算结果及最高位的借位;

45、其中,所述借位的公式为:

46、di=(!ei)&(fi+gi),

47、di表示第i位的借位,ei、fi、gi分别表示ai>ci、bi是否等于0、前一位借位的取值,ai、bi分别表示第一操作数和第二操作数的第i位,ci表示第i位相减的运算结果。

48、以上一个或多个技术方案存在以下有益效果:

49、本发明提出了一种新的进位和借位的计算公式,并基于进位和借位的计算公式,对进位加法和借位减法进行改进,同时支持模加和模减,从而高效解决进位加法和借位减法的溢出问题,提高运算的效率,改善龙芯平台下sm2算法的性能。

50、本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1