diff options
Diffstat (limited to 'brillo/data_encoding.h')
-rw-r--r-- | brillo/data_encoding.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/brillo/data_encoding.h b/brillo/data_encoding.h new file mode 100644 index 0000000..d850f39 --- /dev/null +++ b/brillo/data_encoding.h @@ -0,0 +1,82 @@ +// Copyright 2014 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef LIBCHROMEOS_BRILLO_DATA_ENCODING_H_ +#define LIBCHROMEOS_BRILLO_DATA_ENCODING_H_ + +#include <string> +#include <utility> +#include <vector> + +#include <brillo/brillo_export.h> +#include <brillo/secure_blob.h> + +namespace brillo { +namespace data_encoding { + +using WebParamList = std::vector<std::pair<std::string, std::string>>; + +// Encode/escape string to be used in the query portion of a URL. +// If |encodeSpaceAsPlus| is set to true, spaces are encoded as '+' instead +// of "%20" +BRILLO_EXPORT std::string UrlEncode(const char* data, bool encodeSpaceAsPlus); + +inline std::string UrlEncode(const char* data) { + return UrlEncode(data, true); +} + +// Decodes/unescapes a URL. Replaces all %XX sequences with actual characters. +// Also replaces '+' with spaces. +BRILLO_EXPORT std::string UrlDecode(const char* data); + +// Converts a list of key-value pairs into a string compatible with +// 'application/x-www-form-urlencoded' content encoding. +BRILLO_EXPORT std::string WebParamsEncode(const WebParamList& params, + bool encodeSpaceAsPlus); + +inline std::string WebParamsEncode(const WebParamList& params) { + return WebParamsEncode(params, true); +} + +// Parses a string of '&'-delimited key-value pairs (separated by '=') and +// encoded in a way compatible with 'application/x-www-form-urlencoded' +// content encoding. +BRILLO_EXPORT WebParamList WebParamsDecode(const std::string& data); + +// Encodes binary data using base64-encoding. +BRILLO_EXPORT std::string Base64Encode(const void* data, size_t size); + +// Encodes binary data using base64-encoding and wraps lines at 64 character +// boundary using LF as required by PEM (RFC 1421) specification. +BRILLO_EXPORT std::string Base64EncodeWrapLines(const void* data, size_t size); + +// Decodes the input string from Base64. +BRILLO_EXPORT bool Base64Decode(const std::string& input, brillo::Blob* output); + +// Helper wrappers to use std::string and brillo::Blob as binary data +// containers. +inline std::string Base64Encode(const brillo::Blob& input) { + return Base64Encode(input.data(), input.size()); +} +inline std::string Base64EncodeWrapLines(const brillo::Blob& input) { + return Base64EncodeWrapLines(input.data(), input.size()); +} +inline std::string Base64Encode(const std::string& input) { + return Base64Encode(input.data(), input.size()); +} +inline std::string Base64EncodeWrapLines(const std::string& input) { + return Base64EncodeWrapLines(input.data(), input.size()); +} +inline bool Base64Decode(const std::string& input, std::string* output) { + brillo::Blob blob; + if (!Base64Decode(input, &blob)) + return false; + *output = std::string{blob.begin(), blob.end()}; + return true; +} + +} // namespace data_encoding +} // namespace brillo + +#endif // LIBCHROMEOS_BRILLO_DATA_ENCODING_H_ |