wv_factory_extraction_tool: extract provision 4.0 csr

Bug: 231677822
Test: adb shell wv_factory_extraction_tool csr
Change-Id: I9f21514b027261f1d69c24a4d2f54051ccaac9a5
This commit is contained in:
Robert Shih
2022-05-06 01:38:52 -07:00
parent 56d976fec6
commit 05878ffbe1
9 changed files with 923 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
// Copyright 2021 Google LLC. All Rights Reserved. This file and proprietary
// source code may only be used and distributed under the Widevine License
// Agreement.
#ifndef WIDEVINE_OEMCRYPTO_INTERFACE_H_
#define WIDEVINE_OEMCRYPTO_INTERFACE_H_
#include <cstdint>
#include <string>
#include <vector>
#include "OEMCryptoCENC.h"
namespace widevine {
class OEMCryptoInterface {
public:
OEMCryptoInterface() = default;
OEMCryptoInterface(const OEMCryptoInterface&) = delete;
OEMCryptoInterface& operator=(const OEMCryptoInterface&) = delete;
virtual ~OEMCryptoInterface();
// Initializes this interface by providing path to the OEMCrypto library.
bool Init(const std::string& oemcrypto_path);
// Retrieves the boot certificate chain from OEMCrypto implementation.
OEMCryptoResult GetBcc(std::vector<uint8_t>& bcc);
// Retrieves the build information of the OEMCrypto library from OEMCrypto
// implementation.
OEMCryptoResult GetOEMCryptoBuildInfo(std::string& build_info);
private:
typedef OEMCryptoResult (*Initialize_t)();
typedef OEMCryptoResult (*Terminate_t)();
typedef OEMCryptoResult (*GetBootCertificateChain_t)(
uint8_t* bcc, size_t* bcc_size, uint8_t* additional_signature,
size_t* additional_signature_size);
typedef OEMCryptoResult (*BuildInformation_t)(char* buffer,
size_t* buffer_length);
Initialize_t Initialize = nullptr;
Terminate_t Terminate = nullptr;
GetBootCertificateChain_t GetBootCertificateChain = nullptr;
BuildInformation_t BuildInformation = nullptr;
void* handle_ = nullptr;
};
} // namespace widevine
#endif // WIDEVINE_OEMCRYPTO_INTERFACE_H_

View File

@@ -0,0 +1,53 @@
// Copyright 2021 Google LLC. All Rights Reserved. This file and proprietary
// source code may only be used and distributed under the Widevine License
// Agreement.
#ifndef WIDEVINE_PROVISIONER_H_
#define WIDEVINE_PROVISIONER_H_
#include <cppbor.h>
#include <cstddef>
#include <cstdint>
#include <memory>
#include <string>
#include <vector>
#include "WidevineOemcryptoInterface.h"
namespace widevine {
class WidevineProvisioner {
public:
WidevineProvisioner();
WidevineProvisioner(const WidevineProvisioner&) = delete;
WidevineProvisioner& operator=(const WidevineProvisioner&) = delete;
virtual ~WidevineProvisioner() = default;
std::vector<uint8_t> GetBcc();
bool GenerateCertificateRequest(
bool testMode, const std::vector<uint8_t>& endpointEncCertChain,
std::vector<uint8_t>& deviceInfo, std::vector<uint8_t>& protectedData);
bool GetDeviceInfo(std::vector<uint8_t>& device_info);
private:
bool GenerateProtectedData(
bool test_mode,
const std::vector<uint8_t>& endpoint_encryption_cert_chain,
std::vector<uint8_t> bcc, std::vector<uint8_t>& protected_data) const;
bool ValidateAndExtractEekPubAndId(
bool test_mode,
const std::vector<uint8_t>& endpoint_encryption_cert_chain,
std::vector<uint8_t>* eek_pub, std::vector<uint8_t>* eek_id) const;
cppbor::Array BuildCertReqRecipients(const std::vector<uint8_t>& pubkey,
const std::vector<uint8_t>& kid) const;
void InitializeCryptoInterface();
std::unique_ptr<OEMCryptoInterface> crypto_interface_;
};
} // namespace widevine
#endif // WIDEVINE_PROVISIONER_H_

View File

@@ -0,0 +1,34 @@
// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary
// source code may only be used and distributed under the Widevine License
// Agreement.
#ifndef WVCDM_CORE_PROPERTIES_H_
#define WVCDM_CORE_PROPERTIES_H_
#include <map>
#include <memory>
#include <mutex>
#include <string>
#include "disallow_copy_and_assign.h"
namespace wvcdm {
// This class gives device information/meta data.
class Properties {
public:
static bool GetCompanyName(std::string* company_name);
static bool GetModelName(std::string* model_name);
static bool GetArchitectureName(std::string* arch_name);
static bool GetDeviceName(std::string* device_name);
static bool GetProductName(std::string* product_name);
static bool GetBuildInfo(std::string* build_info);
static bool GetOEMCryptoPath(std::string* library_name);
private:
CORE_DISALLOW_COPY_AND_ASSIGN(Properties);
};
} // namespace wvcdm
#endif // WVCDM_CORE_PROPERTIES_H_