xref: /aosp_15_r20/external/pdfium/testing/utils/hash.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2019 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker #include "testing/utils/hash.h"
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #include "core/fdrm/fx_crypt.h"
8*3ac0a46fSAndroid Build Coastguard Worker 
CryptToBase16(const uint8_t * digest)9*3ac0a46fSAndroid Build Coastguard Worker std::string CryptToBase16(const uint8_t* digest) {
10*3ac0a46fSAndroid Build Coastguard Worker   static char const zEncode[] = "0123456789abcdef";
11*3ac0a46fSAndroid Build Coastguard Worker   std::string ret;
12*3ac0a46fSAndroid Build Coastguard Worker   ret.resize(32);
13*3ac0a46fSAndroid Build Coastguard Worker   for (int i = 0, j = 0; i < 16; i++, j += 2) {
14*3ac0a46fSAndroid Build Coastguard Worker     uint8_t a = digest[i];
15*3ac0a46fSAndroid Build Coastguard Worker     ret[j] = zEncode[(a >> 4) & 0xf];
16*3ac0a46fSAndroid Build Coastguard Worker     ret[j + 1] = zEncode[a & 0xf];
17*3ac0a46fSAndroid Build Coastguard Worker   }
18*3ac0a46fSAndroid Build Coastguard Worker   return ret;
19*3ac0a46fSAndroid Build Coastguard Worker }
20*3ac0a46fSAndroid Build Coastguard Worker 
GenerateMD5Base16(pdfium::span<const uint8_t> data)21*3ac0a46fSAndroid Build Coastguard Worker std::string GenerateMD5Base16(pdfium::span<const uint8_t> data) {
22*3ac0a46fSAndroid Build Coastguard Worker   uint8_t digest[16];
23*3ac0a46fSAndroid Build Coastguard Worker   CRYPT_MD5Generate(data, digest);
24*3ac0a46fSAndroid Build Coastguard Worker   return CryptToBase16(digest);
25*3ac0a46fSAndroid Build Coastguard Worker }
26