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