Index Index for
Section 3
Index Alphabetical
listing for B
Bottom of page Bottom of
page

BN_mod_mul_montgomery(3)

NAME

BN_mod_mul_montgomery, BN_MONT_CTX_new, BN_MONT_CTX_init, BN_MONT_CTX_free, BN_MONT_CTX_set, BN_MONT_CTX_copy, BN_from_montgomery, BN_to_montgomery - Montgomery multiplication

SYNOPSIS

#include <openssl/bn.h> BN_MONT_CTX *BN_MONT_CTX_new( void ); void BN_MONT_CTX_init( BN_MONT_CTX *ctx ); void BN_MONT_CTX_free( BN_MONT_CTX *mont ); int BN_MONT_CTX_set( BN_MONT_CTX *mont, const BIGNUM *m, BN_CTX *ctx ); BN_MONT_CTX *BN_MONT_CTX_copy( BN_MONT_CTX *to, BN_MONT_CTX *from ); int BN_mod_mul_montgomery( BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_MONT_CTX *mont, BN_CTX *ctx ); int BN_from_montgomery( BIGNUM *r, BIGNUM *a, BN_MONT_CTX *mont, BN_CTX *ctx ); int BN_to_montgomery( BIGNUM *r, BIGNUM *a, BN_MONT_CTX *mont, BN_CTX *ctx );

DESCRIPTION

These functions implement Montgomery multiplication. They are used automatically when BN_mod_exp() is called with suitable input, but they may be useful when several operations are performed using the same modulus. The BN_MONT_CTX_new() function allocates and initializes a BN_MONT_CTX structure. The BN_MONT_CTX_init() function initializes an existing uninitialized BN_MONT_CTX. The BN_MONT_CTX_set() function sets up the mont structure from the modulus m by precomputing its inverse and a value R. The BN_MONT_CTX_copy() function copies the BN_MONT_CTX from to to. The BN_MONT_CTX_free() function frees the components of the BN_MONT_CTX, and, if it was created by BN_MONT_CTX_new(), also the structure itself. The BN_mod_mul_montgomery() function computes Mont(a,b):=a*b*R^-1 and places the result in r. The BN_from_montgomery() function performs the Montgomery reduction r = a*R^-1. The BN_to_montgomery() function computes Mont(a,R^2), i.e. a*R. For all functions, ctx is a previously allocated BN_CTX used for temporary variables. The BN_MONT_CTX structure is defined as follows: typedef struct bn_mont_ctx_st { int ri; /* number of bits in R */ BIGNUM RR; /* R^2 (used to convert to Montgomery form) */ BIGNUM N; /* The modulus */ BIGNUM Ni; /* R*(1/R mod N) - N*Ni = 1 * (Ni is only stored for bignum algorithm) */ BN_ULONG n0; /* least significant word of Ni */ int flags; } BN_MONT_CTX; BN_to_montgomery() is a macro.

RETURN VALUES

The BN_MONT_CTX_new() function returns the newly allocated BN_MONT_CTX, and NULL on error. The BN_MONT_CTX_init() and BN_MONT_CTX_free() functions have no return values. For the other functions, 1 is returned for success, 0 on error. The error codes can be obtained by using ERR_get_error().

HISTORY

The BN_MONT_CTX_new(), BN_MONT_CTX_free(), BN_MONT_CTX_set(), BN_mod_mul_montgomery(), BN_from_montgomery(), and BN_to_montgomery() functions are available in all versions of SSLeay and OpenSSL. The BN_MONT_CTX_init() and BN_MONT_CTX_copy() functions were added in SSLeay 0.9.1b.

SEE ALSO

Functions: bn(3), err(3), BN_add(3), BN_CTX_new(3)

Index Index for
Section 3
Index Alphabetical
listing for B
Top of page Top of
page