=pod

=head1 NAME

BN_zero, BN_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);

 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.

=head1 SEE ALSO

bn(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.

=cut
