159191Skris=pod 259191Skris 359191Skris=head1 NAME 459191Skris 559191SkrisBN_num_bits, BN_num_bytes, BN_num_bits_word - get BIGNUM size 659191Skris 759191Skris=head1 SYNOPSIS 859191Skris 959191Skris #include <openssl/bn.h> 1059191Skris 1159191Skris int BN_num_bytes(const BIGNUM *a); 1259191Skris 1359191Skris int BN_num_bits(const BIGNUM *a); 1459191Skris 1559191Skris int BN_num_bits_word(BN_ULONG w); 1659191Skris 1759191Skris=head1 DESCRIPTION 1859191Skris 19142425SnectarBN_num_bytes() returns the size of a B<BIGNUM> in bytes. 2059191Skris 21142425SnectarBN_num_bits_word() returns the number of significant bits in a word. 22142425SnectarIf we take 0x00000432 as an example, it returns 11, not 16, not 32. 23142425SnectarBasically, except for a zero, it returns I<floor(log2(w))+1>. 24142425Snectar 25142425SnectarBN_num_bits() returns the number of significant bits in a B<BIGNUM>, 26142425Snectarfollowing the same principle as BN_num_bits_word(). 27142425Snectar 2859191SkrisBN_num_bytes() is a macro. 2959191Skris 3059191Skris=head1 RETURN VALUES 3159191Skris 3259191SkrisThe size. 3359191Skris 34142425Snectar=head1 NOTES 35142425Snectar 36142425SnectarSome have tried using BN_num_bits() on individual numbers in RSA keys, 37142425SnectarDH keys and DSA keys, and found that they don't always come up with 38142425Snectarthe number of bits they expected (something like 512, 1024, 2048, 39142425Snectar...). This is because generating a number with some specific number 40142425Snectarof bits doesn't always set the highest bits, thereby making the number 41142425Snectarof I<significant> bits a little lower. If you want to know the "key 42142425Snectarsize" of such a key, either use functions like RSA_size(), DH_size() 43142425Snectarand DSA_size(), or use BN_num_bytes() and multiply with 8 (although 44142425Snectarthere's no real guarantee that will match the "key size", just a lot 45142425Snectarmore probability). 46142425Snectar 4759191Skris=head1 SEE ALSO 4859191Skris 49142425SnectarL<bn(3)|bn(3)>, L<DH_size(3)|DH_size(3)>, L<DSA_size(3)|DSA_size(3)>, 50142425SnectarL<RSA_size(3)|RSA_size(3)> 5159191Skris 5259191Skris=head1 HISTORY 5359191Skris 5459191SkrisBN_num_bytes(), BN_num_bits() and BN_num_bits_word() are available in 5559191Skrisall versions of SSLeay and OpenSSL. 5659191Skris 5759191Skris=cut 58