// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary // source code may only be used and distributed under the Widevine License // Agreement. #ifndef WVCDM_UTIL_STRING_CONVERSIONS_H_ #define WVCDM_UTIL_STRING_CONVERSIONS_H_ #include #include #include #include #include "util_common.h" namespace wvutil { // ASCII hex to Binary conversion. std::vector a2b_hex(const std::string& b); std::vector a2b_hex(const std::string& label, const std::string& b); std::string a2bs_hex(const std::string& b); // Binary to ASCII hex conversion. The default versions limit output to 2k to // protect us from log spam. The unlimited version has no length limit. std::string b2a_hex(const std::vector& b); std::string unlimited_b2a_hex(const std::vector& b); std::string b2a_hex(const std::string& b); std::string unlimited_b2a_hex(const std::string& b); std::string HexEncode(const uint8_t* bytes, size_t size); std::string UnlimitedHexEncode(const uint8_t* bytes, size_t size); // Base64 encoding/decoding. // Converts binary data into the ASCII Base64 character set and vice // versa using the encoding rules defined in RFC4648 section 4. std::string Base64Encode(const std::vector& bin_input); std::string Base64Encode(const std::string& bin_input); std::vector Base64Decode(const std::string& bin_input); // URL-Safe Base64 encoding/decoding. // Converts binary data into the URL/Filename safe ASCII Base64 // character set and vice versa using the encoding rules defined in // RFC4648 section 5. std::string Base64SafeEncode(const std::vector& bin_input); std::string Base64SafeEncode(const std::string& bin_input); std::vector Base64SafeDecode(const std::string& bin_input); // URL-Safe Base64 encoding without padding. // Similar to Base64SafeEncode(), without any padding character '=' // at the end. std::string Base64SafeEncodeNoPad(const std::vector& bin_input); std::string Base64SafeEncodeNoPad(const std::string& bin_input); // Host to Network/Network to Host conversion. int64_t htonll64(int64_t x); inline int64_t ntohll64(int64_t x) { return htonll64(x); } // Encode unsigned integer into a big endian formatted string. std::string EncodeUint32(uint32_t u); // Converts a byte string representing an ID into a log-friendly form. // // Conversion rules: // 1) empty - returns // 2) printable ASCII only - original content, surrounded by double // quotes; double quotes and backslashes // are escaped, like C/C++ string literals. // 3) otherwise - Unquoted, hexadecimal encoded string. // // Intended to be used on ID strings which are provided/generated // from sources outside of the CDM. std::string SafeByteIdToString(const std::string& id); std::string SafeByteIdToString(const std::vector& id); } // namespace wvutil #endif // WVCDM_UTIL_STRING_CONVERSIONS_H_