diff --git a/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp b/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp index f18ecd45..a24f9dd9 100644 --- a/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp +++ b/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp @@ -216,7 +216,7 @@ int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); wvcdm::InitLogging(argc, argv); - wvcdm::ConfigTestEnv config(wvcdm::kContentProtectionServer); + wvcdm::ConfigTestEnv config(wvcdm::kContentProtectionUatServer); g_client_auth.assign(config.client_auth()); g_key_system.assign(config.key_system()); g_wrong_key_id.assign(config.wrong_key_id()); diff --git a/libwvdrmengine/cdm/core/test/config_test_env.cpp b/libwvdrmengine/cdm/core/test/config_test_env.cpp index d1bf72d6..171eaf8a 100644 --- a/libwvdrmengine/cdm/core/test/config_test_env.cpp +++ b/libwvdrmengine/cdm/core/test/config_test_env.cpp @@ -2,12 +2,15 @@ #include "config_test_env.h" +namespace wvcdm { + namespace { + const std::string kWidevineKeySystem = "com.widevine.alpha"; // Content Protection license server (UAT) data -// For staging server replace url with http://wv-staging-proxy.appspot.com/proxy -const std::string kCpLicenseServer = "http://widevine-proxy.appspot.com/proxy"; +const std::string kCpUatLicenseServer = + "http://widevine-proxy.appspot.com/proxy"; const std::string kCpClientAuth = ""; const std::string kCpKeyId = "00000042" // blob size @@ -28,6 +31,52 @@ const std::string kCpOfflineKeyId = // pssh data: "08011a0d7769646576696e655f746573" "74220d6f66666c696e655f636c697032"; +const std::string kCpUatServiceCertificate = + "0ABF020803121028703454C008F63618ADE7443DB6C4C8188BE7F99005228E023082010A02" + "82010100B52112B8D05D023FCC5D95E2C251C1C649B4177CD8D2BEEF355BB06743DE661E3D" + "2ABC3182B79946D55FDC08DFE95407815E9A6274B322A2C7F5E067BB5F0AC07A89D45AEA94" + "B2516F075B66EF811D0D26E1B9A6B894F2B9857962AA171C4F66630D3E4C602718897F5E1E" + "F9B6AAF5AD4DBA2A7E14176DF134A1D3185B5A218AC05A4C41F081EFFF80A3A040C50B09BB" + "C740EEDCD8F14D675A91980F92CA7DDC646A06ADAD5101F74A0E498CC01F00532BAC217850" + "BD905E90923656B7DFEFEF42486767F33EF6283D4F4254AB72589390BEE55808F1D668080D" + "45D893C2BCA2F74D60A0C0D0A0993CEF01604703334C3638139486BC9DAF24FD67A07F9AD9" + "4302030100013A1273746167696E672E676F6F676C652E636F6D128003983E30352675F40B" + "A715FC249BDAE5D4AC7249A2666521E43655739529721FF880E0AAEFC5E27BC980DAEADABF" + "3FC386D084A02C82537848CC753FF497B011A7DA97788A00E2AA6B84CD7D71C07A48EBF616" + "02CCA5A3F32030A7295C30DA915B91DC18B9BC9593B8DE8BB50F0DEDC12938B8E9E039CDDE" + "18FA82E81BB032630FE955D85A566CE154300BF6D4C1BD126966356B287D657B18CE63D0EF" + "D45FC5269E97EAB11CB563E55643B26FF49F109C2101AFCAF35B832F288F0D9D45960E259E" + "85FB5D24DBD2CF82764C5DD9BF727EFBE9C861F869321F6ADE18905F4D92F9A6DA6536DB84" + "75871D168E870BB2303CF70C6E9784C93D2DE845AD8262BE7E0D4E2E4A0759CEF82D109D25" + "92C72429F8C01742BAE2B3DECADBC33C3E5F4BAF5E16ECB74EADBAFCB7C6705F7A9E3B6F39" + "40383F9C5116D202A20C9229EE969C2519718303B50D0130C3352E06B014D838540F8A0C22" + "7C0011E0F5B38E4E298ED2CB301EB4564965F55C5D79757A250A4EB9C84AB3E6539F6B6FDF" + "56899EA29914"; + +// Content Protection license server (staging) data +const std::string kCpStagingLicenseServer = + "http://wv-staging-proxy.appspot.com/proxy"; +const std::string kCpStagingServiceCertificate = + "0AC102080312101705B917CC1204868B06333A2F772A8C1882B4829205228E023082010A02" + "8201010099ED5B3B327DAB5E24EFC3B62A95B598520AD5BCCB37503E0645B814D876B8DF40" + "510441AD8CE3ADB11BB88C4E725A5E4A9E0795291D58584023A7E1AF0E38A9127939300861" + "0B6F158C878C7E21BFFBFEEA77E1019E1E5781E8A45F46263D14E60E8058A8607ADCE04FAC" + "8457B137A8D67CCDEB33705D983A21FB4EECBD4A10CA47490CA47EAA5D438218DDBAF1CADE" + "3392F13D6FFB6442FD31E1BF40B0C604D1C4BA4C9520A4BF97EEBD60929AFCEEF55BBAF564" + "E2D0E76CD7C55C73A082B996120B8359EDCE24707082680D6F67C6D82C4AC5F3134490A74E" + "EC37AF4B2F010C59E82843E2582F0B6B9F5DB0FC5E6EDF64FBD308B4711BCF1250019C9F5A" + "0902030100013A146C6963656E73652E7769646576696E652E636F6D128003AE347314B5A8" + "35297F271388FB7BB8CB5277D249823CDDD1DA30B93339511EB3CCBDEA04B944B927C12134" + "6EFDBDEAC9D413917E6EC176A10438460A503BC1952B9BA4E4CE0FC4BFC20A9808AAAF4BFC" + "D19C1DCFCDF574CCAC28D1B410416CF9DE8804301CBDB334CAFCD0D40978423A642E54613D" + "F0AFCF96CA4A9249D855E42B3A703EF1767F6A9BD36D6BF82BE76BBF0CBA4FDE59D2ABCC76" + "FEB64247B85C431FBCA52266B619FC36979543FCA9CBBDBBFAFA0E1A55E755A3C7BCE655F9" + "646F582AB9CF70AA08B979F867F63A0B2B7FDB362C5BC4ECD555D85BCAA9C593C383C857D4" + "9DAAB77E40B7851DDFD24998808E35B258E75D78EAC0CA16F7047304C20D93EDE4E8FF1C6F" + "17E6243E3F3DA8FC1709870EC45FBA823A263F0CEFA1F7093B1909928326333705043A29BD" + "A6F9B4342CC8DF543CB1A1182F7C5FFF33F10490FACA5B25360B76015E9C5A06AB8EE02F00" + "D2E8D5986104AACC4DD475FD96EE9CE4E326F21B83C7058577B38732CDDABC6A6BED13FB0D" + "49D38A45EB87A5F4"; // Google Play license server data const std::string kGpLicenseServer = @@ -73,17 +122,17 @@ const std::string kProductionProvisioningServerUrl = "certificateprovisioning/v1/devicecertificates/create" "?key=AIzaSyB-5OLKTx2iU5mko18DfdwK5611JIjbUhE"; -const wvcdm::ConfigTestEnv::LicenseServerConfiguration license_servers[] = { - {wvcdm::kGooglePlayServer, kGpLicenseServer, kGpClientAuth, kGpKeyId, - kGpOfflineKeyId}, - {wvcdm::kContentProtectionServer, kCpLicenseServer, kCpClientAuth, kCpKeyId, - kCpOfflineKeyId}, +const ConfigTestEnv::LicenseServerConfiguration license_servers[] = { + {kGooglePlayServer, kGpLicenseServer, kGpClientAuth, kGpKeyId, + kGpOfflineKeyId, ""}, + {kContentProtectionUatServer, kCpUatLicenseServer, kCpClientAuth, + kCpKeyId, kCpOfflineKeyId, kCpUatServiceCertificate}, + {kContentProtectionStagingServer, kCpStagingLicenseServer, + kCpClientAuth, kCpKeyId, kCpOfflineKeyId, kCpStagingServiceCertificate}, }; } // namespace -namespace wvcdm { - ConfigTestEnv::ConfigTestEnv(LicenseServerId server_id) { Init(server_id); } ConfigTestEnv::ConfigTestEnv(LicenseServerId server_id, bool streaming) { @@ -115,6 +164,7 @@ void ConfigTestEnv::Init(LicenseServerId server_id) { key_system_ = kWidevineKeySystem; license_server_ = license_servers[server_id].url; provisioning_server_url_ = kProductionProvisioningServerUrl; + service_certificate_ = license_servers[server_id].service_certificate; wrong_key_id_ = kWrongKeyId; } diff --git a/libwvdrmengine/cdm/core/test/config_test_env.h b/libwvdrmengine/cdm/core/test/config_test_env.h index 407acc8b..6e02425a 100644 --- a/libwvdrmengine/cdm/core/test/config_test_env.h +++ b/libwvdrmengine/cdm/core/test/config_test_env.h @@ -9,7 +9,8 @@ namespace wvcdm { typedef enum { kGooglePlayServer, - kContentProtectionServer, + kContentProtectionUatServer, + kContentProtectionStagingServer, } LicenseServerId; // Configures default test environment. @@ -21,6 +22,7 @@ class ConfigTestEnv { std::string client_tag; std::string key_id; std::string offline_key_id; + std::string service_certificate; } LicenseServerConfiguration; explicit ConfigTestEnv(LicenseServerId server_id); @@ -36,6 +38,9 @@ class ConfigTestEnv { const std::string& provisioning_server_url() const { return provisioning_server_url_; } + const std::string& service_certificate() const { + return service_certificate_; + } const KeyId& wrong_key_id() const { return wrong_key_id_; } void set_key_id(KeyId& key_id) { key_id_.assign(key_id); } @@ -54,6 +59,7 @@ class ConfigTestEnv { CdmKeySystem key_system_; std::string license_server_; std::string provisioning_server_url_; + std::string service_certificate_; KeyId wrong_key_id_; CORE_DISALLOW_COPY_AND_ASSIGN(ConfigTestEnv); diff --git a/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp b/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp index e8fff503..2e9024b6 100644 --- a/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp +++ b/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp @@ -44,19 +44,7 @@ wvcdm::KeyId g_key_id; wvcdm::CdmKeySystem g_key_system; std::string g_license_server; wvcdm::KeyId g_wrong_key_id; -wvcdm::LicenseServerId g_license_server_id = wvcdm::kContentProtectionServer; - -std::string kServiceCertificate = - "0803121028703454C008F63618ADE7443DB6C4C8188BE7F99005228E023082010" - "A0282010100B52112B8D05D023FCC5D95E2C251C1C649B4177CD8D2BEEF355BB0" - "6743DE661E3D2ABC3182B79946D55FDC08DFE95407815E9A6274B322A2C7F5E06" - "7BB5F0AC07A89D45AEA94B2516F075B66EF811D0D26E1B9A6B894F2B9857962AA" - "171C4F66630D3E4C602718897F5E1EF9B6AAF5AD4DBA2A7E14176DF134A1D3185" - "B5A218AC05A4C41F081EFFF80A3A040C50B09BBC740EEDCD8F14D675A91980F92" - "CA7DDC646A06ADAD5101F74A0E498CC01F00532BAC217850BD905E90923656B7D" - "FEFEF42486767F33EF6283D4F4254AB72589390BEE55808F1D668080D45D893C2" - "BCA2F74D60A0C0D0A0993CEF01604703334C3638139486BC9DAF24FD67A07F9AD" - "94302030100013A1273746167696E672E676F6F676C652E636F6D"; +wvcdm::LicenseServerId g_license_server_id = wvcdm::kContentProtectionUatServer; // TODO(rfrias): refactor to print out the decryption test names struct SubSampleInfo { @@ -1190,29 +1178,22 @@ void show_menu(char* prog_name) { std::cout << " or adb shell '" << prog_name << " -u\"url\"'" << std::endl << std::endl; - std::cout << std::setw(35) << std::left << " -f/--use_full_path"; - std::cout << "specify server url is not a proxy server" << std::endl; - std::cout << std::endl; - - std::cout << std::setw(35) << std::left << " -i/--license_server_id="; + std::cout << std::setw(37) << std::left + << " -i/--license_server_id="; std::cout << "specifies which default server settings to use: " << std::endl; - std::cout << std::setw(35) << std::left << " "; - std::cout << "gp (case sensitive) for GooglePlay server" << std::endl; - std::cout << std::setw(35) << std::left << " "; - std::cout << "cp (case sensitive) for Content Protection server" << std::endl + std::cout << std::setw(37) << std::left << " "; + std::cout << "gp for GooglePlay server" << std::endl; + std::cout << std::setw(37) << std::left << " "; + std::cout << "cp for Content Protection UAT server" << std::endl; + std::cout << std::setw(37) << std::left << " "; + std::cout << "st for Content Protection Staging server" << std::endl << std::endl; - std::cout << std::setw(35) << std::left << " -k/--keyid="; + std::cout << std::setw(37) << std::left << " -k/--keyid="; std::cout << "configure the key id or pssh, in hex format" << std::endl << std::endl; - std::cout << std::setw(35) << std::left << " -p/--port="; - std::cout << "specifies the connection port" << std::endl << std::endl; - - std::cout << std::setw(35) << std::left << " -s/--secure_transfer"; - std::cout << "use https transfer protocol" << std::endl << std::endl; - - std::cout << std::setw(35) << std::left << " -u/--server="; + std::cout << std::setw(37) << std::left << " -u/--server="; std::cout << "configure the license server url, please include http[s] in the url" << std::endl << std::endl; @@ -1238,7 +1219,9 @@ int main(int argc, char** argv) { if (!license_id.compare("gp")) { g_license_server_id = wvcdm::kGooglePlayServer; } else if (!license_id.compare("cp")) { - g_license_server_id = wvcdm::kContentProtectionServer; + g_license_server_id = wvcdm::kContentProtectionUatServer; + } else if (!license_id.compare("st")) { + g_license_server_id = wvcdm::kContentProtectionStagingServer; } else { std::cout << "Invalid license server id" << optarg << std::endl; show_usage = true; diff --git a/libwvdrmengine/cdm/test/request_license_test.cpp b/libwvdrmengine/cdm/test/request_license_test.cpp index f4a6534f..0dc639fa 100644 --- a/libwvdrmengine/cdm/test/request_license_test.cpp +++ b/libwvdrmengine/cdm/test/request_license_test.cpp @@ -55,29 +55,8 @@ wvcdm::KeyId g_key_id; wvcdm::CdmKeySystem g_key_system; std::string g_license_server; wvcdm::KeyId g_wrong_key_id; -wvcdm::LicenseServerId g_license_server_id = wvcdm::kContentProtectionServer; - -std::string kServiceCertificate = - "0ABF020803121028703454C008F63618ADE7443DB6C4C8188BE7F99005228E023082010A02" - "82010100B52112B8D05D023FCC5D95E2C251C1C649B4177CD8D2BEEF355BB06743DE661E3D" - "2ABC3182B79946D55FDC08DFE95407815E9A6274B322A2C7F5E067BB5F0AC07A89D45AEA94" - "B2516F075B66EF811D0D26E1B9A6B894F2B9857962AA171C4F66630D3E4C602718897F5E1E" - "F9B6AAF5AD4DBA2A7E14176DF134A1D3185B5A218AC05A4C41F081EFFF80A3A040C50B09BB" - "C740EEDCD8F14D675A91980F92CA7DDC646A06ADAD5101F74A0E498CC01F00532BAC217850" - "BD905E90923656B7DFEFEF42486767F33EF6283D4F4254AB72589390BEE55808F1D668080D" - "45D893C2BCA2F74D60A0C0D0A0993CEF01604703334C3638139486BC9DAF24FD67A07F9AD9" - "4302030100013A1273746167696E672E676F6F676C652E636F6D128003983E30352675F40B" - "A715FC249BDAE5D4AC7249A2666521E43655739529721FF880E0AAEFC5E27BC980DAEADABF" - "3FC386D084A02C82537848CC753FF497B011A7DA97788A00E2AA6B84CD7D71C07A48EBF616" - "02CCA5A3F32030A7295C30DA915B91DC18B9BC9593B8DE8BB50F0DEDC12938B8E9E039CDDE" - "18FA82E81BB032630FE955D85A566CE154300BF6D4C1BD126966356B287D657B18CE63D0EF" - "D45FC5269E97EAB11CB563E55643B26FF49F109C2101AFCAF35B832F288F0D9D45960E259E" - "85FB5D24DBD2CF82764C5DD9BF727EFBE9C861F869321F6ADE18905F4D92F9A6DA6536DB84" - "75871D168E870BB2303CF70C6E9784C93D2DE845AD8262BE7E0D4E2E4A0759CEF82D109D25" - "92C72429F8C01742BAE2B3DECADBC33C3E5F4BAF5E16ECB74EADBAFCB7C6705F7A9E3B6F39" - "40383F9C5116D202A20C9229EE969C2519718303B50D0130C3352E06B014D838540F8A0C22" - "7C0011E0F5B38E4E298ED2CB301EB4564965F55C5D79757A250A4EB9C84AB3E6539F6B6FDF" - "56899EA29914"; +wvcdm::LicenseServerId g_license_server_id = wvcdm::kContentProtectionUatServer; +std::string g_service_certificate; // TODO(rfrias): refactor to print out the decryption test names struct SubSampleInfo { @@ -1055,7 +1034,7 @@ TEST_F(WvCdmRequestLicenseTest, PrivacyModeWithServiceCertificateTest) { TestWvCdmClientPropertySet property_set; property_set.set_use_privacy_mode(true); - property_set.set_service_certificate(a2bs_hex(kServiceCertificate)); + property_set.set_service_certificate(a2bs_hex(g_service_certificate)); decryptor_.OpenSession(g_key_system, &property_set, EMPTY_ORIGIN, NULL, &session_id_); GenerateKeyRequest(g_key_id, kLicenseTypeStreaming); @@ -1456,7 +1435,7 @@ TEST_P(WvCdmStreamingLicenseRenewalTest, WithClientId) { if (config->enable_privacy_mode) { property_set.set_use_privacy_mode(true); if (config->specify_service_certificate) - property_set.set_service_certificate(a2bs_hex(kServiceCertificate)); + property_set.set_service_certificate(a2bs_hex(g_service_certificate)); } decryptor_.OpenSession(g_key_system, &property_set, EMPTY_ORIGIN, NULL, &session_id_); @@ -1586,7 +1565,7 @@ TEST_P(WvCdmOfflineLicenseReleaseTest, WithClientId) { if (config->enable_privacy_mode) { property_set.set_use_privacy_mode(true); if (config->specify_service_certificate) - property_set.set_service_certificate(a2bs_hex(kServiceCertificate)); + property_set.set_service_certificate(a2bs_hex(g_service_certificate)); } decryptor_.OpenSession(g_key_system, &property_set, EMPTY_ORIGIN, NULL, &session_id_); @@ -2567,33 +2546,38 @@ void show_menu(char* prog_name) { std::cout << " or adb shell '" << prog_name << " -u\"url\"'" << std::endl << std::endl; - std::cout << std::setw(35) << std::left << " -f/--use_full_path"; - std::cout << "specify server url is not a proxy server" << std::endl; - std::cout << std::endl; - - std::cout << std::setw(35) << std::left << " -i/--license_server_id="; - std::cout << "specifies which default server settings to use: " << std::endl; - std::cout << std::setw(35) << std::left << " "; - std::cout << "gp (case sensitive) for GooglePlay server" << std::endl; - std::cout << std::setw(35) << std::left << " "; - std::cout << "cp (case sensitive) for Content Protection server" << std::endl + std::cout << " -i/--license_server_id=" << std::endl; + std::cout << " specifies which default server settings to use: " + << std::endl; + std::cout << " gp for GooglePlay server" << std::endl; + std::cout << " cp for Content Protection UAT server" << std::endl; + std::cout << " st for Content Protection Staging server" << std::endl << std::endl; - std::cout << std::setw(35) << std::left << " -k/--keyid="; - std::cout << "configure the key id or pssh, in hex format" << std::endl + std::cout << " -k/--keyid=" << std::endl; + std::cout << " configure the key id or pssh, in hex format" << std::endl << std::endl; - std::cout << std::setw(35) << std::left << " -p/--port="; - std::cout << "specifies the connection port" << std::endl << std::endl; + std::cout << " -s/--cert=" << std::endl; + std::cout << " configure the signed service certificate" << std::endl; + std::cout << " Specify the SignedDeviceCertificate (from " + << "device_certificate.proto) " << std::endl; + std::cout << " in hex format." << std::endl; + std::cout << " Due to the length of the argument use, " << std::endl; + std::cout << " echo \"/system/bin/request_license_test -s \\\"" + << "0ABF02...A29914\\\"\" \\" << std::endl; + std::cout << " > run_request_license_test.sh" << std::endl; + std::cout << " chmod +x run_request_license_test.sh" << std::endl; + std::cout << " adb push run_request_license_test.sh /system/bin" + << std::endl; + std::cout << " adb shell sh /system/bin/run_request_license_test.sh" + << std::endl + << std::endl; - std::cout << std::setw(35) << std::left << " -s/--secure_transfer"; - std::cout << "use https transfer protocol" << std::endl << std::endl; - - std::cout << std::setw(35) << std::left << " -u/--server="; - std::cout - << "configure the license server url, please include http[s] in the url" - << std::endl - << std::endl; + std::cout << " -u/--server=" << std::endl; + std::cout << " configure the license server url, please include http[s]" + << " in the url" << std::endl + << std::endl; } int main(int argc, char** argv) { @@ -2603,12 +2587,13 @@ int main(int argc, char** argv) { static const struct option long_options[] = { {"keyid", required_argument, NULL, 'k'}, {"license_server_id", required_argument, NULL, 'i'}, + {"service_certificate", required_argument, NULL, 's'}, {"license_server_url", required_argument, NULL, 'u'}, {NULL, 0, NULL, '\0'}}; int option_index = 0; int opt = 0; - while ((opt = getopt_long(argc, argv, "i:k:u:", long_options, + while ((opt = getopt_long(argc, argv, "i:k:s:u:", long_options, &option_index)) != -1) { switch (opt) { case 'i': { @@ -2616,7 +2601,9 @@ int main(int argc, char** argv) { if (!license_id.compare("gp")) { g_license_server_id = wvcdm::kGooglePlayServer; } else if (!license_id.compare("cp")) { - g_license_server_id = wvcdm::kContentProtectionServer; + g_license_server_id = wvcdm::kContentProtectionUatServer; + } else if (!license_id.compare("st")) { + g_license_server_id = wvcdm::kContentProtectionStagingServer; } else { std::cout << "Invalid license server id" << optarg << std::endl; show_usage = true; @@ -2628,6 +2615,11 @@ int main(int argc, char** argv) { g_key_id.assign(optarg); break; } + case 's': { + g_service_certificate.clear(); + g_service_certificate.assign(optarg); + break; + } case 'u': { g_license_server.clear(); g_license_server.assign(optarg); @@ -2656,6 +2648,9 @@ int main(int argc, char** argv) { if (g_key_id.empty()) { g_key_id.assign(g_config->key_id()); } + if (g_service_certificate.empty()) { + g_service_certificate.assign(g_config->service_certificate()); + } if (g_license_server.empty()) { g_license_server.assign(g_config->license_server()); }