// 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); 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_