| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef BASE_BASE64URL_H_ |
| #define BASE_BASE64URL_H_ |
| |
| #include <string> |
| |
| #include "base/base_export.h" |
| #include "base/strings/string_piece.h" |
| |
| namespace base { |
| |
| enum class Base64UrlEncodePolicy { |
| // Include the trailing padding in the output, when necessary. |
| INCLUDE_PADDING, |
| |
| // Remove the trailing padding from the output. |
| OMIT_PADDING |
| }; |
| |
| // Encodes the |input| string in base64url, defined in RFC 4648: |
| // https://tools.ietf.org/html/rfc4648#section-5 |
| // |
| // The |policy| defines whether padding should be included or omitted from the |
| // encoded |*output|. |input| and |*output| may reference the same storage. |
| BASE_EXPORT void Base64UrlEncode(const StringPiece& input, |
| Base64UrlEncodePolicy policy, |
| std::string* output); |
| |
| enum class Base64UrlDecodePolicy { |
| // Require inputs contain trailing padding if non-aligned. |
| REQUIRE_PADDING, |
| |
| // Accept inputs regardless of whether or not they have the correct padding. |
| IGNORE_PADDING, |
| |
| // Reject inputs if they contain any trailing padding. |
| DISALLOW_PADDING |
| }; |
| |
| // Decodes the |input| string in base64url, defined in RFC 4648: |
| // https://tools.ietf.org/html/rfc4648#section-5 |
| // |
| // The |policy| defines whether padding will be required, ignored or disallowed |
| // altogether. |input| and |*output| may reference the same storage. |
| [[nodiscard]] BASE_EXPORT bool Base64UrlDecode(const StringPiece& input, |
| Base64UrlDecodePolicy policy, |
| std::string* output); |
| |
| } // namespace base |
| |
| #endif // BASE_BASE64URL_H_ |