1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/base64.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "third_party/modp_b64/modp_b64.h" 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace base { 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool Base64Encode(const std::string& input, std::string* output) { 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott std::string temp; 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott temp.resize(modp_b64_encode_len(input.size())); // makes room for null byte 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // null terminates result since result is base64 text! 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int input_size = static_cast<int>(input.size()); 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int output_size= modp_b64_encode(&(temp[0]), input.data(), input_size); 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (output_size < 0) 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return false; 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott temp.resize(output_size); // strips off null byte 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott output->swap(temp); 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return true; 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool Base64Decode(const std::string& input, std::string* output) { 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott std::string temp; 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott temp.resize(modp_b64_decode_len(input.size())); 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // does not null terminate result since result is binary data! 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int input_size = static_cast<int>(input.size()); 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int output_size = modp_b64_decode(&(temp[0]), input.data(), input_size); 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (output_size < 0) 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return false; 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott temp.resize(output_size); 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott output->swap(temp); 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return true; 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace base 42