// 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 #include #include #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& bcc); // Retrieves the build information of the OEMCrypto library from OEMCrypto // implementation. OEMCryptoResult GetOEMCryptoBuildInfo(std::string& build_info); // Retrieves the verified device information of the OEMCrypto library from // OEMCrypto implementation. OEMCryptoResult GetVerifiedDeviceInformation( std::vector& verified_device_info); // Generates device registration CSR payload and signs it with the leaf cert // of BCC. OEMCryptoResult GetSignedCsrPayload(const std::vector& challenge, const std::vector& device_info, std::vector& signed_csr_payload); 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); typedef OEMCryptoResult (*GetDeviceInformation_t)(uint8_t* device_info, size_t* device_info_length); typedef OEMCryptoResult (*GetDeviceSignedCsrPayload_t)( const uint8_t* challenge, size_t challenge_length, const uint8_t* device_info, size_t device_info_length, uint8_t* signed_csr_payload, size_t* signed_csr_payload_length); Initialize_t Initialize = nullptr; Terminate_t Terminate = nullptr; GetBootCertificateChain_t GetBootCertificateChain = nullptr; BuildInformation_t BuildInformation = nullptr; GetDeviceInformation_t GetDeviceInformation = nullptr; GetDeviceSignedCsrPayload_t GetDeviceSignedCsrPayload = nullptr; void* handle_ = nullptr; }; } // namespace widevine #endif // WIDEVINE_OEMCRYPTO_INTERFACE_H_