=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>

 void 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);

Deprecated:

 #if OPENSSL_API_COMPAT < 0x00908000L
 int BN_zero(BIGNUM *a);
 #endif

=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_one(), BN_set_word() and the deprecated version of BN_zero()
return 1 on success, 0 otherwise.
BN_value_one() returns the constant.
The preferred version of BN_zero() never fails and returns no value.

=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(7)>, L<BN_bn2bin(3)>

=head1 COPYRIGHT

Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
