Blame doc/man3/BN_mod_mul_reciprocal.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
BN_mod_mul_reciprocal, BN_div_recp, BN_RECP_CTX_new,
Packit c4476c
BN_RECP_CTX_free, BN_RECP_CTX_set - modular multiplication using
Packit c4476c
reciprocal
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
 #include <openssl/bn.h>
Packit c4476c
Packit c4476c
 BN_RECP_CTX *BN_RECP_CTX_new(void);
Packit c4476c
 void BN_RECP_CTX_free(BN_RECP_CTX *recp);
Packit c4476c
Packit c4476c
 int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *m, BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_div_recp(BIGNUM *dv, BIGNUM *rem, BIGNUM *a, BN_RECP_CTX *recp,
Packit c4476c
                 BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_mod_mul_reciprocal(BIGNUM *r, BIGNUM *a, BIGNUM *b,
Packit c4476c
                           BN_RECP_CTX *recp, BN_CTX *ctx);
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
BN_mod_mul_reciprocal() can be used to perform an efficient
Packit c4476c
L<BN_mod_mul(3)> operation when the operation will be performed
Packit c4476c
repeatedly with the same modulus. It computes B<r>=(B*B)%B<m>
Packit c4476c
using B<recp>=1/B<m>, which is set as described below.  B<ctx> is a
Packit c4476c
previously allocated B<BN_CTX> used for temporary variables.
Packit c4476c
Packit c4476c
BN_RECP_CTX_new() allocates and initializes a B<BN_RECP> structure.
Packit c4476c
Packit c4476c
BN_RECP_CTX_free() frees the components of the B<BN_RECP>, and, if it
Packit c4476c
was created by BN_RECP_CTX_new(), also the structure itself.
Packit c4476c
If B<recp> is NULL, nothing is done.
Packit c4476c
Packit c4476c
BN_RECP_CTX_set() stores B<m> in B<recp> and sets it up for computing
Packit c4476c
1/B<m> and shifting it left by BN_num_bits(B<m>)+1 to make it an
Packit c4476c
integer. The result and the number of bits it was shifted left will
Packit c4476c
later be stored in B<recp>.
Packit c4476c
Packit c4476c
BN_div_recp() divides B by B<m> using B<recp>. It places the quotient
Packit c4476c
in B<dv> and the remainder in B<rem>.
Packit c4476c
Packit c4476c
The B<BN_RECP_CTX> structure cannot be shared between threads.
Packit c4476c
Packit c4476c
=head1 RETURN VALUES
Packit c4476c
Packit c4476c
BN_RECP_CTX_new() returns the newly allocated B<BN_RECP_CTX>, and NULL
Packit c4476c
on error.
Packit c4476c
Packit c4476c
BN_RECP_CTX_free() has no return value.
Packit c4476c
Packit c4476c
For the other functions, 1 is returned for success, 0 on error.
Packit c4476c
The error codes can be obtained by L<ERR_get_error(3)>.
Packit c4476c
Packit c4476c
=head1 SEE ALSO
Packit c4476c
Packit c4476c
L<ERR_get_error(3)>, L<BN_add(3)>,
Packit c4476c
L<BN_CTX_new(3)>
Packit c4476c
Packit c4476c
=head1 HISTORY
Packit c4476c
Packit c4476c
BN_RECP_CTX_init() was removed in OpenSSL 1.1.0
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
Packit c4476c
Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
this file except in compliance with the License.  You can obtain a copy
Packit c4476c
in the file LICENSE in the source distribution or at
Packit c4476c
L<https://www.openssl.org/source/license.html>.
Packit c4476c
Packit c4476c
=cut