17 #ifndef DISTRHO_BASE64_HPP_INCLUDED 
   18 #define DISTRHO_BASE64_HPP_INCLUDED 
   20 #include "../DistrhoUtils.hpp" 
   56 namespace DistrhoBase64Helpers {
 
   58 static const char* 
const kBase64Chars =
 
   59     "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
   60     "abcdefghijklmnopqrstuvwxyz" 
   64 uint8_t findBase64CharIndex(
const char c)
 
   66     static const uint8_t kBase64CharsLen(
static_cast<uint8_t
>(std::strlen(kBase64Chars)));
 
   68     for (uint8_t i=0; i<kBase64CharsLen; ++i)
 
   70         if (kBase64Chars[i] == c)
 
   74     d_stderr2(
"findBase64CharIndex('%c') - failed", c);
 
   79 bool isBase64Char(
const char c)
 
   81     return (std::isalnum(c) || (c == 
'+') || (c == 
'/'));
 
   90 std::vector<uint8_t> d_getChunkFromBase64String(
const char* 
const base64string)
 
   92     DISTRHO_SAFE_ASSERT_RETURN(base64string != 
nullptr, std::vector<uint8_t>());
 
   95     uint charArray3[3], charArray4[4];
 
   97     std::vector<uint8_t> ret;
 
   98     ret.reserve(std::strlen(base64string)*3/4 + 4);
 
  100     for (std::size_t l=0, len=std::strlen(base64string); l<len; ++l)
 
  102         const char c = base64string[l];
 
  104         if (c == 
'\0' || c == 
'=')
 
  106         if (c == 
' ' || c == 
'\n')
 
  109         DISTRHO_SAFE_ASSERT_CONTINUE(DistrhoBase64Helpers::isBase64Char(c));
 
  111         charArray4[i++] = 
static_cast<uint
>(c);
 
  116                 charArray4[i] = DistrhoBase64Helpers::findBase64CharIndex(
static_cast<char>(charArray4[i]));
 
  118             charArray3[0] =  (charArray4[0] << 2)        + ((charArray4[1] & 0x30) >> 4);
 
  119             charArray3[1] = ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2);
 
  120             charArray3[2] = ((charArray4[2] & 0x3) << 6) +   charArray4[3];
 
  123                 ret.push_back(
static_cast<uint8_t
>(charArray3[i]));
 
  131         for (j=0; j<i && j<4; ++j)
 
  132             charArray4[j] = DistrhoBase64Helpers::findBase64CharIndex(
static_cast<char>(charArray4[j]));
 
  137         charArray3[0] =  (charArray4[0] << 2)        + ((charArray4[1] & 0x30) >> 4);
 
  138         charArray3[1] = ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2);
 
  139         charArray3[2] = ((charArray4[2] & 0x3) << 6) +   charArray4[3];
 
  141         for (j=0; i>0 && j<i-1; j++)
 
  142             ret.push_back(
static_cast<uint8_t
>(charArray3[j]));
 
static void d_stderr2(const char *const fmt,...) noexcept
Definition: DistrhoUtils.hpp:171