From 90fe263124c38c31253f48d7187f51f9a10af3f7 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 21 Aug 2014 12:32:03 -0400 Subject: [PATCH] base32 encode --- base64.cpp | 30 ++++++++++++++++++++++++++++++ base64.h | 1 + 2 files changed, 31 insertions(+) diff --git a/base64.cpp b/base64.cpp index e731bedc..62ef7892 100644 --- a/base64.cpp +++ b/base64.cpp @@ -232,5 +232,35 @@ namespace data } return ret; } + + size_t ByteStreamToBase32 (const uint8_t * inBuf, size_t len, char * outBuf, size_t outLen) + { + size_t ret = 0, pos = 1; + int bits = 8, tmp = inBuf[0]; + while (ret < outLen && (bits > 0 || pos < len)) + { + if (bits < 5) + { + if (pos < len) + { + tmp <<= 8; + tmp |= inBuf[pos] & 0xFF; + pos++; + bits += 8; + } + else // last byte + { + tmp <<= (5 - bits); + bits = 5; + } + } + + bits -= 5; + int ind = (tmp >> bits) & 0x1F; + outBuf[ret] = (ind < 26) ? (ind + 'a') : ((ind - 26) + '2'); + ret++; + } + return ret; + } } } diff --git a/base64.h b/base64.h index 47a65def..c0ce1495 100644 --- a/base64.h +++ b/base64.h @@ -14,6 +14,7 @@ namespace data const char * GetBase64SubstitutionTable (); size_t Base32ToByteStream (const char * inBuf, size_t len, uint8_t * outBuf, size_t outLen); + size_t ByteStreamToBase32 (const uint8_t * InBuf, size_t len, char * outBuf, size_t outLen); } }