Manual Page Result
0
Command: BN_swap | Section: 3 | Source: OpenBSD | File: BN_swap.3
BN_SWAP(3) FreeBSD Library Functions Manual BN_SWAP(3)
NAME
BN_swap, BN_consttime_swap - exchange BIGNUMs
SYNOPSIS
#include <openssl/bn.h>
void
BN_swap(BIGNUM *a, BIGNUM *b);
void
BN_consttime_swap(BN_ULONG condition, BIGNUM *a, BIGNUM *b, int nwords);
DESCRIPTION
BN_swap() and BN_consttime_swap() exchange the values of a and b.
BN_swap() implements this by exchanging the pointers to the data buffers
of a and b and also exchanging the values of the BN_FLG_STATIC_DATA bits.
Consequently, the operation is fast and execution time does not depend on
any properties of the two numbers. However, execution time obviously
differs between swapping (by calling this function) and not swapping (by
not calling this function).
BN_consttime_swap() only performs the exchange if the condition is non-
zero; otherwise, it has no effect. It implements the exchange by
exchanging the contents of the data buffers rather than the pointers to
the data buffers. This is slower, but implemented in such a way that the
execution time is not only independent of the properties of the two
numbers, but also independent of the condition argument, i.e. the same
for swapping or not swapping. Execution time does however grow in an
approximately linear manner with the nwords argument.
BN_consttime_swap() calls abort(3) if at least one of a or b has fewer
than nwords data words allocated or more than nwords data words are
currently in use in at least one of them.
SEE ALSO
BN_new(3), BN_set_flags(3)
HISTORY
BN_swap() first appeared in OpenSSL 0.9.7 and has been available since
OpenBSD 3.2.
BN_consttime_swap() first appeared in OpenSSL 1.0.1g and has been
available since OpenBSD 5.6.
FreeBSD 14.1-RELEASE-p8 December 19, 2021 FreeBSD 14.1-RELEASE-p8