| // Copyright 2014 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. |
| |
| // TODO(jww) The original Blink-style header guard for this file conflicts with |
| // the header guard in Source/modules/crypto/Crypto.h, so this is a |
| // Chromium-style header guard instead. There is now a bug |
| // (https://crbug.com/360121) to track a proposal to change all header guards |
| // to a similar style. Thus, whenever that is resolved, this header guard |
| // should be changed to whatever style is agreed upon. |
| #ifndef SOURCE_PLATFORM_CRYPTO_H_ |
| #define SOURCE_PLATFORM_CRYPTO_H_ |
| |
| #include <memory> |
| #include "platform/PlatformExport.h" |
| #include "platform/wtf/Allocator.h" |
| #include "platform/wtf/HashSet.h" |
| #include "platform/wtf/StringHasher.h" |
| #include "platform/wtf/Vector.h" |
| #include "public/platform/WebCrypto.h" |
| |
| namespace blink { |
| |
| static const size_t kMaxDigestSize = 64; |
| typedef Vector<uint8_t, kMaxDigestSize> DigestValue; |
| |
| const size_t kSha1HashSize = 20; |
| enum HashAlgorithm { |
| kHashAlgorithmSha1, |
| kHashAlgorithmSha256, |
| kHashAlgorithmSha384, |
| kHashAlgorithmSha512 |
| }; |
| |
| PLATFORM_EXPORT bool ComputeDigest(HashAlgorithm, |
| const char* digestable, |
| size_t length, |
| DigestValue& digest_result); |
| // Note: this will never return null. |
| PLATFORM_EXPORT std::unique_ptr<WebCryptoDigestor> CreateDigestor( |
| HashAlgorithm); |
| PLATFORM_EXPORT void FinishDigestor(WebCryptoDigestor*, |
| DigestValue& digest_result); |
| |
| } // namespace blink |
| |
| namespace WTF { |
| |
| struct DigestValueHash { |
| STATIC_ONLY(DigestValueHash); |
| static unsigned GetHash(const blink::DigestValue& v) { |
| return StringHasher::ComputeHash(v.data(), v.size()); |
| } |
| static bool Equal(const blink::DigestValue& a, const blink::DigestValue& b) { |
| return a == b; |
| }; |
| static const bool safe_to_compare_to_empty_or_deleted = true; |
| }; |
| template <> |
| struct DefaultHash<blink::DigestValue> { |
| STATIC_ONLY(DefaultHash); |
| typedef DigestValueHash Hash; |
| }; |
| |
| template <> |
| struct DefaultHash<blink::HashAlgorithm> { |
| STATIC_ONLY(DefaultHash); |
| typedef IntHash<blink::HashAlgorithm> Hash; |
| }; |
| template <> |
| struct HashTraits<blink::HashAlgorithm> |
| : UnsignedWithZeroKeyHashTraits<blink::HashAlgorithm> { |
| STATIC_ONLY(HashTraits); |
| }; |
| |
| } // namespace WTF |
| #endif // SOURCE_PLATFORM_CRYPTO_H_ |