/* SPDX-License-Identifier: LGPL-2.1-or-later */ #include "cryptsetup-token-util.h" #include "string-util.h" int crypt_dump_buffer_to_hex_string( const char *buf, size_t buf_size, char **ret_dump_str) { int r; _cleanup_free_ char *dump_str = NULL; assert(buf || !buf_size); assert(ret_dump_str); for (size_t i = 0; i < buf_size; i++) { /* crypt_dump() breaks line after every * 16th couple of chars in dumped hexstring */ r = strextendf_with_separator( &dump_str, (i && !(i % 16)) ? CRYPT_DUMP_LINE_SEP : " ", "%02hhx", buf[i]); if (r < 0) return r; } *ret_dump_str = TAKE_PTR(dump_str); return 0; } int crypt_dump_hex_string(const char *hex_str, char **ret_dump_str) { int r; size_t len; _cleanup_free_ char *dump_str = NULL; assert(hex_str); assert(ret_dump_str); len = strlen(hex_str) >> 1; for (size_t i = 0; i < len; i++) { /* crypt_dump() breaks line after every * 16th couple of chars in dumped hexstring */ r = strextendf_with_separator( &dump_str, (i && !(i % 16)) ? CRYPT_DUMP_LINE_SEP : " ", "%.2s", hex_str + (i<<1)); if (r < 0) return r; } *ret_dump_str = TAKE_PTR(dump_str); return 0; } int crypt_normalize_pin(const void *pin, size_t pin_size, char **ret_pin_string) { assert(pin || pin_size == 0); assert(ret_pin_string); if (pin_size == 0) { *ret_pin_string = NULL; return 0; } return make_cstring(pin, pin_size, MAKE_CSTRING_ALLOW_TRAILING_NUL, ret_pin_string); }