1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // 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.
- #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_CRYPTO_H_
- #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_CRYPTO_H_
- #include "base/containers/span.h"
- #include "third_party/blink/renderer/platform/platform_export.h"
- #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
- #include "third_party/blink/renderer/platform/wtf/hash_functions.h"
- #include "third_party/blink/renderer/platform/wtf/text/string_hasher.h"
- #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
- #include "third_party/blink/renderer/platform/wtf/vector.h"
- #include "third_party/boringssl/src/include/openssl/digest.h"
- namespace blink {
- static const size_t kMaxDigestSize = 64;
- typedef Vector<uint8_t, kMaxDigestSize> DigestValue;
- enum HashAlgorithm {
- kHashAlgorithmSha1,
- kHashAlgorithmSha256,
- kHashAlgorithmSha384,
- kHashAlgorithmSha512
- };
- PLATFORM_EXPORT bool ComputeDigest(HashAlgorithm,
- const char* digestable,
- size_t length,
- DigestValue& digest_result);
- class PLATFORM_EXPORT Digestor {
- public:
- explicit Digestor(HashAlgorithm);
- ~Digestor();
- bool has_failed() const { return has_failed_; }
- // Return false on failure. These do nothing once the |has_failed_| flag is
- // set. This object cannot be reused; do not update it after Finish.
- bool Update(base::span<const uint8_t>);
- bool UpdateUtf8(const String&,
- WTF::UTF8ConversionMode = WTF::kLenientUTF8Conversion);
- bool Finish(DigestValue&);
- private:
- bssl::ScopedEVP_MD_CTX digest_context_;
- bool has_failed_ = false;
- };
- } // 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 // THIRD_PARTY_BLINK_RENDERER_PLATFORM_CRYPTO_H_
|