Lines Matching refs:bn
70 BIGNUM *bn = OPENSSL_malloc(sizeof(BIGNUM)); in BN_new() local
72 if (bn == NULL) { in BN_new()
77 OPENSSL_memset(bn, 0, sizeof(BIGNUM)); in BN_new()
78 bn->flags = BN_FLG_MALLOCED; in BN_new()
80 return bn; in BN_new()
83 void BN_init(BIGNUM *bn) { in BN_init() argument
84 OPENSSL_memset(bn, 0, sizeof(BIGNUM)); in BN_init()
87 void BN_free(BIGNUM *bn) { in BN_free() argument
88 if (bn == NULL) { in BN_free()
92 if ((bn->flags & BN_FLG_STATIC_DATA) == 0) { in BN_free()
93 OPENSSL_free(bn->d); in BN_free()
96 if (bn->flags & BN_FLG_MALLOCED) { in BN_free()
97 OPENSSL_free(bn); in BN_free()
99 bn->d = NULL; in BN_free()
103 void BN_clear_free(BIGNUM *bn) { in BN_clear_free() argument
104 BN_free(bn); in BN_clear_free()
143 void BN_clear(BIGNUM *bn) { in BN_clear() argument
144 if (bn->d != NULL) { in BN_clear()
145 OPENSSL_memset(bn->d, 0, bn->dmax * sizeof(bn->d[0])); in BN_clear()
148 bn->width = 0; in BN_clear()
149 bn->neg = 0; in BN_clear()
216 unsigned BN_num_bits(const BIGNUM *bn) { in BN_num_bits() argument
217 const int width = bn_minimal_width(bn); in BN_num_bits()
222 return (width - 1) * BN_BITS2 + BN_num_bits_word(bn->d[width - 1]); in BN_num_bits()
225 unsigned BN_num_bytes(const BIGNUM *bn) { in BN_num_bytes() argument
226 return (BN_num_bits(bn) + 7) / 8; in BN_num_bytes()
229 void BN_zero(BIGNUM *bn) { in BN_zero() argument
230 bn->width = bn->neg = 0; in BN_zero()
233 int BN_one(BIGNUM *bn) { in BN_one() argument
234 return BN_set_word(bn, 1); in BN_one()
237 int BN_set_word(BIGNUM *bn, BN_ULONG value) { in BN_set_word() argument
239 BN_zero(bn); in BN_set_word()
243 if (!bn_wexpand(bn, 1)) { in BN_set_word()
247 bn->neg = 0; in BN_set_word()
248 bn->d[0] = value; in BN_set_word()
249 bn->width = 1; in BN_set_word()
253 int BN_set_u64(BIGNUM *bn, uint64_t value) { in BN_set_u64() argument
255 return BN_set_word(bn, value); in BN_set_u64()
258 return BN_set_word(bn, (BN_ULONG)value); in BN_set_u64()
261 if (!bn_wexpand(bn, 2)) { in BN_set_u64()
265 bn->neg = 0; in BN_set_u64()
266 bn->d[0] = (BN_ULONG)value; in BN_set_u64()
267 bn->d[1] = (BN_ULONG)(value >> 32); in BN_set_u64()
268 bn->width = 2; in BN_set_u64()
275 int bn_set_words(BIGNUM *bn, const BN_ULONG *words, size_t num) { in bn_set_words() argument
276 if (!bn_wexpand(bn, num)) { in bn_set_words()
279 OPENSSL_memmove(bn->d, words, num * sizeof(BN_ULONG)); in bn_set_words()
281 bn->width = (int)num; in bn_set_words()
282 bn->neg = 0; in bn_set_words()
286 void bn_set_static_words(BIGNUM *bn, const BN_ULONG *words, size_t num) { in bn_set_static_words() argument
287 if ((bn->flags & BN_FLG_STATIC_DATA) == 0) { in bn_set_static_words()
288 OPENSSL_free(bn->d); in bn_set_static_words()
290 bn->d = (BN_ULONG *)words; in bn_set_static_words()
292 bn->width = num; in bn_set_static_words()
293 bn->dmax = num; in bn_set_static_words()
294 bn->neg = 0; in bn_set_static_words()
295 bn->flags |= BN_FLG_STATIC_DATA; in bn_set_static_words()
298 int bn_fits_in_words(const BIGNUM *bn, size_t num) { in bn_fits_in_words() argument
301 for (size_t i = num; i < (size_t)bn->width; i++) { in bn_fits_in_words()
302 mask |= bn->d[i]; in bn_fits_in_words()
307 int bn_copy_words(BN_ULONG *out, size_t num, const BIGNUM *bn) { in bn_copy_words() argument
308 if (bn->neg) { in bn_copy_words()
313 size_t width = (size_t)bn->width; in bn_copy_words()
315 if (!bn_fits_in_words(bn, num)) { in bn_copy_words()
323 OPENSSL_memcpy(out, bn->d, sizeof(BN_ULONG) * width); in bn_copy_words()
327 int BN_is_negative(const BIGNUM *bn) { in BN_is_negative() argument
328 return bn->neg != 0; in BN_is_negative()
331 void BN_set_negative(BIGNUM *bn, int sign) { in BN_set_negative() argument
332 if (sign && !BN_is_zero(bn)) { in BN_set_negative()
333 bn->neg = 1; in BN_set_negative()
335 bn->neg = 0; in BN_set_negative()
339 int bn_wexpand(BIGNUM *bn, size_t words) { in bn_wexpand() argument
342 if (words <= (size_t)bn->dmax) { in bn_wexpand()
351 if (bn->flags & BN_FLG_STATIC_DATA) { in bn_wexpand()
362 OPENSSL_memcpy(a, bn->d, sizeof(BN_ULONG) * bn->width); in bn_wexpand()
364 OPENSSL_free(bn->d); in bn_wexpand()
365 bn->d = a; in bn_wexpand()
366 bn->dmax = (int)words; in bn_wexpand()
371 int bn_expand(BIGNUM *bn, size_t bits) { in bn_expand() argument
376 return bn_wexpand(bn, (bits+BN_BITS2-1)/BN_BITS2); in bn_expand()
379 int bn_resize_words(BIGNUM *bn, size_t words) { in bn_resize_words() argument
392 if (value_barrier_w((size_t)bn->width == words)) { in bn_resize_words()
397 if ((size_t)bn->width <= words) { in bn_resize_words()
398 if (!bn_wexpand(bn, words)) { in bn_resize_words()
401 OPENSSL_memset(bn->d + bn->width, 0, in bn_resize_words()
402 (words - bn->width) * sizeof(BN_ULONG)); in bn_resize_words()
403 bn->width = words; in bn_resize_words()
408 if (!bn_fits_in_words(bn, words)) { in bn_resize_words()
412 bn->width = words; in bn_resize_words()
425 int bn_minimal_width(const BIGNUM *bn) { in bn_minimal_width() argument
426 int ret = bn->width; in bn_minimal_width()
427 while (ret > 0 && bn->d[ret - 1] == 0) { in bn_minimal_width()
433 void bn_set_minimal_width(BIGNUM *bn) { in bn_set_minimal_width() argument
434 bn->width = bn_minimal_width(bn); in bn_set_minimal_width()
435 if (bn->width == 0) { in bn_set_minimal_width()
436 bn->neg = 0; in bn_set_minimal_width()