mirror of https://gitee.com/openkylin/apr.git
917 lines
32 KiB
C
917 lines
32 KiB
C
|
/* Licensed to the Apache Software Foundation (ASF) under one or more
|
||
|
* contributor license agreements. See the NOTICE file distributed with
|
||
|
* this work for additional information regarding copyright ownership.
|
||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||
|
* (the "License"); you may not use this file except in compliance with
|
||
|
* the License. You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
#include <assert.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
#include "apr_encode.h"
|
||
|
#include "apr_strings.h"
|
||
|
|
||
|
#include "abts.h"
|
||
|
#include "testutil.h"
|
||
|
|
||
|
static const unsigned char ufoobar[] = { 'f', 'o', 'o', 'b', 'a', 'r' };
|
||
|
|
||
|
static void test_encode_base64(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *src, *target;
|
||
|
const char *dest;
|
||
|
apr_size_t len;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
/*
|
||
|
* Test vectors from https://tools.ietf.org/html/rfc4648#section-10
|
||
|
*/
|
||
|
src = "";
|
||
|
target = "";
|
||
|
dest = apr_pencode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "f";
|
||
|
target = "Zg==";
|
||
|
dest = apr_pencode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "f";
|
||
|
target = "Zg";
|
||
|
dest = apr_pencode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "fo";
|
||
|
target = "Zm8=";
|
||
|
dest = apr_pencode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "fo";
|
||
|
target = "Zm8";
|
||
|
dest = apr_pencode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foo";
|
||
|
target = "Zm9v";
|
||
|
dest = apr_pencode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foo";
|
||
|
target = "Zm9v";
|
||
|
dest = apr_pencode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
static void test_encode_base64_binary(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *target;
|
||
|
const char *dest;
|
||
|
apr_size_t len;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
/*
|
||
|
* Test vectors from https://tools.ietf.org/html/rfc4648#section-10
|
||
|
*/
|
||
|
target = "";
|
||
|
dest = apr_pencode_base64_binary(pool, ufoobar, 0, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "Zg==";
|
||
|
dest = apr_pencode_base64_binary(pool, ufoobar, 1, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "Zg";
|
||
|
dest = apr_pencode_base64_binary(pool, ufoobar, 1, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "Zm8=";
|
||
|
dest = apr_pencode_base64_binary(pool, ufoobar, 2, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "Zm8";
|
||
|
dest = apr_pencode_base64_binary(pool, ufoobar, 2, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "Zm9v";
|
||
|
dest = apr_pencode_base64_binary(pool, ufoobar, 3, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "Zm9v";
|
||
|
dest = apr_pencode_base64_binary(pool, ufoobar, 3, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
static void test_decode_base64(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *target, *src;
|
||
|
const char *dest;
|
||
|
apr_size_t len;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
/*
|
||
|
* Test vectors from https://tools.ietf.org/html/rfc4648#section-10
|
||
|
*/
|
||
|
src = "";
|
||
|
target = "";
|
||
|
dest = apr_pdecode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, dest, target);
|
||
|
|
||
|
src = "Zg==";
|
||
|
target = "f";
|
||
|
dest = apr_pdecode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, dest, target);
|
||
|
|
||
|
src = "Zg";
|
||
|
target = "f";
|
||
|
dest = apr_pdecode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, dest, target);
|
||
|
|
||
|
src = "Zm8=";
|
||
|
target = "fo";
|
||
|
dest = apr_pdecode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, dest, target);
|
||
|
|
||
|
src = "Zm8";
|
||
|
target = "fo";
|
||
|
dest = apr_pdecode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, dest, target);
|
||
|
|
||
|
src = "Zm9v";
|
||
|
target = "foo";
|
||
|
dest = apr_pdecode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, dest, target);
|
||
|
|
||
|
src = "Zm9v";
|
||
|
target = "foo";
|
||
|
dest = apr_pdecode_base64(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, dest, target);
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
static void test_decode_base64_binary(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *src;
|
||
|
const unsigned char *udest;
|
||
|
apr_size_t len;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
/*
|
||
|
* Test vectors from https://tools.ietf.org/html/rfc4648#section-10
|
||
|
*/
|
||
|
src = "";
|
||
|
udest = apr_pdecode_base64_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base64_binary target!=dest", memcmp(ufoobar, udest, 0) == 0);
|
||
|
ABTS_INT_EQUAL(tc, len, 0);
|
||
|
|
||
|
src = "Zg==";
|
||
|
udest = apr_pdecode_base64_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base64_binary target!=dest", memcmp(ufoobar, udest, 1) == 0);
|
||
|
ABTS_INT_EQUAL(tc, len, 1);
|
||
|
|
||
|
src = "Zg";
|
||
|
udest = apr_pdecode_base64_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base64_binary target!=dest", memcmp(ufoobar, udest, 1) == 0);
|
||
|
ABTS_INT_EQUAL(tc, len, 1);
|
||
|
|
||
|
src = "Zm8=";
|
||
|
udest = apr_pdecode_base64_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base64_binary target!=dest", memcmp(ufoobar, udest, 2) == 0);
|
||
|
ABTS_INT_EQUAL(tc, len, 2);
|
||
|
|
||
|
src = "Zm8";
|
||
|
udest = apr_pdecode_base64_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base64_binary target!=dest", memcmp(ufoobar, udest, 2) == 0);
|
||
|
ABTS_INT_EQUAL(tc, len, 2);
|
||
|
|
||
|
src = "Zm9v";
|
||
|
udest = apr_pdecode_base64_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base64_binary target!=dest", memcmp(ufoobar, udest, 3) == 0);
|
||
|
ABTS_INT_EQUAL(tc, len, 3);
|
||
|
|
||
|
src = "Zm9v";
|
||
|
udest = apr_pdecode_base64_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base64_binary target!=dest", memcmp(ufoobar, udest, 3) == 0);
|
||
|
ABTS_INT_EQUAL(tc, len, 3);
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
static void test_encode_base32(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *src, *target;
|
||
|
const char *dest;
|
||
|
apr_size_t len;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
/*
|
||
|
* Test vectors from https://tools.ietf.org/html/rfc4648#section-10
|
||
|
*/
|
||
|
src = "";
|
||
|
target = "";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "f";
|
||
|
target = "MY======";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "f";
|
||
|
target = "MY";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "f";
|
||
|
target = "CO======";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "f";
|
||
|
target = "CO";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "fo";
|
||
|
target = "MZXQ====";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "fo";
|
||
|
target = "MZXQ";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "fo";
|
||
|
target = "CPNG====";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "fo";
|
||
|
target = "CPNG";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foo";
|
||
|
target = "MZXW6===";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foo";
|
||
|
target = "MZXW6";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foo";
|
||
|
target = "CPNMU===";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foo";
|
||
|
target = "CPNMU";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foob";
|
||
|
target = "MZXW6YQ=";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foob";
|
||
|
target = "MZXW6YQ";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foob";
|
||
|
target = "CPNMUOG=";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foob";
|
||
|
target = "CPNMUOG";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "fooba";
|
||
|
target = "MZXW6YTB";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "fooba";
|
||
|
target = "MZXW6YTB";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "fooba";
|
||
|
target = "CPNMUOJ1";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "fooba";
|
||
|
target = "CPNMUOJ1";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foobar";
|
||
|
target = "MZXW6YTBOI======";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foobar";
|
||
|
target = "MZXW6YTBOI";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foobar";
|
||
|
target = "CPNMUOJ1E8======";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "foobar";
|
||
|
target = "CPNMUOJ1E8";
|
||
|
dest = apr_pencode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
static void test_encode_base32_binary(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *target;
|
||
|
const char *dest;
|
||
|
apr_size_t len;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
/*
|
||
|
* Test vectors from https://tools.ietf.org/html/rfc4648#section-10
|
||
|
*/
|
||
|
target = "";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 0, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MY======";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 1, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MY";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 1, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CO======";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 1, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CO";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 1, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MZXQ====";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 2, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MZXQ";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 2, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CPNG====";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 2, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CPNG";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 2, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MZXW6===";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 3, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MZXW6";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 3, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CPNMU===";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 3, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CPNMU";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 3, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MZXW6YQ=";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 4, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MZXW6YQ";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 4, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CPNMUOG=";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 4, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CPNMUOG";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 4, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MZXW6YTB";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 5, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MZXW6YTB";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 5, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CPNMUOJ1";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 5, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CPNMUOJ1";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 5, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MZXW6YTBOI======";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 6, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "MZXW6YTBOI";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 6, APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CPNMUOJ1E8======";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 6, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
target = "CPNMUOJ1E8";
|
||
|
dest = apr_pencode_base32_binary(pool, ufoobar, 6, APR_ENCODE_BASE32HEX | APR_ENCODE_NOPADDING, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
static void test_decode_base32(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *target, *src;
|
||
|
const char *dest;
|
||
|
apr_size_t len;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
/*
|
||
|
* Test vectors from https://tools.ietf.org/html/rfc4648#section-10
|
||
|
*/
|
||
|
src = "";
|
||
|
target = "";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MY======";
|
||
|
target = "f";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MY";
|
||
|
target = "f";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CO======";
|
||
|
target = "f";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CO";
|
||
|
target = "f";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MZXQ====";
|
||
|
target = "fo";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MZXQ";
|
||
|
target = "fo";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CPNG====";
|
||
|
target = "fo";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CPNG";
|
||
|
target = "fo";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MZXW6===";
|
||
|
target = "foo";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MZXW6";
|
||
|
target = "foo";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CPNMU===";
|
||
|
target = "foo";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CPNMU";
|
||
|
target = "foo";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MZXW6YQ=";
|
||
|
target = "foob";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MZXW6YQ=";
|
||
|
target = "foob";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CPNMUOG=";
|
||
|
target = "foob";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CPNMUOG";
|
||
|
target = "foob";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MZXW6YTB";
|
||
|
target = "fooba";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MZXW6YTB";
|
||
|
target = "fooba";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CPNMUOJ1";
|
||
|
target = "fooba";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CPNMUOJ1";
|
||
|
target = "fooba";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MZXW6YTBOI======";
|
||
|
target = "foobar";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "MZXW6YTBOI";
|
||
|
target = "foobar";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CPNMUOJ1E8======";
|
||
|
target = "foobar";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
src = "CPNMUOJ1E8";
|
||
|
target = "foobar";
|
||
|
dest = apr_pdecode_base32(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
static void test_decode_base32_binary(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *src;
|
||
|
const unsigned char *udest;
|
||
|
apr_size_t len;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
/*
|
||
|
* Test vectors from https://tools.ietf.org/html/rfc4648#section-10
|
||
|
*/
|
||
|
src = "";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 0) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 0, len);
|
||
|
|
||
|
src = "MY======";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 1) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 1, len);
|
||
|
|
||
|
src = "MY";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 1) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 1, len);
|
||
|
|
||
|
src = "CO======";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 1) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 1, len);
|
||
|
|
||
|
src = "CO";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 1) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 1, len);
|
||
|
|
||
|
src = "MZXQ====";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 2) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 2, len);
|
||
|
|
||
|
src = "MZXQ";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 2) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 2, len);
|
||
|
|
||
|
src = "CPNG====";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 2) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 2, len);
|
||
|
|
||
|
src = "CPNG";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 2) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 2, len);
|
||
|
|
||
|
src = "MZXW6===";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 3) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 3, len);
|
||
|
|
||
|
src = "MZXW6";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 3) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 3, len);
|
||
|
|
||
|
src = "CPNMU===";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 3) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 3, len);
|
||
|
|
||
|
src = "CPNMU";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 3) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 3, len);
|
||
|
|
||
|
src = "MZXW6YQ=";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 4) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 4, len);
|
||
|
|
||
|
src = "MZXW6YQ=";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 4) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 4, len);
|
||
|
|
||
|
src = "CPNMUOG=";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 4) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 4, len);
|
||
|
|
||
|
src = "CPNMUOG";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 4) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 4, len);
|
||
|
|
||
|
src = "MZXW6YTB";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 5) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 5, len);
|
||
|
|
||
|
src = "MZXW6YTB";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 5) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 5, len);
|
||
|
|
||
|
src = "CPNMUOJ1";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 5) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 5, len);
|
||
|
|
||
|
src = "CPNMUOJ1";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 5) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 5, len);
|
||
|
|
||
|
src = "MZXW6YTBOI======";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 6) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 6, len);
|
||
|
|
||
|
src = "MZXW6YTBOI";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 6) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 6, len);
|
||
|
|
||
|
src = "CPNMUOJ1E8======";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 6) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 6, len);
|
||
|
|
||
|
src = "CPNMUOJ1E8";
|
||
|
udest = apr_pdecode_base32_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_BASE32HEX, &len);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base32_binary target!=dest", memcmp(ufoobar, udest, 6) == 0);
|
||
|
ABTS_INT_EQUAL(tc, 6, len);
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
static void test_encode_base16(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *src, *target;
|
||
|
const char *dest;
|
||
|
apr_size_t len;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
src = "foobar";
|
||
|
target = "666f6f626172";
|
||
|
dest = apr_pencode_base16(pool, src, APR_ENCODE_STRING, APR_ENCODE_LOWER, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
apr_encode_base16(NULL, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc,
|
||
|
apr_psprintf(pool, "size mismatch (%" APR_SIZE_T_FMT "!=%" APR_SIZE_T_FMT ")", len, strlen(dest) + 1),
|
||
|
(len == strlen(dest) + 1));
|
||
|
|
||
|
src = "foobar";
|
||
|
target = "666F6F626172";
|
||
|
dest = apr_pencode_base16(pool, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
apr_encode_base16(NULL, src, APR_ENCODE_STRING, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc,
|
||
|
apr_psprintf(pool, "size mismatch (%" APR_SIZE_T_FMT "!=%" APR_SIZE_T_FMT ")", len, strlen(dest) + 1),
|
||
|
(len == strlen(dest) + 1));
|
||
|
|
||
|
src = "foobar";
|
||
|
target = "66:6f:6f:62:61:72";
|
||
|
dest = apr_pencode_base16(pool, src, APR_ENCODE_STRING, APR_ENCODE_COLON | APR_ENCODE_LOWER, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
apr_encode_base16(NULL, src, APR_ENCODE_STRING, APR_ENCODE_COLON, &len);
|
||
|
ABTS_ASSERT(tc,
|
||
|
apr_psprintf(pool, "size mismatch (%" APR_SIZE_T_FMT "!=%" APR_SIZE_T_FMT ")", len, strlen(dest) + 1),
|
||
|
(len == strlen(dest) + 1));
|
||
|
|
||
|
src = "foobar";
|
||
|
target = "66:6F:6F:62:61:72";
|
||
|
dest = apr_pencode_base16(pool, src, APR_ENCODE_STRING, APR_ENCODE_COLON, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
apr_encode_base16(NULL, src, APR_ENCODE_STRING, APR_ENCODE_COLON, &len);
|
||
|
ABTS_ASSERT(tc,
|
||
|
apr_psprintf(pool, "size mismatch (%" APR_SIZE_T_FMT "!=%" APR_SIZE_T_FMT ")", len, strlen(dest) + 1),
|
||
|
(len == strlen(dest) + 1));
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
static void test_encode_base16_binary(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *target;
|
||
|
const unsigned char usrc[] = {
|
||
|
0xFF, 0x00, 0xFF, 0x00
|
||
|
};
|
||
|
const char *dest;
|
||
|
apr_size_t len;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
target = "ff00ff00";
|
||
|
dest = apr_pencode_base16_binary(pool, usrc, 4, APR_ENCODE_LOWER, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
apr_encode_base16_binary(NULL, usrc, 4, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc,
|
||
|
apr_psprintf(pool, "size mismatch (%" APR_SIZE_T_FMT "!=%" APR_SIZE_T_FMT ")", len, strlen(dest) + 1),
|
||
|
(len == strlen(dest) + 1));
|
||
|
|
||
|
target = "FF00FF00";
|
||
|
dest = apr_pencode_base16_binary(pool, usrc, 4, APR_ENCODE_NONE, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
apr_encode_base16_binary(NULL, usrc, 4, APR_ENCODE_NONE, &len);
|
||
|
ABTS_ASSERT(tc,
|
||
|
apr_psprintf(pool, "size mismatch (%" APR_SIZE_T_FMT "!=%" APR_SIZE_T_FMT ")", len, strlen(dest) + 1),
|
||
|
(len == strlen(dest) + 1));
|
||
|
|
||
|
target = "ff:00:ff:00";
|
||
|
dest = apr_pencode_base16_binary(pool, usrc, 4, APR_ENCODE_COLON | APR_ENCODE_LOWER, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
apr_encode_base16_binary(NULL, usrc, 4, APR_ENCODE_COLON, &len);
|
||
|
ABTS_ASSERT(tc,
|
||
|
apr_psprintf(pool, "size mismatch (%" APR_SIZE_T_FMT "!=%" APR_SIZE_T_FMT ")", len, strlen(dest) + 1),
|
||
|
(len == strlen(dest) + 1));
|
||
|
|
||
|
target = "FF:00:FF:00";
|
||
|
dest = apr_pencode_base16_binary(pool, usrc, 4, APR_ENCODE_COLON, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
apr_encode_base16_binary(NULL, usrc, 4, APR_ENCODE_COLON, &len);
|
||
|
ABTS_ASSERT(tc,
|
||
|
apr_psprintf(pool, "size mismatch (%" APR_SIZE_T_FMT "!=%" APR_SIZE_T_FMT ")", len, strlen(dest) + 1),
|
||
|
(len == strlen(dest) + 1));
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
static void test_decode_base16(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *src, *target;
|
||
|
const char *dest;
|
||
|
apr_size_t len;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
src = "3A:3B:3C:3D";
|
||
|
target = ":;<=";
|
||
|
dest = apr_pdecode_base16(pool, src, APR_ENCODE_STRING, APR_ENCODE_COLON, &len);
|
||
|
ABTS_STR_EQUAL(tc, target, dest);
|
||
|
ABTS_INT_EQUAL(tc, 4, (int)len);
|
||
|
apr_decode_base16(NULL, src, APR_ENCODE_STRING, APR_ENCODE_COLON, &len);
|
||
|
ABTS_ASSERT(tc,
|
||
|
apr_psprintf(pool, "size mismatch (%" APR_SIZE_T_FMT "!=%" APR_SIZE_T_FMT ")", len, (apr_size_t) 5),
|
||
|
(len == 5));
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
static void test_decode_base16_binary(abts_case * tc, void *data)
|
||
|
{
|
||
|
apr_pool_t *pool;
|
||
|
const char *src;
|
||
|
const unsigned char utarget[] = {
|
||
|
0xFF, 0x00, 0xFF, 0x00
|
||
|
};
|
||
|
const unsigned char *udest;
|
||
|
apr_size_t len, vlen;
|
||
|
|
||
|
apr_pool_create(&pool, NULL);
|
||
|
|
||
|
src = "ff:00:ff:00";
|
||
|
udest = apr_pdecode_base16_binary(pool, src, APR_ENCODE_STRING, APR_ENCODE_COLON, &vlen);
|
||
|
ABTS_ASSERT(tc, "apr_pdecode_base16_binary target!=dest", memcmp(utarget, udest, 4) == 0);
|
||
|
ABTS_INT_EQUAL(tc, (int)vlen, 4);
|
||
|
apr_decode_base16_binary(NULL, src, APR_ENCODE_STRING, APR_ENCODE_COLON, &len);
|
||
|
ABTS_ASSERT(tc,
|
||
|
apr_psprintf(pool, "size mismatch (%" APR_SIZE_T_FMT "!=%" APR_SIZE_T_FMT ")", len, (apr_size_t) 4),
|
||
|
(len == 4));
|
||
|
|
||
|
apr_pool_destroy(pool);
|
||
|
}
|
||
|
|
||
|
abts_suite *testencode(abts_suite * suite)
|
||
|
{
|
||
|
suite = ADD_SUITE(suite);
|
||
|
|
||
|
abts_run_test(suite, test_encode_base64, NULL);
|
||
|
abts_run_test(suite, test_encode_base64_binary, NULL);
|
||
|
abts_run_test(suite, test_decode_base64, NULL);
|
||
|
abts_run_test(suite, test_decode_base64_binary, NULL);
|
||
|
abts_run_test(suite, test_encode_base32, NULL);
|
||
|
abts_run_test(suite, test_encode_base32_binary, NULL);
|
||
|
abts_run_test(suite, test_decode_base32, NULL);
|
||
|
abts_run_test(suite, test_decode_base32_binary, NULL);
|
||
|
abts_run_test(suite, test_encode_base16, NULL);
|
||
|
abts_run_test(suite, test_encode_base16_binary, NULL);
|
||
|
abts_run_test(suite, test_decode_base16, NULL);
|
||
|
abts_run_test(suite, test_decode_base16_binary, NULL);
|
||
|
|
||
|
return suite;
|
||
|
}
|