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