| // Copyright 2015 The Chromium 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 BASE_BASE64URL_H_ | 
 | #define BASE_BASE64URL_H_ | 
 |  | 
 | #include <string> | 
 |  | 
 | #include "base/base_export.h" | 
 | #include "base/compiler_specific.h" | 
 | #include "base/macros.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. | 
 | BASE_EXPORT bool Base64UrlDecode(const StringPiece& input, | 
 |                                  Base64UrlDecodePolicy policy, | 
 |                                  std::string* output) WARN_UNUSED_RESULT; | 
 |  | 
 | }  // namespace base | 
 |  | 
 | #endif  // BASE_BASE64URL_H_ |