=pod

=head1 NAME

BN_zero, BN_one, BN_value_one, BN_set_word, BN_get_word - BIGNUM assignment
operations

=head1 SYNOPSIS

 #include <openssl/bn.h>

 int BN_zero(BIGNUM *a);
 int BN_one(BIGNUM *a);

 const BIGNUM *BN_value_one(void);

 int BN_set_word(BIGNUM *a, unsigned long w);
 unsigned long BN_get_word(BIGNUM *a);

=head1 DESCRIPTION

BN_zero(), BN_one() and BN_set_word() set B<a> to the values 0, 1 and
B<w> respectively.  BN_zero() and BN_one() are macros.

BN_value_one() returns a B<BIGNUM> constant of value 1. This constant
is useful for use in comparisons and assignment.

BN_get_word() returns B<a>, if it can be represented as an unsigned
long.

=head1 RETURN VALUES

BN_get_word() returns the value B<a>, and 0xffffffffL if B<a> cannot
be represented as an unsigned long.

BN_zero(), BN_one() and BN_set_word() return 1 on success, 0 otherwise.
BN_value_one() returns the constant.

=head1 BUGS

Someone might change the constant.

If a B<BIGNUM> is equal to 0xffffffffL it can be represented as an
unsigned long but this value is also returned on error.

=head1 SEE ALSO

L<bn(3)|bn(3)>, L<BN_bn2bin(3)|BN_bn2bin(3)>

=head1 HISTORY

BN_zero(), BN_one() and BN_set_word() are available in all versions of
SSLeay and OpenSSL. BN_value_one() and BN_get_word() were added in
SSLeay 0.8.

BN_value_one() was changed to return a true const BIGNUM * in OpenSSL
0.9.7.

=cut
