Loading drm/mediadrm/plugins/mock/MockDrmCryptoPlugin.cpp +35 −4 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ namespace android { // MockDrmFactory bool MockDrmFactory::isCryptoSchemeSupported(const uint8_t uuid[16]) { return (!memcmp(uuid, mock_uuid, sizeof(uuid))); return (!memcmp(uuid, mock_uuid, sizeof(mock_uuid))); } bool MockDrmFactory::isContentTypeSupported(const String8 &mimeType) Loading @@ -65,7 +65,7 @@ namespace android { // MockCryptoFactory bool MockCryptoFactory::isCryptoSchemeSupported(const uint8_t uuid[16]) const { return (!memcmp(uuid, mock_uuid, sizeof(uuid))); return (!memcmp(uuid, mock_uuid, sizeof(mock_uuid))); } status_t MockCryptoFactory::createPlugin(const uint8_t uuid[16], const void *data, Loading Loading @@ -254,7 +254,9 @@ namespace android { return OK; } status_t MockDrmPlugin::getProvisionRequest(Vector<uint8_t> &request, status_t MockDrmPlugin::getProvisionRequest(String8 const &certType, String8 const &certAuthority, Vector<uint8_t> &request, String8 &defaultUrl) { Mutex::Autolock lock(mLock); Loading Loading @@ -282,7 +284,9 @@ namespace android { return OK; } status_t MockDrmPlugin::provideProvisionResponse(Vector<uint8_t> const &response) status_t MockDrmPlugin::provideProvisionResponse(Vector<uint8_t> const &response, Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey) { Mutex::Autolock lock(mLock); ALOGD("MockDrmPlugin::provideProvisionResponse(%s)", Loading Loading @@ -600,6 +604,33 @@ namespace android { return OK; } status_t MockDrmPlugin::signRSA(Vector<uint8_t> const &sessionId, String8 const &algorithm, Vector<uint8_t> const &message, Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature) { Mutex::Autolock lock(mLock); ALOGD("MockDrmPlugin::signRSA(sessionId=%s, algorithm=%s, keyId=%s, " "message=%s, signature=%s)", vectorToString(sessionId).string(), algorithm.string(), vectorToString(message).string(), vectorToString(wrappedKey).string(), vectorToString(signature).string()); // Properties used in mock test, set by mock plugin and verifed cts test app // byte[] wrappedKey -> mock-wrappedkey // byte[] message -> mock-message // byte[] signature -> mock-signature mByteArrayProperties.add(String8("mock-sessionid"), sessionId); mStringProperties.add(String8("mock-algorithm"), algorithm); mByteArrayProperties.add(String8("mock-message"), message); mByteArrayProperties.add(String8("mock-wrappedkey"), wrappedKey); mByteArrayProperties.add(String8("mock-signature"), signature); return OK; } ssize_t MockDrmPlugin::findSession(Vector<uint8_t> const &sessionId) const { ALOGD("findSession: nsessions=%d, size=%d", mSessions.size(), sessionId.size()); Loading drm/mediadrm/plugins/mock/MockDrmCryptoPlugin.h +13 −3 Original line number Diff line number Diff line Loading @@ -76,10 +76,14 @@ namespace android { status_t queryKeyStatus(Vector<uint8_t> const &sessionId, KeyedVector<String8, String8> &infoMap) const; status_t getProvisionRequest(Vector<uint8_t> &request, status_t getProvisionRequest(String8 const &certType, String8 const &certAuthority, Vector<uint8_t> &request, String8 &defaultUrl); status_t provideProvisionResponse(Vector<uint8_t> const &response); status_t provideProvisionResponse(Vector<uint8_t> const &response, Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey); status_t getSecureStops(List<Vector<uint8_t> > &secureStops); status_t releaseSecureStops(Vector<uint8_t> const &ssRelease); Loading Loading @@ -122,6 +126,12 @@ namespace android { Vector<uint8_t> const &signature, bool &match); status_t signRSA(Vector<uint8_t> const &sessionId, String8 const &algorithm, Vector<uint8_t> const &message, Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature); private: String8 vectorToString(Vector<uint8_t> const &vector) const; String8 arrayToString(uint8_t const *array, size_t len) const; Loading include/media/IDrm.h +12 −2 Original line number Diff line number Diff line Loading @@ -61,10 +61,14 @@ struct IDrm : public IInterface { virtual status_t queryKeyStatus(Vector<uint8_t> const &sessionId, KeyedVector<String8, String8> &infoMap) const = 0; virtual status_t getProvisionRequest(Vector<uint8_t> &request, virtual status_t getProvisionRequest(String8 const &certType, String8 const &certAuthority, Vector<uint8_t> &request, String8 &defaulUrl) = 0; virtual status_t provideProvisionResponse(Vector<uint8_t> const &response) = 0; virtual status_t provideProvisionResponse(Vector<uint8_t> const &response, Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey) = 0; virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) = 0; Loading Loading @@ -107,6 +111,12 @@ struct IDrm : public IInterface { Vector<uint8_t> const &signature, bool &match) = 0; virtual status_t signRSA(Vector<uint8_t> const &sessionId, String8 const &algorithm, Vector<uint8_t> const &message, Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature) = 0; virtual status_t setListener(const sp<IDrmClient>& listener) = 0; private: Loading media/libmedia/IDrm.cpp +56 −4 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ enum { ENCRYPT, DECRYPT, SIGN, SIGN_RSA, VERIFY, SET_LISTENER }; Loading Loading @@ -196,11 +197,15 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t getProvisionRequest(Vector<uint8_t> &request, virtual status_t getProvisionRequest(String8 const &certType, String8 const &certAuthority, Vector<uint8_t> &request, String8 &defaultUrl) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); data.writeString8(certType); data.writeString8(certAuthority); remote()->transact(GET_PROVISION_REQUEST, data, &reply); readVector(reply, request); Loading @@ -209,13 +214,18 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t provideProvisionResponse(Vector<uint8_t> const &response) { virtual status_t provideProvisionResponse(Vector<uint8_t> const &response, Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); writeVector(data, response); remote()->transact(PROVIDE_PROVISION_RESPONSE, data, &reply); readVector(reply, certificate); readVector(reply, wrappedKey); return reply.readInt32(); } Loading Loading @@ -386,6 +396,25 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t signRSA(Vector<uint8_t> const &sessionId, String8 const &algorithm, Vector<uint8_t> const &message, Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); writeVector(data, sessionId); data.writeString8(algorithm); writeVector(data, message); writeVector(data, wrappedKey); remote()->transact(SIGN_RSA, data, &reply); readVector(reply, signature); return reply.readInt32(); } virtual status_t setListener(const sp<IDrmClient>& listener) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); Loading Loading @@ -563,9 +592,13 @@ status_t BnDrm::onTransact( case GET_PROVISION_REQUEST: { CHECK_INTERFACE(IDrm, data, reply); String8 certType = data.readString8(); String8 certAuthority = data.readString8(); Vector<uint8_t> request; String8 defaultUrl; status_t result = getProvisionRequest(request, defaultUrl); status_t result = getProvisionRequest(certType, certAuthority, request, defaultUrl); writeVector(reply, request); reply->writeString8(defaultUrl); reply->writeInt32(result); Loading @@ -576,8 +609,13 @@ status_t BnDrm::onTransact( { CHECK_INTERFACE(IDrm, data, reply); Vector<uint8_t> response; Vector<uint8_t> certificate; Vector<uint8_t> wrappedKey; readVector(data, response); reply->writeInt32(provideProvisionResponse(response)); status_t result = provideProvisionResponse(response, certificate, wrappedKey); writeVector(reply, certificate); writeVector(reply, wrappedKey); reply->writeInt32(result); return OK; } Loading Loading @@ -725,6 +763,20 @@ status_t BnDrm::onTransact( return OK; } case SIGN_RSA: { CHECK_INTERFACE(IDrm, data, reply); Vector<uint8_t> sessionId, message, wrappedKey, signature; readVector(data, sessionId); String8 algorithm = data.readString8(); readVector(data, message); readVector(data, wrappedKey); uint32_t result = signRSA(sessionId, algorithm, message, wrappedKey, signature); writeVector(reply, signature); reply->writeInt32(result); return OK; } case SET_LISTENER: { CHECK_INTERFACE(IDrm, data, reply); sp<IDrmClient> listener = Loading media/libmediaplayerservice/Drm.cpp +26 −4 Original line number Diff line number Diff line Loading @@ -373,7 +373,8 @@ status_t Drm::queryKeyStatus(Vector<uint8_t> const &sessionId, return mPlugin->queryKeyStatus(sessionId, infoMap); } status_t Drm::getProvisionRequest(Vector<uint8_t> &request, String8 &defaultUrl) { status_t Drm::getProvisionRequest(String8 const &certType, String8 const &certAuthority, Vector<uint8_t> &request, String8 &defaultUrl) { Mutex::Autolock autoLock(mLock); if (mInitCheck != OK) { Loading @@ -384,10 +385,13 @@ status_t Drm::getProvisionRequest(Vector<uint8_t> &request, String8 &defaultUrl) return -EINVAL; } return mPlugin->getProvisionRequest(request, defaultUrl); return mPlugin->getProvisionRequest(certType, certAuthority, request, defaultUrl); } status_t Drm::provideProvisionResponse(Vector<uint8_t> const &response) { status_t Drm::provideProvisionResponse(Vector<uint8_t> const &response, Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey) { Mutex::Autolock autoLock(mLock); if (mInitCheck != OK) { Loading @@ -398,7 +402,7 @@ status_t Drm::provideProvisionResponse(Vector<uint8_t> const &response) { return -EINVAL; } return mPlugin->provideProvisionResponse(response); return mPlugin->provideProvisionResponse(response, certificate, wrappedKey); } Loading Loading @@ -589,6 +593,24 @@ status_t Drm::verify(Vector<uint8_t> const &sessionId, return mPlugin->verify(sessionId, keyId, message, signature, match); } status_t Drm::signRSA(Vector<uint8_t> const &sessionId, String8 const &algorithm, Vector<uint8_t> const &message, Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature) { Mutex::Autolock autoLock(mLock); if (mInitCheck != OK) { return mInitCheck; } if (mPlugin == NULL) { return -EINVAL; } return mPlugin->signRSA(sessionId, algorithm, message, wrappedKey, signature); } void Drm::binderDied(const wp<IBinder> &the_late_who) { delete mPlugin; Loading Loading
drm/mediadrm/plugins/mock/MockDrmCryptoPlugin.cpp +35 −4 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ namespace android { // MockDrmFactory bool MockDrmFactory::isCryptoSchemeSupported(const uint8_t uuid[16]) { return (!memcmp(uuid, mock_uuid, sizeof(uuid))); return (!memcmp(uuid, mock_uuid, sizeof(mock_uuid))); } bool MockDrmFactory::isContentTypeSupported(const String8 &mimeType) Loading @@ -65,7 +65,7 @@ namespace android { // MockCryptoFactory bool MockCryptoFactory::isCryptoSchemeSupported(const uint8_t uuid[16]) const { return (!memcmp(uuid, mock_uuid, sizeof(uuid))); return (!memcmp(uuid, mock_uuid, sizeof(mock_uuid))); } status_t MockCryptoFactory::createPlugin(const uint8_t uuid[16], const void *data, Loading Loading @@ -254,7 +254,9 @@ namespace android { return OK; } status_t MockDrmPlugin::getProvisionRequest(Vector<uint8_t> &request, status_t MockDrmPlugin::getProvisionRequest(String8 const &certType, String8 const &certAuthority, Vector<uint8_t> &request, String8 &defaultUrl) { Mutex::Autolock lock(mLock); Loading Loading @@ -282,7 +284,9 @@ namespace android { return OK; } status_t MockDrmPlugin::provideProvisionResponse(Vector<uint8_t> const &response) status_t MockDrmPlugin::provideProvisionResponse(Vector<uint8_t> const &response, Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey) { Mutex::Autolock lock(mLock); ALOGD("MockDrmPlugin::provideProvisionResponse(%s)", Loading Loading @@ -600,6 +604,33 @@ namespace android { return OK; } status_t MockDrmPlugin::signRSA(Vector<uint8_t> const &sessionId, String8 const &algorithm, Vector<uint8_t> const &message, Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature) { Mutex::Autolock lock(mLock); ALOGD("MockDrmPlugin::signRSA(sessionId=%s, algorithm=%s, keyId=%s, " "message=%s, signature=%s)", vectorToString(sessionId).string(), algorithm.string(), vectorToString(message).string(), vectorToString(wrappedKey).string(), vectorToString(signature).string()); // Properties used in mock test, set by mock plugin and verifed cts test app // byte[] wrappedKey -> mock-wrappedkey // byte[] message -> mock-message // byte[] signature -> mock-signature mByteArrayProperties.add(String8("mock-sessionid"), sessionId); mStringProperties.add(String8("mock-algorithm"), algorithm); mByteArrayProperties.add(String8("mock-message"), message); mByteArrayProperties.add(String8("mock-wrappedkey"), wrappedKey); mByteArrayProperties.add(String8("mock-signature"), signature); return OK; } ssize_t MockDrmPlugin::findSession(Vector<uint8_t> const &sessionId) const { ALOGD("findSession: nsessions=%d, size=%d", mSessions.size(), sessionId.size()); Loading
drm/mediadrm/plugins/mock/MockDrmCryptoPlugin.h +13 −3 Original line number Diff line number Diff line Loading @@ -76,10 +76,14 @@ namespace android { status_t queryKeyStatus(Vector<uint8_t> const &sessionId, KeyedVector<String8, String8> &infoMap) const; status_t getProvisionRequest(Vector<uint8_t> &request, status_t getProvisionRequest(String8 const &certType, String8 const &certAuthority, Vector<uint8_t> &request, String8 &defaultUrl); status_t provideProvisionResponse(Vector<uint8_t> const &response); status_t provideProvisionResponse(Vector<uint8_t> const &response, Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey); status_t getSecureStops(List<Vector<uint8_t> > &secureStops); status_t releaseSecureStops(Vector<uint8_t> const &ssRelease); Loading Loading @@ -122,6 +126,12 @@ namespace android { Vector<uint8_t> const &signature, bool &match); status_t signRSA(Vector<uint8_t> const &sessionId, String8 const &algorithm, Vector<uint8_t> const &message, Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature); private: String8 vectorToString(Vector<uint8_t> const &vector) const; String8 arrayToString(uint8_t const *array, size_t len) const; Loading
include/media/IDrm.h +12 −2 Original line number Diff line number Diff line Loading @@ -61,10 +61,14 @@ struct IDrm : public IInterface { virtual status_t queryKeyStatus(Vector<uint8_t> const &sessionId, KeyedVector<String8, String8> &infoMap) const = 0; virtual status_t getProvisionRequest(Vector<uint8_t> &request, virtual status_t getProvisionRequest(String8 const &certType, String8 const &certAuthority, Vector<uint8_t> &request, String8 &defaulUrl) = 0; virtual status_t provideProvisionResponse(Vector<uint8_t> const &response) = 0; virtual status_t provideProvisionResponse(Vector<uint8_t> const &response, Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey) = 0; virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) = 0; Loading Loading @@ -107,6 +111,12 @@ struct IDrm : public IInterface { Vector<uint8_t> const &signature, bool &match) = 0; virtual status_t signRSA(Vector<uint8_t> const &sessionId, String8 const &algorithm, Vector<uint8_t> const &message, Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature) = 0; virtual status_t setListener(const sp<IDrmClient>& listener) = 0; private: Loading
media/libmedia/IDrm.cpp +56 −4 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ enum { ENCRYPT, DECRYPT, SIGN, SIGN_RSA, VERIFY, SET_LISTENER }; Loading Loading @@ -196,11 +197,15 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t getProvisionRequest(Vector<uint8_t> &request, virtual status_t getProvisionRequest(String8 const &certType, String8 const &certAuthority, Vector<uint8_t> &request, String8 &defaultUrl) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); data.writeString8(certType); data.writeString8(certAuthority); remote()->transact(GET_PROVISION_REQUEST, data, &reply); readVector(reply, request); Loading @@ -209,13 +214,18 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t provideProvisionResponse(Vector<uint8_t> const &response) { virtual status_t provideProvisionResponse(Vector<uint8_t> const &response, Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); writeVector(data, response); remote()->transact(PROVIDE_PROVISION_RESPONSE, data, &reply); readVector(reply, certificate); readVector(reply, wrappedKey); return reply.readInt32(); } Loading Loading @@ -386,6 +396,25 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t signRSA(Vector<uint8_t> const &sessionId, String8 const &algorithm, Vector<uint8_t> const &message, Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); writeVector(data, sessionId); data.writeString8(algorithm); writeVector(data, message); writeVector(data, wrappedKey); remote()->transact(SIGN_RSA, data, &reply); readVector(reply, signature); return reply.readInt32(); } virtual status_t setListener(const sp<IDrmClient>& listener) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); Loading Loading @@ -563,9 +592,13 @@ status_t BnDrm::onTransact( case GET_PROVISION_REQUEST: { CHECK_INTERFACE(IDrm, data, reply); String8 certType = data.readString8(); String8 certAuthority = data.readString8(); Vector<uint8_t> request; String8 defaultUrl; status_t result = getProvisionRequest(request, defaultUrl); status_t result = getProvisionRequest(certType, certAuthority, request, defaultUrl); writeVector(reply, request); reply->writeString8(defaultUrl); reply->writeInt32(result); Loading @@ -576,8 +609,13 @@ status_t BnDrm::onTransact( { CHECK_INTERFACE(IDrm, data, reply); Vector<uint8_t> response; Vector<uint8_t> certificate; Vector<uint8_t> wrappedKey; readVector(data, response); reply->writeInt32(provideProvisionResponse(response)); status_t result = provideProvisionResponse(response, certificate, wrappedKey); writeVector(reply, certificate); writeVector(reply, wrappedKey); reply->writeInt32(result); return OK; } Loading Loading @@ -725,6 +763,20 @@ status_t BnDrm::onTransact( return OK; } case SIGN_RSA: { CHECK_INTERFACE(IDrm, data, reply); Vector<uint8_t> sessionId, message, wrappedKey, signature; readVector(data, sessionId); String8 algorithm = data.readString8(); readVector(data, message); readVector(data, wrappedKey); uint32_t result = signRSA(sessionId, algorithm, message, wrappedKey, signature); writeVector(reply, signature); reply->writeInt32(result); return OK; } case SET_LISTENER: { CHECK_INTERFACE(IDrm, data, reply); sp<IDrmClient> listener = Loading
media/libmediaplayerservice/Drm.cpp +26 −4 Original line number Diff line number Diff line Loading @@ -373,7 +373,8 @@ status_t Drm::queryKeyStatus(Vector<uint8_t> const &sessionId, return mPlugin->queryKeyStatus(sessionId, infoMap); } status_t Drm::getProvisionRequest(Vector<uint8_t> &request, String8 &defaultUrl) { status_t Drm::getProvisionRequest(String8 const &certType, String8 const &certAuthority, Vector<uint8_t> &request, String8 &defaultUrl) { Mutex::Autolock autoLock(mLock); if (mInitCheck != OK) { Loading @@ -384,10 +385,13 @@ status_t Drm::getProvisionRequest(Vector<uint8_t> &request, String8 &defaultUrl) return -EINVAL; } return mPlugin->getProvisionRequest(request, defaultUrl); return mPlugin->getProvisionRequest(certType, certAuthority, request, defaultUrl); } status_t Drm::provideProvisionResponse(Vector<uint8_t> const &response) { status_t Drm::provideProvisionResponse(Vector<uint8_t> const &response, Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey) { Mutex::Autolock autoLock(mLock); if (mInitCheck != OK) { Loading @@ -398,7 +402,7 @@ status_t Drm::provideProvisionResponse(Vector<uint8_t> const &response) { return -EINVAL; } return mPlugin->provideProvisionResponse(response); return mPlugin->provideProvisionResponse(response, certificate, wrappedKey); } Loading Loading @@ -589,6 +593,24 @@ status_t Drm::verify(Vector<uint8_t> const &sessionId, return mPlugin->verify(sessionId, keyId, message, signature, match); } status_t Drm::signRSA(Vector<uint8_t> const &sessionId, String8 const &algorithm, Vector<uint8_t> const &message, Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature) { Mutex::Autolock autoLock(mLock); if (mInitCheck != OK) { return mInitCheck; } if (mPlugin == NULL) { return -EINVAL; } return mPlugin->signRSA(sessionId, algorithm, message, wrappedKey, signature); } void Drm::binderDied(const wp<IBinder> &the_late_who) { delete mPlugin; Loading