1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include <string_view>
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Worker #include "base/hash/sha1.h"
10*6777b538SAndroid Build Coastguard Worker #include "third_party/boringssl/src/include/openssl/crypto.h"
11*6777b538SAndroid Build Coastguard Worker #include "third_party/boringssl/src/include/openssl/sha.h"
12*6777b538SAndroid Build Coastguard Worker
13*6777b538SAndroid Build Coastguard Worker namespace base {
14*6777b538SAndroid Build Coastguard Worker static_assert(kSHA1Length == SHA_DIGEST_LENGTH,
15*6777b538SAndroid Build Coastguard Worker "SHA-1 digest length mismatch.");
16*6777b538SAndroid Build Coastguard Worker
SHA1HashSpan(span<const uint8_t> data)17*6777b538SAndroid Build Coastguard Worker SHA1Digest SHA1HashSpan(span<const uint8_t> data) {
18*6777b538SAndroid Build Coastguard Worker CRYPTO_library_init();
19*6777b538SAndroid Build Coastguard Worker SHA1Digest digest;
20*6777b538SAndroid Build Coastguard Worker SHA1(data.data(), data.size(), digest.data());
21*6777b538SAndroid Build Coastguard Worker return digest;
22*6777b538SAndroid Build Coastguard Worker }
23*6777b538SAndroid Build Coastguard Worker
SHA1HashString(std::string_view str)24*6777b538SAndroid Build Coastguard Worker std::string SHA1HashString(std::string_view str) {
25*6777b538SAndroid Build Coastguard Worker CRYPTO_library_init();
26*6777b538SAndroid Build Coastguard Worker std::string digest(kSHA1Length, '\0');
27*6777b538SAndroid Build Coastguard Worker SHA1(reinterpret_cast<const uint8_t*>(str.data()), str.size(),
28*6777b538SAndroid Build Coastguard Worker reinterpret_cast<uint8_t*>(digest.data()));
29*6777b538SAndroid Build Coastguard Worker return digest;
30*6777b538SAndroid Build Coastguard Worker }
31*6777b538SAndroid Build Coastguard Worker
SHA1HashBytes(const unsigned char * data,size_t len,unsigned char * hash)32*6777b538SAndroid Build Coastguard Worker void SHA1HashBytes(const unsigned char* data, size_t len, unsigned char* hash) {
33*6777b538SAndroid Build Coastguard Worker CRYPTO_library_init();
34*6777b538SAndroid Build Coastguard Worker SHA1(data, len, hash);
35*6777b538SAndroid Build Coastguard Worker }
36*6777b538SAndroid Build Coastguard Worker
37*6777b538SAndroid Build Coastguard Worker // These functions allow streaming SHA-1 operations.
SHA1Init(SHA1Context & context)38*6777b538SAndroid Build Coastguard Worker void SHA1Init(SHA1Context& context) {
39*6777b538SAndroid Build Coastguard Worker SHA1_Init(&context);
40*6777b538SAndroid Build Coastguard Worker }
41*6777b538SAndroid Build Coastguard Worker
SHA1Update(const std::string_view data,SHA1Context & context)42*6777b538SAndroid Build Coastguard Worker void SHA1Update(const std::string_view data, SHA1Context& context) {
43*6777b538SAndroid Build Coastguard Worker SHA1_Update(&context, data.data(), data.size());
44*6777b538SAndroid Build Coastguard Worker }
45*6777b538SAndroid Build Coastguard Worker
SHA1Final(SHA1Context & context,SHA1Digest & digest)46*6777b538SAndroid Build Coastguard Worker void SHA1Final(SHA1Context& context, SHA1Digest& digest) {
47*6777b538SAndroid Build Coastguard Worker SHA1Context ctx(context);
48*6777b538SAndroid Build Coastguard Worker SHA1_Final(digest.data(), &ctx);
49*6777b538SAndroid Build Coastguard Worker }
50*6777b538SAndroid Build Coastguard Worker
51*6777b538SAndroid Build Coastguard Worker } // namespace base
52