=pod

=head1 NAME

BN_copy, BN_dup, BN_with_flags - copy BIGNUMs

=head1 SYNOPSIS

 #include <openssl/bn.h>

 BIGNUM *BN_copy(BIGNUM *to, const BIGNUM *from);

 BIGNUM *BN_dup(const BIGNUM *from);

 void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags);

=head1 DESCRIPTION

BN_copy() copies B<from> to B<to>. BN_dup() creates a new B<BIGNUM>
containing the value B<from>.

BN_with_flags creates a B<temporary> shallow copy of B<b> in B<dest>. It places
significant restrictions on the copied data. Applications that do no adhere to
these restrictions may encounter unexpected side effects or crashes. For that
reason use of this function is discouraged. Any flags provided in B<flags> will
be set in B<dest> in addition to any flags already set in B<b>. For example this
might commonly be used to create a temporary copy of a BIGNUM with the
B<BN_FLG_CONSTTIME> flag set for constant time operations. The temporary copy in
B<dest> will share some internal state with B<b>. For this reason the following
restrictions apply to the use of B<dest>:

=over 2

=item *

B<dest> should be a newly allocated BIGNUM obtained via a call to BN_new(). It
should not have been used for other purposes or initialised in any way.

=item *

B<dest> must only be used in "read-only" operations, i.e. typically those
functions where the relevant parameter is declared "const".

=item *

B<dest> must be used and freed before any further subsequent use of B<b>

=back

=head1 RETURN VALUES

BN_copy() returns B<to> on success, NULL on error. BN_dup() returns
the new B<BIGNUM>, and NULL on error. The error codes can be obtained
by L<ERR_get_error(3)>.

=head1 SEE ALSO

L<ERR_get_error(3)>

=head1 COPYRIGHT

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

Licensed under the Apache License 2.0 (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
