BN_SET_FLAGS(3)

πŸ“¦ version 4.1.0, in opensuse-leap 16.0

okay so bestie, this is BN_SET_FLAGS(3) from the Library Functions Manual, and we’re talking about flags on BIGNUM objects β€” lowkey important, highkey iconic βœ¨πŸ’…

πŸ’– NAME πŸ’–

BN_set_flags, BN_get_flags β€” enable and inspect flags on BIGNUM objects 🫢

✨ SYNOPSIS ✨

#include <openssl/bn.h>

void
BN_set_flags(BIGNUM *b, int flags);

int
BN_get_flags(const BIGNUM *b, int flags);

πŸ¦‹ DESCRIPTION πŸ¦‹

BN_set_flags() enables the given flags on b. The flags argument can contain zero or more of the following constants OR’ed together, no cap:

  • BN_FLG_CONSTTIME β€” if this flag is set on the divident a or the divisor d in BN_div(3), on the exponent p in BN_mod_exp(3), or on the divisor a or the modulus n in BN_mod_inverse(3), these functions select algorithms with an execution time independent of the respective numbers, to avoid exposing sensitive information to timing side-channel attacks. This flag is off by default for BIGNUM objects created with BN_new(3) β±οΈπŸ›‘οΈ
  • BN_FLG_MALLOCED β€” if this flag is set, BN_free(3) and BN_clear_free(3) will not only clear and free the components of b, but also b itself. This flag is set internally by BN_new(3). Setting it manually on an existing BIGNUM object is usually a bad idea and can cause calls to free(3) with bogus arguments πŸ’€πŸ™ˆ
  • BN_FLG_STATIC_DATA β€” if this flag is set, BN_clear_free(3) will neither clear nor free the memory used for storing the number. Consequently, setting it manually on an existing BIGNUM object is usually a terrible idea that can cause both disclosure of secret data and memory leaks. This flag is automatically set on the constant BIGNUM object returned by BN_value_one(3) 🚨🧨

BN_get_flags() interprets flags as a bitmask and returns those of the given flags that are set in b, OR’ed together, or 0 if none of the given flags is set. The flags argument has the same syntax as for BN_set_flags() πŸ”βœ¨

🌈 RETURN VALUES 🌈

BN_get_flags() returns zero or more of the above constants, OR’ed together. That’s the whole vibe check πŸ’–

πŸŽ€ SEE ALSO πŸŽ€

⭐ HISTORY ⭐

BN_set_flags() and BN_get_flags() first appeared in SSLeay 0.9.1 and have been available since OpenBSD 2.6. vintage but still serving πŸ‘‘πŸ“œ

πŸ’… CAVEATS πŸ’…

No public interface exists to clear a flag once it is set. So think twice before using BN_set_flags(), bestie β€” fr fr 🫢⚠️

πŸ’€ BUGS πŸ’€

  • Even if the BN_FLG_CONSTTIME flag is set on a or b, BN_gcd() neither fails nor operates in constant time, potentially allowing timing side-channel attacks 😭⏱️
  • Even if the BN_FLG_CONSTTIME flag is set on p, if the modulus m is even, BN_mod_exp(3) does not operate in constant time, potentially allowing timing side-channel attacks πŸ˜¬πŸ•³οΈ
  • If BN_FLG_CONSTTIME is set on p, BN_exp() fails instead of operating in constant time πŸ’₯🚫

okay bye bestie β€” this one’s from the Debian edition, dated April 27, 2023 πŸ’–πŸŽ€πŸ«Ά

πŸ“¦ where this page comes from