• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // TODO(jww) The original Blink-style header guard for this file conflicts with
6 // the header guard in Source/modules/crypto/Crypto.h, so this is a
7 // Chromium-style header guard instead. There is now a bug
8 // (https://crbug.com/360121) to track a proposal to change all header guards
9 // to a similar style. Thus, whenever that is resolved, this header guard
10 // should be changed to whatever style is agreed upon.
11 #ifndef SOURCE_PLATFORM_CRYPTO_H_
12 #define SOURCE_PLATFORM_CRYPTO_H_
13 
14 #include "platform/PlatformExport.h"
15 #include "public/platform/WebCrypto.h"
16 #include "wtf/HashSet.h"
17 #include "wtf/StringHasher.h"
18 #include "wtf/Vector.h"
19 
20 namespace blink {
21 
22 static const size_t kMaxDigestSize = 64;
23 typedef Vector<uint8_t, kMaxDigestSize> DigestValue;
24 
25 const size_t sha1HashSize = 20;
26 enum HashAlgorithm {
27     HashAlgorithmSha1,
28     HashAlgorithmSha256,
29     HashAlgorithmSha384,
30     HashAlgorithmSha512
31 };
32 
33 PLATFORM_EXPORT bool computeDigest(HashAlgorithm, const char* digestable, size_t length, DigestValue& digestResult);
34 PLATFORM_EXPORT PassOwnPtr<WebCryptoDigestor> createDigestor(HashAlgorithm);
35 PLATFORM_EXPORT void finishDigestor(WebCryptoDigestor*, DigestValue& digestResult);
36 
37 } // namespace blink
38 
39 namespace WTF {
40 
41 struct DigestValueHash {
hashDigestValueHash42     static unsigned hash(const blink::DigestValue& v)
43     {
44         return StringHasher::computeHash(v.data(), v.size());
45     }
equalDigestValueHash46     static bool equal(const blink::DigestValue& a, const blink::DigestValue& b)
47     {
48         return a == b;
49     };
50     static const bool safeToCompareToEmptyOrDeleted = true;
51 };
52 template <>
53 struct DefaultHash<blink::DigestValue> {
54     typedef DigestValueHash Hash;
55 };
56 
57 template <>
58 struct DefaultHash<blink::HashAlgorithm> {
59     typedef IntHash<blink::HashAlgorithm> Hash;
60 };
61 template <>
62 struct HashTraits<blink::HashAlgorithm> : UnsignedWithZeroKeyHashTraits<blink::HashAlgorithm> {
63 };
64 
65 } // namespace WTF
66 #endif // SOURCE_PLATFORM_CRYPTO_H_
67