From b7199a77aca01f85a3359737cd4e6c73c29bd82a Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Fri, 21 Feb 2020 19:52:14 +0000 Subject: extend base64 api with url safe versions --- test/base64.c | 84 ++++++++++++++++++++++++++++++++++++++------------------- test/runtest.sh | 64 ++++++++++++++++++++++++++++++++++--------- 2 files changed, 108 insertions(+), 40 deletions(-) (limited to 'test') diff --git a/test/base64.c b/test/base64.c index 7b09205..5cb8a7c 100644 --- a/test/base64.c +++ b/test/base64.c @@ -16,37 +16,65 @@ #include #include #include +#include #include int main(int argc, char**argv) { - uint8_t *buffer; - size_t buffer_len=0; - uint8_t *output; - size_t output_len; - - if (scanf("%1024mc%n", &buffer, (int *)&buffer_len) < 1) { - return 1; - } - - if (argc == 1) { - /* encode */ - nsu_base64_encode_alloc(buffer, buffer_len, &output, &output_len); - } else if ((argv[1][0] == '-') && (argv[1][1] == 'd')) { - /* decode */ - nsu_base64_decode_alloc(buffer, buffer_len, &output, &output_len); - } else { - fprintf(stderr, "Usage: %s [-d]\n", argv[0]); - return 1; - } - - if (output != NULL) { - printf("%.*s", (int)output_len, output); - free(output); - } - - free(buffer); - - return 0; + uint8_t *buffer; + size_t buffer_len=0; + uint8_t *output; + size_t output_len; + int opt; + int decode = 0; + int url = 0; + + + while ((opt = getopt(argc, argv, "du")) != -1) { + switch (opt) { + case 'd': + decode = 1; + break; + case 'u': + url = 1; + break; + + default: /* '?' */ + fprintf(stderr, "Usage: %s [-d] [-u]\n", argv[0]); + exit(EXIT_FAILURE); + + } + } + + if (scanf("%1024mc%n", &buffer, (int *)&buffer_len) < 1) { + return 1; + } + + + if (decode) { + /* decode */ + if (url) { + nsu_base64_decode_alloc_url(buffer, buffer_len, &output, &output_len); + } else { + + nsu_base64_decode_alloc(buffer, buffer_len, &output, &output_len); + } + } else { + /* encode */ + if (url) { + nsu_base64_encode_alloc_url(buffer, buffer_len, &output, &output_len); + } else { + nsu_base64_encode_alloc(buffer, buffer_len, &output, &output_len); + } + } + + if (output != NULL) { + printf("%.*s", (int)output_len, output); + free(output); + } + + free(buffer); + + return 0; } diff --git a/test/runtest.sh b/test/runtest.sh index efcb79f..9f02e1c 100755 --- a/test/runtest.sh +++ b/test/runtest.sh @@ -5,30 +5,70 @@ b64enctst() { ENC=$(echo -n "${1}" | ${TEST_PATH}/test_base64 ) if [ "${ENC}" != "${2}" ];then - echo "Base64 encode error ${ENC} != ${2}" + echo "Base64 encode error '${ENC}' != '${2}'" exit 2 - fi + fi } b64dectst() { DEC=$(echo -n "$1" | ${TEST_PATH}/test_base64 -d ) if [ "${DEC}" != "$2" ];then - echo "Base64 decode error ${DEC} != $2" + echo "Base64 decode error '${DEC}' != '$2'" exit 3 - fi + fi } -b64enctst 'f' 'Zg==' -b64enctst 'fo' 'Zm8=' -b64enctst 'foo' 'Zm9v' -b64enctst 'foob' 'Zm9vYg==' -b64enctst 'fooba' 'Zm9vYmE=' +b64urlenctst() +{ + ENC=$(echo -n "${1}" | ${TEST_PATH}/test_base64 -u ) + if [ "${ENC}" != "${2}" ];then + echo "Base64 url encode error '${ENC}' != '${2}'" + exit 2 + fi +} + +b64urldectst() +{ + DEC=$(echo -n "$1" | ${TEST_PATH}/test_base64 -d -u ) + if [ "${DEC}" != "$2" ];then + echo "Base64 url decode error '${DEC}' != '$2'" + exit 3 + fi +} + +b64enctst 'f' 'Zg==' +b64enctst 'fo' 'Zm8=' +b64enctst 'foo' 'Zm9v' +b64enctst ' >' 'ICA+' +b64enctst ' ?' 'ICA/' +b64enctst 'foob' 'Zm9vYg==' +b64enctst 'fooba' 'Zm9vYmE=' b64enctst 'foobar' 'Zm9vYmFy' -b64dectst 'Zg==' 'f' -b64dectst 'Zm8=' 'fo' -b64dectst 'Zm9v' 'foo' +b64dectst 'Zg==' 'f' +b64dectst 'Zm8=' 'fo' +b64dectst 'Zm9v' 'foo' +b64dectst 'ICA+' ' >' +b64dectst 'ICA/' ' ?' b64dectst 'Zm9vYg==' 'foob' b64dectst 'Zm9vYmE=' 'fooba' b64dectst 'Zm9vYmFy' 'foobar' + +b64urlenctst 'f' 'Zg==' +b64urlenctst 'fo' 'Zm8=' +b64urlenctst 'foo' 'Zm9v' +b64urlenctst ' >' 'ICA-' +b64urlenctst ' ?' 'ICA_' +b64urlenctst 'foob' 'Zm9vYg==' +b64urlenctst 'fooba' 'Zm9vYmE=' +b64urlenctst 'foobar' 'Zm9vYmFy' + +b64urldectst 'Zg==' 'f' +b64urldectst 'Zm8=' 'fo' +b64urldectst 'Zm9v' 'foo' +b64urldectst 'ICA-' ' >' +b64urldectst 'ICA_' ' ?' +b64urldectst 'Zm9vYg==' 'foob' +b64urldectst 'Zm9vYmE=' 'fooba' +b64urldectst 'Zm9vYmFy' 'foobar' -- cgit v1.2.3