#include "b64ed.hpp" #include // Custom base64 encoding/decoding tables static const std::string custom_base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+_"; std::string base64_encode(const std::string &in) { std::string out; int val = 0, valb = -6; for (unsigned char c : in) { val = (val << 8) + c; valb += 8; while (valb >= 0) { out.push_back(custom_base64_chars[(val >> valb) & 0x3F]); valb -= 6; } } if (valb > -6) out.push_back(custom_base64_chars[((val << 8) >> (valb + 8)) & 0x3F]); while (out.size() % 4) out.push_back('='); return out; } std::string base64_decode(const std::string &in) { std::vector T(256, -1); for (int i = 0; i < 64; i++) T[custom_base64_chars[i]] = i; std::string out; int val = 0, valb = -8; for (unsigned char c : in) { if (T[c] == -1) break; val = (val << 6) + T[c]; valb += 6; if (valb >= 0) { out.push_back(char((val >> valb) & 0xFF)); valb -= 8; } } return out; }