Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 50181a13 authored by Edwin Wong's avatar Edwin Wong Committed by Android (Google) Code Review
Browse files

Merge "Pass application packagename to drm plugin."

parents b3642e0a 68b3d9f4
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ LOCAL_SRC_FILES:= \
    IDrmClient.cpp \
    IMediaDrmService.cpp \
    SharedLibrary.cpp
ifeq ($(ENABLE_TREBLE_DRM), true)
ifeq ($(ENABLE_TREBLE), true)
LOCAL_SRC_FILES += \
    DrmHal.cpp \
    CryptoHal.cpp
@@ -31,7 +31,7 @@ LOCAL_SHARED_LIBRARIES := \
    libmediautils \
    libstagefright_foundation \
    libutils
ifeq ($(ENABLE_TREBLE_DRM), true)
ifeq ($(ENABLE_TREBLE), true)
LOCAL_SHARED_LIBRARIES += \
    android.hidl.base@1.0 \
    android.hardware.drm@1.0 \
+8 −2
Original line number Diff line number Diff line
@@ -303,7 +303,8 @@ bool Drm::isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeTyp
    return true;
}

status_t Drm::createPlugin(const uint8_t uuid[16]) {
status_t Drm::createPlugin(const uint8_t uuid[16],
                           const String8& /* appPackageName */) {
    Mutex::Autolock autoLock(mLock);

    if (mPlugin != NULL) {
@@ -319,7 +320,12 @@ status_t Drm::createPlugin(const uint8_t uuid[16]) {
    }

    status_t result = mFactory->createDrmPlugin(uuid, &mPlugin);
    if (mPlugin) {
        mPlugin->setListener(this);
    } else {
        ALOGE("Failed to create plugin");
        return UNEXPECTED_NULL;
    }
    return result;
}

+24 −32
Original line number Diff line number Diff line
@@ -205,13 +205,14 @@ sp<IDrmFactory> DrmHal::makeDrmFactory() {
    return factory;
}

sp<IDrmPlugin> DrmHal::makeDrmPlugin(const uint8_t uuid[16]) {
sp<IDrmPlugin> DrmHal::makeDrmPlugin(const uint8_t uuid[16],
        const String8& appPackageName) {
    if (mFactory == NULL){
        return NULL;
    }

    sp<IDrmPlugin> plugin;
    Return<void> hResult = mFactory->createPlugin(uuid,
    Return<void> hResult = mFactory->createPlugin(uuid, appPackageName.string(),
            [&](Status status, const sp<IDrmPlugin>& hPlugin) {
      if (status != Status::OK) {
        ALOGD("Failed to make drm plugin");
@@ -350,10 +351,11 @@ bool DrmHal::isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mime
    return result;
}

status_t DrmHal::createPlugin(const uint8_t uuid[16]) {
status_t DrmHal::createPlugin(const uint8_t uuid[16],
        const String8& appPackageName) {
    Mutex::Autolock autoLock(mLock);

    mPlugin = makeDrmPlugin(uuid);
    mPlugin = makeDrmPlugin(uuid, appPackageName);

    if (mPlugin == NULL) {
        mInitCheck = ERROR_UNSUPPORTED;
@@ -597,8 +599,7 @@ status_t DrmHal::getProvisionRequest(String8 const &certType,
}

status_t DrmHal::provideProvisionResponse(Vector<uint8_t> const &response,
                                       Vector<uint8_t> &certificate,
                                       Vector<uint8_t> &wrappedKey) {
        Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey) {
    Mutex::Autolock autoLock(mLock);

    if (mInitCheck != OK) {
@@ -783,10 +784,8 @@ status_t DrmHal::setMacAlgorithm(Vector<uint8_t> const &sessionId,
}

status_t DrmHal::encrypt(Vector<uint8_t> const &sessionId,
                      Vector<uint8_t> const &keyId,
                      Vector<uint8_t> const &input,
                      Vector<uint8_t> const &iv,
                      Vector<uint8_t> &output) {
        Vector<uint8_t> const &keyId, Vector<uint8_t> const &input,
        Vector<uint8_t> const &iv, Vector<uint8_t> &output) {
    Mutex::Autolock autoLock(mLock);

    if (mInitCheck != OK) {
@@ -811,10 +810,8 @@ status_t DrmHal::encrypt(Vector<uint8_t> const &sessionId,
}

status_t DrmHal::decrypt(Vector<uint8_t> const &sessionId,
                      Vector<uint8_t> const &keyId,
                      Vector<uint8_t> const &input,
                      Vector<uint8_t> const &iv,
                      Vector<uint8_t> &output) {
        Vector<uint8_t> const &keyId, Vector<uint8_t> const &input,
        Vector<uint8_t> const &iv, Vector<uint8_t> &output) {
    Mutex::Autolock autoLock(mLock);

    if (mInitCheck != OK) {
@@ -839,8 +836,7 @@ status_t DrmHal::decrypt(Vector<uint8_t> const &sessionId,
}

status_t DrmHal::sign(Vector<uint8_t> const &sessionId,
                   Vector<uint8_t> const &keyId,
                   Vector<uint8_t> const &message,
        Vector<uint8_t> const &keyId, Vector<uint8_t> const &message,
        Vector<uint8_t> &signature) {
    Mutex::Autolock autoLock(mLock);

@@ -866,10 +862,8 @@ status_t DrmHal::sign(Vector<uint8_t> const &sessionId,
}

status_t DrmHal::verify(Vector<uint8_t> const &sessionId,
                     Vector<uint8_t> const &keyId,
                     Vector<uint8_t> const &message,
                     Vector<uint8_t> const &signature,
                     bool &match) {
        Vector<uint8_t> const &keyId, Vector<uint8_t> const &message,
        Vector<uint8_t> const &signature, bool &match) {
    Mutex::Autolock autoLock(mLock);

    if (mInitCheck != OK) {
@@ -896,10 +890,8 @@ status_t DrmHal::verify(Vector<uint8_t> const &sessionId,
}

status_t DrmHal::signRSA(Vector<uint8_t> const &sessionId,
                      String8 const &algorithm,
                      Vector<uint8_t> const &message,
                      Vector<uint8_t> const &wrappedKey,
                      Vector<uint8_t> &signature) {
        String8 const &algorithm, Vector<uint8_t> const &message,
        Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature) {
    Mutex::Autolock autoLock(mLock);

    if (mInitCheck != OK) {
+6 −4
Original line number Diff line number Diff line
@@ -88,13 +88,15 @@ struct BpDrm : public BpInterface<IDrm> {
        return reply.readInt32() != 0;
    }

    virtual status_t createPlugin(const uint8_t uuid[16]) {
    virtual status_t createPlugin(const uint8_t uuid[16],
                                  const String8& appPackageName) {
        Parcel data, reply;
        data.writeInterfaceToken(IDrm::getInterfaceDescriptor());
        data.write(uuid, 16);

        data.writeString8(appPackageName);
        status_t status = remote()->transact(CREATE_PLUGIN, data, &reply);
        if (status != OK) {
            ALOGE("createPlugin: binder call failed: %d", status);
            return status;
        }

@@ -585,7 +587,6 @@ status_t BnDrm::onTransact(
            data.read(uuid, sizeof(uuid));
            String8 mimeType = data.readString8();
            reply->writeInt32(isCryptoSchemeSupported(uuid, mimeType));

            return OK;
        }

@@ -594,7 +595,8 @@ status_t BnDrm::onTransact(
            CHECK_INTERFACE(IDrm, data, reply);
            uint8_t uuid[16];
            data.read(uuid, sizeof(uuid));
            reply->writeInt32(createPlugin(uuid));
            String8 appPackageName = data.readString8();
            reply->writeInt32(createPlugin(uuid, appPackageName));
            return OK;
        }

+2 −1
Original line number Diff line number Diff line
@@ -44,7 +44,8 @@ bool DrmFactory::isContentTypeSupported(const android::String8 &type) {
}

android::status_t DrmFactory::createDrmPlugin(
        const uint8_t uuid[16], android::DrmPlugin** plugin) {
        const uint8_t uuid[16],
        android::DrmPlugin** plugin) {
    if (!isCryptoSchemeSupported(uuid)) {
        *plugin = NULL;
        return android::BAD_VALUE;
Loading