a528d4f0a9
If something was "present in all versions" of SSLeay, or if it was added to a version of SSLeay (and therefore predates OpenSSL), remove mention of it. Documentation history now starts with OpenSSL. Remove mention of all history before OpenSSL 0.9.8, inclusive. Remove all AUTHOR sections. Reviewed-by: Tim Hudson <tjh@openssl.org>
88 lines
2.5 KiB
Text
88 lines
2.5 KiB
Text
=pod
|
|
|
|
=head1 NAME
|
|
|
|
BN_mod_mul_reciprocal, BN_div_recp, BN_RECP_CTX_new, BN_RECP_CTX_init,
|
|
BN_RECP_CTX_free, BN_RECP_CTX_set - modular multiplication using
|
|
reciprocal
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
#include <openssl/bn.h>
|
|
|
|
BN_RECP_CTX *BN_RECP_CTX_new(void);
|
|
void BN_RECP_CTX_free(BN_RECP_CTX *recp);
|
|
|
|
int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *m, BN_CTX *ctx);
|
|
|
|
int BN_div_recp(BIGNUM *dv, BIGNUM *rem, BIGNUM *a, BN_RECP_CTX *recp,
|
|
BN_CTX *ctx);
|
|
|
|
int BN_mod_mul_reciprocal(BIGNUM *r, BIGNUM *a, BIGNUM *b,
|
|
BN_RECP_CTX *recp, BN_CTX *ctx);
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
BN_mod_mul_reciprocal() can be used to perform an efficient
|
|
L<BN_mod_mul(3)> operation when the operation will be performed
|
|
repeatedly with the same modulus. It computes B<r>=(B<a>*B<b>)%B<m>
|
|
using B<recp>=1/B<m>, which is set as described below. B<ctx> is a
|
|
previously allocated B<BN_CTX> used for temporary variables.
|
|
|
|
BN_RECP_CTX_new() allocates and initializes a B<BN_RECP> structure.
|
|
BN_RECP_CTX_init() initializes an existing uninitialized B<BN_RECP>.
|
|
|
|
BN_RECP_CTX_free() frees the components of the B<BN_RECP>, and, if it
|
|
was created by BN_RECP_CTX_new(), also the structure itself.
|
|
If B<recp> is NULL, nothing is done.
|
|
|
|
BN_RECP_CTX_set() stores B<m> in B<recp> and sets it up for computing
|
|
1/B<m> and shifting it left by BN_num_bits(B<m>)+1 to make it an
|
|
integer. The result and the number of bits it was shifted left will
|
|
later be stored in B<recp>.
|
|
|
|
BN_div_recp() divides B<a> by B<m> using B<recp>. It places the quotient
|
|
in B<dv> and the remainder in B<rem>.
|
|
|
|
The B<BN_RECP_CTX> structure cannot be shared between threads.
|
|
|
|
=head1 RETURN VALUES
|
|
|
|
BN_RECP_CTX_new() returns the newly allocated B<BN_RECP_CTX>, and NULL
|
|
on error.
|
|
|
|
BN_RECP_CTX_init() and BN_RECP_CTX_free() have no return values.
|
|
|
|
For the other functions, 1 is returned for success, 0 on error.
|
|
The error codes can be obtained by L<ERR_get_error(3)>.
|
|
|
|
=head1 REMOVED FUNCTIONALITY
|
|
|
|
void BN_RECP_CTX_init(BN_RECP_CTX *recp);
|
|
|
|
BN_RECP_CTX_init() is no longer available as of OpenSSL 1.1.0. It was used to
|
|
initialize an existing uninitialized B<BN_RECP_CTX>. Typically this would be
|
|
done as follows:
|
|
|
|
BN_RECP_CTX ctx;
|
|
BN_RECP_CTX_init(&ctx);
|
|
|
|
Applications should replace use of BN_RECP_CTX_init with BN_RECP_CTX_new
|
|
instead:
|
|
|
|
BN_RECP_CTX *ctx;
|
|
ctx = BN_RECP_CTX_new();
|
|
if(!ctx) /* Handle error */
|
|
...
|
|
BN_RECP_CTX_free(ctx);
|
|
|
|
=head1 SEE ALSO
|
|
|
|
L<bn(3)>, L<ERR_get_error(3)>, L<BN_add(3)>,
|
|
L<BN_CTX_new(3)>
|
|
|
|
=head1 HISTORY
|
|
|
|
BN_RECP_CTX_init was removed in OpenSSL 1.1.0
|
|
|
|
=cut
|