Blame doc/man3/BN_add.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
BN_add, BN_sub, BN_mul, BN_sqr, BN_div, BN_mod, BN_nnmod, BN_mod_add,
Packit c4476c
BN_mod_sub, BN_mod_mul, BN_mod_sqr, BN_exp, BN_mod_exp, BN_gcd -
Packit c4476c
arithmetic operations on BIGNUMs
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
 #include <openssl/bn.h>
Packit c4476c
Packit c4476c
 int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
Packit c4476c
Packit c4476c
 int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
Packit c4476c
Packit c4476c
 int BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_sqr(BIGNUM *r, BIGNUM *a, BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *a, const BIGNUM *d,
Packit c4476c
            BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_mod(BIGNUM *rem, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_nnmod(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_mod_add(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m,
Packit c4476c
                BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_mod_sub(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m,
Packit c4476c
                BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_mod_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m,
Packit c4476c
                BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_mod_sqr(BIGNUM *r, BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
Packit c4476c
                const BIGNUM *m, BN_CTX *ctx);
Packit c4476c
Packit c4476c
 int BN_gcd(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
BN_add() adds I and I and places the result in I<r> (C<r=a+b>).
Packit c4476c
I<r> may be the same B<BIGNUM> as I or I.
Packit c4476c
Packit c4476c
BN_sub() subtracts I from I and places the result in I<r> (C<r=a-b>).
Packit c4476c
I<r> may be the same B<BIGNUM> as I or I.
Packit c4476c
Packit c4476c
BN_mul() multiplies I and I and places the result in I<r> (C<r=a*b>).
Packit c4476c
I<r> may be the same B<BIGNUM> as I or I.
Packit c4476c
For multiplication by powers of 2, use L<BN_lshift(3)>.
Packit c4476c
Packit c4476c
BN_sqr() takes the square of I and places the result in I<r>
Packit c4476c
(C<r=a^2>). I<r> and I may be the same B<BIGNUM>.
Packit c4476c
This function is faster than BN_mul(r,a,a).
Packit c4476c
Packit c4476c
BN_div() divides I by I<d> and places the result in I<dv> and the
Packit c4476c
remainder in I<rem> (C<dv=a/d, rem=a%d>). Either of I<dv> and I<rem> may
Packit c4476c
be B<NULL>, in which case the respective value is not returned.
Packit c4476c
The result is rounded towards zero; thus if I is negative, the
Packit c4476c
remainder will be zero or negative.
Packit c4476c
For division by powers of 2, use BN_rshift(3).
Packit c4476c
Packit c4476c
BN_mod() corresponds to BN_div() with I<dv> set to B<NULL>.
Packit c4476c
Packit c4476c
BN_nnmod() reduces I modulo I<m> and places the non-negative
Packit c4476c
remainder in I<r>.
Packit c4476c
Packit c4476c
BN_mod_add() adds I to I modulo I<m> and places the non-negative
Packit c4476c
result in I<r>.
Packit c4476c
Packit c4476c
BN_mod_sub() subtracts I from I modulo I<m> and places the
Packit c4476c
non-negative result in I<r>.
Packit c4476c
Packit c4476c
BN_mod_mul() multiplies I by I and finds the non-negative
Packit c4476c
remainder respective to modulus I<m> (C<r=(a*b) mod m>). I<r> may be
Packit c4476c
the same B<BIGNUM> as I or I. For more efficient algorithms for
Packit c4476c
repeated computations using the same modulus, see
Packit c4476c
L<BN_mod_mul_montgomery(3)> and
Packit c4476c
L<BN_mod_mul_reciprocal(3)>.
Packit c4476c
Packit c4476c
BN_mod_sqr() takes the square of I modulo B<m> and places the
Packit c4476c
result in I<r>.
Packit c4476c
Packit c4476c
BN_exp() raises I to the I

-th power and places the result in I<r>

Packit c4476c
(C<r=a^p>). This function is faster than repeated applications of
Packit c4476c
BN_mul().
Packit c4476c
Packit c4476c
BN_mod_exp() computes I to the I

-th power modulo I<m> (C

Packit c4476c
m>). This function uses less time and space than BN_exp(). Do not call this
Packit c4476c
function when B<m> is even and any of the parameters have the
Packit c4476c
B<BN_FLG_CONSTTIME> flag set.
Packit c4476c
Packit c4476c
BN_gcd() computes the greatest common divisor of I and I and
Packit c4476c
places the result in I<r>. I<r> may be the same B<BIGNUM> as I or
Packit c4476c
I.
Packit c4476c
Packit c4476c
For all functions, I<ctx> is a previously allocated B<BN_CTX> used for
Packit c4476c
temporary variables; see L<BN_CTX_new(3)>.
Packit c4476c
Packit c4476c
Unless noted otherwise, the result B<BIGNUM> must be different from
Packit c4476c
the arguments.
Packit c4476c
Packit c4476c
=head1 RETURN VALUES
Packit c4476c
Packit c4476c
For all functions, 1 is returned for success, 0 on error. The return
Packit c4476c
value should always be checked (e.g., C<if (!BN_add(r,a,b)) goto err;>).
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_CTX_new(3)>,
Packit c4476c
L<BN_add_word(3)>, L<BN_set_bit(3)>
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2000-2018 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