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 20namespace blink { 21 22static const size_t kMaxDigestSize = 64; 23typedef Vector<uint8_t, kMaxDigestSize> DigestValue; 24 25const size_t sha1HashSize = 20; 26enum HashAlgorithm { 27 HashAlgorithmSha1, 28 HashAlgorithmSha256, 29 HashAlgorithmSha384, 30 HashAlgorithmSha512 31}; 32 33PLATFORM_EXPORT bool computeDigest(HashAlgorithm, const char* digestable, size_t length, DigestValue& digestResult); 34PLATFORM_EXPORT PassOwnPtr<WebCryptoDigestor> createDigestor(HashAlgorithm); 35PLATFORM_EXPORT void finishDigestor(WebCryptoDigestor*, DigestValue& digestResult); 36 37} // namespace blink 38 39namespace WTF { 40 41struct DigestValueHash { 42 static unsigned hash(const blink::DigestValue& v) 43 { 44 return StringHasher::computeHash(v.data(), v.size()); 45 } 46 static bool equal(const blink::DigestValue& a, const blink::DigestValue& b) 47 { 48 return a == b; 49 }; 50 static const bool safeToCompareToEmptyOrDeleted = true; 51}; 52template <> 53struct DefaultHash<blink::DigestValue> { 54 typedef DigestValueHash Hash; 55}; 56 57template <> 58struct DefaultHash<blink::HashAlgorithm> { 59 typedef IntHash<blink::HashAlgorithm> Hash; 60}; 61template <> 62struct HashTraits<blink::HashAlgorithm> : UnsignedWithZeroKeyHashTraits<blink::HashAlgorithm> { 63}; 64 65} // namespace WTF 66#endif // SOURCE_PLATFORM_CRYPTO_H_ 67