Split cryptographic digest computation and parsing out of CSP code so it can be reused
[WebKit-https.git] / Source / WTF / wtf / text / Base64.h
index 8205575..041483a 100644 (file)
@@ -25,8 +25,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#ifndef Base64_h
-#define Base64_h
+#pragma once
 
 #include <wtf/Vector.h>
 #include <wtf/text/CString.h>
@@ -152,6 +151,7 @@ String base64Encode(ConstSignedOrUnsignedCharVectorAdapter, Base64EncodePolicy =
 String base64Encode(const CString&, Base64EncodePolicy = Base64DoNotInsertLFs);
 
 WTF_EXPORT_PRIVATE bool base64Decode(const String&, SignedOrUnsignedCharVectorAdapter, unsigned options = Base64Default);
+WTF_EXPORT_PRIVATE bool base64Decode(StringView, SignedOrUnsignedCharVectorAdapter, unsigned options = Base64Default);
 WTF_EXPORT_PRIVATE bool base64Decode(const Vector<char>&, SignedOrUnsignedCharVectorAdapter, unsigned options = Base64Default);
 WTF_EXPORT_PRIVATE bool base64Decode(const char*, unsigned, SignedOrUnsignedCharVectorAdapter, unsigned options = Base64Default);
 
@@ -189,6 +189,7 @@ String base64URLEncode(ConstSignedOrUnsignedCharVectorAdapter);
 String base64URLEncode(const CString&);
 
 WTF_EXPORT_PRIVATE bool base64URLDecode(const String&, SignedOrUnsignedCharVectorAdapter);
+WTF_EXPORT_PRIVATE bool base64URLDecode(StringView, SignedOrUnsignedCharVectorAdapter);
 WTF_EXPORT_PRIVATE bool base64URLDecode(const Vector<char>&, SignedOrUnsignedCharVectorAdapter);
 WTF_EXPORT_PRIVATE bool base64URLDecode(const char*, unsigned, SignedOrUnsignedCharVectorAdapter);
 
@@ -212,6 +213,11 @@ inline String base64URLEncode(const CString& in)
     return base64URLEncode(in.data(), in.length());
 }
 
+template<typename CharacterType> static inline bool isBase64OrBase64URLCharacter(CharacterType c)
+{
+    return isASCIIAlphanumeric(c) || c == '+' || c == '/' || c == '-' || c == '_';
+}
+
 } // namespace WTF
 
 using WTF::Base64EncodePolicy;
@@ -222,5 +228,4 @@ using WTF::Base64IgnoreSpacesAndNewLines;
 using WTF::base64Encode;
 using WTF::base64Decode;
 using WTF::base64URLDecode;
-
-#endif // Base64_h
+using WTF::isBase64OrBase64URLCharacter;