// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/hash/sha1.h" #include #include "base/strings/string_util.h" #include "third_party/boringssl/src/include/openssl/crypto.h" #include "third_party/boringssl/src/include/openssl/sha.h" namespace base { static_assert(kSHA1Length == SHA_DIGEST_LENGTH, "SHA-1 digest length mismatch."); SHA1Digest SHA1HashSpan(span data) { CRYPTO_library_init(); SHA1Digest digest; SHA1(data.data(), data.size(), digest.data()); return digest; } std::string SHA1HashString(StringPiece str) { CRYPTO_library_init(); std::string digest; SHA1(reinterpret_cast(str.data()), str.size(), reinterpret_cast(WriteInto(&digest, kSHA1Length + 1))); return digest; } void SHA1HashBytes(const unsigned char* data, size_t len, unsigned char* hash) { CRYPTO_library_init(); SHA1(data, len, hash); } // These functions allow streaming SHA-1 operations. void SHA1Init(SHA1Context& context) { SHA1_Init(&context); } void SHA1Update(const StringPiece data, SHA1Context& context) { SHA1_Update(&context, data.data(), data.size()); } void SHA1Final(SHA1Context& context, SHA1Digest& digest) { SHA1Context ctx(context); SHA1_Final(digest.data(), &ctx); } } // namespace base