=pod

=head1 NAME

BN_new, BN_init, BN_clear, BN_free, BN_clear_free - allocate and free BIGNUMs

=head1 SYNOPSIS

 #include <openssl/bn.h>

 BIGNUM *BN_new(void);

 void BN_clear(BIGNUM *a);

 void BN_free(BIGNUM *a);

 void BN_clear_free(BIGNUM *a);

=head1 DESCRIPTION

BN_new() allocates and initializes a B<BIGNUM> structure.

BN_clear() is used to destroy sensitive data such as keys when they
are no longer needed. It erases the memory used by B<a> and sets it
to the value 0.

BN_free() frees the components of the B<BIGNUM>, and if it was created
by BN_new(), also the structure itself. BN_clear_free() additionally
overwrites the data before the memory is returned to the system.
If B<a> is NULL, nothing is done.

=head1 RETURN VALUES

BN_new() returns a pointer to the B<BIGNUM>. If the allocation fails,
it returns B<NULL> and sets an error code that can be obtained
by L<ERR_get_error(3)>.

BN_clear(), BN_free() and BN_clear_free() have no return values.

=head1 REMOVED FUNCTIONALITY

 void BN_init(BIGNUM *);

BN_init() is no longer available as of OpenSSL 1.1.0. It was used to initialize
an existing uninitialized B<BIGNUM>. Typically this would be done as follows:

 BIGNUM a;
 BN_init(&a);

Applications should replace use of BN_init with BN_new instead:

 BIGNUM *a;
 a = BN_new();
 if(!a) /* Handle error */
 ...
 BN_free(a);

=head1 SEE ALSO

L<bn(3)>, L<ERR_get_error(3)>

=head1 HISTORY

BN_init() was removed in OpenSSL 1.1.0.

=cut
