File indexing completed on 2026-05-18 08:30:58
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef OPENSSL_BN_H
0012 #define OPENSSL_BN_H
0013 #pragma once
0014
0015 #include <openssl/macros.h>
0016 #ifndef OPENSSL_NO_DEPRECATED_3_0
0017 #define HEADER_BN_H
0018 #endif
0019
0020 #include <openssl/e_os2.h>
0021 #ifndef OPENSSL_NO_STDIO
0022 #include <stdio.h>
0023 #endif
0024 #include <openssl/opensslconf.h>
0025 #include <openssl/types.h>
0026 #include <openssl/crypto.h>
0027 #include <openssl/bnerr.h>
0028
0029 #ifdef __cplusplus
0030 extern "C" {
0031 #endif
0032
0033
0034
0035
0036 #ifdef SIXTY_FOUR_BIT_LONG
0037 #define BN_ULONG unsigned long
0038 #define BN_BYTES 8
0039 #endif
0040
0041
0042
0043
0044 #ifdef SIXTY_FOUR_BIT
0045 #define BN_ULONG unsigned long long
0046 #define BN_BYTES 8
0047 #endif
0048
0049 #ifdef THIRTY_TWO_BIT
0050 #define BN_ULONG unsigned int
0051 #define BN_BYTES 4
0052 #endif
0053
0054 #define BN_BITS2 (BN_BYTES * 8)
0055 #define BN_BITS (BN_BITS2 * 2)
0056 #define BN_TBIT ((BN_ULONG)1 << (BN_BITS2 - 1))
0057
0058 #define BN_FLG_MALLOCED 0x01
0059 #define BN_FLG_STATIC_DATA 0x02
0060
0061
0062
0063
0064
0065
0066
0067 #define BN_FLG_CONSTTIME 0x04
0068 #define BN_FLG_SECURE 0x08
0069
0070 #ifndef OPENSSL_NO_DEPRECATED_0_9_8
0071
0072 #define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME
0073 #define BN_FLG_FREE 0x8000
0074 #endif
0075
0076 void BN_set_flags(BIGNUM *b, int n);
0077 int BN_get_flags(const BIGNUM *b, int n);
0078
0079
0080 #define BN_RAND_TOP_ANY -1
0081 #define BN_RAND_TOP_ONE 0
0082 #define BN_RAND_TOP_TWO 1
0083
0084
0085 #define BN_RAND_BOTTOM_ANY 0
0086 #define BN_RAND_BOTTOM_ODD 1
0087
0088
0089
0090
0091
0092
0093
0094 void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags);
0095
0096
0097 int BN_GENCB_call(BN_GENCB *cb, int a, int b);
0098
0099 BN_GENCB *BN_GENCB_new(void);
0100 void BN_GENCB_free(BN_GENCB *cb);
0101
0102
0103 void BN_GENCB_set_old(BN_GENCB *gencb, void (*callback)(int, int, void *),
0104 void *cb_arg);
0105
0106
0107 void BN_GENCB_set(BN_GENCB *gencb, int (*callback)(int, int, BN_GENCB *),
0108 void *cb_arg);
0109
0110 void *BN_GENCB_get_arg(BN_GENCB *cb);
0111
0112 #ifndef OPENSSL_NO_DEPRECATED_3_0
0113 #define BN_prime_checks 0
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179 #define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : (b) >= 1345 ? 4 \
0180 : (b) >= 476 ? 5 \
0181 : (b) >= 400 ? 6 \
0182 : (b) >= 347 ? 7 \
0183 : (b) >= 308 ? 8 \
0184 : (b) >= 55 ? 27 \
0185 : 34)
0186 #endif
0187
0188 #define BN_num_bytes(a) ((BN_num_bits(a) + 7) / 8)
0189
0190 int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w);
0191 int BN_is_zero(const BIGNUM *a);
0192 int BN_is_one(const BIGNUM *a);
0193 int BN_is_word(const BIGNUM *a, const BN_ULONG w);
0194 int BN_is_odd(const BIGNUM *a);
0195
0196 #define BN_one(a) (BN_set_word((a), 1))
0197
0198 void BN_zero_ex(BIGNUM *a);
0199
0200 #if OPENSSL_API_LEVEL > 908
0201 #define BN_zero(a) BN_zero_ex(a)
0202 #else
0203 #define BN_zero(a) (BN_set_word((a), 0))
0204 #endif
0205
0206 const BIGNUM *BN_value_one(void);
0207 char *BN_options(void);
0208 BN_CTX *BN_CTX_new_ex(OSSL_LIB_CTX *ctx);
0209 BN_CTX *BN_CTX_new(void);
0210 BN_CTX *BN_CTX_secure_new_ex(OSSL_LIB_CTX *ctx);
0211 BN_CTX *BN_CTX_secure_new(void);
0212 void BN_CTX_free(BN_CTX *c);
0213 void BN_CTX_start(BN_CTX *ctx);
0214 BIGNUM *BN_CTX_get(BN_CTX *ctx);
0215 void BN_CTX_end(BN_CTX *ctx);
0216 int BN_rand_ex(BIGNUM *rnd, int bits, int top, int bottom,
0217 unsigned int strength, BN_CTX *ctx);
0218 int BN_rand(BIGNUM *rnd, int bits, int top, int bottom);
0219 int BN_priv_rand_ex(BIGNUM *rnd, int bits, int top, int bottom,
0220 unsigned int strength, BN_CTX *ctx);
0221 int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom);
0222 int BN_rand_range_ex(BIGNUM *r, const BIGNUM *range, unsigned int strength,
0223 BN_CTX *ctx);
0224 int BN_rand_range(BIGNUM *rnd, const BIGNUM *range);
0225 int BN_priv_rand_range_ex(BIGNUM *r, const BIGNUM *range,
0226 unsigned int strength, BN_CTX *ctx);
0227 int BN_priv_rand_range(BIGNUM *rnd, const BIGNUM *range);
0228 #ifndef OPENSSL_NO_DEPRECATED_3_0
0229 OSSL_DEPRECATEDIN_3_0
0230 int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom);
0231 OSSL_DEPRECATEDIN_3_0
0232 int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range);
0233 #endif
0234 int BN_num_bits(const BIGNUM *a);
0235 int BN_num_bits_word(BN_ULONG l);
0236 int BN_security_bits(int L, int N);
0237 BIGNUM *BN_new(void);
0238 BIGNUM *BN_secure_new(void);
0239 void BN_clear_free(BIGNUM *a);
0240 BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b);
0241 void BN_swap(BIGNUM *a, BIGNUM *b);
0242 BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret);
0243 BIGNUM *BN_signed_bin2bn(const unsigned char *s, int len, BIGNUM *ret);
0244 int BN_bn2bin(const BIGNUM *a, unsigned char *to);
0245 int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen);
0246 int BN_signed_bn2bin(const BIGNUM *a, unsigned char *to, int tolen);
0247 BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret);
0248 BIGNUM *BN_signed_lebin2bn(const unsigned char *s, int len, BIGNUM *ret);
0249 int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen);
0250 int BN_signed_bn2lebin(const BIGNUM *a, unsigned char *to, int tolen);
0251 BIGNUM *BN_native2bn(const unsigned char *s, int len, BIGNUM *ret);
0252 BIGNUM *BN_signed_native2bn(const unsigned char *s, int len, BIGNUM *ret);
0253 int BN_bn2nativepad(const BIGNUM *a, unsigned char *to, int tolen);
0254 int BN_signed_bn2native(const BIGNUM *a, unsigned char *to, int tolen);
0255 BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret);
0256 int BN_bn2mpi(const BIGNUM *a, unsigned char *to);
0257 int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
0258 int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
0259 int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
0260 int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
0261 int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
0262 int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx);
0263
0264
0265
0266
0267 void BN_set_negative(BIGNUM *b, int n);
0268
0269
0270
0271
0272 int BN_is_negative(const BIGNUM *b);
0273
0274 int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
0275 BN_CTX *ctx);
0276 #define BN_mod(rem, m, d, ctx) BN_div(NULL, (rem), (m), (d), (ctx))
0277 int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx);
0278 int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
0279 BN_CTX *ctx);
0280 int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
0281 const BIGNUM *m);
0282 int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
0283 BN_CTX *ctx);
0284 int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
0285 const BIGNUM *m);
0286 int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
0287 BN_CTX *ctx);
0288 int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
0289 int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
0290 int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m);
0291 int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m,
0292 BN_CTX *ctx);
0293 int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m);
0294
0295 BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w);
0296 BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w);
0297 int BN_mul_word(BIGNUM *a, BN_ULONG w);
0298 int BN_add_word(BIGNUM *a, BN_ULONG w);
0299 int BN_sub_word(BIGNUM *a, BN_ULONG w);
0300 int BN_set_word(BIGNUM *a, BN_ULONG w);
0301 BN_ULONG BN_get_word(const BIGNUM *a);
0302
0303 int BN_cmp(const BIGNUM *a, const BIGNUM *b);
0304 void BN_free(BIGNUM *a);
0305 int BN_is_bit_set(const BIGNUM *a, int n);
0306 int BN_lshift(BIGNUM *r, const BIGNUM *a, int n);
0307 int BN_lshift1(BIGNUM *r, const BIGNUM *a);
0308 int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
0309
0310 int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
0311 const BIGNUM *m, BN_CTX *ctx);
0312 int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
0313 const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
0314 int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
0315 const BIGNUM *m, BN_CTX *ctx,
0316 BN_MONT_CTX *in_mont);
0317 int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p,
0318 const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
0319 int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1,
0320 const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m,
0321 BN_CTX *ctx, BN_MONT_CTX *m_ctx);
0322 int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
0323 const BIGNUM *m, BN_CTX *ctx);
0324 int BN_mod_exp_mont_consttime_x2(BIGNUM *rr1, const BIGNUM *a1, const BIGNUM *p1,
0325 const BIGNUM *m1, BN_MONT_CTX *in_mont1,
0326 BIGNUM *rr2, const BIGNUM *a2, const BIGNUM *p2,
0327 const BIGNUM *m2, BN_MONT_CTX *in_mont2,
0328 BN_CTX *ctx);
0329
0330 int BN_mask_bits(BIGNUM *a, int n);
0331 #ifndef OPENSSL_NO_STDIO
0332 int BN_print_fp(FILE *fp, const BIGNUM *a);
0333 #endif
0334 int BN_print(BIO *bio, const BIGNUM *a);
0335 int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx);
0336 int BN_rshift(BIGNUM *r, const BIGNUM *a, int n);
0337 int BN_rshift1(BIGNUM *r, const BIGNUM *a);
0338 void BN_clear(BIGNUM *a);
0339 BIGNUM *BN_dup(const BIGNUM *a);
0340 int BN_ucmp(const BIGNUM *a, const BIGNUM *b);
0341 int BN_set_bit(BIGNUM *a, int n);
0342 int BN_clear_bit(BIGNUM *a, int n);
0343 char *BN_bn2hex(const BIGNUM *a);
0344 char *BN_bn2dec(const BIGNUM *a);
0345 int BN_hex2bn(BIGNUM **a, const char *str);
0346 int BN_dec2bn(BIGNUM **a, const char *str);
0347 int BN_asc2bn(BIGNUM **a, const char *str);
0348 int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
0349 int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
0350
0351
0352 int BN_are_coprime(BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
0353 BIGNUM *BN_mod_inverse(BIGNUM *ret,
0354 const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx);
0355 BIGNUM *BN_mod_sqrt(BIGNUM *ret,
0356 const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx);
0357
0358 void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords);
0359
0360
0361 #ifndef OPENSSL_NO_DEPRECATED_0_9_8
0362 OSSL_DEPRECATEDIN_0_9_8
0363 BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe,
0364 const BIGNUM *add, const BIGNUM *rem,
0365 void (*callback)(int, int, void *),
0366 void *cb_arg);
0367 OSSL_DEPRECATEDIN_0_9_8
0368 int BN_is_prime(const BIGNUM *p, int nchecks,
0369 void (*callback)(int, int, void *),
0370 BN_CTX *ctx, void *cb_arg);
0371 OSSL_DEPRECATEDIN_0_9_8
0372 int BN_is_prime_fasttest(const BIGNUM *p, int nchecks,
0373 void (*callback)(int, int, void *),
0374 BN_CTX *ctx, void *cb_arg,
0375 int do_trial_division);
0376 #endif
0377 #ifndef OPENSSL_NO_DEPRECATED_3_0
0378 OSSL_DEPRECATEDIN_3_0
0379 int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb);
0380 OSSL_DEPRECATEDIN_3_0
0381 int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx,
0382 int do_trial_division, BN_GENCB *cb);
0383 #endif
0384
0385 int BN_generate_prime_ex2(BIGNUM *ret, int bits, int safe,
0386 const BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb,
0387 BN_CTX *ctx);
0388 int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add,
0389 const BIGNUM *rem, BN_GENCB *cb);
0390 int BN_check_prime(const BIGNUM *p, BN_CTX *ctx, BN_GENCB *cb);
0391
0392 #ifndef OPENSSL_NO_DEPRECATED_3_0
0393 OSSL_DEPRECATEDIN_3_0
0394 int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx);
0395
0396 OSSL_DEPRECATEDIN_3_0
0397 int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
0398 const BIGNUM *Xp, const BIGNUM *Xp1,
0399 const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx,
0400 BN_GENCB *cb);
0401 OSSL_DEPRECATEDIN_3_0
0402 int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1,
0403 BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e,
0404 BN_CTX *ctx, BN_GENCB *cb);
0405 #endif
0406
0407 BN_MONT_CTX *BN_MONT_CTX_new(void);
0408 int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
0409 BN_MONT_CTX *mont, BN_CTX *ctx);
0410 int BN_to_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont,
0411 BN_CTX *ctx);
0412 int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont,
0413 BN_CTX *ctx);
0414 void BN_MONT_CTX_free(BN_MONT_CTX *mont);
0415 int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx);
0416 BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from);
0417 BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_RWLOCK *lock,
0418 const BIGNUM *mod, BN_CTX *ctx);
0419
0420
0421 #define BN_BLINDING_NO_UPDATE 0x00000001
0422 #define BN_BLINDING_NO_RECREATE 0x00000002
0423
0424 BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod);
0425 void BN_BLINDING_free(BN_BLINDING *b);
0426 int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx);
0427 int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
0428 int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
0429 int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *);
0430 int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b,
0431 BN_CTX *);
0432
0433 int BN_BLINDING_is_current_thread(BN_BLINDING *b);
0434 void BN_BLINDING_set_current_thread(BN_BLINDING *b);
0435 int BN_BLINDING_lock(BN_BLINDING *b);
0436 int BN_BLINDING_unlock(BN_BLINDING *b);
0437
0438 unsigned long BN_BLINDING_get_flags(const BN_BLINDING *);
0439 void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long);
0440 BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,
0441 const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,
0442 int (*bn_mod_exp)(BIGNUM *r,
0443 const BIGNUM *a,
0444 const BIGNUM *p,
0445 const BIGNUM *m,
0446 BN_CTX *ctx,
0447 BN_MONT_CTX *m_ctx),
0448 BN_MONT_CTX *m_ctx);
0449 #ifndef OPENSSL_NO_DEPRECATED_0_9_8
0450 OSSL_DEPRECATEDIN_0_9_8
0451 void BN_set_params(int mul, int high, int low, int mont);
0452 OSSL_DEPRECATEDIN_0_9_8
0453 int BN_get_params(int which);
0454 #endif
0455
0456 BN_RECP_CTX *BN_RECP_CTX_new(void);
0457 void BN_RECP_CTX_free(BN_RECP_CTX *recp);
0458 int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx);
0459 int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y,
0460 BN_RECP_CTX *recp, BN_CTX *ctx);
0461 int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
0462 const BIGNUM *m, BN_CTX *ctx);
0463 int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
0464 BN_RECP_CTX *recp, BN_CTX *ctx);
0465
0466 #ifndef OPENSSL_NO_EC2M
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478 int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
0479 #define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b)
0480
0481
0482
0483 int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p);
0484
0485 int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
0486 const BIGNUM *p, BN_CTX *ctx);
0487
0488 int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
0489
0490 int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx);
0491
0492 int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
0493 const BIGNUM *p, BN_CTX *ctx);
0494
0495 int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
0496 const BIGNUM *p, BN_CTX *ctx);
0497
0498 int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
0499 BN_CTX *ctx);
0500
0501 int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
0502 BN_CTX *ctx);
0503 #define BN_GF2m_cmp(a, b) BN_ucmp((a), (b))
0504
0505
0506
0507
0508
0509
0510
0511 int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]);
0512
0513 int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
0514 const int p[], BN_CTX *ctx);
0515
0516 int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[],
0517 BN_CTX *ctx);
0518
0519 int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[],
0520 BN_CTX *ctx);
0521
0522 int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
0523 const int p[], BN_CTX *ctx);
0524
0525 int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
0526 const int p[], BN_CTX *ctx);
0527
0528 int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a,
0529 const int p[], BN_CTX *ctx);
0530
0531 int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a,
0532 const int p[], BN_CTX *ctx);
0533 int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max);
0534 int BN_GF2m_arr2poly(const int p[], BIGNUM *a);
0535
0536 #endif
0537
0538
0539
0540
0541 int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
0542 int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
0543 int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
0544 int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
0545 int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
0546
0547 const BIGNUM *BN_get0_nist_prime_192(void);
0548 const BIGNUM *BN_get0_nist_prime_224(void);
0549 const BIGNUM *BN_get0_nist_prime_256(void);
0550 const BIGNUM *BN_get0_nist_prime_384(void);
0551 const BIGNUM *BN_get0_nist_prime_521(void);
0552
0553 int (*BN_nist_mod_func(const BIGNUM *p))(BIGNUM *r, const BIGNUM *a,
0554 const BIGNUM *field, BN_CTX *ctx);
0555
0556 int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range,
0557 const BIGNUM *priv, const unsigned char *message,
0558 size_t message_len, BN_CTX *ctx);
0559
0560
0561 BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn);
0562 BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn);
0563
0564
0565 BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn);
0566 BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn);
0567 BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn);
0568 BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn);
0569 BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn);
0570 BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn);
0571
0572 #ifndef OPENSSL_NO_DEPRECATED_1_1_0
0573 #define get_rfc2409_prime_768 BN_get_rfc2409_prime_768
0574 #define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024
0575 #define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536
0576 #define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048
0577 #define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072
0578 #define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096
0579 #define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144
0580 #define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192
0581 #endif
0582
0583 int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom);
0584
0585 #ifdef __cplusplus
0586 }
0587 #endif
0588 #endif