mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-26 19:55:39 +00:00
00e98538aa
Differential Revision: https://phabricator.services.mozilla.com/D21106 --HG-- extra : rebase_source : ea3f51c2c11247114deccbc86e90fb02b8a97257
77 lines
2.3 KiB
C++
77 lines
2.3 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "CDMStorageIdProvider.h"
|
|
#include "GMPLog.h"
|
|
#include "nsCOMPtr.h"
|
|
#include "nsComponentManagerUtils.h"
|
|
#include "nsICryptoHash.h"
|
|
|
|
#ifdef SUPPORT_STORAGE_ID
|
|
# include "rlz/lib/machine_id.h"
|
|
#endif
|
|
|
|
namespace mozilla {
|
|
|
|
/*static*/
|
|
nsCString CDMStorageIdProvider::ComputeStorageId(const nsCString& aOriginSalt) {
|
|
#ifndef SUPPORT_STORAGE_ID
|
|
return EmptyCString();
|
|
#else
|
|
GMP_LOG("CDMStorageIdProvider::ComputeStorageId");
|
|
|
|
std::string machineId;
|
|
if (!rlz_lib::GetMachineId(&machineId)) {
|
|
GMP_LOG("CDMStorageIdProvider::ComputeStorageId: get machineId failed.");
|
|
return EmptyCString();
|
|
}
|
|
|
|
std::string originSalt(aOriginSalt.BeginReading(), aOriginSalt.Length());
|
|
std::string input =
|
|
machineId + originSalt + CDMStorageIdProvider::kBrowserIdentifier;
|
|
nsAutoCString storageId;
|
|
nsresult rv;
|
|
nsCOMPtr<nsICryptoHash> hasher =
|
|
do_CreateInstance("@mozilla.org/security/hash;1", &rv);
|
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
GMP_LOG(
|
|
"CDMStorageIdProvider::ComputeStorageId: no crypto hash(0x%08" PRIx32
|
|
")",
|
|
static_cast<uint32_t>(rv));
|
|
return EmptyCString();
|
|
}
|
|
|
|
rv = hasher->Init(nsICryptoHash::SHA256);
|
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
GMP_LOG(
|
|
"CDMStorageIdProvider::ComputeStorageId: failed to initialize "
|
|
"hash(0x%08" PRIx32 ")",
|
|
static_cast<uint32_t>(rv));
|
|
return EmptyCString();
|
|
}
|
|
|
|
rv = hasher->Update(reinterpret_cast<const uint8_t*>(input.c_str()),
|
|
input.size());
|
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
GMP_LOG(
|
|
"CDMStorageIdProvider::ComputeStorageId: failed to update "
|
|
"hash(0x%08" PRIx32 ")",
|
|
static_cast<uint32_t>(rv));
|
|
return EmptyCString();
|
|
}
|
|
|
|
rv = hasher->Finish(false, storageId);
|
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
GMP_LOG(
|
|
"CDMStorageIdProvider::ComputeStorageId: failed to get the final hash "
|
|
"result(0x%08" PRIx32 ")",
|
|
static_cast<uint32_t>(rv));
|
|
return EmptyCString();
|
|
}
|
|
return std::move(storageId);
|
|
#endif
|
|
}
|
|
|
|
} // namespace mozilla
|