#include "content/public/common/pseudonymization_util.h"
#include <string.h>
#include "base/hash/sha1.h"
#include "base/strings/string_piece.h"
#include "content/common/pseudonymization_salt.h"
namespace content {
uint32_t PseudonymizationUtil::PseudonymizeStringForTesting(
base::StringPiece string) {
return PseudonymizeString(string);
}
uint32_t PseudonymizationUtil::PseudonymizeString(base::StringPiece string) {
base::SHA1Context sha1_context;
base::SHA1Init(sha1_context);
base::SHA1Update(string, sha1_context);
uint32_t salt = GetPseudonymizationSalt();
base::SHA1Update(
base::StringPiece(reinterpret_cast<const char*>(&salt), sizeof(salt)),
sha1_context);
base::SHA1Digest sha1_hash_bytes;
base::SHA1Final(sha1_context, sha1_hash_bytes);
uint32_t hash;
static_assert(
sizeof(hash) <
sizeof(base::SHA1Digest::value_type) * sha1_hash_bytes.size(),
"Is `memcpy` safely within the bounds of `hash` and `sha1_hash_bytes`?");
memcpy(&hash, sha1_hash_bytes.data(), sizeof(hash));
return hash;
}
}