BN_BLINDING_NEW(3ossl)

🌸 NAME 🌸

okay so bestie, this is the BN_BLINDING girlies πŸ’… β€” a whole squad of blinding-related BIGNUM functions that live in the OpenSSL manual, section 3ossl (yes that's the manual name, we're fancy here ✨).

Meet the cast πŸ‘‘:

  • BN_BLINDING_new, BN_BLINDING_free, BN_BLINDING_update, BN_BLINDING_convert, BN_BLINDING_invert, BN_BLINDING_convert_ex, BN_BLINDING_invert_ex, BN_BLINDING_is_current_thread, BN_BLINDING_set_current_thread, BN_BLINDING_lock, BN_BLINDING_unlock, BN_BLINDING_get_flags, BN_BLINDING_set_flags, BN_BLINDING_create_param

✨ SYNOPSIS ✨

like literally just include the header and you're in, no cap 🫢

#include <openssl/bn.h>

BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai,
                             BIGNUM *mod);
void BN_BLINDING_free(BN_BLINDING *b);
int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx);
int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b,
                           BN_CTX *ctx);
int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b,
                          BN_CTX *ctx);
int BN_BLINDING_is_current_thread(BN_BLINDING *b);
void BN_BLINDING_set_current_thread(BN_BLINDING *b);
int BN_BLINDING_lock(BN_BLINDING *b);
int BN_BLINDING_unlock(BN_BLINDING *b);
unsigned long BN_BLINDING_get_flags(const BN_BLINDING *b);
void BN_BLINDING_set_flags(BN_BLINDING *b, unsigned long flags);
BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,
                                      const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,
                                      int (*bn_mod_exp)(BIGNUM *r,
                                                        const BIGNUM *a,
                                                        const BIGNUM *p,
                                                        const BIGNUM *m,
                                                        BN_CTX *ctx,
                                                        BN_MONT_CTX *m_ctx),
                                      BN_MONT_CTX *m_ctx);

πŸ’– DESCRIPTION πŸ’–

  • BN_BLINDING_new() β€” makes you a brand new BN_BLINDING structure and copies the A and Ai values right into that freshly created BN_BLINDING object. it's giving newborn energy 🍼✨
  • BN_BLINDING_free() β€” frees the BN_BLINDING structure. and if b is NULL? literally nothing happens, it just vibes. no crash, no drama πŸ™ˆ
  • BN_BLINDING_update() β€” updates the BN_BLINDING parameters by squaring the A and Ai, or β€” after a specific number of uses and if the necessary parameters are set β€” by re-creating the blinding parameters. glow-up on a schedule, periodt πŸ’…
  • BN_BLINDING_convert_ex() β€” multiplies n with the blinding factor A. and if r is not NULL, a copy of the inverse blinding factor Ai gets returned in r (which is super useful if an RSA object is shared among several threads, iykyk 🧡). Meanwhile BN_BLINDING_invert_ex() multiplies n with the inverse blinding factor Ai, and if r is not NULL it will be used as the inverse blinding.
  • BN_BLINDING_convert() and BN_BLINDING_invert() β€” these are just wrapper functions for BN_BLINDING_convert_ex() and BN_BLINDING_invert_ex() with r set to NULL. lowkey the lazy-girl versions and we respect it πŸŽ€
  • BN_BLINDING_is_current_thread() β€” returns whether the BN_BLINDING structure is owned by the current thread. this exists to help users provide proper locking if needed for multi-threaded use 🫢
  • BN_BLINDING_set_current_thread() β€” sets the current thread as the owner of the BN_BLINDING structure. main character claims the object, slay πŸ‘‘
  • BN_BLINDING_lock() β€” locks the BN_BLINDING structure πŸ”’
  • BN_BLINDING_unlock() β€” unlocks the BN_BLINDING structure πŸ”“
  • BN_BLINDING_get_flags() β€” returns the BN_BLINDING flags. Currently there are two supported flags: BN_BLINDING_NO_UPDATE and BN_BLINDING_NO_RECREATE. BN_BLINDING_NO_UPDATE inhibits the automatic update of the BN_BLINDING parameters after each use, and BN_BLINDING_NO_RECREATE inhibits the automatic re-creation of the BN_BLINDING parameters after a fixed number of uses (currently 32). In newly allocated BN_BLINDING objects, no flags are set β€” a clean slate, a fresh start 🌱. And BN_BLINDING_set_flags() sets the BN_BLINDING parameters flags.
  • BN_BLINDING_create_param() β€” creates new BN_BLINDING parameters using the exponent e and the modulus m. bn_mod_exp and m_ctx can be used to pass special functions for exponentiation (normally BN_mod_exp_mont() and BN_MONT_CTX) πŸ”₯

πŸ¦‹ RETURN VALUES πŸ¦‹

  • BN_BLINDING_new() β€” returns the newly allocated BN_BLINDING structure, or NULL in case of an error 😭
  • BN_BLINDING_update(), BN_BLINDING_convert(), BN_BLINDING_invert(), BN_BLINDING_convert_ex() and BN_BLINDING_invert_ex() β€” return 1 on success and 0 if an error occurred
  • BN_BLINDING_is_current_thread() β€” returns 1 if the current thread owns the BN_BLINDING object, 0 otherwise
  • BN_BLINDING_set_current_thread() β€” doesn't return anything. silent. mysterious. iconic 🧚
  • BN_BLINDING_lock(), BN_BLINDING_unlock() β€” return 1 if the operation succeeded or 0 on error
  • BN_BLINDING_get_flags() β€” returns the currently set BN_BLINDING flags (a unsigned long value)
  • BN_BLINDING_create_param() β€” returns the newly created BN_BLINDING parameters or NULL on error

🌈 HISTORY 🌈

okay so storytime πŸ“–: BN_BLINDING_thread_id() was first introduced in OpenSSL 1.0.0, and it deprecates BN_BLINDING_set_thread_id() and BN_BLINDING_get_thread_id(). old ones, we thank you for your service πŸ’€πŸ«‘


Copyright 2005-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 <https://www.openssl.org/source/license.html>.


fr fr bestie, that's the whole page β€” every flag, every return value, every single NULL check, nothing skipped πŸ’–

okay and that's a wrap on this one, mwah πŸ’…βœ¨ this was BN_BLINDING_NEW(3ossl) from OpenSSL 3.5.9, dated 2026-09-29 β€” go forth and blind responsibly, ily πŸŽ€πŸ¦‹πŸŒΈ

πŸ“¦ where this page comes from