1*2175Sjp161948=pod 2*2175Sjp161948 3*2175Sjp161948=head1 NAME 4*2175Sjp161948 5*2175Sjp161948BN_num_bits, BN_num_bytes, BN_num_bits_word - get BIGNUM size 6*2175Sjp161948 7*2175Sjp161948=head1 SYNOPSIS 8*2175Sjp161948 9*2175Sjp161948 #include <openssl/bn.h> 10*2175Sjp161948 11*2175Sjp161948 int BN_num_bytes(const BIGNUM *a); 12*2175Sjp161948 13*2175Sjp161948 int BN_num_bits(const BIGNUM *a); 14*2175Sjp161948 15*2175Sjp161948 int BN_num_bits_word(BN_ULONG w); 16*2175Sjp161948 17*2175Sjp161948=head1 DESCRIPTION 18*2175Sjp161948 19*2175Sjp161948BN_num_bytes() returns the size of a B<BIGNUM> in bytes. 20*2175Sjp161948 21*2175Sjp161948BN_num_bits_word() returns the number of significant bits in a word. 22*2175Sjp161948If we take 0x00000432 as an example, it returns 11, not 16, not 32. 23*2175Sjp161948Basically, except for a zero, it returns I<floor(log2(w))+1>. 24*2175Sjp161948 25*2175Sjp161948BN_num_bits() returns the number of significant bits in a B<BIGNUM>, 26*2175Sjp161948following the same principle as BN_num_bits_word(). 27*2175Sjp161948 28*2175Sjp161948BN_num_bytes() is a macro. 29*2175Sjp161948 30*2175Sjp161948=head1 RETURN VALUES 31*2175Sjp161948 32*2175Sjp161948The size. 33*2175Sjp161948 34*2175Sjp161948=head1 NOTES 35*2175Sjp161948 36*2175Sjp161948Some have tried using BN_num_bits() on individual numbers in RSA keys, 37*2175Sjp161948DH keys and DSA keys, and found that they don't always come up with 38*2175Sjp161948the number of bits they expected (something like 512, 1024, 2048, 39*2175Sjp161948...). This is because generating a number with some specific number 40*2175Sjp161948of bits doesn't always set the highest bits, thereby making the number 41*2175Sjp161948of I<significant> bits a little lower. If you want to know the "key 42*2175Sjp161948size" of such a key, either use functions like RSA_size(), DH_size() 43*2175Sjp161948and DSA_size(), or use BN_num_bytes() and multiply with 8 (although 44*2175Sjp161948there's no real guarantee that will match the "key size", just a lot 45*2175Sjp161948more probability). 46*2175Sjp161948 47*2175Sjp161948=head1 SEE ALSO 48*2175Sjp161948 49*2175Sjp161948L<bn(3)|bn(3)>, L<DH_size(3)|DH_size(3)>, L<DSA_size(3)|DSA_size(3)>, 50*2175Sjp161948L<RSA_size(3)|RSA_size(3)> 51*2175Sjp161948 52*2175Sjp161948=head1 HISTORY 53*2175Sjp161948 54*2175Sjp161948BN_num_bytes(), BN_num_bits() and BN_num_bits_word() are available in 55*2175Sjp161948all versions of SSLeay and OpenSSL. 56*2175Sjp161948 57*2175Sjp161948=cut 58