#define LOG_TAG "castkey-DrmFactory" #include #include "DrmFactory.h" #include "DrmPlugin.h" #include "Utils.h" namespace aidl { namespace android { namespace hardware { namespace drm { namespace castkey { namespace { const std::array kCastKeyUUID{ 0xBC, 0xB4, 0x81, 0xCB, 0xA1, 0xD5, 0x42, 0xAF, 0xB1, 0xE3, 0x7B, 0xFF, 0x14, 0x73, 0xEB, 0x85 }; bool isCastKeyUUID(const uint8_t uuid[16]) { return !memcmp(uuid, kCastKeyUUID.data(), 16); } } using std::string; using std::vector; using ::aidl::android::hardware::drm::Status; using ::aidl::android::hardware::drm::Uuid; using namespace castkeydrm; ::ndk::ScopedAStatus DrmFactory::createDrmPlugin( const Uuid& in_uuid, const string& in_appPackageName, std::shared_ptr<::aidl::android::hardware::drm::IDrmPlugin>* _aidl_return) { UNUSED(in_appPackageName); if (!isCastKeyUUID(in_uuid.uuid.data())) { ALOGE("Castkey Drm HAL: failed to create drm plugin, " "invalid crypto scheme"); *_aidl_return = nullptr; return toNdkScopedAStatus(Status::BAD_VALUE); } std::shared_ptr plugin = ::ndk::SharedRefBase::make(); *_aidl_return = plugin; return toNdkScopedAStatus(Status::OK); } ::ndk::ScopedAStatus DrmFactory::createCryptoPlugin( const Uuid& in_uuid, const std::vector& in_initData, std::shared_ptr<::aidl::android::hardware::drm::ICryptoPlugin>* _aidl_return) { UNUSED(in_uuid); UNUSED(in_initData); UNUSED(_aidl_return); return toNdkScopedAStatus(Status::ERROR_DRM_CANNOT_HANDLE); } ::ndk::ScopedAStatus DrmFactory::getSupportedCryptoSchemes(CryptoSchemes* _aidl_return) { CryptoSchemes schemes{}; schemes.uuids.push_back({kCastKeyUUID}); *_aidl_return = schemes; return toNdkScopedAStatus(Status::OK); } binder_status_t DrmFactory::dump(int fd, const char** args, uint32_t numArgs) { UNUSED(args); UNUSED(numArgs); if (fd < 0) { ALOGE("%s: negative fd", __FUNCTION__); return STATUS_BAD_VALUE; } return STATUS_OK; } } // namespace castkey } // namespace drm } // namespace hardware } // namespace android } // namespace aidl