X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=doc%2Fcrypto%2Fbn.pod;h=f7ce9dfd4359835d2fffe55fb54ecea338ac63ea;hp=9dfe52a518c32c3b473f8efe557f4bcbd5e48003;hb=e306892994a0f189089916d2ea66b3bdc0b2d777;hpb=223fc8654a790c204536cd7c61520154418915b8 diff --git a/doc/crypto/bn.pod b/doc/crypto/bn.pod index 9dfe52a518..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); @@ -81,7 +91,7 @@ bn - Multiprecision integer arithmetics int BN_hex2bn(BIGNUM **a, const char *str); int BN_dec2bn(BIGNUM **a, const char *str); int BN_print(BIO *fp, const BIGNUM *a); - int BN_print_fp(FILE *fp, BIGNUM *a); + int BN_print_fp(FILE *fp, const BIGNUM *a); int BN_bn2mpi(const BIGNUM *a, unsigned char *to); BIGNUM *BN_mpi2bn(unsigned char *s, int len, BIGNUM *ret); @@ -123,53 +133,25 @@ The basic object in this library is a B. It is used to hold a single large integer. This type should be considered opaque and fields should not be modified or accessed directly. -The creation of B objects is described in L; -L describes most of the arithmetic operations. -Comparision is described in L; L describes -certain assignments, L the generation of 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; +The creation of B objects is described in L; +L describes most of the arithmetic operations. +Comparison is described in L; L +describes certain assignments, L the generation of +random numbers, L deals with prime +numbers and L with bit operations. The conversion +of Bs to external formats is described in L. =head1 SEE ALSO -dh(3), err(3), rand(3), rsa(3), BN_new(3), BN_CTX_new(3), BN_copy(3), -BN_num_bytes(3), BN_add(3), BN_add_word(3), BN_cmp(3), BN_zero(3), -BN_rand(3), BN_generate_prime(3), BN_set_bit(3), BN_bn2bin(3), -BN_mod_inverse(3), BN_mod_mul_reciprocal(3), BN_mod_mul_montgomery(3) +L, +L, L, L, L, +L, L, +L, L, L, +L, L, +L, L, L, +L, L, +L, L, +L, +L =cut