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