]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/BN_add.pod
Rename OPENSSL_CTX prefix to OSSL_LIB_CTX
[thirdparty/openssl.git] / doc / man3 / BN_add.pod
CommitLineData
dd8dec69
UM
1=pod
2
3=head1 NAME
4
78a0c1f1
BM
5BN_add, BN_sub, BN_mul, BN_sqr, BN_div, BN_mod, BN_nnmod, BN_mod_add,
6BN_mod_sub, BN_mod_mul, BN_mod_sqr, BN_exp, BN_mod_exp, BN_gcd -
7arithmetic operations on BIGNUMs
dd8dec69
UM
8
9=head1 SYNOPSIS
10
11 #include <openssl/bn.h>
12
13 int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
14
15 int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
16
17 int BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
18
78a0c1f1
BM
19 int BN_sqr(BIGNUM *r, BIGNUM *a, BN_CTX *ctx);
20
dd8dec69 21 int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *a, const BIGNUM *d,
e9b77246 22 BN_CTX *ctx);
dd8dec69 23
dd8dec69
UM
24 int BN_mod(BIGNUM *rem, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
25
5acaa495 26 int BN_nnmod(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
78a0c1f1
BM
27
28 int BN_mod_add(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m,
e9b77246 29 BN_CTX *ctx);
78a0c1f1
BM
30
31 int BN_mod_sub(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m,
e9b77246 32 BN_CTX *ctx);
78a0c1f1
BM
33
34 int BN_mod_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m,
e9b77246 35 BN_CTX *ctx);
dd8dec69 36
78a0c1f1
BM
37 int BN_mod_sqr(BIGNUM *r, BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
38
dd8dec69
UM
39 int BN_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BN_CTX *ctx);
40
41 int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
e9b77246 42 const BIGNUM *m, BN_CTX *ctx);
dd8dec69
UM
43
44 int BN_gcd(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
45
46=head1 DESCRIPTION
47
78a0c1f1
BM
48BN_add() adds I<a> and I<b> and places the result in I<r> (C<r=a+b>).
49I<r> may be the same B<BIGNUM> as I<a> or I<b>.
dd8dec69 50
78a0c1f1 51BN_sub() subtracts I<b> from I<a> and places the result in I<r> (C<r=a-b>).
32c74814 52I<r> may be the same B<BIGNUM> as I<a> or I<b>.
dd8dec69 53
78a0c1f1
BM
54BN_mul() multiplies I<a> and I<b> and places the result in I<r> (C<r=a*b>).
55I<r> may be the same B<BIGNUM> as I<a> or I<b>.
9b86974e 56For multiplication by powers of 2, use L<BN_lshift(3)>.
dd8dec69 57
78a0c1f1
BM
58BN_sqr() takes the square of I<a> and places the result in I<r>
59(C<r=a^2>). I<r> and I<a> may be the same B<BIGNUM>.
60This function is faster than BN_mul(r,a,a).
61
62BN_div() divides I<a> by I<d> and places the result in I<dv> and the
63remainder in I<rem> (C<dv=a/d, rem=a%d>). Either of I<dv> and I<rem> may
64be B<NULL>, in which case the respective value is not returned.
65The result is rounded towards zero; thus if I<a> is negative, the
66remainder will be zero or negative.
e93f9a32 67For division by powers of 2, use BN_rshift(3).
dd8dec69 68
78a0c1f1
BM
69BN_mod() corresponds to BN_div() with I<dv> set to B<NULL>.
70
490c8711 71BN_nnmod() reduces I<a> modulo I<m> and places the nonnegative
5acaa495 72remainder in I<r>.
78a0c1f1 73
490c8711 74BN_mod_add() adds I<a> to I<b> modulo I<m> and places the nonnegative
78a0c1f1
BM
75result in I<r>.
76
3b80e3aa 77BN_mod_sub() subtracts I<b> from I<a> modulo I<m> and places the
490c8711 78nonnegative result in I<r>.
dd8dec69 79
490c8711 80BN_mod_mul() multiplies I<a> by I<b> and finds the nonnegative
78a0c1f1
BM
81remainder respective to modulus I<m> (C<r=(a*b) mod m>). I<r> may be
82the same B<BIGNUM> as I<a> or I<b>. For more efficient algorithms for
83repeated computations using the same modulus, see
9b86974e
RS
84L<BN_mod_mul_montgomery(3)> and
85L<BN_mod_mul_reciprocal(3)>.
dd8dec69 86
78a0c1f1
BM
87BN_mod_sqr() takes the square of I<a> modulo B<m> and places the
88result in I<r>.
dd8dec69 89
78a0c1f1 90BN_exp() raises I<a> to the I<p>-th power and places the result in I<r>
dd8dec69
UM
91(C<r=a^p>). This function is faster than repeated applications of
92BN_mul().
93
78a0c1f1 94BN_mod_exp() computes I<a> to the I<p>-th power modulo I<m> (C<r=a^p %
3a070e25
MC
95m>). This function uses less time and space than BN_exp(). Do not call this
96function when B<m> is even and any of the parameters have the
97B<BN_FLG_CONSTTIME> flag set.
dd8dec69 98
78a0c1f1
BM
99BN_gcd() computes the greatest common divisor of I<a> and I<b> and
100places the result in I<r>. I<r> may be the same B<BIGNUM> as I<a> or
101I<b>.
dd8dec69 102
78a0c1f1 103For all functions, I<ctx> is a previously allocated B<BN_CTX> used for
9b86974e 104temporary variables; see L<BN_CTX_new(3)>.
dd8dec69
UM
105
106Unless noted otherwise, the result B<BIGNUM> must be different from
107the arguments.
108
109=head1 RETURN VALUES
110
111For all functions, 1 is returned for success, 0 on error. The return
112value should always be checked (e.g., C<if (!BN_add(r,a,b)) goto err;>).
9b86974e 113The error codes can be obtained by L<ERR_get_error(3)>.
dd8dec69
UM
114
115=head1 SEE ALSO
116
9e183d22 117L<ERR_get_error(3)>, L<BN_CTX_new(3)>,
9b86974e 118L<BN_add_word(3)>, L<BN_set_bit(3)>
dd8dec69 119
e2f92610
RS
120=head1 COPYRIGHT
121
0f84cbc3 122Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 123
4746f25a 124Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
125this file except in compliance with the License. You can obtain a copy
126in the file LICENSE in the source distribution or at
127L<https://www.openssl.org/source/license.html>.
128
129=cut