Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/bn/bn_nist.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||||||||
2 | - | |||||||||||||||||||||||||
3 | static const unsigned long _nist_p_192[][(192+64 -1)/64] = { | - | ||||||||||||||||||||||||
4 | {0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFEULL, 0xFFFFFFFFFFFFFFFFULL}, | - | ||||||||||||||||||||||||
5 | {0xFFFFFFFFFFFFFFFEULL, 0xFFFFFFFFFFFFFFFDULL, 0xFFFFFFFFFFFFFFFFULL}, | - | ||||||||||||||||||||||||
6 | {0xFFFFFFFFFFFFFFFDULL, 0xFFFFFFFFFFFFFFFCULL, 0xFFFFFFFFFFFFFFFFULL} | - | ||||||||||||||||||||||||
7 | }; | - | ||||||||||||||||||||||||
8 | static const unsigned long _nist_p_192_sqr[] = { | - | ||||||||||||||||||||||||
9 | 0x0000000000000001ULL, 0x0000000000000002ULL, 0x0000000000000001ULL, | - | ||||||||||||||||||||||||
10 | 0xFFFFFFFFFFFFFFFEULL, 0xFFFFFFFFFFFFFFFDULL, 0xFFFFFFFFFFFFFFFFULL | - | ||||||||||||||||||||||||
11 | }; | - | ||||||||||||||||||||||||
12 | static const unsigned long _nist_p_224[][(224+64 -1)/64] = { | - | ||||||||||||||||||||||||
13 | { | - | ||||||||||||||||||||||||
14 | 0x0000000000000001ULL, 0xFFFFFFFF00000000ULL, | - | ||||||||||||||||||||||||
15 | 0xFFFFFFFFFFFFFFFFULL, 0x00000000FFFFFFFFULL | - | ||||||||||||||||||||||||
16 | }, | - | ||||||||||||||||||||||||
17 | { | - | ||||||||||||||||||||||||
18 | 0x0000000000000002ULL, 0xFFFFFFFE00000000ULL, | - | ||||||||||||||||||||||||
19 | 0xFFFFFFFFFFFFFFFFULL, 0x00000001FFFFFFFFULL | - | ||||||||||||||||||||||||
20 | } | - | ||||||||||||||||||||||||
21 | }; | - | ||||||||||||||||||||||||
22 | static const unsigned long _nist_p_224_sqr[] = { | - | ||||||||||||||||||||||||
23 | 0x0000000000000001ULL, 0xFFFFFFFE00000000ULL, | - | ||||||||||||||||||||||||
24 | 0xFFFFFFFFFFFFFFFFULL, 0x0000000200000000ULL, | - | ||||||||||||||||||||||||
25 | 0x0000000000000000ULL, 0xFFFFFFFFFFFFFFFEULL, | - | ||||||||||||||||||||||||
26 | 0xFFFFFFFFFFFFFFFFULL | - | ||||||||||||||||||||||||
27 | }; | - | ||||||||||||||||||||||||
28 | static const unsigned long _nist_p_256[][(256+64 -1)/64] = { | - | ||||||||||||||||||||||||
29 | { | - | ||||||||||||||||||||||||
30 | 0xFFFFFFFFFFFFFFFFULL, 0x00000000FFFFFFFFULL, | - | ||||||||||||||||||||||||
31 | 0x0000000000000000ULL, 0xFFFFFFFF00000001ULL | - | ||||||||||||||||||||||||
32 | }, | - | ||||||||||||||||||||||||
33 | { | - | ||||||||||||||||||||||||
34 | 0xFFFFFFFFFFFFFFFEULL, 0x00000001FFFFFFFFULL, | - | ||||||||||||||||||||||||
35 | 0x0000000000000000ULL, 0xFFFFFFFE00000002ULL | - | ||||||||||||||||||||||||
36 | }, | - | ||||||||||||||||||||||||
37 | { | - | ||||||||||||||||||||||||
38 | 0xFFFFFFFFFFFFFFFDULL, 0x00000002FFFFFFFFULL, | - | ||||||||||||||||||||||||
39 | 0x0000000000000000ULL, 0xFFFFFFFD00000003ULL | - | ||||||||||||||||||||||||
40 | }, | - | ||||||||||||||||||||||||
41 | { | - | ||||||||||||||||||||||||
42 | 0xFFFFFFFFFFFFFFFCULL, 0x00000003FFFFFFFFULL, | - | ||||||||||||||||||||||||
43 | 0x0000000000000000ULL, 0xFFFFFFFC00000004ULL | - | ||||||||||||||||||||||||
44 | }, | - | ||||||||||||||||||||||||
45 | { | - | ||||||||||||||||||||||||
46 | 0xFFFFFFFFFFFFFFFBULL, 0x00000004FFFFFFFFULL, | - | ||||||||||||||||||||||||
47 | 0x0000000000000000ULL, 0xFFFFFFFB00000005ULL | - | ||||||||||||||||||||||||
48 | }, | - | ||||||||||||||||||||||||
49 | }; | - | ||||||||||||||||||||||||
50 | static const unsigned long _nist_p_256_sqr[] = { | - | ||||||||||||||||||||||||
51 | 0x0000000000000001ULL, 0xFFFFFFFE00000000ULL, | - | ||||||||||||||||||||||||
52 | 0xFFFFFFFFFFFFFFFFULL, 0x00000001FFFFFFFEULL, | - | ||||||||||||||||||||||||
53 | 0x00000001FFFFFFFEULL, 0x00000001FFFFFFFEULL, | - | ||||||||||||||||||||||||
54 | 0xFFFFFFFE00000001ULL, 0xFFFFFFFE00000002ULL | - | ||||||||||||||||||||||||
55 | }; | - | ||||||||||||||||||||||||
56 | static const unsigned long _nist_p_384[][(384+64 -1)/64] = { | - | ||||||||||||||||||||||||
57 | { | - | ||||||||||||||||||||||||
58 | 0x00000000FFFFFFFFULL, 0xFFFFFFFF00000000ULL, | - | ||||||||||||||||||||||||
59 | 0xFFFFFFFFFFFFFFFEULL, 0xFFFFFFFFFFFFFFFFULL, | - | ||||||||||||||||||||||||
60 | 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL | - | ||||||||||||||||||||||||
61 | }, | - | ||||||||||||||||||||||||
62 | { | - | ||||||||||||||||||||||||
63 | 0x00000001FFFFFFFEULL, 0xFFFFFFFE00000000ULL, | - | ||||||||||||||||||||||||
64 | 0xFFFFFFFFFFFFFFFDULL, 0xFFFFFFFFFFFFFFFFULL, | - | ||||||||||||||||||||||||
65 | 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL | - | ||||||||||||||||||||||||
66 | }, | - | ||||||||||||||||||||||||
67 | { | - | ||||||||||||||||||||||||
68 | 0x00000002FFFFFFFDULL, 0xFFFFFFFD00000000ULL, | - | ||||||||||||||||||||||||
69 | 0xFFFFFFFFFFFFFFFCULL, 0xFFFFFFFFFFFFFFFFULL, | - | ||||||||||||||||||||||||
70 | 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL | - | ||||||||||||||||||||||||
71 | }, | - | ||||||||||||||||||||||||
72 | { | - | ||||||||||||||||||||||||
73 | 0x00000003FFFFFFFCULL, 0xFFFFFFFC00000000ULL, | - | ||||||||||||||||||||||||
74 | 0xFFFFFFFFFFFFFFFBULL, 0xFFFFFFFFFFFFFFFFULL, | - | ||||||||||||||||||||||||
75 | 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL | - | ||||||||||||||||||||||||
76 | }, | - | ||||||||||||||||||||||||
77 | { | - | ||||||||||||||||||||||||
78 | 0x00000004FFFFFFFBULL, 0xFFFFFFFB00000000ULL, | - | ||||||||||||||||||||||||
79 | 0xFFFFFFFFFFFFFFFAULL, 0xFFFFFFFFFFFFFFFFULL, | - | ||||||||||||||||||||||||
80 | 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL | - | ||||||||||||||||||||||||
81 | }, | - | ||||||||||||||||||||||||
82 | }; | - | ||||||||||||||||||||||||
83 | static const unsigned long _nist_p_384_sqr[] = { | - | ||||||||||||||||||||||||
84 | 0xFFFFFFFE00000001ULL, 0x0000000200000000ULL, 0xFFFFFFFE00000000ULL, | - | ||||||||||||||||||||||||
85 | 0x0000000200000000ULL, 0x0000000000000001ULL, 0x0000000000000000ULL, | - | ||||||||||||||||||||||||
86 | 0x00000001FFFFFFFEULL, 0xFFFFFFFE00000000ULL, 0xFFFFFFFFFFFFFFFDULL, | - | ||||||||||||||||||||||||
87 | 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL | - | ||||||||||||||||||||||||
88 | }; | - | ||||||||||||||||||||||||
89 | static const unsigned long _nist_p_521[] = { | - | ||||||||||||||||||||||||
90 | 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL, | - | ||||||||||||||||||||||||
91 | 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL, | - | ||||||||||||||||||||||||
92 | 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL, 0x00000000000001FFULL | - | ||||||||||||||||||||||||
93 | }; | - | ||||||||||||||||||||||||
94 | static const unsigned long _nist_p_521_sqr[] = { | - | ||||||||||||||||||||||||
95 | 0x0000000000000001ULL, 0x0000000000000000ULL, 0x0000000000000000ULL, | - | ||||||||||||||||||||||||
96 | 0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL, | - | ||||||||||||||||||||||||
97 | 0x0000000000000000ULL, 0x0000000000000000ULL, 0xFFFFFFFFFFFFFC00ULL, | - | ||||||||||||||||||||||||
98 | 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL, | - | ||||||||||||||||||||||||
99 | 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL, | - | ||||||||||||||||||||||||
100 | 0xFFFFFFFFFFFFFFFFULL, 0x000000000003FFFFULL | - | ||||||||||||||||||||||||
101 | }; | - | ||||||||||||||||||||||||
102 | static const BIGNUM _bignum_nist_p_192 = { | - | ||||||||||||||||||||||||
103 | (unsigned long *)_nist_p_192[0], | - | ||||||||||||||||||||||||
104 | (192+64 -1)/64, | - | ||||||||||||||||||||||||
105 | (192+64 -1)/64, | - | ||||||||||||||||||||||||
106 | 0, | - | ||||||||||||||||||||||||
107 | 0x02 | - | ||||||||||||||||||||||||
108 | }; | - | ||||||||||||||||||||||||
109 | - | |||||||||||||||||||||||||
110 | static const BIGNUM _bignum_nist_p_224 = { | - | ||||||||||||||||||||||||
111 | (unsigned long *)_nist_p_224[0], | - | ||||||||||||||||||||||||
112 | (224+64 -1)/64, | - | ||||||||||||||||||||||||
113 | (224+64 -1)/64, | - | ||||||||||||||||||||||||
114 | 0, | - | ||||||||||||||||||||||||
115 | 0x02 | - | ||||||||||||||||||||||||
116 | }; | - | ||||||||||||||||||||||||
117 | - | |||||||||||||||||||||||||
118 | static const BIGNUM _bignum_nist_p_256 = { | - | ||||||||||||||||||||||||
119 | (unsigned long *)_nist_p_256[0], | - | ||||||||||||||||||||||||
120 | (256+64 -1)/64, | - | ||||||||||||||||||||||||
121 | (256+64 -1)/64, | - | ||||||||||||||||||||||||
122 | 0, | - | ||||||||||||||||||||||||
123 | 0x02 | - | ||||||||||||||||||||||||
124 | }; | - | ||||||||||||||||||||||||
125 | - | |||||||||||||||||||||||||
126 | static const BIGNUM _bignum_nist_p_384 = { | - | ||||||||||||||||||||||||
127 | (unsigned long *)_nist_p_384[0], | - | ||||||||||||||||||||||||
128 | (384+64 -1)/64, | - | ||||||||||||||||||||||||
129 | (384+64 -1)/64, | - | ||||||||||||||||||||||||
130 | 0, | - | ||||||||||||||||||||||||
131 | 0x02 | - | ||||||||||||||||||||||||
132 | }; | - | ||||||||||||||||||||||||
133 | - | |||||||||||||||||||||||||
134 | static const BIGNUM _bignum_nist_p_521 = { | - | ||||||||||||||||||||||||
135 | (unsigned long *)_nist_p_521, | - | ||||||||||||||||||||||||
136 | (521+64 -1)/64, | - | ||||||||||||||||||||||||
137 | (521+64 -1)/64, | - | ||||||||||||||||||||||||
138 | 0, | - | ||||||||||||||||||||||||
139 | 0x02 | - | ||||||||||||||||||||||||
140 | }; | - | ||||||||||||||||||||||||
141 | - | |||||||||||||||||||||||||
142 | - | |||||||||||||||||||||||||
143 | const BIGNUM * | - | ||||||||||||||||||||||||
144 | BN_get0_nist_prime_192(void) | - | ||||||||||||||||||||||||
145 | { | - | ||||||||||||||||||||||||
146 | return never executed: &_bignum_nist_p_192;return &_bignum_nist_p_192; never executed: return &_bignum_nist_p_192; | 0 | ||||||||||||||||||||||||
147 | } | - | ||||||||||||||||||||||||
148 | - | |||||||||||||||||||||||||
149 | const BIGNUM * | - | ||||||||||||||||||||||||
150 | BN_get0_nist_prime_224(void) | - | ||||||||||||||||||||||||
151 | { | - | ||||||||||||||||||||||||
152 | return never executed: &_bignum_nist_p_224;return &_bignum_nist_p_224; never executed: return &_bignum_nist_p_224; | 0 | ||||||||||||||||||||||||
153 | } | - | ||||||||||||||||||||||||
154 | - | |||||||||||||||||||||||||
155 | const BIGNUM * | - | ||||||||||||||||||||||||
156 | BN_get0_nist_prime_256(void) | - | ||||||||||||||||||||||||
157 | { | - | ||||||||||||||||||||||||
158 | return never executed: &_bignum_nist_p_256;return &_bignum_nist_p_256; never executed: return &_bignum_nist_p_256; | 0 | ||||||||||||||||||||||||
159 | } | - | ||||||||||||||||||||||||
160 | - | |||||||||||||||||||||||||
161 | const BIGNUM * | - | ||||||||||||||||||||||||
162 | BN_get0_nist_prime_384(void) | - | ||||||||||||||||||||||||
163 | { | - | ||||||||||||||||||||||||
164 | return never executed: &_bignum_nist_p_384;return &_bignum_nist_p_384; never executed: return &_bignum_nist_p_384; | 0 | ||||||||||||||||||||||||
165 | } | - | ||||||||||||||||||||||||
166 | - | |||||||||||||||||||||||||
167 | const BIGNUM * | - | ||||||||||||||||||||||||
168 | BN_get0_nist_prime_521(void) | - | ||||||||||||||||||||||||
169 | { | - | ||||||||||||||||||||||||
170 | return never executed: &_bignum_nist_p_521;return &_bignum_nist_p_521; never executed: return &_bignum_nist_p_521; | 0 | ||||||||||||||||||||||||
171 | } | - | ||||||||||||||||||||||||
172 | - | |||||||||||||||||||||||||
173 | static void | - | ||||||||||||||||||||||||
174 | nist_cp_bn_0(unsigned long *dst, const unsigned long *src, int top, int max) | - | ||||||||||||||||||||||||
175 | { | - | ||||||||||||||||||||||||
176 | int i; | - | ||||||||||||||||||||||||
177 | - | |||||||||||||||||||||||||
178 | - | |||||||||||||||||||||||||
179 | - | |||||||||||||||||||||||||
180 | - | |||||||||||||||||||||||||
181 | for (i = 0; i < top
| 0 | ||||||||||||||||||||||||
182 | dst[i] = src[i]; never executed: dst[i] = src[i]; | 0 | ||||||||||||||||||||||||
183 | for (; i < max
| 0 | ||||||||||||||||||||||||
184 | dst[i] = 0; never executed: dst[i] = 0; | 0 | ||||||||||||||||||||||||
185 | } never executed: end of block | 0 | ||||||||||||||||||||||||
186 | - | |||||||||||||||||||||||||
187 | static void nist_cp_bn(unsigned long *dst, const unsigned long *src, int top) | - | ||||||||||||||||||||||||
188 | { | - | ||||||||||||||||||||||||
189 | int i; | - | ||||||||||||||||||||||||
190 | - | |||||||||||||||||||||||||
191 | for (i = 0; i < top
| 0 | ||||||||||||||||||||||||
192 | dst[i] = src[i]; never executed: dst[i] = src[i]; | 0 | ||||||||||||||||||||||||
193 | } never executed: end of block | 0 | ||||||||||||||||||||||||
194 | int | - | ||||||||||||||||||||||||
195 | BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, BN_CTX *ctx) | - | ||||||||||||||||||||||||
196 | { | - | ||||||||||||||||||||||||
197 | int top = a->top, i; | - | ||||||||||||||||||||||||
198 | int carry; | - | ||||||||||||||||||||||||
199 | unsigned long *r_d, *a_d = a->d; | - | ||||||||||||||||||||||||
200 | union { | - | ||||||||||||||||||||||||
201 | unsigned long bn[(192+64 -1)/64]; | - | ||||||||||||||||||||||||
202 | unsigned int ui[(192+64 -1)/64 * | - | ||||||||||||||||||||||||
203 | sizeof(unsigned long) / sizeof(unsigned int)]; | - | ||||||||||||||||||||||||
204 | } buf; | - | ||||||||||||||||||||||||
205 | unsigned long c_d[(192+64 -1)/64], *res; | - | ||||||||||||||||||||||||
206 | uintptr_t mask; | - | ||||||||||||||||||||||||
207 | static const BIGNUM _bignum_nist_p_192_sqr = { | - | ||||||||||||||||||||||||
208 | (unsigned long *)_nist_p_192_sqr, | - | ||||||||||||||||||||||||
209 | sizeof(_nist_p_192_sqr) / sizeof(_nist_p_192_sqr[0]), | - | ||||||||||||||||||||||||
210 | sizeof(_nist_p_192_sqr) / sizeof(_nist_p_192_sqr[0]), | - | ||||||||||||||||||||||||
211 | 0, | - | ||||||||||||||||||||||||
212 | 0x02 | - | ||||||||||||||||||||||||
213 | }; | - | ||||||||||||||||||||||||
214 | - | |||||||||||||||||||||||||
215 | field = &_bignum_nist_p_192; | - | ||||||||||||||||||||||||
216 | - | |||||||||||||||||||||||||
217 | if (((
| 0 | ||||||||||||||||||||||||
218 | return never executed: BN_nnmod(r, a, field, ctx);return BN_nnmod(r, a, field, ctx); never executed: return BN_nnmod(r, a, field, ctx); | 0 | ||||||||||||||||||||||||
219 | - | |||||||||||||||||||||||||
220 | i = BN_ucmp(field, a); | - | ||||||||||||||||||||||||
221 | if (i == 0
| 0 | ||||||||||||||||||||||||
222 | (BN_set_word((r),0)); | - | ||||||||||||||||||||||||
223 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
224 | } else if (i > 0
| 0 | ||||||||||||||||||||||||
225 | return never executed: (return (r == a) ? 1 : (BN_copy(r , a) != ((void *)0) );
never executed: return (r == a) ? 1 : (BN_copy(r , a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
226 | ((void *)0) never executed: return (r == a) ? 1 : (BN_copy(r , a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
227 | ); never executed: return (r == a) ? 1 : (BN_copy(r , a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
228 | - | |||||||||||||||||||||||||
229 | if (r != a
| 0 | ||||||||||||||||||||||||
230 | if (!((((
| 0 | ||||||||||||||||||||||||
231 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
232 | r_d = r->d; | - | ||||||||||||||||||||||||
233 | nist_cp_bn(r_d, a_d, (192+64 -1)/64); | - | ||||||||||||||||||||||||
234 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||
235 | r_d = a_d; never executed: r_d = a_d; | 0 | ||||||||||||||||||||||||
236 | - | |||||||||||||||||||||||||
237 | nist_cp_bn_0(buf.bn, a_d + (192+64 -1)/64, top - (192+64 -1)/64, | - | ||||||||||||||||||||||||
238 | (192+64 -1)/64); | - | ||||||||||||||||||||||||
239 | - | |||||||||||||||||||||||||
240 | - | |||||||||||||||||||||||||
241 | { | - | ||||||||||||||||||||||||
242 | long acc; | - | ||||||||||||||||||||||||
243 | unsigned int *rp = (unsigned int *)r_d; | - | ||||||||||||||||||||||||
244 | const unsigned int *bp = (const unsigned int *)buf.ui; | - | ||||||||||||||||||||||||
245 | - | |||||||||||||||||||||||||
246 | acc = rp[0]; | - | ||||||||||||||||||||||||
247 | acc += bp[3 * 2 - 6]; | - | ||||||||||||||||||||||||
248 | acc += bp[5 * 2 - 6]; | - | ||||||||||||||||||||||||
249 | rp[0] = (unsigned int)acc; | - | ||||||||||||||||||||||||
250 | acc >>= 32; | - | ||||||||||||||||||||||||
251 | - | |||||||||||||||||||||||||
252 | acc += rp[1]; | - | ||||||||||||||||||||||||
253 | acc += bp[3 * 2 - 5]; | - | ||||||||||||||||||||||||
254 | acc += bp[5 * 2 - 5]; | - | ||||||||||||||||||||||||
255 | rp[1] = (unsigned int)acc; | - | ||||||||||||||||||||||||
256 | acc >>= 32; | - | ||||||||||||||||||||||||
257 | - | |||||||||||||||||||||||||
258 | acc += rp[2]; | - | ||||||||||||||||||||||||
259 | acc += bp[3 * 2 - 6]; | - | ||||||||||||||||||||||||
260 | acc += bp[4 * 2 - 6]; | - | ||||||||||||||||||||||||
261 | acc += bp[5 * 2 - 6]; | - | ||||||||||||||||||||||||
262 | rp[2] = (unsigned int)acc; | - | ||||||||||||||||||||||||
263 | acc >>= 32; | - | ||||||||||||||||||||||||
264 | - | |||||||||||||||||||||||||
265 | acc += rp[3]; | - | ||||||||||||||||||||||||
266 | acc += bp[3 * 2 - 5]; | - | ||||||||||||||||||||||||
267 | acc += bp[4 * 2 - 5]; | - | ||||||||||||||||||||||||
268 | acc += bp[5 * 2 - 5]; | - | ||||||||||||||||||||||||
269 | rp[3] = (unsigned int)acc; | - | ||||||||||||||||||||||||
270 | acc >>= 32; | - | ||||||||||||||||||||||||
271 | - | |||||||||||||||||||||||||
272 | acc += rp[4]; | - | ||||||||||||||||||||||||
273 | acc += bp[4 * 2 - 6]; | - | ||||||||||||||||||||||||
274 | acc += bp[5 * 2 - 6]; | - | ||||||||||||||||||||||||
275 | rp[4] = (unsigned int)acc; | - | ||||||||||||||||||||||||
276 | acc >>= 32; | - | ||||||||||||||||||||||||
277 | - | |||||||||||||||||||||||||
278 | acc += rp[5]; | - | ||||||||||||||||||||||||
279 | acc += bp[4 * 2 - 5]; | - | ||||||||||||||||||||||||
280 | acc += bp[5 * 2 - 5]; | - | ||||||||||||||||||||||||
281 | rp[5] = (unsigned int)acc; | - | ||||||||||||||||||||||||
282 | - | |||||||||||||||||||||||||
283 | carry = (int)(acc >> 32); | - | ||||||||||||||||||||||||
284 | } | - | ||||||||||||||||||||||||
285 | if (carry > 0
| 0 | ||||||||||||||||||||||||
286 | carry = (int)bn_sub_words(r_d, r_d, _nist_p_192[carry - 1], never executed: carry = (int)bn_sub_words(r_d, r_d, _nist_p_192[carry - 1], (192+64 -1)/64); | 0 | ||||||||||||||||||||||||
287 | (192+64 -1)/64); never executed: carry = (int)bn_sub_words(r_d, r_d, _nist_p_192[carry - 1], (192+64 -1)/64); | 0 | ||||||||||||||||||||||||
288 | else | - | ||||||||||||||||||||||||
289 | carry = 1; never executed: carry = 1; | 0 | ||||||||||||||||||||||||
290 | - | |||||||||||||||||||||||||
291 | - | |||||||||||||||||||||||||
292 | - | |||||||||||||||||||||||||
293 | - | |||||||||||||||||||||||||
294 | - | |||||||||||||||||||||||||
295 | - | |||||||||||||||||||||||||
296 | - | |||||||||||||||||||||||||
297 | mask = 0 - (uintptr_t)bn_sub_words(c_d, r_d, _nist_p_192[0], | - | ||||||||||||||||||||||||
298 | (192+64 -1)/64); | - | ||||||||||||||||||||||||
299 | mask &= 0 - (uintptr_t)carry; | - | ||||||||||||||||||||||||
300 | res = c_d; | - | ||||||||||||||||||||||||
301 | res = (unsigned long *)(((uintptr_t)res & ~mask) | ((uintptr_t)r_d & mask)); | - | ||||||||||||||||||||||||
302 | nist_cp_bn(r_d, res, (192+64 -1)/64); | - | ||||||||||||||||||||||||
303 | r->top = (192+64 -1)/64; | - | ||||||||||||||||||||||||
304 | { unsigned long *ftl; int tmp_top = (r)->top; if (tmp_top > 0
never executed: (r)->top = tmp_top; }break; never executed: ; };end of block | 0 | ||||||||||||||||||||||||
305 | - | |||||||||||||||||||||||||
306 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
307 | } | - | ||||||||||||||||||||||||
308 | - | |||||||||||||||||||||||||
309 | typedef unsigned long (*bn_addsub_f)(unsigned long *, const unsigned long *, | - | ||||||||||||||||||||||||
310 | const unsigned long *, int); | - | ||||||||||||||||||||||||
311 | int | - | ||||||||||||||||||||||||
312 | BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, BN_CTX *ctx) | - | ||||||||||||||||||||||||
313 | { | - | ||||||||||||||||||||||||
314 | int top = a->top, i; | - | ||||||||||||||||||||||||
315 | int carry; | - | ||||||||||||||||||||||||
316 | unsigned long *r_d, *a_d = a->d; | - | ||||||||||||||||||||||||
317 | union { | - | ||||||||||||||||||||||||
318 | unsigned long bn[(224+64 -1)/64]; | - | ||||||||||||||||||||||||
319 | unsigned int ui[(224+64 -1)/64 * | - | ||||||||||||||||||||||||
320 | sizeof(unsigned long) / sizeof(unsigned int)]; | - | ||||||||||||||||||||||||
321 | } buf; | - | ||||||||||||||||||||||||
322 | unsigned long c_d[(224+64 -1)/64], *res; | - | ||||||||||||||||||||||||
323 | uintptr_t mask; | - | ||||||||||||||||||||||||
324 | union { | - | ||||||||||||||||||||||||
325 | bn_addsub_f f; | - | ||||||||||||||||||||||||
326 | uintptr_t p; | - | ||||||||||||||||||||||||
327 | } u; | - | ||||||||||||||||||||||||
328 | static const BIGNUM _bignum_nist_p_224_sqr = { | - | ||||||||||||||||||||||||
329 | (unsigned long *)_nist_p_224_sqr, | - | ||||||||||||||||||||||||
330 | sizeof(_nist_p_224_sqr) / sizeof(_nist_p_224_sqr[0]), | - | ||||||||||||||||||||||||
331 | sizeof(_nist_p_224_sqr) / sizeof(_nist_p_224_sqr[0]), | - | ||||||||||||||||||||||||
332 | 0, | - | ||||||||||||||||||||||||
333 | 0x02 | - | ||||||||||||||||||||||||
334 | }; | - | ||||||||||||||||||||||||
335 | - | |||||||||||||||||||||||||
336 | field = &_bignum_nist_p_224; | - | ||||||||||||||||||||||||
337 | - | |||||||||||||||||||||||||
338 | if (((
| 0 | ||||||||||||||||||||||||
339 | return never executed: BN_nnmod(r, a, field, ctx);return BN_nnmod(r, a, field, ctx); never executed: return BN_nnmod(r, a, field, ctx); | 0 | ||||||||||||||||||||||||
340 | - | |||||||||||||||||||||||||
341 | i = BN_ucmp(field, a); | - | ||||||||||||||||||||||||
342 | if (i == 0
| 0 | ||||||||||||||||||||||||
343 | (BN_set_word((r),0)); | - | ||||||||||||||||||||||||
344 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
345 | } else if (i > 0
| 0 | ||||||||||||||||||||||||
346 | return never executed: (return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) );
never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
347 | ((void *)0) never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
348 | ); never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
349 | - | |||||||||||||||||||||||||
350 | if (r != a
| 0 | ||||||||||||||||||||||||
351 | if (!((((
| 0 | ||||||||||||||||||||||||
352 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
353 | r_d = r->d; | - | ||||||||||||||||||||||||
354 | nist_cp_bn(r_d, a_d, (224+64 -1)/64); | - | ||||||||||||||||||||||||
355 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||
356 | r_d = a_d; never executed: r_d = a_d; | 0 | ||||||||||||||||||||||||
357 | - | |||||||||||||||||||||||||
358 | memset(&buf, 0, sizeof(buf)); | - | ||||||||||||||||||||||||
359 | - | |||||||||||||||||||||||||
360 | - | |||||||||||||||||||||||||
361 | - | |||||||||||||||||||||||||
362 | nist_cp_bn_0(c_d, a_d + ((224+64 -1)/64 - 1), | - | ||||||||||||||||||||||||
363 | top - ((224+64 -1)/64 - 1), (224+64 -1)/64); | - | ||||||||||||||||||||||||
364 | - | |||||||||||||||||||||||||
365 | { (((8) - 7)>=0)?(((0)&1)?(buf.bn[(0)/2]|=(((8) - 7)&1)?(c_d[((8) - 7)/2]&(0xffffffff00000000L)):(c_d[((8) - 7)/2]<<32)) :(buf.bn[(0)/2] =(((8) - 7)&1)?(c_d[((8) - 7)/2]>>32):(c_d[((8) - 7)/2]&(0xffffffffL)))):(((0)&1)?(buf.bn[(0)/2]&=(0xffffffffL)):(buf.bn[(0)/2]=0)); (((9) - 7)>=0)?(((1)&1)?(buf.bn[(1)/2]|=(((9) - 7)&1)?(c_d[((9) - 7)/2]&(0xffffffff00000000L)):(c_d[((9) - 7)/2]<<32)) :(buf.bn[(1)/2] =(((9) - 7)&1)?(c_d[((9) - 7)/2]>>32):(c_d[((9) - 7)/2]&(0xffffffffL)))):(((1)&1)?(buf.bn[(1)/2]&=(0xffffffffL)):(buf.bn[(1)/2]=0)); (((10) - 7)>=0)?(((2)&1)?(buf.bn[(2)/2]|=(((10) - 7)&1)?(c_d[((10) - 7)/2]&(0xffffffff00000000L)):(c_d[((10) - 7)/2]<<32)) :(buf.bn[(2)/2] =(((10) - 7)&1)?(c_d[((10) - 7)/2]>>32):(c_d[((10) - 7)/2]&(0xffffffffL)))):(((2)&1)?(buf.bn[(2)/2]&=(0xffffffffL)):(buf.bn[(2)/2]=0)); (((11) - 7)>=0)?(((3)&1)?(buf.bn[(3)/2]|=(((11) - 7)&1)?(c_d[((11) - 7)/2]&(0xffffffff00000000L)):(c_d[((11) - 7)/2]<<32)) :(buf.bn[(3)/2] =(((11) - 7)&1)?(c_d[((11) - 7)/2]>>32):(c_d[((11) - 7)/2]&(0xffffffffL)))):(((3)&1)?(buf.bn[(3)/2]&=(0xffffffffL)):(buf.bn[(3)/2]=0)); (((12) - 7)>=0)?(((4)&1)?(buf.bn[(4)/2]|=(((12) - 7)&1)?(c_d[((12) - 7)/2]&(0xffffffff00000000L)):(c_d[((12) - 7)/2]<<32)) :(buf.bn[(4)/2] =(((12) - 7)&1)?(c_d[((12) - 7)/2]>>32):(c_d[((12) - 7)/2]&(0xffffffffL)))):(((4)&1)?(buf.bn[(4)/2]&=(0xffffffffL)):(buf.bn[(4)/2]=0)); (((13) - 7)>=0)?(((5)&1)?(buf.bn[(5)/2]|=(((13) - 7)&1)?(c_d[((13) - 7)/2]&(0xffffffff00000000L)):(c_d[((13) - 7)/2]<<32)) :(buf.bn[(5)/2] =(((13) - 7)&1)?(c_d[((13) - 7)/2]>>32):(c_d[((13) - 7)/2]&(0xffffffffL)))):(((5)&1)?(buf.bn[(5)/2]&=(0xffffffffL)):(buf.bn[(5)/2]=0)); (((14) - 7)>=0)?(((6)&1)?(buf.bn[(6)/2]|=(((14) - 7)&1)?(c_d[((14) - 7)/2]&(0xffffffff00000000L)):(c_d[((14) - 7)/2]<<32)) :(buf.bn[(6)/2] =(((14) - 7)&1)?(c_d[((14) - 7)/2]>>32):(c_d[((14) - 7)/2]&(0xffffffffL)))):(((6)&1)?(buf.bn[(6)/2]&=(0xffffffffL)):(buf.bn[(6)/2]=0)); }; | - | ||||||||||||||||||||||||
366 | - | |||||||||||||||||||||||||
367 | r_d[(224+64 -1)/64 - 1] &= (0xffffffffL); | - | ||||||||||||||||||||||||
368 | { | - | ||||||||||||||||||||||||
369 | unsigned long t_d[(224+64 -1)/64] = {0}; | - | ||||||||||||||||||||||||
370 | - | |||||||||||||||||||||||||
371 | { (((0) - 7)>=0)?(((0)&1)?(t_d[(0)/2]|=(((0) - 7)&1)?(buf.bn[((0) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((0) - 7)/2]<<32)) :(t_d[(0)/2] =(((0) - 7)&1)?(buf.bn[((0) - 7)/2]>>32):(buf.bn[((0) - 7)/2]&(0xffffffffL)))):(((0)&1)?(t_d[(0)/2]&=(0xffffffffL)):(t_d[(0)/2]=0)); (((0) - 7)>=0)?(((1)&1)?(t_d[(1)/2]|=(((0) - 7)&1)?(buf.bn[((0) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((0) - 7)/2]<<32)) :(t_d[(1)/2] =(((0) - 7)&1)?(buf.bn[((0) - 7)/2]>>32):(buf.bn[((0) - 7)/2]&(0xffffffffL)))):(((1)&1)?(t_d[(1)/2]&=(0xffffffffL)):(t_d[(1)/2]=0)); (((0) - 7)>=0)?(((2)&1)?(t_d[(2)/2]|=(((0) - 7)&1)?(buf.bn[((0) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((0) - 7)/2]<<32)) :(t_d[(2)/2] =(((0) - 7)&1)?(buf.bn[((0) - 7)/2]>>32):(buf.bn[((0) - 7)/2]&(0xffffffffL)))):(((2)&1)?(t_d[(2)/2]&=(0xffffffffL)):(t_d[(2)/2]=0)); (((7) - 7)>=0)?(((3)&1)?(t_d[(3)/2]|=(((7) - 7)&1)?(buf.bn[((7) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((7) - 7)/2]<<32)) :(t_d[(3)/2] =(((7) - 7)&1)?(buf.bn[((7) - 7)/2]>>32):(buf.bn[((7) - 7)/2]&(0xffffffffL)))):(((3)&1)?(t_d[(3)/2]&=(0xffffffffL)):(t_d[(3)/2]=0)); (((8) - 7)>=0)?(((4)&1)?(t_d[(4)/2]|=(((8) - 7)&1)?(buf.bn[((8) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((8) - 7)/2]<<32)) :(t_d[(4)/2] =(((8) - 7)&1)?(buf.bn[((8) - 7)/2]>>32):(buf.bn[((8) - 7)/2]&(0xffffffffL)))):(((4)&1)?(t_d[(4)/2]&=(0xffffffffL)):(t_d[(4)/2]=0)); (((9) - 7)>=0)?(((5)&1)?(t_d[(5)/2]|=(((9) - 7)&1)?(buf.bn[((9) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((9) - 7)/2]<<32)) :(t_d[(5)/2] =(((9) - 7)&1)?(buf.bn[((9) - 7)/2]>>32):(buf.bn[((9) - 7)/2]&(0xffffffffL)))):(((5)&1)?(t_d[(5)/2]&=(0xffffffffL)):(t_d[(5)/2]=0)); (((10) - 7)>=0)?(((6)&1)?(t_d[(6)/2]|=(((10) - 7)&1)?(buf.bn[((10) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((10) - 7)/2]<<32)) :(t_d[(6)/2] =(((10) - 7)&1)?(buf.bn[((10) - 7)/2]>>32):(buf.bn[((10) - 7)/2]&(0xffffffffL)))):(((6)&1)?(t_d[(6)/2]&=(0xffffffffL)):(t_d[(6)/2]=0)); }; | - | ||||||||||||||||||||||||
372 | carry = (int)bn_add_words(r_d, r_d, t_d, (224+64 -1)/64); | - | ||||||||||||||||||||||||
373 | { (((0) - 7)>=0)?(((0)&1)?(t_d[(0)/2]|=(((0) - 7)&1)?(buf.bn[((0) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((0) - 7)/2]<<32)) :(t_d[(0)/2] =(((0) - 7)&1)?(buf.bn[((0) - 7)/2]>>32):(buf.bn[((0) - 7)/2]&(0xffffffffL)))):(((0)&1)?(t_d[(0)/2]&=(0xffffffffL)):(t_d[(0)/2]=0)); (((0) - 7)>=0)?(((1)&1)?(t_d[(1)/2]|=(((0) - 7)&1)?(buf.bn[((0) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((0) - 7)/2]<<32)) :(t_d[(1)/2] =(((0) - 7)&1)?(buf.bn[((0) - 7)/2]>>32):(buf.bn[((0) - 7)/2]&(0xffffffffL)))):(((1)&1)?(t_d[(1)/2]&=(0xffffffffL)):(t_d[(1)/2]=0)); (((0) - 7)>=0)?(((2)&1)?(t_d[(2)/2]|=(((0) - 7)&1)?(buf.bn[((0) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((0) - 7)/2]<<32)) :(t_d[(2)/2] =(((0) - 7)&1)?(buf.bn[((0) - 7)/2]>>32):(buf.bn[((0) - 7)/2]&(0xffffffffL)))):(((2)&1)?(t_d[(2)/2]&=(0xffffffffL)):(t_d[(2)/2]=0)); (((11) - 7)>=0)?(((3)&1)?(t_d[(3)/2]|=(((11) - 7)&1)?(buf.bn[((11) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((11) - 7)/2]<<32)) :(t_d[(3)/2] =(((11) - 7)&1)?(buf.bn[((11) - 7)/2]>>32):(buf.bn[((11) - 7)/2]&(0xffffffffL)))):(((3)&1)?(t_d[(3)/2]&=(0xffffffffL)):(t_d[(3)/2]=0)); (((12) - 7)>=0)?(((4)&1)?(t_d[(4)/2]|=(((12) - 7)&1)?(buf.bn[((12) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((12) - 7)/2]<<32)) :(t_d[(4)/2] =(((12) - 7)&1)?(buf.bn[((12) - 7)/2]>>32):(buf.bn[((12) - 7)/2]&(0xffffffffL)))):(((4)&1)?(t_d[(4)/2]&=(0xffffffffL)):(t_d[(4)/2]=0)); (((13) - 7)>=0)?(((5)&1)?(t_d[(5)/2]|=(((13) - 7)&1)?(buf.bn[((13) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((13) - 7)/2]<<32)) :(t_d[(5)/2] =(((13) - 7)&1)?(buf.bn[((13) - 7)/2]>>32):(buf.bn[((13) - 7)/2]&(0xffffffffL)))):(((5)&1)?(t_d[(5)/2]&=(0xffffffffL)):(t_d[(5)/2]=0)); (((0) - 7)>=0)?(((6)&1)?(t_d[(6)/2]|=(((0) - 7)&1)?(buf.bn[((0) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((0) - 7)/2]<<32)) :(t_d[(6)/2] =(((0) - 7)&1)?(buf.bn[((0) - 7)/2]>>32):(buf.bn[((0) - 7)/2]&(0xffffffffL)))):(((6)&1)?(t_d[(6)/2]&=(0xffffffffL)):(t_d[(6)/2]=0)); }; | - | ||||||||||||||||||||||||
374 | carry += (int)bn_add_words(r_d, r_d, t_d, (224+64 -1)/64); | - | ||||||||||||||||||||||||
375 | { (((7) - 7)>=0)?(((0)&1)?(t_d[(0)/2]|=(((7) - 7)&1)?(buf.bn[((7) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((7) - 7)/2]<<32)) :(t_d[(0)/2] =(((7) - 7)&1)?(buf.bn[((7) - 7)/2]>>32):(buf.bn[((7) - 7)/2]&(0xffffffffL)))):(((0)&1)?(t_d[(0)/2]&=(0xffffffffL)):(t_d[(0)/2]=0)); (((8) - 7)>=0)?(((1)&1)?(t_d[(1)/2]|=(((8) - 7)&1)?(buf.bn[((8) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((8) - 7)/2]<<32)) :(t_d[(1)/2] =(((8) - 7)&1)?(buf.bn[((8) - 7)/2]>>32):(buf.bn[((8) - 7)/2]&(0xffffffffL)))):(((1)&1)?(t_d[(1)/2]&=(0xffffffffL)):(t_d[(1)/2]=0)); (((9) - 7)>=0)?(((2)&1)?(t_d[(2)/2]|=(((9) - 7)&1)?(buf.bn[((9) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((9) - 7)/2]<<32)) :(t_d[(2)/2] =(((9) - 7)&1)?(buf.bn[((9) - 7)/2]>>32):(buf.bn[((9) - 7)/2]&(0xffffffffL)))):(((2)&1)?(t_d[(2)/2]&=(0xffffffffL)):(t_d[(2)/2]=0)); (((10) - 7)>=0)?(((3)&1)?(t_d[(3)/2]|=(((10) - 7)&1)?(buf.bn[((10) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((10) - 7)/2]<<32)) :(t_d[(3)/2] =(((10) - 7)&1)?(buf.bn[((10) - 7)/2]>>32):(buf.bn[((10) - 7)/2]&(0xffffffffL)))):(((3)&1)?(t_d[(3)/2]&=(0xffffffffL)):(t_d[(3)/2]=0)); (((11) - 7)>=0)?(((4)&1)?(t_d[(4)/2]|=(((11) - 7)&1)?(buf.bn[((11) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((11) - 7)/2]<<32)) :(t_d[(4)/2] =(((11) - 7)&1)?(buf.bn[((11) - 7)/2]>>32):(buf.bn[((11) - 7)/2]&(0xffffffffL)))):(((4)&1)?(t_d[(4)/2]&=(0xffffffffL)):(t_d[(4)/2]=0)); (((12) - 7)>=0)?(((5)&1)?(t_d[(5)/2]|=(((12) - 7)&1)?(buf.bn[((12) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((12) - 7)/2]<<32)) :(t_d[(5)/2] =(((12) - 7)&1)?(buf.bn[((12) - 7)/2]>>32):(buf.bn[((12) - 7)/2]&(0xffffffffL)))):(((5)&1)?(t_d[(5)/2]&=(0xffffffffL)):(t_d[(5)/2]=0)); (((13) - 7)>=0)?(((6)&1)?(t_d[(6)/2]|=(((13) - 7)&1)?(buf.bn[((13) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((13) - 7)/2]<<32)) :(t_d[(6)/2] =(((13) - 7)&1)?(buf.bn[((13) - 7)/2]>>32):(buf.bn[((13) - 7)/2]&(0xffffffffL)))):(((6)&1)?(t_d[(6)/2]&=(0xffffffffL)):(t_d[(6)/2]=0)); }; | - | ||||||||||||||||||||||||
376 | carry -= (int)bn_sub_words(r_d, r_d, t_d, (224+64 -1)/64); | - | ||||||||||||||||||||||||
377 | { (((11) - 7)>=0)?(((0)&1)?(t_d[(0)/2]|=(((11) - 7)&1)?(buf.bn[((11) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((11) - 7)/2]<<32)) :(t_d[(0)/2] =(((11) - 7)&1)?(buf.bn[((11) - 7)/2]>>32):(buf.bn[((11) - 7)/2]&(0xffffffffL)))):(((0)&1)?(t_d[(0)/2]&=(0xffffffffL)):(t_d[(0)/2]=0)); (((12) - 7)>=0)?(((1)&1)?(t_d[(1)/2]|=(((12) - 7)&1)?(buf.bn[((12) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((12) - 7)/2]<<32)) :(t_d[(1)/2] =(((12) - 7)&1)?(buf.bn[((12) - 7)/2]>>32):(buf.bn[((12) - 7)/2]&(0xffffffffL)))):(((1)&1)?(t_d[(1)/2]&=(0xffffffffL)):(t_d[(1)/2]=0)); (((13) - 7)>=0)?(((2)&1)?(t_d[(2)/2]|=(((13) - 7)&1)?(buf.bn[((13) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((13) - 7)/2]<<32)) :(t_d[(2)/2] =(((13) - 7)&1)?(buf.bn[((13) - 7)/2]>>32):(buf.bn[((13) - 7)/2]&(0xffffffffL)))):(((2)&1)?(t_d[(2)/2]&=(0xffffffffL)):(t_d[(2)/2]=0)); (((0) - 7)>=0)?(((3)&1)?(t_d[(3)/2]|=(((0) - 7)&1)?(buf.bn[((0) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((0) - 7)/2]<<32)) :(t_d[(3)/2] =(((0) - 7)&1)?(buf.bn[((0) - 7)/2]>>32):(buf.bn[((0) - 7)/2]&(0xffffffffL)))):(((3)&1)?(t_d[(3)/2]&=(0xffffffffL)):(t_d[(3)/2]=0)); (((0) - 7)>=0)?(((4)&1)?(t_d[(4)/2]|=(((0) - 7)&1)?(buf.bn[((0) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((0) - 7)/2]<<32)) :(t_d[(4)/2] =(((0) - 7)&1)?(buf.bn[((0) - 7)/2]>>32):(buf.bn[((0) - 7)/2]&(0xffffffffL)))):(((4)&1)?(t_d[(4)/2]&=(0xffffffffL)):(t_d[(4)/2]=0)); (((0) - 7)>=0)?(((5)&1)?(t_d[(5)/2]|=(((0) - 7)&1)?(buf.bn[((0) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((0) - 7)/2]<<32)) :(t_d[(5)/2] =(((0) - 7)&1)?(buf.bn[((0) - 7)/2]>>32):(buf.bn[((0) - 7)/2]&(0xffffffffL)))):(((5)&1)?(t_d[(5)/2]&=(0xffffffffL)):(t_d[(5)/2]=0)); (((0) - 7)>=0)?(((6)&1)?(t_d[(6)/2]|=(((0) - 7)&1)?(buf.bn[((0) - 7)/2]&(0xffffffff00000000L)):(buf.bn[((0) - 7)/2]<<32)) :(t_d[(6)/2] =(((0) - 7)&1)?(buf.bn[((0) - 7)/2]>>32):(buf.bn[((0) - 7)/2]&(0xffffffffL)))):(((6)&1)?(t_d[(6)/2]&=(0xffffffffL)):(t_d[(6)/2]=0)); }; | - | ||||||||||||||||||||||||
378 | carry -= (int)bn_sub_words(r_d, r_d, t_d, (224+64 -1)/64); | - | ||||||||||||||||||||||||
379 | - | |||||||||||||||||||||||||
380 | - | |||||||||||||||||||||||||
381 | carry = (int)(r_d[(224+64 -1)/64 - 1] >> 32); | - | ||||||||||||||||||||||||
382 | - | |||||||||||||||||||||||||
383 | } | - | ||||||||||||||||||||||||
384 | - | |||||||||||||||||||||||||
385 | u.f = bn_sub_words; | - | ||||||||||||||||||||||||
386 | if (carry > 0
| 0 | ||||||||||||||||||||||||
387 | carry = (int)bn_sub_words(r_d, r_d, _nist_p_224[carry - 1], | - | ||||||||||||||||||||||||
388 | (224+64 -1)/64); | - | ||||||||||||||||||||||||
389 | - | |||||||||||||||||||||||||
390 | carry = (int)(~(r_d[(224+64 -1)/64 - 1] >> 32)) & 1; | - | ||||||||||||||||||||||||
391 | - | |||||||||||||||||||||||||
392 | } never executed: else if (carry < 0end of block
| 0 | ||||||||||||||||||||||||
393 | - | |||||||||||||||||||||||||
394 | - | |||||||||||||||||||||||||
395 | - | |||||||||||||||||||||||||
396 | - | |||||||||||||||||||||||||
397 | - | |||||||||||||||||||||||||
398 | - | |||||||||||||||||||||||||
399 | carry = (int)bn_add_words(r_d, r_d, _nist_p_224[-carry - 1], | - | ||||||||||||||||||||||||
400 | (224+64 -1)/64); | - | ||||||||||||||||||||||||
401 | mask = 0 - (uintptr_t)carry; | - | ||||||||||||||||||||||||
402 | u.p = ((uintptr_t)bn_sub_words & mask) | | - | ||||||||||||||||||||||||
403 | ((uintptr_t)bn_add_words & ~mask); | - | ||||||||||||||||||||||||
404 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||
405 | carry = 1; never executed: carry = 1; | 0 | ||||||||||||||||||||||||
406 | - | |||||||||||||||||||||||||
407 | - | |||||||||||||||||||||||||
408 | mask = 0 - (uintptr_t)(*u.f)(c_d, r_d, _nist_p_224[0], (224+64 -1)/64); | - | ||||||||||||||||||||||||
409 | mask &= 0 - (uintptr_t)carry; | - | ||||||||||||||||||||||||
410 | res = c_d; | - | ||||||||||||||||||||||||
411 | res = (unsigned long *)(((uintptr_t)res & ~mask) | ((uintptr_t)r_d & mask)); | - | ||||||||||||||||||||||||
412 | nist_cp_bn(r_d, res, (224+64 -1)/64); | - | ||||||||||||||||||||||||
413 | r->top = (224+64 -1)/64; | - | ||||||||||||||||||||||||
414 | { unsigned long *ftl; int tmp_top = (r)->top; if (tmp_top > 0
never executed: (r)->top = tmp_top; }break; never executed: ; };end of block | 0 | ||||||||||||||||||||||||
415 | - | |||||||||||||||||||||||||
416 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
417 | } | - | ||||||||||||||||||||||||
418 | int | - | ||||||||||||||||||||||||
419 | BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, BN_CTX *ctx) | - | ||||||||||||||||||||||||
420 | { | - | ||||||||||||||||||||||||
421 | int i, top = a->top; | - | ||||||||||||||||||||||||
422 | int carry = 0; | - | ||||||||||||||||||||||||
423 | unsigned long *a_d = a->d, *r_d; | - | ||||||||||||||||||||||||
424 | union { | - | ||||||||||||||||||||||||
425 | unsigned long bn[(256+64 -1)/64]; | - | ||||||||||||||||||||||||
426 | unsigned int ui[(256+64 -1)/64 * | - | ||||||||||||||||||||||||
427 | sizeof(unsigned long) / sizeof(unsigned int)]; | - | ||||||||||||||||||||||||
428 | } buf; | - | ||||||||||||||||||||||||
429 | unsigned long c_d[(256+64 -1)/64] = {0}, *res; | - | ||||||||||||||||||||||||
430 | uintptr_t mask; | - | ||||||||||||||||||||||||
431 | union { | - | ||||||||||||||||||||||||
432 | bn_addsub_f f; | - | ||||||||||||||||||||||||
433 | uintptr_t p; | - | ||||||||||||||||||||||||
434 | } u; | - | ||||||||||||||||||||||||
435 | static const BIGNUM _bignum_nist_p_256_sqr = { | - | ||||||||||||||||||||||||
436 | (unsigned long *)_nist_p_256_sqr, | - | ||||||||||||||||||||||||
437 | sizeof(_nist_p_256_sqr) / sizeof(_nist_p_256_sqr[0]), | - | ||||||||||||||||||||||||
438 | sizeof(_nist_p_256_sqr) / sizeof(_nist_p_256_sqr[0]), | - | ||||||||||||||||||||||||
439 | 0, | - | ||||||||||||||||||||||||
440 | 0x02 | - | ||||||||||||||||||||||||
441 | }; | - | ||||||||||||||||||||||||
442 | - | |||||||||||||||||||||||||
443 | field = &_bignum_nist_p_256; | - | ||||||||||||||||||||||||
444 | - | |||||||||||||||||||||||||
445 | if (((
| 0 | ||||||||||||||||||||||||
446 | return never executed: BN_nnmod(r, a, field, ctx);return BN_nnmod(r, a, field, ctx); never executed: return BN_nnmod(r, a, field, ctx); | 0 | ||||||||||||||||||||||||
447 | - | |||||||||||||||||||||||||
448 | i = BN_ucmp(field, a); | - | ||||||||||||||||||||||||
449 | if (i == 0
| 0 | ||||||||||||||||||||||||
450 | (BN_set_word((r),0)); | - | ||||||||||||||||||||||||
451 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
452 | } else if (i > 0
| 0 | ||||||||||||||||||||||||
453 | return never executed: (return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) );
never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
454 | ((void *)0) never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
455 | ); never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
456 | - | |||||||||||||||||||||||||
457 | if (r != a
| 0 | ||||||||||||||||||||||||
458 | if (!((((
| 0 | ||||||||||||||||||||||||
459 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
460 | r_d = r->d; | - | ||||||||||||||||||||||||
461 | nist_cp_bn(r_d, a_d, (256+64 -1)/64); | - | ||||||||||||||||||||||||
462 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||
463 | r_d = a_d; never executed: r_d = a_d; | 0 | ||||||||||||||||||||||||
464 | - | |||||||||||||||||||||||||
465 | nist_cp_bn_0(buf.bn, a_d + (256+64 -1)/64, | - | ||||||||||||||||||||||||
466 | top - (256+64 -1)/64, (256+64 -1)/64); | - | ||||||||||||||||||||||||
467 | - | |||||||||||||||||||||||||
468 | - | |||||||||||||||||||||||||
469 | { | - | ||||||||||||||||||||||||
470 | long acc; | - | ||||||||||||||||||||||||
471 | unsigned int *rp = (unsigned int *)r_d; | - | ||||||||||||||||||||||||
472 | const unsigned int *bp = (const unsigned int *)buf.ui; | - | ||||||||||||||||||||||||
473 | - | |||||||||||||||||||||||||
474 | acc = rp[0]; | - | ||||||||||||||||||||||||
475 | acc += bp[8 - 8]; | - | ||||||||||||||||||||||||
476 | acc += bp[9 - 8]; | - | ||||||||||||||||||||||||
477 | acc -= bp[11 - 8]; | - | ||||||||||||||||||||||||
478 | acc -= bp[12 - 8]; | - | ||||||||||||||||||||||||
479 | acc -= bp[13 - 8]; | - | ||||||||||||||||||||||||
480 | acc -= bp[14 - 8]; | - | ||||||||||||||||||||||||
481 | rp[0] = (unsigned int)acc; | - | ||||||||||||||||||||||||
482 | acc >>= 32; | - | ||||||||||||||||||||||||
483 | - | |||||||||||||||||||||||||
484 | acc += rp[1]; | - | ||||||||||||||||||||||||
485 | acc += bp[9 - 8]; | - | ||||||||||||||||||||||||
486 | acc += bp[10 - 8]; | - | ||||||||||||||||||||||||
487 | acc -= bp[12 - 8]; | - | ||||||||||||||||||||||||
488 | acc -= bp[13 - 8]; | - | ||||||||||||||||||||||||
489 | acc -= bp[14 - 8]; | - | ||||||||||||||||||||||||
490 | acc -= bp[15 - 8]; | - | ||||||||||||||||||||||||
491 | rp[1] = (unsigned int)acc; | - | ||||||||||||||||||||||||
492 | acc >>= 32; | - | ||||||||||||||||||||||||
493 | - | |||||||||||||||||||||||||
494 | acc += rp[2]; | - | ||||||||||||||||||||||||
495 | acc += bp[10 - 8]; | - | ||||||||||||||||||||||||
496 | acc += bp[11 - 8]; | - | ||||||||||||||||||||||||
497 | acc -= bp[13 - 8]; | - | ||||||||||||||||||||||||
498 | acc -= bp[14 - 8]; | - | ||||||||||||||||||||||||
499 | acc -= bp[15 - 8]; | - | ||||||||||||||||||||||||
500 | rp[2] = (unsigned int)acc; | - | ||||||||||||||||||||||||
501 | acc >>= 32; | - | ||||||||||||||||||||||||
502 | - | |||||||||||||||||||||||||
503 | acc += rp[3]; | - | ||||||||||||||||||||||||
504 | acc += bp[11 - 8]; | - | ||||||||||||||||||||||||
505 | acc += bp[11 - 8]; | - | ||||||||||||||||||||||||
506 | acc += bp[12 - 8]; | - | ||||||||||||||||||||||||
507 | acc += bp[12 - 8]; | - | ||||||||||||||||||||||||
508 | acc += bp[13 - 8]; | - | ||||||||||||||||||||||||
509 | acc -= bp[15 - 8]; | - | ||||||||||||||||||||||||
510 | acc -= bp[8 - 8]; | - | ||||||||||||||||||||||||
511 | acc -= bp[9 - 8]; | - | ||||||||||||||||||||||||
512 | rp[3] = (unsigned int)acc; | - | ||||||||||||||||||||||||
513 | acc >>= 32; | - | ||||||||||||||||||||||||
514 | - | |||||||||||||||||||||||||
515 | acc += rp[4]; | - | ||||||||||||||||||||||||
516 | acc += bp[12 - 8]; | - | ||||||||||||||||||||||||
517 | acc += bp[12 - 8]; | - | ||||||||||||||||||||||||
518 | acc += bp[13 - 8]; | - | ||||||||||||||||||||||||
519 | acc += bp[13 - 8]; | - | ||||||||||||||||||||||||
520 | acc += bp[14 - 8]; | - | ||||||||||||||||||||||||
521 | acc -= bp[9 - 8]; | - | ||||||||||||||||||||||||
522 | acc -= bp[10 - 8]; | - | ||||||||||||||||||||||||
523 | rp[4] = (unsigned int)acc; | - | ||||||||||||||||||||||||
524 | acc >>= 32; | - | ||||||||||||||||||||||||
525 | - | |||||||||||||||||||||||||
526 | acc += rp[5]; | - | ||||||||||||||||||||||||
527 | acc += bp[13 - 8]; | - | ||||||||||||||||||||||||
528 | acc += bp[13 - 8]; | - | ||||||||||||||||||||||||
529 | acc += bp[14 - 8]; | - | ||||||||||||||||||||||||
530 | acc += bp[14 - 8]; | - | ||||||||||||||||||||||||
531 | acc += bp[15 - 8]; | - | ||||||||||||||||||||||||
532 | acc -= bp[10 - 8]; | - | ||||||||||||||||||||||||
533 | acc -= bp[11 - 8]; | - | ||||||||||||||||||||||||
534 | rp[5] = (unsigned int)acc; | - | ||||||||||||||||||||||||
535 | acc >>= 32; | - | ||||||||||||||||||||||||
536 | - | |||||||||||||||||||||||||
537 | acc += rp[6]; | - | ||||||||||||||||||||||||
538 | acc += bp[14 - 8]; | - | ||||||||||||||||||||||||
539 | acc += bp[14 - 8]; | - | ||||||||||||||||||||||||
540 | acc += bp[15 - 8]; | - | ||||||||||||||||||||||||
541 | acc += bp[15 - 8]; | - | ||||||||||||||||||||||||
542 | acc += bp[14 - 8]; | - | ||||||||||||||||||||||||
543 | acc += bp[13 - 8]; | - | ||||||||||||||||||||||||
544 | acc -= bp[8 - 8]; | - | ||||||||||||||||||||||||
545 | acc -= bp[9 - 8]; | - | ||||||||||||||||||||||||
546 | rp[6] = (unsigned int)acc; | - | ||||||||||||||||||||||||
547 | acc >>= 32; | - | ||||||||||||||||||||||||
548 | - | |||||||||||||||||||||||||
549 | acc += rp[7]; | - | ||||||||||||||||||||||||
550 | acc += bp[15 - 8]; | - | ||||||||||||||||||||||||
551 | acc += bp[15 - 8]; | - | ||||||||||||||||||||||||
552 | acc += bp[15 - 8]; | - | ||||||||||||||||||||||||
553 | acc += bp[8 - 8]; | - | ||||||||||||||||||||||||
554 | acc -= bp[10 - 8]; | - | ||||||||||||||||||||||||
555 | acc -= bp[11 - 8]; | - | ||||||||||||||||||||||||
556 | acc -= bp[12 - 8]; | - | ||||||||||||||||||||||||
557 | acc -= bp[13 - 8]; | - | ||||||||||||||||||||||||
558 | rp[7] = (unsigned int)acc; | - | ||||||||||||||||||||||||
559 | - | |||||||||||||||||||||||||
560 | carry = (int)(acc >> 32); | - | ||||||||||||||||||||||||
561 | } | - | ||||||||||||||||||||||||
562 | u.f = bn_sub_words; | - | ||||||||||||||||||||||||
563 | if (carry > 0
| 0 | ||||||||||||||||||||||||
564 | carry = (int)bn_sub_words(r_d, r_d, _nist_p_256[carry - 1], never executed: carry = (int)bn_sub_words(r_d, r_d, _nist_p_256[carry - 1], (256+64 -1)/64); | 0 | ||||||||||||||||||||||||
565 | (256+64 -1)/64); never executed: carry = (int)bn_sub_words(r_d, r_d, _nist_p_256[carry - 1], (256+64 -1)/64); | 0 | ||||||||||||||||||||||||
566 | else if (carry < 0
| 0 | ||||||||||||||||||||||||
567 | carry = (int)bn_add_words(r_d, r_d, _nist_p_256[-carry - 1], | - | ||||||||||||||||||||||||
568 | (256+64 -1)/64); | - | ||||||||||||||||||||||||
569 | mask = 0 - (uintptr_t)carry; | - | ||||||||||||||||||||||||
570 | u.p = ((uintptr_t)bn_sub_words & mask) | | - | ||||||||||||||||||||||||
571 | ((uintptr_t)bn_add_words & ~mask); | - | ||||||||||||||||||||||||
572 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||
573 | carry = 1; never executed: carry = 1; | 0 | ||||||||||||||||||||||||
574 | - | |||||||||||||||||||||||||
575 | mask = 0 - (uintptr_t)(*u.f)(c_d, r_d, _nist_p_256[0], (256+64 -1)/64); | - | ||||||||||||||||||||||||
576 | mask &= 0 - (uintptr_t)carry; | - | ||||||||||||||||||||||||
577 | res = c_d; | - | ||||||||||||||||||||||||
578 | res = (unsigned long *)(((uintptr_t)res & ~mask) | ((uintptr_t)r_d & mask)); | - | ||||||||||||||||||||||||
579 | nist_cp_bn(r_d, res, (256+64 -1)/64); | - | ||||||||||||||||||||||||
580 | r->top = (256+64 -1)/64; | - | ||||||||||||||||||||||||
581 | { unsigned long *ftl; int tmp_top = (r)->top; if (tmp_top > 0
never executed: (r)->top = tmp_top; }break; never executed: ; };end of block | 0 | ||||||||||||||||||||||||
582 | - | |||||||||||||||||||||||||
583 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
584 | } | - | ||||||||||||||||||||||||
585 | int | - | ||||||||||||||||||||||||
586 | BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, BN_CTX *ctx) | - | ||||||||||||||||||||||||
587 | { | - | ||||||||||||||||||||||||
588 | int i, top = a->top; | - | ||||||||||||||||||||||||
589 | int carry = 0; | - | ||||||||||||||||||||||||
590 | unsigned long *r_d, *a_d = a->d; | - | ||||||||||||||||||||||||
591 | union { | - | ||||||||||||||||||||||||
592 | unsigned long bn[(384+64 -1)/64]; | - | ||||||||||||||||||||||||
593 | unsigned int ui[(384+64 -1)/64 * | - | ||||||||||||||||||||||||
594 | sizeof(unsigned long) / sizeof(unsigned int)]; | - | ||||||||||||||||||||||||
595 | } buf; | - | ||||||||||||||||||||||||
596 | unsigned long c_d[(384+64 -1)/64], *res; | - | ||||||||||||||||||||||||
597 | uintptr_t mask; | - | ||||||||||||||||||||||||
598 | union { | - | ||||||||||||||||||||||||
599 | bn_addsub_f f; | - | ||||||||||||||||||||||||
600 | uintptr_t p; | - | ||||||||||||||||||||||||
601 | } u; | - | ||||||||||||||||||||||||
602 | static const BIGNUM _bignum_nist_p_384_sqr = { | - | ||||||||||||||||||||||||
603 | (unsigned long *)_nist_p_384_sqr, | - | ||||||||||||||||||||||||
604 | sizeof(_nist_p_384_sqr) / sizeof(_nist_p_384_sqr[0]), | - | ||||||||||||||||||||||||
605 | sizeof(_nist_p_384_sqr) / sizeof(_nist_p_384_sqr[0]), | - | ||||||||||||||||||||||||
606 | 0, | - | ||||||||||||||||||||||||
607 | 0x02 | - | ||||||||||||||||||||||||
608 | }; | - | ||||||||||||||||||||||||
609 | - | |||||||||||||||||||||||||
610 | field = &_bignum_nist_p_384; | - | ||||||||||||||||||||||||
611 | - | |||||||||||||||||||||||||
612 | if (((
| 0 | ||||||||||||||||||||||||
613 | return never executed: BN_nnmod(r, a, field, ctx);return BN_nnmod(r, a, field, ctx); never executed: return BN_nnmod(r, a, field, ctx); | 0 | ||||||||||||||||||||||||
614 | - | |||||||||||||||||||||||||
615 | i = BN_ucmp(field, a); | - | ||||||||||||||||||||||||
616 | if (i == 0
| 0 | ||||||||||||||||||||||||
617 | (BN_set_word((r),0)); | - | ||||||||||||||||||||||||
618 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
619 | } else if (i > 0
| 0 | ||||||||||||||||||||||||
620 | return never executed: (return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) );
never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
621 | ((void *)0) never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
622 | ); never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
623 | - | |||||||||||||||||||||||||
624 | if (r != a
| 0 | ||||||||||||||||||||||||
625 | if (!((((
| 0 | ||||||||||||||||||||||||
626 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
627 | r_d = r->d; | - | ||||||||||||||||||||||||
628 | nist_cp_bn(r_d, a_d, (384+64 -1)/64); | - | ||||||||||||||||||||||||
629 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||
630 | r_d = a_d; never executed: r_d = a_d; | 0 | ||||||||||||||||||||||||
631 | - | |||||||||||||||||||||||||
632 | nist_cp_bn_0(buf.bn, a_d + (384+64 -1)/64, | - | ||||||||||||||||||||||||
633 | top - (384+64 -1)/64, (384+64 -1)/64); | - | ||||||||||||||||||||||||
634 | - | |||||||||||||||||||||||||
635 | - | |||||||||||||||||||||||||
636 | { | - | ||||||||||||||||||||||||
637 | long acc; | - | ||||||||||||||||||||||||
638 | unsigned int *rp = (unsigned int *)r_d; | - | ||||||||||||||||||||||||
639 | const unsigned int *bp = (const unsigned int *)buf.ui; | - | ||||||||||||||||||||||||
640 | - | |||||||||||||||||||||||||
641 | acc = rp[0]; | - | ||||||||||||||||||||||||
642 | acc += bp[12 - 12]; | - | ||||||||||||||||||||||||
643 | acc += bp[21 - 12]; | - | ||||||||||||||||||||||||
644 | acc += bp[20 - 12]; | - | ||||||||||||||||||||||||
645 | acc -= bp[23 - 12]; | - | ||||||||||||||||||||||||
646 | rp[0] = (unsigned int)acc; | - | ||||||||||||||||||||||||
647 | acc >>= 32; | - | ||||||||||||||||||||||||
648 | - | |||||||||||||||||||||||||
649 | acc += rp[1]; | - | ||||||||||||||||||||||||
650 | acc += bp[13 - 12]; | - | ||||||||||||||||||||||||
651 | acc += bp[22 - 12]; | - | ||||||||||||||||||||||||
652 | acc += bp[23 - 12]; | - | ||||||||||||||||||||||||
653 | acc -= bp[12 - 12]; | - | ||||||||||||||||||||||||
654 | acc -= bp[20 - 12]; | - | ||||||||||||||||||||||||
655 | rp[1] = (unsigned int)acc; | - | ||||||||||||||||||||||||
656 | acc >>= 32; | - | ||||||||||||||||||||||||
657 | - | |||||||||||||||||||||||||
658 | acc += rp[2]; | - | ||||||||||||||||||||||||
659 | acc += bp[14 - 12]; | - | ||||||||||||||||||||||||
660 | acc += bp[23 - 12]; | - | ||||||||||||||||||||||||
661 | acc -= bp[13 - 12]; | - | ||||||||||||||||||||||||
662 | acc -= bp[21 - 12]; | - | ||||||||||||||||||||||||
663 | rp[2] = (unsigned int)acc; | - | ||||||||||||||||||||||||
664 | acc >>= 32; | - | ||||||||||||||||||||||||
665 | - | |||||||||||||||||||||||||
666 | acc += rp[3]; | - | ||||||||||||||||||||||||
667 | acc += bp[15 - 12]; | - | ||||||||||||||||||||||||
668 | acc += bp[12 - 12]; | - | ||||||||||||||||||||||||
669 | acc += bp[20 - 12]; | - | ||||||||||||||||||||||||
670 | acc += bp[21 - 12]; | - | ||||||||||||||||||||||||
671 | acc -= bp[14 - 12]; | - | ||||||||||||||||||||||||
672 | acc -= bp[22 - 12]; | - | ||||||||||||||||||||||||
673 | acc -= bp[23 - 12]; | - | ||||||||||||||||||||||||
674 | rp[3] = (unsigned int)acc; | - | ||||||||||||||||||||||||
675 | acc >>= 32; | - | ||||||||||||||||||||||||
676 | - | |||||||||||||||||||||||||
677 | acc += rp[4]; | - | ||||||||||||||||||||||||
678 | acc += bp[21 - 12]; | - | ||||||||||||||||||||||||
679 | acc += bp[21 - 12]; | - | ||||||||||||||||||||||||
680 | acc += bp[16 - 12]; | - | ||||||||||||||||||||||||
681 | acc += bp[13 - 12]; | - | ||||||||||||||||||||||||
682 | acc += bp[12 - 12]; | - | ||||||||||||||||||||||||
683 | acc += bp[20 - 12]; | - | ||||||||||||||||||||||||
684 | acc += bp[22 - 12]; | - | ||||||||||||||||||||||||
685 | acc -= bp[15 - 12]; | - | ||||||||||||||||||||||||
686 | acc -= bp[23 - 12]; | - | ||||||||||||||||||||||||
687 | acc -= bp[23 - 12]; | - | ||||||||||||||||||||||||
688 | rp[4] = (unsigned int)acc; | - | ||||||||||||||||||||||||
689 | acc >>= 32; | - | ||||||||||||||||||||||||
690 | - | |||||||||||||||||||||||||
691 | acc += rp[5]; | - | ||||||||||||||||||||||||
692 | acc += bp[22 - 12]; | - | ||||||||||||||||||||||||
693 | acc += bp[22 - 12]; | - | ||||||||||||||||||||||||
694 | acc += bp[17 - 12]; | - | ||||||||||||||||||||||||
695 | acc += bp[14 - 12]; | - | ||||||||||||||||||||||||
696 | acc += bp[13 - 12]; | - | ||||||||||||||||||||||||
697 | acc += bp[21 - 12]; | - | ||||||||||||||||||||||||
698 | acc += bp[23 - 12]; | - | ||||||||||||||||||||||||
699 | acc -= bp[16 - 12]; | - | ||||||||||||||||||||||||
700 | rp[5] = (unsigned int)acc; | - | ||||||||||||||||||||||||
701 | acc >>= 32; | - | ||||||||||||||||||||||||
702 | - | |||||||||||||||||||||||||
703 | acc += rp[6]; | - | ||||||||||||||||||||||||
704 | acc += bp[23 - 12]; | - | ||||||||||||||||||||||||
705 | acc += bp[23 - 12]; | - | ||||||||||||||||||||||||
706 | acc += bp[18 - 12]; | - | ||||||||||||||||||||||||
707 | acc += bp[15 - 12]; | - | ||||||||||||||||||||||||
708 | acc += bp[14 - 12]; | - | ||||||||||||||||||||||||
709 | acc += bp[22 - 12]; | - | ||||||||||||||||||||||||
710 | acc -= bp[17 - 12]; | - | ||||||||||||||||||||||||
711 | rp[6] = (unsigned int)acc; | - | ||||||||||||||||||||||||
712 | acc >>= 32; | - | ||||||||||||||||||||||||
713 | - | |||||||||||||||||||||||||
714 | acc += rp[7]; | - | ||||||||||||||||||||||||
715 | acc += bp[19 - 12]; | - | ||||||||||||||||||||||||
716 | acc += bp[16 - 12]; | - | ||||||||||||||||||||||||
717 | acc += bp[15 - 12]; | - | ||||||||||||||||||||||||
718 | acc += bp[23 - 12]; | - | ||||||||||||||||||||||||
719 | acc -= bp[18 - 12]; | - | ||||||||||||||||||||||||
720 | rp[7] = (unsigned int)acc; | - | ||||||||||||||||||||||||
721 | acc >>= 32; | - | ||||||||||||||||||||||||
722 | - | |||||||||||||||||||||||||
723 | acc += rp[8]; | - | ||||||||||||||||||||||||
724 | acc += bp[20 - 12]; | - | ||||||||||||||||||||||||
725 | acc += bp[17 - 12]; | - | ||||||||||||||||||||||||
726 | acc += bp[16 - 12]; | - | ||||||||||||||||||||||||
727 | acc -= bp[19 - 12]; | - | ||||||||||||||||||||||||
728 | rp[8] = (unsigned int)acc; | - | ||||||||||||||||||||||||
729 | acc >>= 32; | - | ||||||||||||||||||||||||
730 | - | |||||||||||||||||||||||||
731 | acc += rp[9]; | - | ||||||||||||||||||||||||
732 | acc += bp[21 - 12]; | - | ||||||||||||||||||||||||
733 | acc += bp[18 - 12]; | - | ||||||||||||||||||||||||
734 | acc += bp[17 - 12]; | - | ||||||||||||||||||||||||
735 | acc -= bp[20 - 12]; | - | ||||||||||||||||||||||||
736 | rp[9] = (unsigned int)acc; | - | ||||||||||||||||||||||||
737 | acc >>= 32; | - | ||||||||||||||||||||||||
738 | - | |||||||||||||||||||||||||
739 | acc += rp[10]; | - | ||||||||||||||||||||||||
740 | acc += bp[22 - 12]; | - | ||||||||||||||||||||||||
741 | acc += bp[19 - 12]; | - | ||||||||||||||||||||||||
742 | acc += bp[18 - 12]; | - | ||||||||||||||||||||||||
743 | acc -= bp[21 - 12]; | - | ||||||||||||||||||||||||
744 | rp[10] = (unsigned int)acc; | - | ||||||||||||||||||||||||
745 | acc >>= 32; | - | ||||||||||||||||||||||||
746 | - | |||||||||||||||||||||||||
747 | acc += rp[11]; | - | ||||||||||||||||||||||||
748 | acc += bp[23 - 12]; | - | ||||||||||||||||||||||||
749 | acc += bp[20 - 12]; | - | ||||||||||||||||||||||||
750 | acc += bp[19 - 12]; | - | ||||||||||||||||||||||||
751 | acc -= bp[22 - 12]; | - | ||||||||||||||||||||||||
752 | rp[11] = (unsigned int)acc; | - | ||||||||||||||||||||||||
753 | - | |||||||||||||||||||||||||
754 | carry = (int)(acc >> 32); | - | ||||||||||||||||||||||||
755 | } | - | ||||||||||||||||||||||||
756 | u.f = bn_sub_words; | - | ||||||||||||||||||||||||
757 | if (carry > 0
| 0 | ||||||||||||||||||||||||
758 | carry = (int)bn_sub_words(r_d, r_d, _nist_p_384[carry - 1], never executed: carry = (int)bn_sub_words(r_d, r_d, _nist_p_384[carry - 1], (384+64 -1)/64); | 0 | ||||||||||||||||||||||||
759 | (384+64 -1)/64); never executed: carry = (int)bn_sub_words(r_d, r_d, _nist_p_384[carry - 1], (384+64 -1)/64); | 0 | ||||||||||||||||||||||||
760 | else if (carry < 0
| 0 | ||||||||||||||||||||||||
761 | carry = (int)bn_add_words(r_d, r_d, _nist_p_384[-carry - 1], | - | ||||||||||||||||||||||||
762 | (384+64 -1)/64); | - | ||||||||||||||||||||||||
763 | mask = 0 - (uintptr_t)carry; | - | ||||||||||||||||||||||||
764 | u.p = ((uintptr_t)bn_sub_words & mask) | | - | ||||||||||||||||||||||||
765 | ((uintptr_t)bn_add_words & ~mask); | - | ||||||||||||||||||||||||
766 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||
767 | carry = 1; never executed: carry = 1; | 0 | ||||||||||||||||||||||||
768 | - | |||||||||||||||||||||||||
769 | mask = 0 - (uintptr_t)(*u.f)(c_d, r_d, _nist_p_384[0], (384+64 -1)/64); | - | ||||||||||||||||||||||||
770 | mask &= 0 - (uintptr_t)carry; | - | ||||||||||||||||||||||||
771 | res = c_d; | - | ||||||||||||||||||||||||
772 | res = (unsigned long *)(((uintptr_t)res & ~mask) | ((uintptr_t)r_d & mask)); | - | ||||||||||||||||||||||||
773 | nist_cp_bn(r_d, res, (384+64 -1)/64); | - | ||||||||||||||||||||||||
774 | r->top = (384+64 -1)/64; | - | ||||||||||||||||||||||||
775 | { unsigned long *ftl; int tmp_top = (r)->top; if (tmp_top > 0
never executed: (r)->top = tmp_top; }break; never executed: ; };end of block | 0 | ||||||||||||||||||||||||
776 | - | |||||||||||||||||||||||||
777 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
778 | } | - | ||||||||||||||||||||||||
779 | - | |||||||||||||||||||||||||
780 | - | |||||||||||||||||||||||||
781 | - | |||||||||||||||||||||||||
782 | - | |||||||||||||||||||||||||
783 | - | |||||||||||||||||||||||||
784 | int | - | ||||||||||||||||||||||||
785 | BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, BN_CTX *ctx) | - | ||||||||||||||||||||||||
786 | { | - | ||||||||||||||||||||||||
787 | int top = a->top, i; | - | ||||||||||||||||||||||||
788 | unsigned long *r_d, *a_d = a->d, t_d[(521+64 -1)/64], val, tmp, *res; | - | ||||||||||||||||||||||||
789 | uintptr_t mask; | - | ||||||||||||||||||||||||
790 | static const BIGNUM _bignum_nist_p_521_sqr = { | - | ||||||||||||||||||||||||
791 | (unsigned long *)_nist_p_521_sqr, | - | ||||||||||||||||||||||||
792 | sizeof(_nist_p_521_sqr) / sizeof(_nist_p_521_sqr[0]), | - | ||||||||||||||||||||||||
793 | sizeof(_nist_p_521_sqr) / sizeof(_nist_p_521_sqr[0]), | - | ||||||||||||||||||||||||
794 | 0, | - | ||||||||||||||||||||||||
795 | 0x02 | - | ||||||||||||||||||||||||
796 | }; | - | ||||||||||||||||||||||||
797 | - | |||||||||||||||||||||||||
798 | field = &_bignum_nist_p_521; | - | ||||||||||||||||||||||||
799 | - | |||||||||||||||||||||||||
800 | if (((
| 0 | ||||||||||||||||||||||||
801 | return never executed: BN_nnmod(r, a, field, ctx);return BN_nnmod(r, a, field, ctx); never executed: return BN_nnmod(r, a, field, ctx); | 0 | ||||||||||||||||||||||||
802 | - | |||||||||||||||||||||||||
803 | i = BN_ucmp(field, a); | - | ||||||||||||||||||||||||
804 | if (i == 0
| 0 | ||||||||||||||||||||||||
805 | (BN_set_word((r),0)); | - | ||||||||||||||||||||||||
806 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
807 | } else if (i > 0
| 0 | ||||||||||||||||||||||||
808 | return never executed: (return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) );
never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
809 | ((void *)0) never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
810 | ); never executed: return (r == a) ? 1 : (BN_copy(r, a) != ((void *)0) ); | 0 | ||||||||||||||||||||||||
811 | - | |||||||||||||||||||||||||
812 | if (r != a
| 0 | ||||||||||||||||||||||||
813 | if (!((((
| 0 | ||||||||||||||||||||||||
814 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
815 | r_d = r->d; | - | ||||||||||||||||||||||||
816 | nist_cp_bn(r_d, a_d, (521+64 -1)/64); | - | ||||||||||||||||||||||||
817 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||
818 | r_d = a_d; never executed: r_d = a_d; | 0 | ||||||||||||||||||||||||
819 | - | |||||||||||||||||||||||||
820 | - | |||||||||||||||||||||||||
821 | nist_cp_bn_0(t_d, a_d + ((521+64 -1)/64 - 1), | - | ||||||||||||||||||||||||
822 | top - ((521+64 -1)/64 - 1), (521+64 -1)/64); | - | ||||||||||||||||||||||||
823 | - | |||||||||||||||||||||||||
824 | for (val = t_d[0], i = 0; i < (521+64 -1)/64 - 1
| 0 | ||||||||||||||||||||||||
825 | tmp = val >> (521%64); | - | ||||||||||||||||||||||||
826 | val = t_d[i + 1]; | - | ||||||||||||||||||||||||
827 | t_d[i] = (tmp | val << (64 -(521%64))) & (0xffffffffffffffffL); | - | ||||||||||||||||||||||||
828 | } never executed: end of block | 0 | ||||||||||||||||||||||||
829 | t_d[i] = val >> (521%64); | - | ||||||||||||||||||||||||
830 | - | |||||||||||||||||||||||||
831 | r_d[i] &= ((unsigned long)(0xffffffffffffffffL)>>(64 -(521%64))); | - | ||||||||||||||||||||||||
832 | - | |||||||||||||||||||||||||
833 | bn_add_words(r_d, r_d, t_d, (521+64 -1)/64); | - | ||||||||||||||||||||||||
834 | mask = 0 - (uintptr_t)bn_sub_words(t_d, r_d, _nist_p_521, | - | ||||||||||||||||||||||||
835 | (521+64 -1)/64); | - | ||||||||||||||||||||||||
836 | res = t_d; | - | ||||||||||||||||||||||||
837 | res = (unsigned long *)(((uintptr_t)res & ~mask) | ((uintptr_t)r_d & mask)); | - | ||||||||||||||||||||||||
838 | nist_cp_bn(r_d, res, (521+64 -1)/64); | - | ||||||||||||||||||||||||
839 | r->top = (521+64 -1)/64; | - | ||||||||||||||||||||||||
840 | { unsigned long *ftl; int tmp_top = (r)->top; if (tmp_top > 0
never executed: (r)->top = tmp_top; }break; never executed: ; };end of block | 0 | ||||||||||||||||||||||||
841 | - | |||||||||||||||||||||||||
842 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
843 | } | - | ||||||||||||||||||||||||
Switch to Source code | Preprocessed file |