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

Commit 68b15554 authored by Jeff Tinker's avatar Jeff Tinker
Browse files

Allow device to be unprovisioned

bug: 12247651
Change-Id: I564ac8de3da2430342a028f4058e2c5ac2d85d5e
parent fdefe34f
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -104,6 +104,10 @@ public:
        return android::ERROR_DRM_CANNOT_HANDLE;
    }

    virtual status_t unprovisionDevice() {
        return android::ERROR_DRM_CANNOT_HANDLE;
    }

    virtual status_t getSecureStops(List<Vector<uint8_t> >& secureStops) {
        UNUSED(secureStops);
        return android::ERROR_DRM_CANNOT_HANDLE;
+2 −0
Original line number Diff line number Diff line
@@ -70,6 +70,8 @@ struct IDrm : public IInterface {
                                              Vector<uint8_t> &certificate,
                                              Vector<uint8_t> &wrappedKey) = 0;

    virtual status_t unprovisionDevice() = 0;

    virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) = 0;

    virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease) = 0;
+19 −1
Original line number Diff line number Diff line
@@ -53,7 +53,8 @@ enum {
    SIGN,
    SIGN_RSA,
    VERIFY,
    SET_LISTENER
    SET_LISTENER,
    UNPROVISION_DEVICE
};

struct BpDrm : public BpInterface<IDrm> {
@@ -229,6 +230,15 @@ struct BpDrm : public BpInterface<IDrm> {
        return reply.readInt32();
    }

    virtual status_t unprovisionDevice() {
        Parcel data, reply;
        data.writeInterfaceToken(IDrm::getInterfaceDescriptor());

        remote()->transact(UNPROVISION_DEVICE, data, &reply);

        return reply.readInt32();
    }

    virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) {
        Parcel data, reply;
        data.writeInterfaceToken(IDrm::getInterfaceDescriptor());
@@ -619,6 +629,14 @@ status_t BnDrm::onTransact(
            return OK;
        }

        case UNPROVISION_DEVICE:
        {
            CHECK_INTERFACE(IDrm, data, reply);
            status_t result = unprovisionDevice();
            reply->writeInt32(result);
            return OK;
        }

        case GET_SECURE_STOPS:
        {
            CHECK_INTERFACE(IDrm, data, reply);
+17 −0
Original line number Diff line number Diff line
@@ -417,6 +417,23 @@ status_t Drm::provideProvisionResponse(Vector<uint8_t> const &response,
    return mPlugin->provideProvisionResponse(response, certificate, wrappedKey);
}

status_t Drm::unprovisionDevice() {
    Mutex::Autolock autoLock(mLock);

    if (mInitCheck != OK) {
        return mInitCheck;
    }

    if (mPlugin == NULL) {
        return -EINVAL;
    }

    if (!checkPermission("android.permission.REMOVE_DRM_CERTIFICATES")) {
        return -EPERM;
    }

    return mPlugin->unprovisionDevice();
}

status_t Drm::getSecureStops(List<Vector<uint8_t> > &secureStops) {
    Mutex::Autolock autoLock(mLock);
+2 −0
Original line number Diff line number Diff line
@@ -75,6 +75,8 @@ struct Drm : public BnDrm,
                                              Vector<uint8_t> &certificate,
                                              Vector<uint8_t> &wrappedKey);

    virtual status_t unprovisionDevice();

    virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops);

    virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease);