瀏覽代碼

support base64 encoding on vectors

anon 5 年之前
父節點
當前提交
761880d8e3
共有 2 個文件被更改,包括 37 次插入1 次删除
  1. 20 1
      daemon/include/base64.h
  2. 17 0
      daemon/src/base64.cpp

+ 20 - 1
daemon/include/base64.h

@@ -2,6 +2,7 @@
 #define BASE64_H
 
 #include <string>
+#include <vector>
 
 namespace base64 {
 /**
@@ -14,13 +15,31 @@ namespace base64 {
 std::string decode(const std::string &val);
 
 /**
- * Encodes base64 encoded strings.
+ * Decodes base64 encoded strings.
+ *
+ * @param val base64 encoded string
+ *
+ * @return char vector
+ */
+std::vector<char> decodeVector(const std::string &val);
+
+/**
+ * Encodes a string to base64.
  *
  * @param val normal string
  *
  * @return base64 encoded string
  */
 std::string encode(const std::string &val);
+
+/**
+ * Encodes a vector to base64.
+ *
+ * @param val char vector
+ *
+ * @return base64 encoded string
+ */
+std::string encodeVector(const std::vector<char> &val);
 } // namespace base64
 
 #endif

+ 17 - 0
daemon/src/base64.cpp

@@ -14,6 +14,15 @@ std::string base64::decode(const std::string &val) {
       [](char c) { return c == '\0'; });
 }
 
+std::vector<char> base64::decodeVector(const std::string &val) {
+  using namespace boost::archive::iterators;
+  using It =
+      transform_width<binary_from_base64<std::string::const_iterator>, 8, 6>;
+  return boost::algorithm::trim_right_copy_if(
+      std::vector<char>(It(std::begin(val)), It(std::end(val))),
+      [](char c) { return c == '\0'; });
+}
+
 std::string base64::encode(const std::string &val) {
   using namespace boost::archive::iterators;
   using It =
@@ -21,3 +30,11 @@ std::string base64::encode(const std::string &val) {
   auto tmp = std::string(It(std::begin(val)), It(std::end(val)));
   return tmp.append((3 - val.size() % 3) % 3, '=');
 }
+
+std::string base64::encodeVector(const std::vector<char> &val) {
+  using namespace boost::archive::iterators;
+  using It = base64_from_binary<
+      transform_width<std::vector<char>::const_iterator, 6, 8>>;
+  auto tmp = std::string(It(std::begin(val)), It(std::end(val)));
+  return tmp.append((3 - val.size() % 3) % 3, '=');
+}