// // 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 WV_DRM_FACTORY_H_ #define WV_DRM_FACTORY_H_ #include #include #include #include "WVGenericCryptoInterface.h" #include "WVTypes.h" namespace wvdrm { namespace hardware { namespace drm { namespace widevine { class WVDrmFactory : public ::aidl::android::hardware::drm::BnDrmFactory { public: WVDrmFactory() {} virtual ~WVDrmFactory() {} ::ndk::ScopedAStatus createDrmPlugin( const ::aidl::android::hardware::drm::Uuid& in_uuid, const std::string& in_appPackageName, std::shared_ptr<::aidl::android::hardware::drm::IDrmPlugin>* _aidl_return) override; ::ndk::ScopedAStatus createCryptoPlugin( const ::aidl::android::hardware::drm::Uuid& in_uuid, const std::vector& in_initData, std::shared_ptr<::aidl::android::hardware::drm::ICryptoPlugin>* _aidl_return) override; ::ndk::ScopedAStatus getSupportedCryptoSchemes( ::aidl::android::hardware::drm::CryptoSchemes* _aidl_return) override; // This method is not part of the AIDL interface, it is provided // for Widevine CDM. bool isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid); binder_status_t dump(int fd, const char** args, uint32_t numArgs) override; private: WVDRM_DISALLOW_COPY_AND_ASSIGN(WVDrmFactory); ::ndk::SpAIBinder createBinder() override; static WVGenericCryptoInterface sOemCryptoInterface; static bool areSpoidsEnabled(); static bool isBlankAppPackageNameAllowed(); static int32_t firstApiLevel(); static std::string stringToHex(const std::string& input); static void printCdmMetrics(int fd); static void printCdmProperties(int fd); static void printUsage(int fd); static void printProvisioningRequest(int fd, bool cast); friend class WVDrmFactoryTestPeer; }; } // namespace widevine } // namespace drm } // namespace hardware } // namespace wvdrm #endif // WV_DRM_FACTORY_H_