BN_BN2BIN(3)
π BN_BN2BIN(3) π
okay bestie, welcome to the BN_BN2BIN(3) page from the Library Functions Manual π
this is the whole format conversions situation for BIGNUMs, and it is genuinely iconic. no cap, we're turning numbers into bytes and strings and back again β let's go β¨
πΈ NAME πΈ
BN_bn2bin, BN_bn2binpad, BN_bin2bn, BN_bn2lebinpad, BN_lebin2bn, BN_bn2hex, BN_bn2dec, BN_hex2bn, BN_dec2bn, BN_asc2bn, BN_print, BN_print_fp, BN_bn2mpi, BN_mpi2bn β format conversions π¦
β¨ SYNOPSIS β¨
copy these signatures exactly, bestie, character for character β i don't make the rules π
#include <openssl/bn.h>
int
BN_bn2bin(const BIGNUM *a, unsigned char *to);
int
BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen);
BIGNUM *
BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret);
int
BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen);
BIGNUM *
BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret);
char *
BN_bn2hex(const BIGNUM *a);
char *
BN_bn2dec(const BIGNUM *a);
int
BN_hex2bn(BIGNUM **ap, const char *str);
int
BN_dec2bn(BIGNUM **ap, const char *str);
int
BN_asc2bn(BIGNUM **ap, const char *str);
int
BN_print(BIO *fp, const BIGNUM *a);
int
BN_print_fp(FILE *fp, const BIGNUM *a);
int
BN_bn2mpi(const BIGNUM *a, unsigned char *to);
BIGNUM *
BN_mpi2bn(unsigned char *s, int len, BIGNUM *ret);
π DESCRIPTION π
okay so here's the tea, function by function π«Ά
BN_bn2bin()β converts the absolute value ofainto big-endian form and stores it atto.tomust point toBN_num_bytes(a)bytes of memory. not optional, bestie πBN_bn2binpad()β also converts the absolute value ofainto big-endian form and stores it atto.tolenindicates the length of the output buffer*to. The result is padded with zeros if necessary. Iftolenis less thanBN_num_bytes(a), an error is returned. rude but fair πBN_bin2bn()β converts the positive integer in big-endian form of lengthlenatsinto aBIGNUMand places it inret. IfretisNULL, a newBIGNUMis created. fresh BIGNUM just dropped β¨BN_bn2lebinpad()andBN_lebin2bn()β identical toBN_bn2binpad()andBN_bin2bn()except the buffer*tois in little-endian format. same energy, different byte order π¦BN_bn2hex()andBN_bn2dec()β return printable strings containing the hexadecimal and decimal encoding ofarespectively. For negative numbers, the string is prefaced with a leading minus sign. The string must be freed later usingfree(3). yes bestie, free it β that's the whole vibe πBN_hex2bn()β interpretsstras a hexadecimal number. The string may start with a minus sign (β-β). Conversion stops at the first byte that is not a hexadecimal digit. The number is converted to aBIGNUMand stored in**ap. If*apisNULL, a newBIGNUMis created. IfapisNULL, it only computes the number's length in hexadecimal digits, also counting the leading minus sign if there is one. A "negative zero" is converted to zero.BN_dec2bn()is the same using the decimal system. negative zero said not today πBN_asc2bn()β infers the number base from an optional prefix. Ifstrstarts with0xor0X, it callsBN_hex2bn(), otherwiseBN_dec2bn(). If the number is negative, the minus sign can be given before or after the prefix. prefix detective behavior π₯BN_print()andBN_print_fp()β write the hexadecimal encoding ofa, with a leading minus sign for negative numbers, to theBIOorFILEfp. print it, hex it, slay it πBN_bn2mpi()andBN_mpi2bn()β convertBIGNUMs from and to a format that consists of the number's length in bytes represented as a4-bytebig-endian number, and the number itself in big-endian format, where the most significant bit signals a negative number (the representation of numbers with theMSBset is prefixed with aNULbyte). okay this one is giving very structured πBN_bn2mpi()β stores the representation ofaatto, where*tomust be large enough to hold the result. The size can be determined by callingBN_bn2mpi(a, NULL). size check first, bestie βBN_mpi2bn()β converts thelenbytes long representation atsto aBIGNUMand stores it atret, or in a newly allocatedBIGNUMifretisNULL. new BIGNUM if you need one π«Ά
π RETURN VALUES π
BN_bn2bin()β returns the length of the big-endian number placed atto. πBN_bn2binpad()andBN_bn2lebinpad()β return the number of bytes written or-1if the supplied buffer is too small. too small = no thanks πBN_bin2bn()andBN_lebin2bn()β return theBIGNUM, orNULLon error.BN_bn2hex()andBN_bn2dec()β return aNUL-terminated string, orNULLon error.BN_hex2bn()andBN_dec2bn()return the number's length in hexadecimal or decimal digits, also counting the leading minus sign if there is one, or0on error, in which case no newBIGNUMis created.BN_asc2bn()returns1on success or0on error, in which case no newBIGNUMis created. error path said no new BIGNUM πBN_print_fp()andBN_print()β return1on success,0on write errors. πBN_bn2mpi()β returns the length of the representation.BN_mpi2bn()returns theBIGNUM, orNULLon error. π
friendly reminder: The error codes can be obtained by ERR_get_error(3). go get the receipts, bestie π
π¦ SEE ALSO π¦
the whole friend group, honestly π«Ά
π HISTORY π
BN_bn2bin(),BN_bin2bn(), andBN_print()first appeared inSSLeay 0.5.1.BN_print_fp()first appeared inSSLeay 0.6.0.BN_bn2hex(),BN_bn2dec(),BN_hex2bn(),BN_dec2bn(),BN_bn2mpi(), andBN_mpi2bn()first appeared inSSLeay 0.9.0. All these functions have been available sinceOpenBSD 2.4. vintage but still serving πBN_asc2bin()first appeared inOpenSSL 1.0.0and has been available sinceOpenBSD 4.9. yep, that's exactly how it's written in the history section πBN_bn2binpad(),BN_bn2lebinpad(), andBN_lebin2bn()first appeared inOpenSSL 1.1.0and have been available sinceOpenBSD 7.0. newer era unlocked β¨
π okay that's the whole page! this cutie is from the Debian crew, dated July 9, 2023, and it's the BN_BN2BIN(3) page. mwah! ππ«Ά
π¦ where this page comes from
- opensuse-leap 16.0: libressl-devel-doc 4.1.0-bp160.1.1 Β· OpenSSL
- Copyright (c) 2000, 2002, 2016 The OpenSSL Project. All rights reserved
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms