## 256位NIST素域椭圆曲线运算优化细节之一(单个素数p的加减法) 原

safedead

256位NIST素域椭圆曲线参数p的生成公式为：

``p = 2^256 − 2^224 + 2^192 + 2^96 − 1``

``p = (2^256 + 2^192 + 2^96) - (2^224 + 1)``

``````+: 0000000000000001 0000000000000000 0000000100000000 0000000000000000
-: 0000000100000000 0000000000000000 0000000000000000 0000000000000001
=: ffffffff00000001 0000000000000000 00000000ffffffff ffffffffffffffff``````

``0000000100000000``

``````#   --------------
#   r8:r11 += p256
#   --------------
addq    \$0xffffffffffffffff, %r8
adcq    \$0xffffffff, %r9
adcq    \$0, %r10
adcq    \$0xffffffff00000001, %r11``````

``````    movq    \$0x100000000, %rax
addq    %rax, %r9
adcq    \$0x0, %r10
adcq    \$0x1, %r11
#   ----
subq    \$0x1, %r8
sbbq    \$0, %r9
sbbq    \$0, %r10
sbbq    %rax, %r11``````

``````#   --------------
#   r12:r15 = p256
#   r8:r11 += p256
#   --------------
addq    %r12, %r8
adcq    %r13, %r9
adcq    %r14, %r10
adcq    %r15, %r11``````

``````#   ------------------------
#   rax = 0x00000000ffffffff
#   rdx = 0xffffffff00000001
#   ------------------------
movq    \$0xffffffff, %rax
movq    %rax, %rdx
negq    %rdx
#   --------------
#   r8:r11 += p256
#   --------------
addq    \$-1, %r8
adcq    %rax, %r9
adcq    \$0, %r10
adcq    %rdx, %r11``````

``````#   ------------------------
#   rbx = 0x00000000ffffffff
#   rbp = 0xffffffff00000001
#   ------------------------
xorq    %rbp, %rbp
movq    \$0xffffffff, %rax
movq    %rax, %rbx
subq    %rax, %rbp``````

``````#   ---------------
#   r12:r15 += p256
#   ---------------
addq    \$-1, %r12
adcq    %rbx, %r13
adcq    \$0, %r14
adcq    %rbp, %r15``````

``````#   ---------------
#   r12:r15 -= p256
#   ---------------
subq    \$-1, %r12
sbbq    %rbx, %r13
sbbq    \$0, %r14
sbbq    %rbp, %r15``````

``p256 = FFFFFFFEFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFF00000000 FFFFFFFFFFFFFFFF``

``````#   ------------------------
#   rbx = 0xFFFFFFFF00000000
#   rbp = 0xFFFFFFFEFFFFFFFF
#   ------------------------
movq    \$-0x100000000, %rbx
movq    \$-0x100000001, %rbp``````

SM2倍点函数内计算+p的代码如下：

``````#   --------------
#   r8:r11 += p256
#   --------------
addq    \$-1, %r8
adcq    %rbx, %r9
adcq    \$-1, %r10
adcq    %rbp, %r11``````

SM2倍点函数内计算-p的代码如下：

``````#   --------------
#   r8:r11 -= p256
#   --------------
subq    \$-1, %r8
sbbq    %rbx, %r9
sbbq    \$-1, %r10
sbbq    %rbp, %r11``````

© 著作权归作者所有

### safedead

safedead
2015/02/10
0
0
ECC非对称加密算法

14142135623731
01/17
0
0

区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原理一，2018年下半年，区块链行业正逐渐褪去发展之初的浮躁、回归理性，表面上看相关人才需求与身价似乎正在回落。但事实上，...

11/09
0
0

椭圆曲线加密算法，即：Elliptic Curve Cryptography，简称ECC，是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA，ECC优势是可以使用更短的密钥，来实现与RSA相当或更高的安全...

06/26
0
0
[以太坊源代码分析] IV. 椭圆曲线密码学和以太坊中的椭圆曲线数字签名算法应用

teaspring
2017/09/04
0
0

TiQuery：All Diagnosis in SQL | TiDB Hackathon 优秀项目分享

TiDB
10分钟前
2
0
git 分支创建合并流程图

gentlelions
18分钟前
2
0
Kali Linux常用服务配置教程DHCP服务原理

Kali Linux常用服务配置教程DHCP服务原理 动态主机配置协议（Dynamic Host Configuration Protocol，简称DHCP）是一个局域网的网络协议，基于UDP协议工作。它主要有两个用途：第一，给内部网...

19分钟前
1
0

function dev(){ if (window.console){ console.log("%c\n ", "font-size:100px;background:url('http://gmcyzs.com/resources/images/logo.png') no-repeat"); console.log('%c 深务平台，\......

27分钟前
0
0
MyBaties的二级缓存

27分钟前
3
0