• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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