OPENSSL_HEXCHAR2INT(3ossl)

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

✨ OPENSSL_HEXCHAR2INT πŸ’…

okay bestie, so this is the OpenSSL manual page for OPENSSL_HEXCHAR2INT β€” and it's literally the whole hex encoding/decoding situation, no cap πŸŽ€


🌸 NAME 🌸

OPENSSL_hexchar2int, OPENSSL_hexstr2buf_ex, OPENSSL_hexstr2buf, OPENSSL_buf2hexstr_ex, OPENSSL_buf2hexstr β€” these are the Hex encoding and decoding functions, and honestly they're giving very useful πŸ¦‹


✨ SYNOPSIS ✨

#include <openssl/crypto.h>

int OPENSSL_hexchar2int(unsigned char c);
int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, long *buflen,
                          const char *str, const char sep);
unsigned char *OPENSSL_hexstr2buf(const char *str, long *len);
int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength,
                          const unsigned char *buf, long buflen,
                          const char sep);
char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen);

like, look at all those signatures slaying in a row πŸ’–


🌈 DESCRIPTION 🌈

okay so let's go through these one by one, because each one is kinda its own little icon πŸ‘‘

πŸ’œ the one that reads a single char

OPENSSL_hexchar2int() converts a hexadecimal character to its numeric equivalent. that's it, that's the whole job. one char in, one number out. simple queen behavior ✨

🩷 the ones that decode a hex string into bytes

OPENSSL_hexstr2buf_ex() decodes the hex string str and places the resulting string of bytes in the given buf. 🫢

so about the arguments, bestie:

  • the character sep is the separator between the bytes β€” and setting this to '\0' means that there is no separator, periodt
  • buf_n gives the size of the buffer
  • if buflen is not NULL, it is filled in with the result length
  • to find out how large the result will be, call this function with NULL for buf (yes, that's the whole trick, iykyk)

also important 🚨 colons between two-character hex "bytes" are accepted and ignored. and an odd number of hex digits is an error β€” like, do not come in here with half a byte, that's not the vibe 😭

OPENSSL_hexstr2buf() does the same thing as OPENSSL_hexstr2buf_ex(), but it allocates the space for the result, and returns the result. it uses a default separator of ':'. πŸ’… the memory is allocated by calling OPENSSL_malloc() and should be released by calling OPENSSL_free() β€” so like, please free it, don't just leave it there, that's not main character energy πŸ™ˆ

πŸ¦‹ the ones that turn bytes back into a hex string

OPENSSL_buf2hexstr_ex() encodes the contents of the given buf with length buflen and places the resulting hexadecimal character string in the given str. ✨

the deets:

  • the character sep is the separator between the bytes β€” setting this to '\0' means that there is no separator
  • str_n gives the size of the of the string buffer (yes it really says "of the of the", we're keeping it, no notes πŸ’€)
  • if strlength is not NULL, it is filled in with the result length
  • to find out how large the result will be, call this function with NULL for str β€” same little power move as before 🧚

OPENSSL_buf2hexstr() does the same thing as OPENSSL_buf2hexstr_ex(), but it allocates the space for the result, and returns the result. it uses a default separator of ':'. 🌸 the memory is allocated by calling OPENSSL_malloc() and should be released by calling OPENSSL_free() β€” bestie, OPENSSL_free(), always 🫢


⭐ RETURN VALUES ⭐

  • OPENSSL_hexchar2int returns the value of a decoded hex character, or -1 on error. πŸ”₯
  • OPENSSL_buf2hexstr() and OPENSSL_hexstr2buf() return a pointer to allocated memory, or NULL on error. πŸ‘‘
  • OPENSSL_buf2hexstr_ex() and OPENSSL_hexstr2buf_ex() return 1 on success, or 0 on error. ✨

like, 1 means slay, 0 means something went wrong πŸ’€


Copyright 2016-2022 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>.


and that's the whole page, bestie πŸ’– so this was OpenSSL 3.5.0, dated 2026-09-25, page OPENSSL_HEXCHAR2INT(3ossl) β€” go forth and hex-decode responsibly, mwah 🧚✨

πŸ“¦ where this page comes from