OLD | NEW |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | 1 /* This Source Code Form is subject to the terms of the Mozilla Public |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | 2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
4 | 4 |
5 #include "ecp.h" | 5 #include "ecp.h" |
6 #include "mpi.h" | 6 #include "mpi.h" |
7 #include "mplogic.h" | 7 #include "mplogic.h" |
8 #include "mpi-priv.h" | 8 #include "mpi-priv.h" |
9 | 9 |
10 /* Fast modular reduction for p256 = 2^256 - 2^224 + 2^192+ 2^96 - 1. a can be
r. | 10 /* Fast modular reduction for p256 = 2^256 - 2^224 + 2^192+ 2^96 - 1. a can be
r. |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 r0 = MP_DIGIT(a,0); | 61 r0 = MP_DIGIT(a,0); |
62 r1 = MP_DIGIT(a,1); | 62 r1 = MP_DIGIT(a,1); |
63 r2 = MP_DIGIT(a,2); | 63 r2 = MP_DIGIT(a,2); |
64 r3 = MP_DIGIT(a,3); | 64 r3 = MP_DIGIT(a,3); |
65 r4 = MP_DIGIT(a,4); | 65 r4 = MP_DIGIT(a,4); |
66 r5 = MP_DIGIT(a,5); | 66 r5 = MP_DIGIT(a,5); |
67 r6 = MP_DIGIT(a,6); | 67 r6 = MP_DIGIT(a,6); |
68 r7 = MP_DIGIT(a,7); | 68 r7 = MP_DIGIT(a,7); |
69 | 69 |
70 /* sum 1 */ | 70 /* sum 1 */ |
71 » » MP_ADD_CARRY(r3, a11, r3, 0, carry); | 71 carry = 0; |
72 » » MP_ADD_CARRY(r4, a12, r4, carry, carry); | 72 » » MP_ADD_CARRY(r3, a11, r3, carry); |
73 » » MP_ADD_CARRY(r5, a13, r5, carry, carry); | 73 » » MP_ADD_CARRY(r4, a12, r4, carry); |
74 » » MP_ADD_CARRY(r6, a14, r6, carry, carry); | 74 » » MP_ADD_CARRY(r5, a13, r5, carry); |
75 » » MP_ADD_CARRY(r7, a15, r7, carry, carry); | 75 » » MP_ADD_CARRY(r6, a14, r6, carry); |
76 » » r8 = carry; | 76 » » MP_ADD_CARRY(r7, a15, r7, carry); |
77 » » MP_ADD_CARRY(r3, a11, r3, 0, carry); | 77 » » r8 = carry; carry = 0; |
78 » » MP_ADD_CARRY(r4, a12, r4, carry, carry); | 78 » » MP_ADD_CARRY(r3, a11, r3, carry); |
79 » » MP_ADD_CARRY(r5, a13, r5, carry, carry); | 79 » » MP_ADD_CARRY(r4, a12, r4, carry); |
80 » » MP_ADD_CARRY(r6, a14, r6, carry, carry); | 80 » » MP_ADD_CARRY(r5, a13, r5, carry); |
81 » » MP_ADD_CARRY(r7, a15, r7, carry, carry); | 81 » » MP_ADD_CARRY(r6, a14, r6, carry); |
82 » » r8 += carry; | 82 » » MP_ADD_CARRY(r7, a15, r7, carry); |
| 83 » » r8 += carry; carry = 0; |
83 /* sum 2 */ | 84 /* sum 2 */ |
84 » » MP_ADD_CARRY(r3, a12, r3, 0, carry); | 85 » » MP_ADD_CARRY(r3, a12, r3, carry); |
85 » » MP_ADD_CARRY(r4, a13, r4, carry, carry); | 86 » » MP_ADD_CARRY(r4, a13, r4, carry); |
86 » » MP_ADD_CARRY(r5, a14, r5, carry, carry); | 87 » » MP_ADD_CARRY(r5, a14, r5, carry); |
87 » » MP_ADD_CARRY(r6, a15, r6, carry, carry); | 88 » » MP_ADD_CARRY(r6, a15, r6, carry); |
88 » » MP_ADD_CARRY(r7, 0, r7, carry, carry); | 89 » » MP_ADD_CARRY(r7, 0, r7, carry); |
89 » » r8 += carry; | 90 » » r8 += carry; carry = 0; |
90 /* combine last bottom of sum 3 with second sum 2 */ | 91 /* combine last bottom of sum 3 with second sum 2 */ |
91 » » MP_ADD_CARRY(r0, a8, r0, 0, carry); | 92 » » MP_ADD_CARRY(r0, a8, r0, carry); |
92 » » MP_ADD_CARRY(r1, a9, r1, carry, carry); | 93 » » MP_ADD_CARRY(r1, a9, r1, carry); |
93 » » MP_ADD_CARRY(r2, a10, r2, carry, carry); | 94 » » MP_ADD_CARRY(r2, a10, r2, carry); |
94 » » MP_ADD_CARRY(r3, a12, r3, carry, carry); | 95 » » MP_ADD_CARRY(r3, a12, r3, carry); |
95 » » MP_ADD_CARRY(r4, a13, r4, carry, carry); | 96 » » MP_ADD_CARRY(r4, a13, r4, carry); |
96 » » MP_ADD_CARRY(r5, a14, r5, carry, carry); | 97 » » MP_ADD_CARRY(r5, a14, r5, carry); |
97 » » MP_ADD_CARRY(r6, a15, r6, carry, carry); | 98 » » MP_ADD_CARRY(r6, a15, r6, carry); |
98 » » MP_ADD_CARRY(r7, a15, r7, carry, carry); /* from sum 3 */ | 99 » » MP_ADD_CARRY(r7, a15, r7, carry); /* from sum 3 */ |
99 » » r8 += carry; | 100 » » r8 += carry; carry = 0; |
100 /* sum 3 (rest of it)*/ | 101 /* sum 3 (rest of it)*/ |
101 » » MP_ADD_CARRY(r6, a14, r6, 0, carry); | 102 » » MP_ADD_CARRY(r6, a14, r6, carry); |
102 » » MP_ADD_CARRY(r7, 0, r7, carry, carry); | 103 » » MP_ADD_CARRY(r7, 0, r7, carry); |
103 » » r8 += carry; | 104 » » r8 += carry; carry = 0; |
104 /* sum 4 (rest of it)*/ | 105 /* sum 4 (rest of it)*/ |
105 » » MP_ADD_CARRY(r0, a9, r0, 0, carry); | 106 » » MP_ADD_CARRY(r0, a9, r0, carry); |
106 » » MP_ADD_CARRY(r1, a10, r1, carry, carry); | 107 » » MP_ADD_CARRY(r1, a10, r1, carry); |
107 » » MP_ADD_CARRY(r2, a11, r2, carry, carry); | 108 » » MP_ADD_CARRY(r2, a11, r2, carry); |
108 » » MP_ADD_CARRY(r3, a13, r3, carry, carry); | 109 » » MP_ADD_CARRY(r3, a13, r3, carry); |
109 » » MP_ADD_CARRY(r4, a14, r4, carry, carry); | 110 » » MP_ADD_CARRY(r4, a14, r4, carry); |
110 » » MP_ADD_CARRY(r5, a15, r5, carry, carry); | 111 » » MP_ADD_CARRY(r5, a15, r5, carry); |
111 » » MP_ADD_CARRY(r6, a13, r6, carry, carry); | 112 » » MP_ADD_CARRY(r6, a13, r6, carry); |
112 » » MP_ADD_CARRY(r7, a8, r7, carry, carry); | 113 » » MP_ADD_CARRY(r7, a8, r7, carry); |
113 » » r8 += carry; | 114 » » r8 += carry; carry = 0; |
114 /* diff 5 */ | 115 /* diff 5 */ |
115 » » MP_SUB_BORROW(r0, a11, r0, 0, carry); | 116 » » MP_SUB_BORROW(r0, a11, r0, carry); |
116 » » MP_SUB_BORROW(r1, a12, r1, carry, carry); | 117 » » MP_SUB_BORROW(r1, a12, r1, carry); |
117 » » MP_SUB_BORROW(r2, a13, r2, carry, carry); | 118 » » MP_SUB_BORROW(r2, a13, r2, carry); |
118 » » MP_SUB_BORROW(r3, 0, r3, carry, carry); | 119 » » MP_SUB_BORROW(r3, 0, r3, carry); |
119 » » MP_SUB_BORROW(r4, 0, r4, carry, carry); | 120 » » MP_SUB_BORROW(r4, 0, r4, carry); |
120 » » MP_SUB_BORROW(r5, 0, r5, carry, carry); | 121 » » MP_SUB_BORROW(r5, 0, r5, carry); |
121 » » MP_SUB_BORROW(r6, a8, r6, carry, carry); | 122 » » MP_SUB_BORROW(r6, a8, r6, carry); |
122 » » MP_SUB_BORROW(r7, a10, r7, carry, carry); | 123 » » MP_SUB_BORROW(r7, a10, r7, carry); |
123 » » r8 -= carry; | 124 » » r8 -= carry; carry = 0; |
124 /* diff 6 */ | 125 /* diff 6 */ |
125 » » MP_SUB_BORROW(r0, a12, r0, 0, carry); | 126 » » MP_SUB_BORROW(r0, a12, r0, carry); |
126 » » MP_SUB_BORROW(r1, a13, r1, carry, carry); | 127 » » MP_SUB_BORROW(r1, a13, r1, carry); |
127 » » MP_SUB_BORROW(r2, a14, r2, carry, carry); | 128 » » MP_SUB_BORROW(r2, a14, r2, carry); |
128 » » MP_SUB_BORROW(r3, a15, r3, carry, carry); | 129 » » MP_SUB_BORROW(r3, a15, r3, carry); |
129 » » MP_SUB_BORROW(r4, 0, r4, carry, carry); | 130 » » MP_SUB_BORROW(r4, 0, r4, carry); |
130 » » MP_SUB_BORROW(r5, 0, r5, carry, carry); | 131 » » MP_SUB_BORROW(r5, 0, r5, carry); |
131 » » MP_SUB_BORROW(r6, a9, r6, carry, carry); | 132 » » MP_SUB_BORROW(r6, a9, r6, carry); |
132 » » MP_SUB_BORROW(r7, a11, r7, carry, carry); | 133 » » MP_SUB_BORROW(r7, a11, r7, carry); |
133 » » r8 -= carry; | 134 » » r8 -= carry; carry = 0; |
134 /* diff 7 */ | 135 /* diff 7 */ |
135 » » MP_SUB_BORROW(r0, a13, r0, 0, carry); | 136 » » MP_SUB_BORROW(r0, a13, r0, carry); |
136 » » MP_SUB_BORROW(r1, a14, r1, carry, carry); | 137 » » MP_SUB_BORROW(r1, a14, r1, carry); |
137 » » MP_SUB_BORROW(r2, a15, r2, carry, carry); | 138 » » MP_SUB_BORROW(r2, a15, r2, carry); |
138 » » MP_SUB_BORROW(r3, a8, r3, carry, carry); | 139 » » MP_SUB_BORROW(r3, a8, r3, carry); |
139 » » MP_SUB_BORROW(r4, a9, r4, carry, carry); | 140 » » MP_SUB_BORROW(r4, a9, r4, carry); |
140 » » MP_SUB_BORROW(r5, a10, r5, carry, carry); | 141 » » MP_SUB_BORROW(r5, a10, r5, carry); |
141 » » MP_SUB_BORROW(r6, 0, r6, carry, carry); | 142 » » MP_SUB_BORROW(r6, 0, r6, carry); |
142 » » MP_SUB_BORROW(r7, a12, r7, carry, carry); | 143 » » MP_SUB_BORROW(r7, a12, r7, carry); |
143 » » r8 -= carry; | 144 » » r8 -= carry; carry = 0; |
144 /* diff 8 */ | 145 /* diff 8 */ |
145 » » MP_SUB_BORROW(r0, a14, r0, 0, carry); | 146 » » MP_SUB_BORROW(r0, a14, r0, carry); |
146 » » MP_SUB_BORROW(r1, a15, r1, carry, carry); | 147 » » MP_SUB_BORROW(r1, a15, r1, carry); |
147 » » MP_SUB_BORROW(r2, 0, r2, carry, carry); | 148 » » MP_SUB_BORROW(r2, 0, r2, carry); |
148 » » MP_SUB_BORROW(r3, a9, r3, carry, carry); | 149 » » MP_SUB_BORROW(r3, a9, r3, carry); |
149 » » MP_SUB_BORROW(r4, a10, r4, carry, carry); | 150 » » MP_SUB_BORROW(r4, a10, r4, carry); |
150 » » MP_SUB_BORROW(r5, a11, r5, carry, carry); | 151 » » MP_SUB_BORROW(r5, a11, r5, carry); |
151 » » MP_SUB_BORROW(r6, 0, r6, carry, carry); | 152 » » MP_SUB_BORROW(r6, 0, r6, carry); |
152 » » MP_SUB_BORROW(r7, a13, r7, carry, carry); | 153 » » MP_SUB_BORROW(r7, a13, r7, carry); |
153 r8 -= carry; | 154 r8 -= carry; |
154 | 155 |
155 /* reduce the overflows */ | 156 /* reduce the overflows */ |
156 while (r8 > 0) { | 157 while (r8 > 0) { |
157 » » » mp_digit r8_d = r8; | 158 » » » mp_digit r8_d = r8; carry = 0; |
158 » » » MP_ADD_CARRY(r0, r8_d, r0, 0, carry); | 159 » » » carry = 0; |
159 » » » MP_ADD_CARRY(r1, 0, r1, carry, carry); | 160 » » » MP_ADD_CARRY(r0, r8_d, r0, carry); |
160 » » » MP_ADD_CARRY(r2, 0, r2, carry, carry); | 161 » » » MP_ADD_CARRY(r1, 0, r1, carry); |
161 » » » MP_ADD_CARRY(r3, 0-r8_d, r3, carry, carry); | 162 » » » MP_ADD_CARRY(r2, 0, r2, carry); |
162 » » » MP_ADD_CARRY(r4, MP_DIGIT_MAX, r4, carry, carry); | 163 » » » MP_ADD_CARRY(r3, 0-r8_d, r3, carry); |
163 » » » MP_ADD_CARRY(r5, MP_DIGIT_MAX, r5, carry, carry); | 164 » » » MP_ADD_CARRY(r4, MP_DIGIT_MAX, r4, carry); |
164 » » » MP_ADD_CARRY(r6, 0-(r8_d+1), r6, carry, carry); | 165 » » » MP_ADD_CARRY(r5, MP_DIGIT_MAX, r5, carry); |
165 » » » MP_ADD_CARRY(r7, (r8_d-1), r7, carry, carry); | 166 » » » MP_ADD_CARRY(r6, 0-(r8_d+1), r6, carry); |
| 167 » » » MP_ADD_CARRY(r7, (r8_d-1), r7, carry); |
166 r8 = carry; | 168 r8 = carry; |
167 } | 169 } |
168 | 170 |
169 /* reduce the underflows */ | 171 /* reduce the underflows */ |
170 while (r8 < 0) { | 172 while (r8 < 0) { |
171 mp_digit r8_d = -r8; | 173 mp_digit r8_d = -r8; |
172 » » » MP_SUB_BORROW(r0, r8_d, r0, 0, carry); | 174 » » » carry = 0; |
173 » » » MP_SUB_BORROW(r1, 0, r1, carry, carry); | 175 » » » MP_SUB_BORROW(r0, r8_d, r0, carry); |
174 » » » MP_SUB_BORROW(r2, 0, r2, carry, carry); | 176 » » » MP_SUB_BORROW(r1, 0, r1, carry); |
175 » » » MP_SUB_BORROW(r3, 0-r8_d, r3, carry, carry); | 177 » » » MP_SUB_BORROW(r2, 0, r2, carry); |
176 » » » MP_SUB_BORROW(r4, MP_DIGIT_MAX, r4, carry, carry); | 178 » » » MP_SUB_BORROW(r3, 0-r8_d, r3, carry); |
177 » » » MP_SUB_BORROW(r5, MP_DIGIT_MAX, r5, carry, carry); | 179 » » » MP_SUB_BORROW(r4, MP_DIGIT_MAX, r4, carry); |
178 » » » MP_SUB_BORROW(r6, 0-(r8_d+1), r6, carry, carry); | 180 » » » MP_SUB_BORROW(r5, MP_DIGIT_MAX, r5, carry); |
179 » » » MP_SUB_BORROW(r7, (r8_d-1), r7, carry, carry); | 181 » » » MP_SUB_BORROW(r6, 0-(r8_d+1), r6, carry); |
| 182 » » » MP_SUB_BORROW(r7, (r8_d-1), r7, carry); |
180 r8 = 0-carry; | 183 r8 = 0-carry; |
181 } | 184 } |
182 if (a != r) { | 185 if (a != r) { |
183 MP_CHECKOK(s_mp_pad(r,8)); | 186 MP_CHECKOK(s_mp_pad(r,8)); |
184 } | 187 } |
185 MP_SIGN(r) = MP_ZPOS; | 188 MP_SIGN(r) = MP_ZPOS; |
186 MP_USED(r) = 8; | 189 MP_USED(r) = 8; |
187 | 190 |
188 MP_DIGIT(r,7) = r7; | 191 MP_DIGIT(r,7) = r7; |
189 MP_DIGIT(r,6) = r6; | 192 MP_DIGIT(r,6) = r6; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 a5l = a5 << 32; | 225 a5l = a5 << 32; |
223 a5h = a5 >> 32; | 226 a5h = a5 >> 32; |
224 a4l = a4 << 32; | 227 a4l = a4 << 32; |
225 a4h = a4 >> 32; | 228 a4h = a4 >> 32; |
226 r3 = MP_DIGIT(a,3); | 229 r3 = MP_DIGIT(a,3); |
227 r2 = MP_DIGIT(a,2); | 230 r2 = MP_DIGIT(a,2); |
228 r1 = MP_DIGIT(a,1); | 231 r1 = MP_DIGIT(a,1); |
229 r0 = MP_DIGIT(a,0); | 232 r0 = MP_DIGIT(a,0); |
230 | 233 |
231 /* sum 1 */ | 234 /* sum 1 */ |
232 » » MP_ADD_CARRY(r1, a5h << 32, r1, 0, carry); | 235 carry = 0; |
233 » » MP_ADD_CARRY(r2, a6, r2, carry, carry); | 236 » » carry = 0; |
234 » » MP_ADD_CARRY(r3, a7, r3, carry, carry); | 237 » » MP_ADD_CARRY(r1, a5h << 32, r1, carry); |
235 » » r4 = carry; | 238 » » MP_ADD_CARRY(r2, a6, r2, carry); |
236 » » MP_ADD_CARRY(r1, a5h << 32, r1, 0, carry); | 239 » » MP_ADD_CARRY(r3, a7, r3, carry); |
237 » » MP_ADD_CARRY(r2, a6, r2, carry, carry); | 240 » » r4 = carry; carry = 0; |
238 » » MP_ADD_CARRY(r3, a7, r3, carry, carry); | 241 » » carry = 0; |
239 » » r4 += carry; | 242 » » MP_ADD_CARRY(r1, a5h << 32, r1, carry); |
| 243 » » MP_ADD_CARRY(r2, a6, r2, carry); |
| 244 » » MP_ADD_CARRY(r3, a7, r3, carry); |
| 245 » » r4 += carry; carry = 0; |
240 /* sum 2 */ | 246 /* sum 2 */ |
241 » » MP_ADD_CARRY(r1, a6l, r1, 0, carry); | 247 » » carry = 0; |
242 » » MP_ADD_CARRY(r2, a6h | a7l, r2, carry, carry); | 248 » » MP_ADD_CARRY(r1, a6l, r1, carry); |
243 » » MP_ADD_CARRY(r3, a7h, r3, carry, carry); | 249 » » MP_ADD_CARRY(r2, a6h | a7l, r2, carry); |
244 » » r4 += carry; | 250 » » MP_ADD_CARRY(r3, a7h, r3, carry); |
245 » » MP_ADD_CARRY(r1, a6l, r1, 0, carry); | 251 » » r4 += carry; carry = 0; |
246 » » MP_ADD_CARRY(r2, a6h | a7l, r2, carry, carry); | 252 » » carry = 0; |
247 » » MP_ADD_CARRY(r3, a7h, r3, carry, carry); | 253 » » MP_ADD_CARRY(r1, a6l, r1, carry); |
248 » » r4 += carry; | 254 » » MP_ADD_CARRY(r2, a6h | a7l, r2, carry); |
| 255 » » MP_ADD_CARRY(r3, a7h, r3, carry); |
| 256 » » r4 += carry; carry = 0; |
249 | 257 |
250 /* sum 3 */ | 258 /* sum 3 */ |
251 » » MP_ADD_CARRY(r0, a4, r0, 0, carry); | 259 » » carry = 0; |
252 » » MP_ADD_CARRY(r1, a5l >> 32, r1, carry, carry); | 260 » » MP_ADD_CARRY(r0, a4, r0, carry); |
253 » » MP_ADD_CARRY(r2, 0, r2, carry, carry); | 261 » » MP_ADD_CARRY(r1, a5l >> 32, r1, carry); |
254 » » MP_ADD_CARRY(r3, a7, r3, carry, carry); | 262 » » MP_ADD_CARRY(r2, 0, r2, carry); |
255 » » r4 += carry; | 263 » » MP_ADD_CARRY(r3, a7, r3, carry); |
| 264 » » r4 += carry; carry = 0; |
256 /* sum 4 */ | 265 /* sum 4 */ |
257 » » MP_ADD_CARRY(r0, a4h | a5l, r0, 0, carry); | 266 » » carry = 0; |
258 » » MP_ADD_CARRY(r1, a5h|(a6h<<32), r1, carry, carry); | 267 » » MP_ADD_CARRY(r0, a4h | a5l, r0, carry); |
259 » » MP_ADD_CARRY(r2, a7, r2, carry, carry); | 268 » » MP_ADD_CARRY(r1, a5h|(a6h<<32), r1, carry); |
260 » » MP_ADD_CARRY(r3, a6h | a4l, r3, carry, carry); | 269 » » MP_ADD_CARRY(r2, a7, r2, carry); |
| 270 » » MP_ADD_CARRY(r3, a6h | a4l, r3, carry); |
261 r4 += carry; | 271 r4 += carry; |
262 /* diff 5 */ | 272 /* diff 5 */ |
263 » » MP_SUB_BORROW(r0, a5h | a6l, r0, 0, carry); | 273 » » carry = 0; |
264 » » MP_SUB_BORROW(r1, a6h, r1, carry, carry); | 274 » » MP_SUB_BORROW(r0, a5h | a6l, r0, carry); |
265 » » MP_SUB_BORROW(r2, 0, r2, carry, carry); | 275 » » MP_SUB_BORROW(r1, a6h, r1, carry); |
266 » » MP_SUB_BORROW(r3, (a4l>>32)|a5l,r3, carry, carry); | 276 » » MP_SUB_BORROW(r2, 0, r2, carry); |
| 277 » » MP_SUB_BORROW(r3, (a4l>>32)|a5l,r3, carry); |
267 r4 -= carry; | 278 r4 -= carry; |
268 /* diff 6 */ | 279 /* diff 6 */ |
269 » » MP_SUB_BORROW(r0, a6, »» r0, 0, carry); | 280 » » carry = 0; |
270 » » MP_SUB_BORROW(r1, a7, r1, carry, carry); | 281 » » MP_SUB_BORROW(r0, a6, »» r0, carry); |
271 » » MP_SUB_BORROW(r2, 0, r2, carry, carry); | 282 » » MP_SUB_BORROW(r1, a7, r1, carry); |
272 » » MP_SUB_BORROW(r3, a4h|(a5h<<32),r3, carry, carry); | 283 » » MP_SUB_BORROW(r2, 0, r2, carry); |
| 284 » » MP_SUB_BORROW(r3, a4h|(a5h<<32),r3, carry); |
273 r4 -= carry; | 285 r4 -= carry; |
274 /* diff 7 */ | 286 /* diff 7 */ |
275 » » MP_SUB_BORROW(r0, a6h|a7l,» r0, 0, carry); | 287 » » carry = 0; |
276 » » MP_SUB_BORROW(r1, a7h|a4l, r1, carry, carry); | 288 » » MP_SUB_BORROW(r0, a6h|a7l,» r0, carry); |
277 » » MP_SUB_BORROW(r2, a4h|a5l, r2, carry, carry); | 289 » » MP_SUB_BORROW(r1, a7h|a4l, r1, carry); |
278 » » MP_SUB_BORROW(r3, a6l, r3, carry, carry); | 290 » » MP_SUB_BORROW(r2, a4h|a5l, r2, carry); |
| 291 » » MP_SUB_BORROW(r3, a6l, r3, carry); |
279 r4 -= carry; | 292 r4 -= carry; |
280 /* diff 8 */ | 293 /* diff 8 */ |
281 » » MP_SUB_BORROW(r0, a7,» r0, 0, carry); | 294 » » carry = 0; |
282 » » MP_SUB_BORROW(r1, a4h<<32, r1, carry, carry); | 295 » » MP_SUB_BORROW(r0, a7,» r0, carry); |
283 » » MP_SUB_BORROW(r2, a5, r2, carry, carry); | 296 » » MP_SUB_BORROW(r1, a4h<<32, r1, carry); |
284 » » MP_SUB_BORROW(r3, a6h<<32, r3, carry, carry); | 297 » » MP_SUB_BORROW(r2, a5, r2, carry); |
| 298 » » MP_SUB_BORROW(r3, a6h<<32, r3, carry); |
285 r4 -= carry; | 299 r4 -= carry; |
286 | 300 |
287 /* reduce the overflows */ | 301 /* reduce the overflows */ |
288 while (r4 > 0) { | 302 while (r4 > 0) { |
289 mp_digit r4_long = r4; | 303 mp_digit r4_long = r4; |
290 mp_digit r4l = (r4_long << 32); | 304 mp_digit r4l = (r4_long << 32); |
291 » » » MP_ADD_CARRY(r0, r4_long, r0, 0, carry); | 305 carry = 0; |
292 » » » MP_ADD_CARRY(r1, 0-r4l, r1, carry, carry); | 306 » » » carry = 0; |
293 » » » MP_ADD_CARRY(r2, MP_DIGIT_MAX, r2, carry, carry); | 307 » » » MP_ADD_CARRY(r0, r4_long, r0, carry); |
294 » » » MP_ADD_CARRY(r3, r4l-r4_long-1,r3, carry, carry); | 308 » » » MP_ADD_CARRY(r1, 0-r4l, r1, carry); |
| 309 » » » MP_ADD_CARRY(r2, MP_DIGIT_MAX, r2, carry); |
| 310 » » » MP_ADD_CARRY(r3, r4l-r4_long-1,r3, carry); |
295 r4 = carry; | 311 r4 = carry; |
296 } | 312 } |
297 | 313 |
298 /* reduce the underflows */ | 314 /* reduce the underflows */ |
299 while (r4 < 0) { | 315 while (r4 < 0) { |
300 mp_digit r4_long = -r4; | 316 mp_digit r4_long = -r4; |
301 mp_digit r4l = (r4_long << 32); | 317 mp_digit r4l = (r4_long << 32); |
302 » » » MP_SUB_BORROW(r0, r4_long, r0, 0, carry); | 318 » » » carry = 0; |
303 » » » MP_SUB_BORROW(r1, 0-r4l, r1, carry, carry); | 319 » » » MP_SUB_BORROW(r0, r4_long, r0, carry); |
304 » » » MP_SUB_BORROW(r2, MP_DIGIT_MAX, r2, carry, carry); | 320 » » » MP_SUB_BORROW(r1, 0-r4l, r1, carry); |
305 » » » MP_SUB_BORROW(r3, r4l-r4_long-1,r3, carry, carry); | 321 » » » MP_SUB_BORROW(r2, MP_DIGIT_MAX, r2, carry); |
| 322 » » » MP_SUB_BORROW(r3, r4l-r4_long-1,r3, carry); |
306 r4 = 0-carry; | 323 r4 = 0-carry; |
307 } | 324 } |
308 | 325 |
309 if (a != r) { | 326 if (a != r) { |
310 MP_CHECKOK(s_mp_pad(r,4)); | 327 MP_CHECKOK(s_mp_pad(r,4)); |
311 } | 328 } |
312 MP_SIGN(r) = MP_ZPOS; | 329 MP_SIGN(r) = MP_ZPOS; |
313 MP_USED(r) = 4; | 330 MP_USED(r) = 4; |
314 | 331 |
315 MP_DIGIT(r,3) = r3; | 332 MP_DIGIT(r,3) = r3; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 mp_err | 385 mp_err |
369 ec_group_set_gfp256(ECGroup *group, ECCurveName name) | 386 ec_group_set_gfp256(ECGroup *group, ECCurveName name) |
370 { | 387 { |
371 if (name == ECCurve_NIST_P256) { | 388 if (name == ECCurve_NIST_P256) { |
372 group->meth->field_mod = &ec_GFp_nistp256_mod; | 389 group->meth->field_mod = &ec_GFp_nistp256_mod; |
373 group->meth->field_mul = &ec_GFp_nistp256_mul; | 390 group->meth->field_mul = &ec_GFp_nistp256_mul; |
374 group->meth->field_sqr = &ec_GFp_nistp256_sqr; | 391 group->meth->field_sqr = &ec_GFp_nistp256_sqr; |
375 } | 392 } |
376 return MP_OKAY; | 393 return MP_OKAY; |
377 } | 394 } |
OLD | NEW |