BN_MOD_MUL_MONTGOMERY(3ossl)
okay so welcome to the BN_MOD_MUL_MONTGOMERY(3ossl) page, bestie π this is the Montgomery multiplication manual, and we're gonna make it make sense.
β¨ NAME β¨
BN_mod_mul_montgomery, BN_MONT_CTX_new, 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_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 π
okay so these functions are the Montgomery multiplication girlies β¨ They get called automatically under the hood when BN_mod_exp(3) is called with suitable input, but they're also useful when you're doing several operations with the same modulus. lowkey iconic.
BN_MONT_CTX_new()β allocates and initializes aBN_MONT_CTXstructure π«ΆBN_MONT_CTX_set()β sets up themontstructure from the modulusmby precomputing its inverse and a valueRβ¨BN_MONT_CTX_copy()β copies theBN_MONT_CTXfromfromtotoπBN_MONT_CTX_free()β frees the components of theBN_MONT_CTX, and, if it was created byBN_MONT_CTX_new(), also the structure itself. IfmontisNULL, nothing is done πBN_mod_mul_montgomery()β computesMont(a,b):=a*b*R^-1and places the result inrπBN_from_montgomery()β performs the Montgomery reductionr = a*R^-1πBN_to_montgomery()β computesMont(a,R^2), i.e.a*R. Note thatamust be nonnegative and smaller than the modulus β
For all functions, ctx is a previously allocated BN_CTX used for temporary variables π¦
π¦ RETURN VALUES π¦
BN_MONT_CTX_new()returns the newly allocatedBN_MONT_CTX, andNULLon error πBN_MONT_CTX_free()has no return value π- For the other functions,
1is returned for success,0on error. The error codes can be obtained byERR_get_error(3)π
π WARNINGS π
bestie please hear me: the inputs must be reduced modulo m, otherwise the result will be outside the expected range π no cap, don't skip this.
π SEE ALSO π
π HISTORY π
BN_MONT_CTX_init() was removed in OpenSSL 1.1.0 π«Ά
π COPYRIGHT π
Copyright 2000-2020 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 <https://www.openssl.org/source/license.html>.
mwah π this page is from OpenSSL 3.5.0, dated 2026-09-25, and yes bestie it's BN_MOD_MUL_MONTGOMERY(3ossl) signing off π
β¨
π¦ where this page comes from
- opensuse-leap 16.0: openssl-3-doc 3.5.0-160000.11.1 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms