Widevine internal BCC extraction tool to extract CSR v3 for testing purpose. The difference it has from the factory tool is it doesn't rely on Widevine IRPC HAL. It just extracts BCC/CSR in the specified format from cli. Test: Extract CSR v3 on Pixel 7 and upload Bug: 268246995 Change-Id: I52abe09f991c89c6e7601bcef4d980f24c020c9f
58 lines
1.9 KiB
C++
58 lines
1.9 KiB
C++
// 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 GenerateCertificateRequestV2(const std::vector<uint8_t>& challenge,
|
|
std::vector<uint8_t>* csr);
|
|
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();
|
|
bool GetDeviceInfoCommon(cppbor::Map& device_info_map);
|
|
bool TryAddVerifiedDeviceInfo(cppbor::Map& device_info_map);
|
|
bool GetDeviceInfoV2(cppbor::Map& device_info_map);
|
|
|
|
std::unique_ptr<OEMCryptoInterface> crypto_interface_;
|
|
};
|
|
|
|
} // namespace widevine
|
|
|
|
#endif // WIDEVINE_PROVISIONER_H_
|