summaryrefslogtreecommitdiff
path: root/base/base64url.h
diff options
context:
space:
mode:
Diffstat (limited to 'base/base64url.h')
-rw-r--r--base/base64url.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/base/base64url.h b/base/base64url.h
new file mode 100644
index 0000000000..66a482461b
--- /dev/null
+++ b/base/base64url.h
@@ -0,0 +1,56 @@
+// 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_