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 "base/hash/md5_boringssl.h"
6
7 #include <cstdint>
8 #include <string>
9 #include <string_view>
10
11 #include "base/containers/span.h"
12 #include "base/hash/md5.h"
13 #include "base/strings/string_number_conversions.h"
14 #include "base/strings/string_util.h"
15 #include "third_party/boringssl/src/include/openssl/md5.h"
16
17 namespace base {
MD5Init(MD5Context * context)18 void MD5Init(MD5Context* context) {
19 MD5_Init(context);
20 }
21
MD5Update(MD5Context * context,std::string_view data)22 void MD5Update(MD5Context* context, std::string_view data) {
23 MD5Update(context, base::as_byte_span(data));
24 }
25
MD5Update(MD5Context * context,base::span<const uint8_t> data)26 void MD5Update(MD5Context* context, base::span<const uint8_t> data) {
27 MD5_Update(context, data.data(), data.size());
28 }
29
MD5Final(MD5Digest * digest,MD5Context * context)30 void MD5Final(MD5Digest* digest, MD5Context* context) {
31 MD5_Final(digest->a.data(), context);
32 }
33
MD5DigestToBase16(const MD5Digest & digest)34 std::string MD5DigestToBase16(const MD5Digest& digest) {
35 return ToLowerASCII(HexEncode(digest.a));
36 }
37
MD5Sum(base::span<const uint8_t> data,MD5Digest * digest)38 void MD5Sum(base::span<const uint8_t> data, MD5Digest* digest) {
39 MD5(data.data(), data.size(), digest->a.data());
40 }
41
MD5String(std::string_view str)42 std::string MD5String(std::string_view str) {
43 MD5Digest digest;
44 MD5Sum(base::as_byte_span(str), &digest);
45 return MD5DigestToBase16(digest);
46 }
47 } // namespace base
48