Add checks for invalid parameters

Part of VTS test suite validation

related-to-bug: 32815560

Test: drm hal vts test
Change-Id: I52be29cd46f535482a761f98acf6ff28870c061c
This commit is contained in:
Jeff Tinker
2017-03-30 00:34:01 -07:00
parent 92dff24180
commit 76f43abcbe
2 changed files with 35 additions and 4 deletions

View File

@@ -140,9 +140,15 @@ status_t WVDrmPlugin::openSession(Vector<uint8_t>& sessionId) {
}
status_t WVDrmPlugin::closeSession(const Vector<uint8_t>& sessionId) {
if (!sessionId.size()) {
return android::BAD_VALUE;
}
CdmSessionId cdmSessionId(sessionId.begin(), sessionId.end());
mCDM->CloseSession(cdmSessionId);
CdmResponseType res = mCDM->CloseSession(cdmSessionId);
mCryptoSessions.erase(cdmSessionId);
if (!isCdmResponseTypeSuccess(res)) {
return android::ERROR_DRM_SESSION_NOT_OPENED;
}
return android::OK;
}
@@ -158,6 +164,9 @@ status_t WVDrmPlugin::getKeyRequest(
CdmLicenseType cdmLicenseType;
CdmSessionId cdmSessionId;
CdmKeySetId cdmKeySetId;
if (!scope.size()) {
return android::BAD_VALUE;
}
if (keyType == kKeyType_Offline) {
cdmLicenseType = kLicenseTypeOffline;
cdmSessionId.assign(scope.begin(), scope.end());
@@ -250,6 +259,9 @@ status_t WVDrmPlugin::provideKeyResponse(
const Vector<uint8_t>& scope,
const Vector<uint8_t>& response,
Vector<uint8_t>& keySetId) {
if (scope.size() == 0 || response.size() == 0) {
return android::BAD_VALUE;
}
CdmSessionId cdmSessionId;
CdmKeyResponse cdmResponse(response.begin(), response.end());
CdmKeySetId cdmKeySetId;
@@ -366,6 +378,9 @@ status_t WVDrmPlugin::provideProvisionResponse(
const Vector<uint8_t>& response,
Vector<uint8_t>& certificate,
Vector<uint8_t>& wrapped_key) {
if (!response.size()) {
return android::BAD_VALUE;
}
CdmProvisioningResponse cdmResponse(response.begin(), response.end());
if (cdmResponse == kSpecialUnprovisionResponse) {
if (mCdmIdentifier == kDefaultCdmIdentifier) {
@@ -394,6 +409,9 @@ status_t WVDrmPlugin::unprovisionDevice() {
status_t WVDrmPlugin::getSecureStop(const Vector<uint8_t>& ssid,
Vector<uint8_t>& secureStop) {
if (!ssid.size()) {
return android::BAD_VALUE;
}
CdmUsageInfo cdmUsageInfo;
CdmSecureStopId cdmSsid(ssid.begin(), ssid.end());
CdmResponseType res = mCDM->GetUsageInfo(
@@ -435,6 +453,9 @@ status_t WVDrmPlugin::releaseAllSecureStops() {
}
status_t WVDrmPlugin::releaseSecureStops(const Vector<uint8_t>& ssRelease) {
if (!ssRelease.size()) {
return android::BAD_VALUE;
}
CdmUsageInfoReleaseMessage cdmMessage(ssRelease.begin(), ssRelease.end());
CdmResponseType res = mCDM->ReleaseUsageInfo(cdmMessage);
return mapCdmResponseType(res);
@@ -607,6 +628,9 @@ status_t WVDrmPlugin::setPropertyByteArray(const String8& name,
status_t WVDrmPlugin::setCipherAlgorithm(const Vector<uint8_t>& sessionId,
const String8& algorithm) {
if (sessionId.size() == 0 || algorithm.size() == 0) {
return android::BAD_VALUE;
}
CdmSessionId cdmSessionId(sessionId.begin(), sessionId.end());
if (!mCryptoSessions.count(cdmSessionId)) {
return android::ERROR_DRM_SESSION_NOT_OPENED;
@@ -625,6 +649,9 @@ status_t WVDrmPlugin::setCipherAlgorithm(const Vector<uint8_t>& sessionId,
status_t WVDrmPlugin::setMacAlgorithm(const Vector<uint8_t>& sessionId,
const String8& algorithm) {
if (sessionId.size() == 0 || algorithm.size() == 0) {
return android::BAD_VALUE;
}
CdmSessionId cdmSessionId(sessionId.begin(), sessionId.end());
if (!mCryptoSessions.count(cdmSessionId)) {
return android::ERROR_DRM_SESSION_NOT_OPENED;
@@ -810,11 +837,15 @@ status_t WVDrmPlugin::verify(const Vector<uint8_t>& sessionId,
}
}
status_t WVDrmPlugin::signRSA(const Vector<uint8_t>& /* sessionId */,
status_t WVDrmPlugin::signRSA(const Vector<uint8_t>& sessionId,
const String8& algorithm,
const Vector<uint8_t>& message,
const Vector<uint8_t>& wrappedKey,
Vector<uint8_t>& signature) {
if (sessionId.size() == 0 || algorithm.size() == 0 ||
message.size() == 0 || wrappedKey.size() == 0) {
return android::BAD_VALUE;
}
RSA_Padding_Scheme padding_scheme;
if (algorithm == "RSASSA-PSS-SHA1") {
padding_scheme = kSign_RSASSA_PSS;