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