BN_BN2BIN(3)
π NAME π
Welcome to BN_BN2BIN(3), bestie β this is the libcrypto page for the whole format-conversion squad: 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, and BN_mpi2bn β they do format conversions, periodt.
β¨ SYNOPSIS β¨
Okay so the lineup is giving library βlibcryptoβ #include <openssl/bn.h> energy, and here are the exact signatures:
library βlibcryptoβ #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 π¦
BN_bn2bin()β converts the absolute value ofainto big-endian form and stores it atto. Bestie,tomust point toBN_num_bytes(a)bytes of memory. That is not a suggestion, that is the assignment π .BN_bn2binpad()β also converts the absolute value ofainto big-endian form and stores it atto. Heretolenindicates 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. So check your math before you commit, okay?BN_bin2bn()β converts the positive integer in big-endian form of lengthlenatsinto aBIGNUMand places it inret. IfretisNULL, a newBIGNUMis created. New bestie acquired β¨.BN_bn2lebinpad()andBN_lebin2bn()β identical toBN_bn2binpad()andBN_bin2bn()except the buffer*tois in little-endian format. Little-endian girlies, this is your moment π.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). Do not ghost that free call, bestie π.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. Okay, tiny detail but iconic.BN_dec2bn()β same as above but using the decimal system. Decimal girlies stay winning.BN_asc2bn()β infers the number base from an optional prefix. Ifstrstarts with"0x"or"0X", it callsBN_hex2bn(), otherwiseBN_dec2bn(). If the number is negative, the minus sign can be given before or after the prefix. Flexible, lowkey.BN_print()andBN_print_fp()β write the hexadecimal encoding ofa, with a leading minus sign for negative numbers, to theBIOorFILEfp. Print it and slay π¨οΈ.BN_bn2mpi()andBN_mpi2bn()β convertBIGNUMs from and to a format that consists of the numberβs length in bytes represented as a 4-byte big-endian number, and the number itself in big-endian format, where the most significant bit signals a negative number (the representation of numbers with the MSB set is prefixed with aNULbyte). Very structured, very main character.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). ThatNULLcall is the vibe check for your buffer size π.BN_mpi2bn()β converts thelenbytes long representation atsto aBIGNUMand stores it atret, or in a newly allocatedBIGNUMifretisNULL. Cute and allocation-aware π«Ά.
Bestie warning: the buffer-size requirements are real. Do not just hope for the best β that is not the move here π.
π 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.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. No new bestie on error, noted π.BN_asc2bn()β returns1on success or0on error, in which case no newBIGNUMis created.BN_print_fp()andBN_print()β return1on success,0on write errors.BN_bn2mpi()β returns the length of the representation.BN_mpi2bn()β returns theBIGNUM, orNULLon error.- The error codes can be obtained by
ERR_get_error(3).
πΈ SEE ALSO πΈ
ASN1_INTEGER_to_BN(3), BN_new(3), BN_num_bytes(3), BN_zero(3)
Go read those too, bestie β cross-referencing is self-care π§.
β 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 since
OpenBSD 2.4. BN_asc2bin()first appeared inOpenSSL 1.0.0and has been available sinceOpenBSD 4.9. Yes, HISTORY literally spells itBN_asc2bin()β keeping that exactly as written, bestie π«Ά.BN_bn2binpad(),BN_bn2lebinpad(), andBN_lebin2bn()first appeared inOpenSSL 1.1.0and have been available sinceOpenBSD 7.0.
Sign-off from the footer, because we keep the receipts: source/version is Debian, dated June 8, 2025, on the BN_BN2BIN(3) page β love u, bye bestie ππ¦
π¦ where this page comes from
- alpine 3.24: libressl-doc 4.3.1-r0 Β· custom
- arch rolling: libressl 4.4.0-1 Β· ISC AND custom: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