| 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 |