X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=doc%2Fcrypto%2Fbn.pod;h=f7ce9dfd4359835d2fffe55fb54ecea338ac63ea;hp=ca48019b96aa0e1df17c338d5b4820fe6e24a2e7;hb=e306892994a0f189089916d2ea66b3bdc0b2d777;hpb=e93f9a3284c799bb851afaeddd56ed502ba189b6 diff --git a/doc/crypto/bn.pod b/doc/crypto/bn.pod index ca48019b96..f7ce9dfd43 100644 --- a/doc/crypto/bn.pod +++ b/doc/crypto/bn.pod @@ -2,7 +2,7 @@ =head1 NAME -bn - Multiprecision integer arithmetics +bn - multiprecision integer arithmetics =head1 SYNOPSIS @@ -21,19 +21,27 @@ bn - Multiprecision integer arithmetics BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); BIGNUM *BN_dup(const BIGNUM *a); + BIGNUM *BN_swap(BIGNUM *a, BIGNUM *b); + int BN_num_bytes(const BIGNUM *a); int BN_num_bits(const BIGNUM *a); int BN_num_bits_word(BN_ULONG w); - int BN_add(BIGNUM *r, BIGNUM *a, BIGNUM *b); + int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); int BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); + int BN_sqr(BIGNUM *r, BIGNUM *a, BN_CTX *ctx); int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *a, const BIGNUM *d, BN_CTX *ctx); - int BN_sqr(BIGNUM *r, BIGNUM *a, BN_CTX *ctx); int BN_mod(BIGNUM *rem, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); + int BN_nnmod(BIGNUM *rem, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); + int BN_mod_add(BIGNUM *ret, BIGNUM *a, BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); + int BN_mod_sub(BIGNUM *ret, BIGNUM *a, BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); int BN_mod_mul(BIGNUM *ret, BIGNUM *a, BIGNUM *b, const BIGNUM *m, BN_CTX *ctx); + int BN_mod_sqr(BIGNUM *ret, BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); int BN_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BN_CTX *ctx); int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); @@ -43,7 +51,7 @@ bn - Multiprecision integer arithmetics int BN_sub_word(BIGNUM *a, BN_ULONG w); int BN_mul_word(BIGNUM *a, BN_ULONG w); BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); - BN_ULONG BN_mod_word(BIGNUM *a, BN_ULONG w); + BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); int BN_cmp(BIGNUM *a, BIGNUM *b); int BN_ucmp(BIGNUM *a, BIGNUM *b); @@ -58,12 +66,14 @@ bn - Multiprecision integer arithmetics int BN_set_word(BIGNUM *a, unsigned long w); unsigned long BN_get_word(BIGNUM *a); - int BN_rand(BIGNUM *rnd, int bits, int top,int bottom); + int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); + int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); + int BN_rand_range(BIGNUM *rnd, BIGNUM *range); - BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe,BIGNUM *add, - BIGNUM *rem,void (*callback)(int,int,void *),void *cb_arg); - int BN_is_prime(BIGNUM *p,int nchecks,void (*callback)(int,int,void *), - BN_CTX *ctx,void *cb_arg); + BIGNUM *BN_generate_prime(BIGNUM *ret, int bits,int safe, BIGNUM *add, + BIGNUM *rem, void (*callback)(int, int, void *), void *cb_arg); + int BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback)(int, int, void *), BN_CTX *ctx, void *cb_arg); int BN_set_bit(BIGNUM *a, int n); int BN_clear_bit(BIGNUM *a, int n); @@ -131,45 +141,12 @@ random numbers, L deals with prime numbers and L with bit operations. The conversion of Bs to external formats is described in L. -=head1 INTERNALS - -The following description is based on the SSLeay documentation: - - typedef struct bignum_st - { - int top; /* Index of last used d. */ - BN_ULONG *d; /* Pointer to an array of 'BITS2' bit chunks. */ - int max; /* Size of the d array. */ - int neg; - } BIGNUM; - -The big number is stored in B, a malloc()ed array of Bs. -A B can be either 16, 32 or 64 bits in size, depending on -the 'number of bits' specified in bn.h. - -B is the size of the B array that has been allocated. B -is the 'last' entry being used, so for a value of 4, bn.d[0]=4 and -bn.top=1. B is 1 if the number is negative. When a BIGNUM is -'0', the B field can be NULL and B == 0. Various routines in -this library require the use of temporary B variables during -their execution. Since dynamic memory allocation to create Bs -is rather expensive when used in conjunction with repeated subroutine -calls, the B structure is used. This structure contains -B Bs. B is the maximum number of -temporary Bs any publicly exported function will use. - - #define BN_CTX_NUM 12 - typedef struct bignum_ctx - { - int tos; /* top of stack */ - BIGNUM *bn[BN_CTX_NUM]; /* The variables */ - } BN_CTX; - =head1 SEE ALSO +L, L, L, L, L, L, L, -L, L, +L, L, L, L, L, L, L, L, L, L,