| /* 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); |
| } |