1297669Ssgalabov=pod
2297669Ssgalabov
3297669Ssgalabov=head1 NAME
4297669Ssgalabov
5297669SsgalabovBN_set_bit, BN_clear_bit, BN_is_bit_set, BN_mask_bits, BN_lshift,
6297669SsgalabovBN_lshift1, BN_rshift, BN_rshift1 - bit operations on BIGNUMs
7297669Ssgalabov
8297669Ssgalabov=head1 SYNOPSIS
9297669Ssgalabov
10297669Ssgalabov #include <openssl/bn.h>
11297669Ssgalabov
12297669Ssgalabov int BN_set_bit(BIGNUM *a, int n);
13297669Ssgalabov int BN_clear_bit(BIGNUM *a, int n);
14297669Ssgalabov
15297669Ssgalabov int BN_is_bit_set(const BIGNUM *a, int n);
16297669Ssgalabov
17297669Ssgalabov int BN_mask_bits(BIGNUM *a, int n);
18297669Ssgalabov
19297669Ssgalabov int BN_lshift(BIGNUM *r, const BIGNUM *a, int n);
20297669Ssgalabov int BN_lshift1(BIGNUM *r, BIGNUM *a);
21297669Ssgalabov
22297669Ssgalabov int BN_rshift(BIGNUM *r, BIGNUM *a, int n);
23297669Ssgalabov int BN_rshift1(BIGNUM *r, BIGNUM *a);
24297669Ssgalabov
25297669Ssgalabov=head1 DESCRIPTION
26297669Ssgalabov
27297669SsgalabovBN_set_bit() sets bit B<n> in B<a> to 1 (C<a|=(1E<lt>E<lt>n)>). The
28297669Ssgalabovnumber is expanded if necessary.
29297669Ssgalabov
30297669SsgalabovBN_clear_bit() sets bit B<n> in B<a> to 0 (C<a&=~(1E<lt>E<lt>n)>). An
31297669Ssgalaboverror occurs if B<a> is shorter than B<n> bits.
32297669Ssgalabov
33297669SsgalabovBN_is_bit_set() tests if bit B<n> in B<a> is set.
34297669Ssgalabov
35297669SsgalabovBN_mask_bits() truncates B<a> to an B<n> bit number
36297669Ssgalabov(C<a&=~((~0)E<lt>E<lt>n)>). An error occurs if B<n> is negative. An error is
37297669Ssgalabovalso returned if the internal representation of B<a> is already shorter than
38297669SsgalabovB<n> bits. The internal representation depends on the platform's word size, and
39297669Ssgalabovthis error can be safely ignored. Use L<BN_num_bits(3)> to determine the exact
40297669Ssgalabovnumber of bits if needed.
41297669Ssgalabov
42297669SsgalabovBN_lshift() shifts B<a> left by B<n> bits and places the result in
43297669SsgalabovB<r> (C<r=a*2^n>). Note that B<n> must be nonnegative. BN_lshift1() shifts
44297669SsgalabovB<a> left by one and places the result in B<r> (C<r=2*a>).
45297669Ssgalabov
46297669SsgalabovBN_rshift() shifts B<a> right by B<n> bits and places the result in
47297669SsgalabovB<r> (C<r=a/2^n>). Note that B<n> must be nonnegative. BN_rshift1() shifts
48297669SsgalabovB<a> right by one and places the result in B<r> (C<r=a/2>).
49297669Ssgalabov
50297669SsgalabovFor the shift functions, B<r> and B<a> may be the same variable.
51297669Ssgalabov
52297669Ssgalabov=head1 RETURN VALUES
53297669Ssgalabov
54297669SsgalabovBN_is_bit_set() returns 1 if the bit is set, 0 otherwise.
55297669Ssgalabov
56297669SsgalabovAll other functions return 1 for success, 0 on error. The error codes
57297669Ssgalabovcan be obtained by L<ERR_get_error(3)>.
58297669Ssgalabov
59297669Ssgalabov=head1 SEE ALSO
60297669Ssgalabov
61297669SsgalabovL<BN_num_bytes(3)>, L<BN_add(3)>
62297669Ssgalabov
63297669Ssgalabov=head1 COPYRIGHT
64297669Ssgalabov
65297669SsgalabovCopyright 2000-2024 The OpenSSL Project Authors. All Rights Reserved.
66297669Ssgalabov
67297669SsgalabovLicensed under the Apache License 2.0 (the "License").  You may not use
68297669Ssgalabovthis file except in compliance with the License.  You can obtain a copy
69297669Ssgalabovin the file LICENSE in the source distribution or at
70297669SsgalabovL<https://www.openssl.org/source/license.html>.
71297669Ssgalabov
72297669Ssgalabov=cut
73297669Ssgalabov