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