From 61765136cf92be2884603bc3fac020a1c6ed91f4 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 1 Oct 2019 10:32:31 +0200 Subject: common: New function hex2fixedbuf. * common/convert.c (hex2fixedbuf): New. -- This function is useful for converting hex strings received via assuan if they have a known length. For example keygrips or the new UBID. Signed-off-by: Werner Koch --- common/t-convert.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'common/t-convert.c') diff --git a/common/t-convert.c b/common/t-convert.c index e25de9012..c7ba8f6f7 100644 --- a/common/t-convert.c +++ b/common/t-convert.c @@ -445,6 +445,43 @@ test_hex2str (void) +static void +test_hex2fixedbuf (void) +{ + static struct { + const char *hex; + unsigned bufsize; + unsigned int resultlen; + const char *result; + } tests[] = { + /* Simple tests. */ + { "112233445566778899aabbccddeeff1122", 17, 34, + "\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x11\x22"}, + { " 112233445566778899aabbccddeeff1122", 17, 35, + "\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x11\x22"}, + { "112233445566778899aabbccddeeff1122 ", 17, 35, + "\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x11\x22"}, + { " 112233445566778899aabbccddeeff1122 ", 17, 37, + "\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x11\x22"}, + { " 112233445566778899aabbccddeeff11 ", 16, 35, + "\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x11"}, + { " 112233445566778899aabbccddeeff11", 16, 34, + "\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff\x11"} + }; + char buffer[100]; /* Large enough for all tests. */ + int idx; + unsigned int n; + + for (idx=0; idx < DIM (tests); idx++) + { + n = hex2fixedbuf (tests[idx].hex, buffer, tests[idx].bufsize); + if (n != tests[idx].resultlen) + fail (idx); + else if (memcmp (buffer, tests[idx].result, tests[idx].bufsize)) + fail (idx); + } + +} int @@ -458,6 +495,7 @@ main (int argc, char **argv) test_bin2hex (); test_bin2hexcolon (); test_hex2str (); + test_hex2fixedbuf (); return 0; } -- cgit v1.2.3