[dnssec] dnssec_binary_to_base64() API

This commit is contained in:
Jan Vcelak 2014-09-04 16:59:54 +02:00
parent b9c4e0ffe0
commit 634cbaef6c
3 changed files with 38 additions and 0 deletions

View file

@ -197,3 +197,22 @@ int dnssec_binary_from_base64(const dnssec_binary_t *base64,
return DNSSEC_EOK;
}
_public_
int dnssec_binary_to_base64(const dnssec_binary_t *binary,
dnssec_binary_t *base64)
{
if (!binary || !base64) {
return DNSSEC_EINVAL;
}
size_t base64_size = BASE64_ENCODE_RAW_LENGTH(binary->size);
int r = dnssec_binary_resize(base64, base64_size);
if (r != DNSSEC_EOK) {
return r;
}
base64_encode_raw(base64->data, binary->size, binary->data);
return DNSSEC_EOK;
}

View file

@ -134,4 +134,14 @@ void dnssec_binary_ltrim(dnssec_binary_t *binary);
int dnssec_binary_from_base64(const dnssec_binary_t *base64,
dnssec_binary_t *binary);
/*!
* Create Base64 encoded string from binary data.
*
* \param[in] binary Binary data.
* \param[out] base64 Base64 encode data.
*
* \return Error code, DNSSEC_EOK if successful.
*/
int dnssec_binary_to_base64(const dnssec_binary_t *binary,
dnssec_binary_t *base64);
/*! @} */

View file

@ -31,6 +31,7 @@ typedef struct test_string {
static void test_base64(void)
{
test_string_t data[] = {
{ "", 0, "", 0 },
{ "YQ==", 4, "a", 1 },
{ "YWI=", 4, "ab", 2 },
{ "YWJj", 4, "abc", 3 },
@ -56,7 +57,15 @@ static void test_base64(void)
memcmp(binary.data, ts->decoded, binary.size) == 0,
"dnssec_binary_from_base64() for '%s'", ts->encoded);
dnssec_binary_t encoded = { 0 };
r = dnssec_binary_to_base64(&binary, &encoded);
ok(r == DNSSEC_EOK &&
encoded.size == ts->encoded_size &&
memcmp(encoded.data, ts->encoded, encoded.size) == 0,
"dnssec_binary_to_base64() for '%s'", ts->encoded);
dnssec_binary_free(&binary);
dnssec_binary_free(&encoded);
}
}