| /** |
| * \file |
| * <PRE> |
| * High performance base64 encoder / decoder |
| * Version 1.3 -- 17-Mar-2006 |
| * |
| * Copyright © 2005, 2006, Nick Galbreath -- nickg [at] modp [dot] com |
| * All rights reserved. |
| * |
| * http://modp.com/release/base64 |
| * |
| * Released under bsd license. See modp_b64.c for details. |
| * </pre> |
| * |
| * The default implementation is the standard b64 encoding with padding. |
| * It's easy to change this to use "URL safe" characters and to remove |
| * padding. See the modp_b64.c source code for details. |
| * |
| */ |
| |
| #include "./base64.h" |
| #include <string.h> |
| |
| bool Base64Encode(const std::string &input, std::string *output) { |
| std::string temp; |
| temp.resize(modp_b64_encode_len(input.size())); // makes room for null byte |
| |
| // null terminates result since result is base64 text! |
| int input_size = static_cast<int>(input.size()); |
| int output_size = modp_b64_encode(&(temp[0]), input.data(), input_size); |
| if (output_size < 0) |
| return false; |
| |
| temp.resize(output_size); // strips off null byte |
| output->swap(temp); |
| return true; |
| } |
| |
| bool Base64Decode(const std::string &input, std::string *output) { |
| std::string temp; |
| temp.resize(modp_b64_decode_len(input.size())); |
| |
| // does not null terminate result since result is binary data! |
| int input_size = static_cast<int>(input.size()); |
| int output_size = modp_b64_decode(&(temp[0]), input.data(), input_size); |
| if (output_size < 0) |
| return false; |
| |
| temp.resize(output_size); |
| output->swap(temp); |
| return true; |
| } |