 |
API参考
|
15#ifndef BN_BINCAL_NOASM_H
16#define BN_BINCAL_NOASM_H
18#include "hitls_build.h"
29#define DIV_ND(q, r, nh, nl, d) \
31 BN_UINT macroTmpD1, macroTmpD0, macroTmpQ1, macroTmpQ0, macroTmpR1, macroTmpR0, macroTmpM; \
33 macroTmpD1 = BN_UINT_HI(d); \
34 macroTmpD0 = BN_UINT_LO(d); \
36 macroTmpQ1 = (nh) / macroTmpD1; \
37 macroTmpR1 = (nh) - macroTmpQ1 * macroTmpD1; \
38 macroTmpM = macroTmpQ1 * macroTmpD0; \
39 macroTmpR1 = (macroTmpR1 << (BN_UINT_BITS >> 1)) | BN_UINT_HI(nl); \
40 if (macroTmpR1 < macroTmpM) { \
41 macroTmpQ1--, macroTmpR1 += (d); \
42 if (macroTmpR1 >= (d)) { \
43 if (macroTmpR1 < macroTmpM) { \
49 macroTmpR1 -= macroTmpM; \
51 macroTmpQ0 = macroTmpR1 / macroTmpD1; \
52 macroTmpR0 = macroTmpR1 - macroTmpQ0 * macroTmpD1; \
53 macroTmpM = macroTmpQ0 * macroTmpD0; \
54 macroTmpR0 = (macroTmpR0 << (BN_UINT_BITS >> 1)) | BN_UINT_LO(nl); \
55 if (macroTmpR0 < macroTmpM) { \
56 macroTmpQ0--, macroTmpR0 += (d); \
57 if (macroTmpR0 >= (d)) { \
58 if (macroTmpR0 < macroTmpM) { \
64 macroTmpR0 -= macroTmpM; \
66 (q) = (macroTmpQ1 << (BN_UINT_BITS >> 1)) | macroTmpQ0; \
70#define MUL_AB(wh, wl, u, v) \
72 BN_UINT macroTmpUl = BN_UINT_LO(u); \
73 BN_UINT macroTmpUh = BN_UINT_HI(u); \
74 BN_UINT macroTmpVl = BN_UINT_LO(v); \
75 BN_UINT macroTmpVh = BN_UINT_HI(v); \
77 BN_UINT macroTmpX0 = macroTmpUl * macroTmpVl; \
78 BN_UINT macroTmpX1 = macroTmpUl * macroTmpVh; \
79 BN_UINT macroTmpX2 = macroTmpUh * macroTmpVl; \
80 BN_UINT macroTmpX3 = macroTmpUh * macroTmpVh; \
82 macroTmpX1 += BN_UINT_HI(macroTmpX0); \
83 macroTmpX1 += macroTmpX2; \
84 if (macroTmpX1 < macroTmpX2) { macroTmpX3 += BN_UINT_HC; } \
86 (wh) = macroTmpX3 + BN_UINT_HI(macroTmpX1); \
87 (wl) = (macroTmpX1 << (BN_UINT_BITS >> 1)) | BN_UINT_LO(macroTmpX0); \
90#define SQR_A(wh, wl, u) \
92 BN_UINT macroTmpUl = BN_UINT_LO(u); \
93 BN_UINT macroTmpUh = BN_UINT_HI(u); \
95 BN_UINT macroTmpX0 = macroTmpUl * macroTmpUl; \
96 BN_UINT macroTmpX1 = macroTmpUl * macroTmpUh; \
97 BN_UINT macroTmpX2 = macroTmpUh * macroTmpUh; \
99 BN_UINT macroTmpT = macroTmpX1 << 1; \
100 macroTmpT += BN_UINT_HI(macroTmpX0); \
101 if (macroTmpT < macroTmpX1) { macroTmpX2 += BN_UINT_HC; } \
103 (wh) = macroTmpX2 + BN_UINT_HI(macroTmpT); \
104 (wl) = (macroTmpT << (BN_UINT_BITS >> 1)) | BN_UINT_LO(macroTmpX0); \
108#define ADD_ABC(carry, r, a, b, c) \
110 BN_UINT macroTmpS = (b) + (c); \
111 carry = (macroTmpS < (c)) ? 1 : 0; \
112 (r) = macroTmpS + (a); \
113 carry += ((r) < macroTmpS) ? 1 : 0; \
119#define MULADC_AB(r, a, b, carry) \
122 MUL_AB(hi, lo, a, b); \
123 ADD_ABC(carry, r, r, lo, carry); \
128#define MULADD_AB(h, m, l, u, v) \
130 BN_UINT macroTmpUl = BN_UINT_LO(u); \
131 BN_UINT macroTmpUh = BN_UINT_HI(u); \
132 BN_UINT macroTmpVl = BN_UINT_LO(v); \
133 BN_UINT macroTmpVh = BN_UINT_HI(v); \
135 BN_UINT macroTmpX3 = macroTmpUh * macroTmpVh; \
136 BN_UINT macroTmpX2 = macroTmpUh * macroTmpVl; \
137 BN_UINT macroTmpX1 = macroTmpUl * macroTmpVh; \
138 BN_UINT macroTmpX0 = macroTmpUl * macroTmpVl; \
139 macroTmpX1 += BN_UINT_HI(macroTmpX0); \
140 macroTmpX0 = (u) * (v); \
141 macroTmpX1 += macroTmpX2; \
142 macroTmpX3 = macroTmpX3 + BN_UINT_HI(macroTmpX1); \
146 if (macroTmpX1 < macroTmpX2) { macroTmpX3 += BN_UINT_HC; } \
147 macroTmpX3 += ((l) < macroTmpX0); \
149 (h) += ((m) < macroTmpX3); \
153#define MULADD_AB2(h, m, l, u, v) \
155 MULADD_AB((h), (m), (l), (u), (v)); \
156 MULADD_AB((h), (m), (l), (u), (v)); \
160#define SQRADD_A(h, m, l, v) \
162 BN_UINT macroTmpVl = BN_UINT_LO(v); \
163 BN_UINT macroTmpVh = BN_UINT_HI(v); \
165 BN_UINT macroTmpX3 = macroTmpVh * macroTmpVh; \
166 BN_UINT macroTmpX2 = macroTmpVh * macroTmpVl; \
167 BN_UINT macroTmpX1 = macroTmpX2; \
168 BN_UINT macroTmpX0 = macroTmpVl * macroTmpVl; \
169 macroTmpX1 += BN_UINT_HI(macroTmpX0); \
170 macroTmpX0 = (v) * (v); \
171 macroTmpX1 += macroTmpX2; \
172 macroTmpX3 = macroTmpX3 + BN_UINT_HI(macroTmpX1); \
176 if (macroTmpX1 < macroTmpX2) { macroTmpX3 += BN_UINT_HC; } \
177 if ((l) < macroTmpX0) { macroTmpX3 += 1; } \
179 if ((m) < macroTmpX3) { (h)++; } \
183#define MOD_HALF(r, nh, nl, d) \
185 BN_UINT macroTmpD = (d); \
186 (r) = (nh) % macroTmpD; \
187 (r) = ((r) << BN_UINT_HALF_BITS) | BN_UINT_HI((nl)); \
188 (r) = (r) % macroTmpD; \
189 (r) = ((r) << BN_UINT_HALF_BITS) | BN_UINT_LO((nl)); \
190 (r) = (r) % macroTmpD; \
- crypto
- bn
- src
- bn_bincal_noasm.h