Home | History | Annotate | Download | only in functional
      1 /*
      2  * Copyright (C) 2019 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #define LOG_TAG "drm_hal_clearkey_module (at) 1.2"
     18 
     19 #include <gtest/gtest.h>
     20 #include "drm_hal_clearkey_module.h"
     21 
     22 namespace android {
     23 namespace hardware {
     24 namespace drm {
     25 namespace V1_2 {
     26 namespace vts {
     27 
     28 std::vector<uint8_t> DrmHalVTSClearkeyModule::handleProvisioningRequest(
     29         const std::vector<uint8_t>& /*provisioningRequest*/,
     30         const std::string& /*url*/) {
     31     EXPECT_TRUE(false) << "Clearkey doesn't support provisioning";
     32     return {};
     33 }
     34 
     35 std::vector<DrmHalVTSClearkeyModule::ContentConfiguration>
     36         DrmHalVTSClearkeyModule::getContentConfigurations() const {
     37     DrmHalVTSClearkeyModule::ContentConfiguration conf = {
     38         .name = "DrmHalVTSClearkeyModule", // name
     39         .serverUrl = "", // serverUrl
     40         .initData = { // initData
     41             // BMFF box header (4 bytes size + 'pssh')
     42             0x00, 0x00, 0x00, 0x34, 0x70, 0x73, 0x73, 0x68,
     43             // full box header (version = 1 flags = 0)
     44             0x01, 0x00, 0x00, 0x00,
     45             // system id
     46             0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, 0xac, 0xe3, 0x3c,
     47             0x1e, 0x52, 0xe2, 0xfb, 0x4b,
     48             // number of key ids
     49             0x00, 0x00, 0x00, 0x01,
     50             // key id
     51             0x60, 0x06, 0x1e, 0x01, 0x7e, 0x47, 0x7e, 0x87, 0x7e, 0x57, 0xd0,
     52             0x0d, 0x1e, 0xd0, 0x0d, 0x1e,
     53             // size of data, must be zero
     54             0x00, 0x00, 0x00, 0x00
     55         },
     56         .mimeType = "video/mp4", // mimeType
     57         .optionalParameters = {}, // optionalParameters
     58         .policy = { .allowOffline = true }, // allowOffline
     59         .keys = { // keys
     60             {
     61                 .isSecure = false, // isSecure
     62                 .keyId = { // keyId
     63                     0x60, 0x06, 0x1e, 0x01, 0x7e, 0x47, 0x7e, 0x87,
     64                     0x7e, 0x57, 0xd0, 0x0d, 0x1e, 0xd0, 0x0d, 0x1e
     65                 },
     66                 .clearContentKey = { // clearContentKey
     67                     0x1a, 0x8a, 0x20, 0x95, 0xe4, 0xde, 0xb2, 0xd2,
     68                     0x9e, 0xc8, 0x16, 0xac, 0x7b, 0xae, 0x20, 0x82
     69                 }
     70             }
     71         }
     72     };
     73     return { conf };
     74 }
     75 
     76 std::vector<uint8_t> DrmHalVTSClearkeyModule::handleKeyRequest(
     77         const std::vector<uint8_t>& keyRequest,
     78         const std::string& /*serverUrl*/) {
     79 
     80     // {"kids":["YAYeAX5Hfod-V9ANHtANHg"],"type":"temporary"}
     81     std::vector<uint8_t> expectedKeyRequest = {
     82         0x7b, 0x22, 0x6b, 0x69, 0x64, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x59, 0x41, 0x59, 0x65,
     83         0x41, 0x58, 0x35, 0x48, 0x66, 0x6f, 0x64, 0x2d, 0x56, 0x39, 0x41, 0x4e, 0x48, 0x74,
     84         0x41, 0x4e, 0x48, 0x67, 0x22, 0x5d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a,
     85         0x22, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x22, 0x7d};
     86 
     87     // {"kids":["YAYeAX5Hfod-V9ANHtANHg"],"type":"persistent-license"}
     88     std::vector<uint8_t> expectedKeyRequestPersistent = {
     89         0x7b, 0x22, 0x6b, 0x69, 0x64, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x59, 0x41, 0x59, 0x65,
     90         0x41, 0x58, 0x35, 0x48, 0x66, 0x6f, 0x64, 0x2d, 0x56, 0x39, 0x41, 0x4e, 0x48, 0x74,
     91         0x41, 0x4e, 0x48, 0x67, 0x22, 0x5d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a,
     92         0x22, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x69,
     93         0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x7d};
     94 
     95     // {"keys":[{"kty":"oct","kid":"YAYeAX5Hfod-V9ANHtANHg","k":"GoogleTestKeyBase64ggg"}]}
     96     std::vector<uint8_t> knownKeyResponse = {
     97         0x7b, 0x22, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x6b, 0x74, 0x79, 0x22,
     98         0x3a, 0x22, 0x6f, 0x63, 0x74, 0x22, 0x2c, 0x22, 0x6b, 0x69, 0x64, 0x22, 0x3a, 0x22, 0x59,
     99         0x41, 0x59, 0x65, 0x41, 0x58, 0x35, 0x48, 0x66, 0x6f, 0x64, 0x2d, 0x56, 0x39, 0x41, 0x4e,
    100         0x48, 0x74, 0x41, 0x4e, 0x48, 0x67, 0x22, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x22, 0x47, 0x6f,
    101         0x6f, 0x67, 0x6c, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x73, 0x65,
    102         0x36, 0x34, 0x67, 0x67, 0x67, 0x22, 0x7d, 0x5d, 0x7d};
    103 
    104     // {"keys":[{"kty":"oct","kid":"YAYeAX5Hfod-V9ANHtANHg","k":"GoogleTestKeyBase64ggg"}],"type":"persistent-license"}
    105     std::vector<uint8_t> knownKeyResponsePersistent = {
    106         0x7b, 0x22, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x6b, 0x74, 0x79, 0x22,
    107         0x3a, 0x22, 0x6f, 0x63, 0x74, 0x22, 0x2c, 0x22, 0x6b, 0x69, 0x64, 0x22, 0x3a, 0x22, 0x59,
    108         0x41, 0x59, 0x65, 0x41, 0x58, 0x35, 0x48, 0x66, 0x6f, 0x64, 0x2d, 0x56, 0x39, 0x41, 0x4e,
    109         0x48, 0x74, 0x41, 0x4e, 0x48, 0x67, 0x22, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x22, 0x47, 0x6f,
    110         0x6f, 0x67, 0x6c, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x73, 0x65,
    111         0x36, 0x34, 0x67, 0x67, 0x67, 0x22, 0x7d, 0x5d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22,
    112         0x3a, 0x22, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x69,
    113         0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x7d};
    114 
    115     std::string req(keyRequest.begin(), keyRequest.end());
    116     if (req.find("persistent-license") != std::string::npos) {
    117         EXPECT_EQ(expectedKeyRequestPersistent, keyRequest);
    118         return knownKeyResponsePersistent;
    119     } else {
    120         EXPECT_EQ(expectedKeyRequest, keyRequest);
    121         return knownKeyResponse;
    122     }
    123 
    124 }
    125 
    126 }  // namespace vts
    127 }  // namespace V1_2
    128 }  // namespace drm
    129 }  // namespace hardware
    130 }  // namespace android
    131