=pod

=head1 NAME

BN_add_word, BN_sub_word, BN_mul_word, BN_div_word, BN_mod_word - arithmetic
functions on BIGNUMs with integers

=head1 SYNOPSIS

 #include <openssl/bn.h>

 int BN_add_word(BIGNUM *a, BN_ULONG w);

 int BN_sub_word(BIGNUM *a, BN_ULONG w);

 int BN_mul_word(BIGNUM *a, BN_ULONG w);

 BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w);

 BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w);

=head1 DESCRIPTION

These functions perform arithmetic operations on BIGNUMs with unsigned
integers. They are much more efficient than the normal BIGNUM
arithmetic operations.

BN_add_word() adds B<w> to B<a> (C<a+=w>).

BN_sub_word() subtracts B<w> from B<a> (C<a-=w>).

BN_mul_word() multiplies B<a> and B<w> (C<a*=b>).

BN_div_word() divides B<a> by B<w> (C<a/=w>) and returns the remainder.

BN_mod_word() returns the remainder of B<a> divided by B<w> (C<a%m>).

For BN_div_word() and BN_mod_word(), B<w> must not be 0.

=head1 RETURN VALUES

BN_add_word(), BN_sub_word() and BN_mul_word() return 1 for success, 0
on error. The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.

BN_mod_word() and BN_div_word() return B<a>%B<w>.

=head1 SEE ALSO

L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<BN_add(3)|BN_add(3)>

=head1 HISTORY

BN_add_word() and BN_mod_word() are available in all versions of
SSLeay and OpenSSL. BN_div_word() was added in SSLeay 0.8, and
BN_sub_word() and BN_mul_word() in SSLeay 0.9.0.

=cut
