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 Workerstd::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 Workerstd::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