From 99941b86b6c413a21d7850423a1d83105aa0e471 Mon Sep 17 00:00:00 2001 From: Kyle Alexander Date: Mon, 14 Dec 2015 15:03:15 -0800 Subject: [PATCH] DO NOT MERGE ANYWHERE Update license tests to use Widevine license service Based from Widevine cl: https://widevine-internal-review.googlesource.com/#/c/16322/ Bug: 26046529 Change-Id: Ib8a4fd1588de35a02973bca1914a298a62a71f7c --- .../cdm/core/test/config_test_env.cpp | 84 +++-- .../cdm/core/test/config_test_env.h | 6 +- .../cdm/test/request_license_test.cpp | 291 ++++++++++-------- 3 files changed, 219 insertions(+), 162 deletions(-) diff --git a/libwvdrmengine/cdm/core/test/config_test_env.cpp b/libwvdrmengine/cdm/core/test/config_test_env.cpp index 7886977d..7ee5dd28 100644 --- a/libwvdrmengine/cdm/core/test/config_test_env.cpp +++ b/libwvdrmengine/cdm/core/test/config_test_env.cpp @@ -3,24 +3,29 @@ #include "config_test_env.h" namespace { -// Youtube Content Protection license server data -const std::string kYtCpLicenseServer = - "http://wv-ref-eme-player.appspot.com/proxy"; -const std::string kYtCpClientAuth = ""; -const std::string kYtCpKeyId = - "000000347073736800000000" // blob size and pssh - "EDEF8BA979D64ACEA3C827DCD51D21ED00000014" // Widevine system id - "0801121030313233343536373839616263646566"; // pssh data - -// Youtube license server data -const std::string kYtLicenseServer = - "https://www.youtube.com/api/drm/" - "widevine?video_id=03681262dc412c06&source=YOUTUBE"; -const std::string kYtClientAuth = ""; -const std::string kYtKeyId = - "000000347073736800000000" // blob size and pssh - "EDEF8BA979D64ACEA3C827DCD51D21ED00000014" // Widevine system id - "0801121093789920E8D6520098577DF8F2DD5546"; // pssh data +// Content Protection license server data +const std::string kCpLicenseServer = + "https://proxy.uat.widevine.com/proxy"; +const std::string kCpClientAuth = ""; +const std::string kCpKeyId = + "00000042" // blob size + "70737368" // "pssh" + "00000000" // flags + "edef8ba979d64acea3c827dcd51d21ed" // Widevine system id + "00000022" // pssh data size + // pssh data: + "08011a0d7769646576696e655f746573" + "74220f73747265616d696e675f636c69" + "7031"; +const std::string kCpOfflineKeyId = + "00000040" // blob size + "70737368" // "pssh" + "00000000" // flags + "edef8ba979d64acea3c827dcd51d21ed" // Widevine system id + "00000020" // pssh data size + // pssh data: + "08011a0d7769646576696e655f746573" + "74220d6f66666c696e655f636c697032"; // Google Play license server data const std::string kGpLicenseServer = @@ -38,6 +43,8 @@ const std::string kGpKeyId = "edef8ba979d64acea3c827dcd51d21ed00000014" // Widevine system id "08011210e02562e04cd55351b14b3d748d36ed8e"; // pssh data +const std::string kGpOfflineKeyId = kGpKeyId; + // An invalid key id, expected to fail const std::string kWrongKeyId = "000000347073736800000000" // blob size and pssh @@ -62,25 +69,36 @@ const std::string kServerSdkLicenseServer = const wvcdm::ConfigTestEnv::LicenseServerConfiguration license_servers[] = { { wvcdm::kGooglePlayServer, kGpLicenseServer, kGpClientAuth, kGpKeyId, - kDefaultHttpsPort, true, true }, - { wvcdm::kYouTubeContentProtectionServer, kYtCpLicenseServer, - kYtCpClientAuth, kYtCpKeyId, kDefaultHttpPort, false, false } + kGpOfflineKeyId, kDefaultHttpsPort, true, true }, + { wvcdm::kContentProtectionServer, kCpLicenseServer, kCpClientAuth, + kCpKeyId, kCpOfflineKeyId, kDefaultHttpsPort, true, true } }; } // namespace namespace wvcdm { -ConfigTestEnv::ConfigTestEnv(LicenseServerId server_id) - : client_auth_(license_servers[server_id].client_tag), - key_id_(license_servers[server_id].key_id), - key_system_("com.widevine.alpha"), - license_server_(license_servers[server_id].url), - port_(license_servers[server_id].port), - provisioning_server_url_(kProductionProvisioningServerUrl), - provisioning_test_server_url_(kProductionTestProvisioningServerUrl), - server_sdk_license_server_(kServerSdkLicenseServer), - use_chunked_transfer_(license_servers[server_id].use_chunked_transfer), - use_secure_transfer_(license_servers[server_id].use_secure_transfer), - wrong_key_id_(kWrongKeyId) {} +ConfigTestEnv::ConfigTestEnv(LicenseServerId server_id) { + Init(server_id); +} + +ConfigTestEnv::ConfigTestEnv(LicenseServerId server_id, bool streaming) { + Init(server_id); + if (!streaming) + key_id_ = license_servers[server_id].offline_key_id; +} + +void ConfigTestEnv::Init(LicenseServerId server_id) { + client_auth_ = license_servers[server_id].client_tag; + key_id_ = license_servers[server_id].key_id; + key_system_ = "com.widevine.alpha"; + license_server_ = license_servers[server_id].url; + port_ = license_servers[server_id].port; + provisioning_server_url_ = kProductionProvisioningServerUrl; + provisioning_test_server_url_ = kProductionTestProvisioningServerUrl; + server_sdk_license_server_ = kServerSdkLicenseServer; + use_chunked_transfer_ = license_servers[server_id].use_chunked_transfer; + use_secure_transfer_ = license_servers[server_id].use_secure_transfer; + wrong_key_id_ = kWrongKeyId; +} } // namespace wvcdm diff --git a/libwvdrmengine/cdm/core/test/config_test_env.h b/libwvdrmengine/cdm/core/test/config_test_env.h index 95643e7c..eb49907e 100644 --- a/libwvdrmengine/cdm/core/test/config_test_env.h +++ b/libwvdrmengine/cdm/core/test/config_test_env.h @@ -14,7 +14,7 @@ const std::string kDefaultHttpPort = "80"; namespace wvcdm { typedef enum { kGooglePlayServer, - kYouTubeContentProtectionServer + kContentProtectionServer } LicenseServerId; // Configures default test environment. @@ -25,12 +25,14 @@ class ConfigTestEnv { std::string url; std::string client_tag; std::string key_id; + std::string offline_key_id; std::string port; bool use_chunked_transfer; bool use_secure_transfer; } LicenseServerConfiguration; explicit ConfigTestEnv(LicenseServerId server_id); + ConfigTestEnv(LicenseServerId server_id, bool streaming); ~ConfigTestEnv() {}; const std::string& client_auth() const { return client_auth_; } @@ -61,6 +63,8 @@ class ConfigTestEnv { void set_port(std::string& port) { port_.assign(port); } private: + void Init(LicenseServerId server_id); + std::string client_auth_; KeyId key_id_; CdmKeySystem key_system_; diff --git a/libwvdrmengine/cdm/test/request_license_test.cpp b/libwvdrmengine/cdm/test/request_license_test.cpp index d0ff5099..a31b8cf9 100644 --- a/libwvdrmengine/cdm/test/request_license_test.cpp +++ b/libwvdrmengine/cdm/test/request_license_test.cpp @@ -33,7 +33,7 @@ wvcdm::KeyId g_wrong_key_id; bool g_use_chunked_transfer = false; bool g_use_full_path = false; bool g_use_secure_transfer = false; -wvcdm::LicenseServerId g_license_server_id = wvcdm::kGooglePlayServer; +wvcdm::LicenseServerId g_license_server_id = wvcdm::kContentProtectionServer; std::string kServiceCertificate = "0803121028703454C008F63618ADE7443DB6C4C8188BE7F99005228E023082010" @@ -59,139 +59,140 @@ struct SubSampleInfo { std::vector decrypt_data; std::vector iv; size_t block_offset; + uint8_t subsample_flags; }; SubSampleInfo clear_sub_sample = { true, 1, true, false, false, - wvcdm::a2bs_hex("E02562E04CD55351B14B3D748D36ED8E"), + wvcdm::a2bs_hex("371EA35E1A985D75D198A7F41020DC23"), wvcdm::a2b_hex( - "9da401105ab8da443e93e6fe089dfc69e00a9a51690d406872f338c5fa7dd3d5" - "abf8dfd660aaff3e327850a56eedf707c03e2d1a00f9f0371e3e19ea32b13267" - "7bc083ccbb83e6d9c03794ee97f50081221a8e5eb123f6dfa895e7a971166483" - "cdadd61cd8d0f859501e750e9d356d57252ecd9f7388459f5470de9d92198c44" - "0b520055b3b9a1c6b2c9d21e78dce99622d9d031fc7dee28a6d1d6dfb81502eb" - "463c4c189555f496d9aa529b3f5522e9f46dcf70b2bfe8df47daf02b6a267f93" - "f80d871786eb4bd7f08f9c52079c034a9534d885ba4c00cbe2234cfbb5205a56" - "41dd760f83d0f09f27881ad490efa8b99b7ab24b34311a2e8416b1a80d736ad7"), + "217ce9bde99bd91e9733a1a00b9b557ac3a433dc92633546156817fae26b6e1c" + "942ac20a89ff79f4c2f25fba99d6a44618a8c0420b27d54e3da17b77c9d43cca" + "595d259a1e4a8b6d7744cd98c5d3f921adc252eb7d8af6b916044b676a574747" + "8df21fdc42f166880d97a2225cd5c9ea5e7b752f4cf81bbdbe98e542ee10e1c6" + "ad868a6ac55c10d564fc23b8acff407daaf4ed2743520e02cda9680d9ea88e91" + "029359c4cf5906b6ab5bf60fbb3f1a1c7c59acfc7e4fb4ad8e623c04d503a3dd" + "4884604c8da8a53ce33db9ff8f1c5bb6bb97f37b39906bf41596555c1bcce9ed" + "08a899cd760ff0899a1170c2f224b9c52997a0785b7fe170805fd3e8b1127659"), wvcdm::a2b_hex( - "9da401105ab8da443e93e6fe089dfc69e00a9a51690d406872f338c5fa7dd3d5" - "abf8dfd660aaff3e327850a56eedf707c03e2d1a00f9f0371e3e19ea32b13267" - "7bc083ccbb83e6d9c03794ee97f50081221a8e5eb123f6dfa895e7a971166483" - "cdadd61cd8d0f859501e750e9d356d57252ecd9f7388459f5470de9d92198c44" - "0b520055b3b9a1c6b2c9d21e78dce99622d9d031fc7dee28a6d1d6dfb81502eb" - "463c4c189555f496d9aa529b3f5522e9f46dcf70b2bfe8df47daf02b6a267f93" - "f80d871786eb4bd7f08f9c52079c034a9534d885ba4c00cbe2234cfbb5205a56" - "41dd760f83d0f09f27881ad490efa8b99b7ab24b34311a2e8416b1a80d736ad7"), - wvcdm::a2b_hex("50a6c61c3f7c2b37e72b0c047000dd4a"), 0}; + "217ce9bde99bd91e9733a1a00b9b557ac3a433dc92633546156817fae26b6e1c" + "942ac20a89ff79f4c2f25fba99d6a44618a8c0420b27d54e3da17b77c9d43cca" + "595d259a1e4a8b6d7744cd98c5d3f921adc252eb7d8af6b916044b676a574747" + "8df21fdc42f166880d97a2225cd5c9ea5e7b752f4cf81bbdbe98e542ee10e1c6" + "ad868a6ac55c10d564fc23b8acff407daaf4ed2743520e02cda9680d9ea88e91" + "029359c4cf5906b6ab5bf60fbb3f1a1c7c59acfc7e4fb4ad8e623c04d503a3dd" + "4884604c8da8a53ce33db9ff8f1c5bb6bb97f37b39906bf41596555c1bcce9ed" + "08a899cd760ff0899a1170c2f224b9c52997a0785b7fe170805fd3e8b1127659"), + wvcdm::a2b_hex("f6f4b1e600a5b67813ed2bded913ba9f"), 0, 3}; SubSampleInfo clear_sub_sample_no_key = { false, 1, false, false, false, wvcdm::a2bs_hex("77777777777777777777777777777777"), wvcdm::a2b_hex( - "9da401105ab8da443e93e6fe089dfc69e00a9a51690d406872f338c5fa7dd3d5" - "abf8dfd660aaff3e327850a56eedf707c03e2d1a00f9f0371e3e19ea32b13267" - "7bc083ccbb83e6d9c03794ee97f50081221a8e5eb123f6dfa895e7a971166483" - "cdadd61cd8d0f859501e750e9d356d57252ecd9f7388459f5470de9d92198c44" - "0b520055b3b9a1c6b2c9d21e78dce99622d9d031fc7dee28a6d1d6dfb81502eb" - "463c4c189555f496d9aa529b3f5522e9f46dcf70b2bfe8df47daf02b6a267f93" - "f80d871786eb4bd7f08f9c52079c034a9534d885ba4c00cbe2234cfbb5205a56" - "41dd760f83d0f09f27881ad490efa8b99b7ab24b34311a2e8416b1a80d736ad7"), + "217ce9bde99bd91e9733a1a00b9b557ac3a433dc92633546156817fae26b6e1c" + "942ac20a89ff79f4c2f25fba99d6a44618a8c0420b27d54e3da17b77c9d43cca" + "595d259a1e4a8b6d7744cd98c5d3f921adc252eb7d8af6b916044b676a574747" + "8df21fdc42f166880d97a2225cd5c9ea5e7b752f4cf81bbdbe98e542ee10e1c6" + "ad868a6ac55c10d564fc23b8acff407daaf4ed2743520e02cda9680d9ea88e91" + "029359c4cf5906b6ab5bf60fbb3f1a1c7c59acfc7e4fb4ad8e623c04d503a3dd" + "4884604c8da8a53ce33db9ff8f1c5bb6bb97f37b39906bf41596555c1bcce9ed" + "08a899cd760ff0899a1170c2f224b9c52997a0785b7fe170805fd3e8b1127659"), wvcdm::a2b_hex( - "9da401105ab8da443e93e6fe089dfc69e00a9a51690d406872f338c5fa7dd3d5" - "abf8dfd660aaff3e327850a56eedf707c03e2d1a00f9f0371e3e19ea32b13267" - "7bc083ccbb83e6d9c03794ee97f50081221a8e5eb123f6dfa895e7a971166483" - "cdadd61cd8d0f859501e750e9d356d57252ecd9f7388459f5470de9d92198c44" - "0b520055b3b9a1c6b2c9d21e78dce99622d9d031fc7dee28a6d1d6dfb81502eb" - "463c4c189555f496d9aa529b3f5522e9f46dcf70b2bfe8df47daf02b6a267f93" - "f80d871786eb4bd7f08f9c52079c034a9534d885ba4c00cbe2234cfbb5205a56" - "41dd760f83d0f09f27881ad490efa8b99b7ab24b34311a2e8416b1a80d736ad7"), - wvcdm::a2b_hex("50a6c61c3f7c2b37e72b0c047000dd4a"), 0}; + "217ce9bde99bd91e9733a1a00b9b557ac3a433dc92633546156817fae26b6e1c" + "942ac20a89ff79f4c2f25fba99d6a44618a8c0420b27d54e3da17b77c9d43cca" + "595d259a1e4a8b6d7744cd98c5d3f921adc252eb7d8af6b916044b676a574747" + "8df21fdc42f166880d97a2225cd5c9ea5e7b752f4cf81bbdbe98e542ee10e1c6" + "ad868a6ac55c10d564fc23b8acff407daaf4ed2743520e02cda9680d9ea88e91" + "029359c4cf5906b6ab5bf60fbb3f1a1c7c59acfc7e4fb4ad8e623c04d503a3dd" + "4884604c8da8a53ce33db9ff8f1c5bb6bb97f37b39906bf41596555c1bcce9ed" + "08a899cd760ff0899a1170c2f224b9c52997a0785b7fe170805fd3e8b1127659"), + wvcdm::a2b_hex("f6f4b1e600a5b67813ed2bded913ba9f"), 0, 3}; SubSampleInfo single_encrypted_sub_sample = { - // key 1, encrypted, 256b + // key SD, encrypted, 256b true, 1, true, true, false, - wvcdm::a2bs_hex("E02562E04CD55351B14B3D748D36ED8E"), + wvcdm::a2bs_hex("371EA35E1A985D75D198A7F41020DC23"), wvcdm::a2b_hex( - "3b2cbde084973539329bd5656da22d20396249bf4a18a51c38c4743360cc9fea" - "a1c78d53de1bd7e14dc5d256fd20a57178a98b83804258c239acd7aa38f2d7d2" - "eca614965b3d22049e19e236fc1800e60965d8b36415677bf2f843d50a6943c4" - "683c07c114a32f5e5fbc9939c483c3a1b2ecd3d82b554d649798866191724283" - "f0ab082eba2da79aaca5c4eaf186f9ee9a0c568f621f705a578f30e4e2ef7b96" - "5e14cc046ce6dbf272ee5558b098f332333e95fc879dea6c29bf34acdb649650" - "f08201b9e649960f2493fd7677cc3abf5ae70e5445845c947ba544456b431646" - "d95a133bff5f57614dda5e4446cd8837901d074149dadf4b775b5b07bb88ca20"), + "64ab17b3e3dfab47245c7cce4543d4fc7a26dcf248f19f9b59f3c92601440b36" + "17c8ed0c96c656549e461f38708cd47a434066f8df28ccc28b79252eee3f9c2d" + "7f6c68ebe40141fe818fe082ca523c03d69ddaf183a93c022327fedc5582c5ab" + "ca9d342b71263a67f9cb2336f12108aaaef464f17177e44e9b0c4e56e61da53c" + "2150b4405cc82d994dfd9bf4087c761956d6688a9705db4cf350381085f383c4" + "9666d4aed135c519c1f0b5cba06e287feea96ea367bf54e7368dcf998276c6e4" + "6497e0c50e20fef74e42cb518fe7f22ef27202428688f86404e8278587017012" + "c1d65537c6cbd7dde04aae338d68115a9f430afc100ab83cdadf45dca39db685"), wvcdm::a2b_hex( - "5a36c0b633b58faf22156d78fdfb608e54a8095788b2b0463ef78d030b4abf82" - "eff34b8d9b7b6352e7d72de991b599662aa475da355033620152e2356ebfadee" - "06172be9e1058fa177e223b9fdd191380cff53c3ea810c6fd852a1df4967b799" - "415179a2276ec388ef763bab89605b9c6952c28dc8d6bf86b03fabbb46b392a3" - "1dad15be602eeeeabb45070b3e25d6bb0217073b1fc44c9fe848594121fd6a91" - "304d605e21f69615e1b57db18312b6b948725724b74e91d8aea7371e99532469" - "1b358bdee873f1936b63efe83d190a53c2d21754d302d63ff285174023473755" - "58b938c2e3ca4c2ce48942da97f9e45797f2c074ac6004734e93784a48af6160"), - wvcdm::a2b_hex("4cca615fc013102892f91efee936639b"), 0}; + "217ce9bde99bd91e9733a1a00b9b557ac3a433dc92633546156817fae26b6e1c" + "942ac20a89ff79f4c2f25fba99d6a44618a8c0420b27d54e3da17b77c9d43cca" + "595d259a1e4a8b6d7744cd98c5d3f921adc252eb7d8af6b916044b676a574747" + "8df21fdc42f166880d97a2225cd5c9ea5e7b752f4cf81bbdbe98e542ee10e1c6" + "ad868a6ac55c10d564fc23b8acff407daaf4ed2743520e02cda9680d9ea88e91" + "029359c4cf5906b6ab5bf60fbb3f1a1c7c59acfc7e4fb4ad8e623c04d503a3dd" + "4884604c8da8a53ce33db9ff8f1c5bb6bb97f37b39906bf41596555c1bcce9ed" + "08a899cd760ff0899a1170c2f224b9c52997a0785b7fe170805fd3e8b1127659"), + wvcdm::a2b_hex("f6f4b1e600a5b67813ed2bded913ba9f"), 0, 3}; SubSampleInfo switch_key_encrypted_sub_sample[2] = { - // block 0, key 1, encrypted, 256b + // block 0, key SD, encrypted, 256b {true, 2, true, true, false, - wvcdm::a2bs_hex("E02562E04CD55351B14B3D748D36ED8E"), + wvcdm::a2bs_hex("371EA35E1A985D75D198A7F41020DC23"), wvcdm::a2b_hex( - "3b2cbde084973539329bd5656da22d20396249bf4a18a51c38c4743360cc9fea" - "a1c78d53de1bd7e14dc5d256fd20a57178a98b83804258c239acd7aa38f2d7d2" - "eca614965b3d22049e19e236fc1800e60965d8b36415677bf2f843d50a6943c4" - "683c07c114a32f5e5fbc9939c483c3a1b2ecd3d82b554d649798866191724283" - "f0ab082eba2da79aaca5c4eaf186f9ee9a0c568f621f705a578f30e4e2ef7b96" - "5e14cc046ce6dbf272ee5558b098f332333e95fc879dea6c29bf34acdb649650" - "f08201b9e649960f2493fd7677cc3abf5ae70e5445845c947ba544456b431646" - "d95a133bff5f57614dda5e4446cd8837901d074149dadf4b775b5b07bb88ca20"), + "9efe1b7a3973324525e9b8c516855e554b52a73ce35cd181731b005a6525624f" + "a03875c89aee02f1da7f556b7e7d9a3eba89fe3061194bc2d1446233ca022892" + "ab95083f127d6ccb01b1368e6b6fa77e3570d84477a5517f2965ff72f8e0740c" + "d8282c22e7724ce44d88526dcd2d601002b717d8ca3b97087d28f9e3810efb8e" + "d4b08ee2da6bdb05a790b6363f8ee65cae8328e86848e4caf9be92db3e5492ad" + "6363a26051c23cf23b9aee79a8002470c4a5834c6aae956b509a42f4110262e0" + "565a043befd8ef3a335c9dfedca8d218f364215859d7daf7d040b1f0cb2eda87" + "c1be18f323fb0235dd9a6e7b3b2fea1cb9c6e5bc2b349962f0b8f0b92e749db2"), wvcdm::a2b_hex( - "5a36c0b633b58faf22156d78fdfb608e54a8095788b2b0463ef78d030b4abf82" - "eff34b8d9b7b6352e7d72de991b599662aa475da355033620152e2356ebfadee" - "06172be9e1058fa177e223b9fdd191380cff53c3ea810c6fd852a1df4967b799" - "415179a2276ec388ef763bab89605b9c6952c28dc8d6bf86b03fabbb46b392a3" - "1dad15be602eeeeabb45070b3e25d6bb0217073b1fc44c9fe848594121fd6a91" - "304d605e21f69615e1b57db18312b6b948725724b74e91d8aea7371e99532469" - "1b358bdee873f1936b63efe83d190a53c2d21754d302d63ff285174023473755" - "58b938c2e3ca4c2ce48942da97f9e45797f2c074ac6004734e93784a48af6160"), - wvcdm::a2b_hex("4cca615fc013102892f91efee936639b"), 0}, - // block 1, key 3, encrypted, 256b + "38a715e73c9209544c47e5eb089146de8136df5c6ed01e3e8d9cea8ae18a81c9" + "8c9c8ec67bf379dd80a21f57b0b00575827a240cd11332c5212defe9f1ef8b8e" + "2399271767bfe81e5a11abf7bca1307578217c4d5f8b942ab04351b4725d6e24" + "cd171fa3083570f7d7ae2b297224f701fd04d699c12c53e9ce9d3dab64ee6332" + "5fba183b7a1f3f20acaeabc0c446c9ca0df39fafb1e2891c72500741ad5b7941" + "4651729e30e9ddbb22f47a5026e09c795ff15a858123a7979e7be716cb8cd075" + "e8bfb91bc0cc83f7cacd5c4772f7479a1193d9307bc5f837185faed5499e66a7" + "e27db50b5d018d022279032016862883befd113b6c784889be8f9e6eb0f335f7"), + wvcdm::a2b_hex("fd38d7f754a97128b78440433e1ef4a8"), 0, 3}, + // block 1, key HD, encrypted, 256b {true, 2, true, true, false, - wvcdm::a2bs_hex("0065901A64A25899A5193664ABF9AF62"), + wvcdm::a2bs_hex("6D665122C01767FC087F340E6C335EA4"), wvcdm::a2b_hex( - "337f294addb4c16d1015fd839e80314472432eda503bd0529422318bec7d2b34" - "2b28d24b2c0bf999fd31711901a2b90e03373cb9553ffd4b2e6e655b80a39fe8" - "61718220948f0031a37fe277f943409d09c83ff1c19fe8d601f5b4d139821750" - "47170006db5f38cb84706a9beeaa455fca3b17d8de90c143eb36aaaac3f4670a" - "7194064f4d59996c95992a3e6a848d4da8adddae3ad03c8d28110fda3e5c1d0a" - "35d175c816481275a02d2da96c7fc313864ae076f03887309cdf00ca856bad28" - "2146141964b7f7972e9b253b1fbed6d74ffedcfc51bb91fa78a602479b0b757f" - "53a16cca15c381a4eab3034ee38e12280982d575fe3de23dd65cf8ba240daa88"), + "d9392411d15f47de0d7dd854eae5eb5ffbd2d3f86c530d2ef619fc81725df866" + "2e6267041b947863e5779812da3220824a3d154e7b094c1af70238c65877454e" + "3c3bdcce836962ba29b69442d5e5b4a4ff32a4b026521f3fa4d442a400081cdd" + "ba6ed313c43cc34443c4dc2b9cdcc9dbd478bf6afc4d515c07b42d8b151c15cc" + "165270f6083ecd5c75313c496143068f45966bb53e35906c7568424e93e35989" + "7da702fb89eb7c970af838d56a64a7a68f7cffe529807765d62540bb06bbc633" + "6eeec62d20f5b639731e57a0851e23e146cb9502dbde93dc4aca20e471a3fa0b" + "df01a74ecb48d5f57ac2be98fb21d19de7587d8d1e6e1788726e1544d05137f6"), wvcdm::a2b_hex( - "c397c1c9bc6782cd859e92f7158e3ff2a54ee984869582b942b400c22ebb6843" - "7c50f999f73831fa12040f6aab607f57280189ff1db1ab1d0046ffaa55ce1790" - "3baf0f9c983351b2ff15cc4f61f0f8db6922804e74a207e1e5baaeca67b427c7" - "2dd7883ee8232041a9c4e56ccfb8bdc3016602c73fa8944e734ee34c41cf1a17" - "b009b404fd924d23dfee1f494b5e374c9e87c2910de36826044bff89939a70d2" - "47ff1a8a0baa7643026b8d9442fda69dde6802816ddd4b6e3b18f0a95e788d6d" - "166ed7435ef663ef019b4438d3e203734eb95d68758e028f29cd623f35cde4bd" - "edfea33ade378a92a356020bcf3fbba01c9ab16ad448ce6ebe708f768c6676a7"), - wvcdm::a2b_hex("6d4ee851e563b951119cd33c52aadbf5"), 0}}; + "c48a94d07c34c4315e01010dbcc63a038d50a023b1ff2a07deae6e498cb03f84" + "57911d8c9d72fa5184c738d81a49999504b7cd4532b465436b7044606a6d40a2" + "74a653c4b93ebaf8db585d180211a02e5501a8027f2235fe56682390325c88ee" + "2ada85483eddb955c56f79634a2ceeb36d04b5d6faf7611817577d9b0fda088e" + "921fbdd7fa594ee4f557f7393f51f3049cd36973f645badf7cc4672ef8d973da" + "7dae8e59f32bf950c6569845a5261b5ed9cc500706eccf8d41f015b32026e16e" + "ab274465d880ff99a5eaea603eea66c7b0e6679bfd87145de0ec1a73ebfff092" + "866346a1d66db2923bca30664f417a6b66c07e91fb491be7872ebe5c9c2d03c2"), + wvcdm::a2b_hex("f56ab022666de858920e532f19bb32f6"), 0, 3}}; SubSampleInfo partial_single_encrypted_sub_sample = { - // key 3, encrypted, 125b, offset 0 - true, 1, true, true, false, - wvcdm::a2bs_hex("0065901A64A25899A5193664ABF9AF62"), - wvcdm::a2b_hex( - "337f294addb4c16d1015fd839e80314472432eda503bd0529422318bec7d2b34" - "2b28d24b2c0bf999fd31711901a2b90e03373cb9553ffd4b2e6e655b80a39fe8" - "61718220948f0031a37fe277f943409d09c83ff1c19fe8d601f5b4d139821750" - "47170006db5f38cb84706a9beeaa455fca3b17d8de90c143eb36aaaac3"), - wvcdm::a2b_hex( - "c397c1c9bc6782cd859e92f7158e3ff2a54ee984869582b942b400c22ebb6843" - "7c50f999f73831fa12040f6aab607f57280189ff1db1ab1d0046ffaa55ce1790" - "3baf0f9c983351b2ff15cc4f61f0f8db6922804e74a207e1e5baaeca67b427c7" - "2dd7883ee8232041a9c4e56ccfb8bdc3016602c73fa8944e734ee34c41"), - wvcdm::a2b_hex("6d4ee851e563b951119cd33c52aadbf5"), 0}; + // block 1, key SD, encrypted, 1-125b, offset 0 + true, 3, true, true, false, + wvcdm::a2bs_hex("371EA35E1A985D75D198A7F41020DC23"), + wvcdm::a2b_hex( + "53cc758763904ea5870458e6b23d36db1e6d7f7aaa2f3eeebb5393a7264991e7" + "ce4f57b198326e1a208a821799b2a29c90567ab57321b06e51fc20dc9bc5fc55" + "10720a8bb1f5e002c3e50ff70d2d806a9432cad237050d09581f5b0d59b00090" + "b3ad69b4087f5a155b17e13c44d33fa007475d207fc4ac2ef3b571ecb9"), + wvcdm::a2b_hex( + "52e65334501acadf78e2b26460def3ac973771ed7c64001a2e82917342a7eab3" + "047f5e85449692fae8f677be425a47bdea850df5a3ffff17043afb1f2b437ab2" + "b1d5e0784c4ed8f97fc24b8f565e85ed63fb7d1365980d9aea7b8b58f488f83c" + "1ce80b6096c60f3b113c988ff185b26e798da8fc6f327e4ff00e4b3fbf"), + wvcdm::a2b_hex("6ba18dd40f49da7f64c368e4db43fc88"), 0, 1}; SubSampleInfo partial_offset_single_encrypted_sub_sample = { // key 3, encrypted, 123b, offset 5 @@ -291,6 +292,18 @@ class WvCdmRequestLicenseTest : public testing::Test { ~WvCdmRequestLicenseTest() {} protected: + void GetOfflineConfiguration(std::string* key_id, std::string* client_auth) { + ConfigTestEnv config(g_license_server_id, false); + if (g_key_id.compare(a2bs_hex(g_config->key_id())) == 0) + key_id->assign(wvcdm::a2bs_hex(config.key_id())); + else + key_id->assign(g_key_id); + if (g_client_auth.compare(g_config->client_auth()) == 0) + client_auth->assign(config.client_auth()); + else + client_auth->assign(g_client_auth); + } + void GenerateKeyRequest(const std::string& key_system, const std::string& init_data, CdmLicenseType license_type) { @@ -645,16 +658,24 @@ TEST_F(WvCdmRequestLicenseTest, AddStreamingKeyTest) { } TEST_F(WvCdmRequestLicenseTest, AddKeyOfflineTest) { + std::string key_id; + std::string client_auth; + GetOfflineConfiguration(&key_id, &client_auth); + decryptor_.OpenSession(g_key_system, NULL, &session_id_); - GenerateKeyRequest(g_key_system, g_key_id, kLicenseTypeOffline); - VerifyKeyRequestResponse(g_license_server, g_client_auth, g_key_id, false); + GenerateKeyRequest(g_key_system, key_id, kLicenseTypeOffline); + VerifyKeyRequestResponse(g_license_server, client_auth, key_id, false); decryptor_.CloseSession(session_id_); } TEST_F(WvCdmRequestLicenseTest, RestoreOfflineKeyTest) { + std::string key_id; + std::string client_auth; + GetOfflineConfiguration(&key_id, &client_auth); + decryptor_.OpenSession(g_key_system, NULL, &session_id_); - GenerateKeyRequest(g_key_system, g_key_id, kLicenseTypeOffline); - VerifyKeyRequestResponse(g_license_server, g_client_auth, g_key_id, false); + GenerateKeyRequest(g_key_system, key_id, kLicenseTypeOffline); + VerifyKeyRequestResponse(g_license_server, client_auth, key_id, false); CdmKeySetId key_set_id = key_set_id_; EXPECT_FALSE(key_set_id_.empty()); @@ -667,9 +688,13 @@ TEST_F(WvCdmRequestLicenseTest, RestoreOfflineKeyTest) { } TEST_F(WvCdmRequestLicenseTest, DISABLED_ReleaseOfflineKeyTest) { + std::string key_id; + std::string client_auth; + GetOfflineConfiguration(&key_id, &client_auth); + decryptor_.OpenSession(g_key_system, NULL, &session_id_); - GenerateKeyRequest(g_key_system, g_key_id, kLicenseTypeOffline); - VerifyKeyRequestResponse(g_license_server, g_client_auth, g_key_id, false); + GenerateKeyRequest(g_key_system, key_id, kLicenseTypeOffline); + VerifyKeyRequestResponse(g_license_server, client_auth, key_id, false); CdmKeySetId key_set_id = key_set_id_; EXPECT_FALSE(key_set_id_.empty()); @@ -685,13 +710,17 @@ TEST_F(WvCdmRequestLicenseTest, DISABLED_ReleaseOfflineKeyTest) { key_set_id_.clear(); GenerateKeyRelease(key_set_id); key_set_id_ = key_set_id; - VerifyKeyRequestResponse(g_license_server, g_client_auth, g_key_id, false); + VerifyKeyRequestResponse(g_license_server, client_auth, key_id, false); } TEST_F(WvCdmRequestLicenseTest, DISABLED_ExpiryOnReleaseOfflineKeyTest) { + std::string key_id; + std::string client_auth; + GetOfflineConfiguration(&key_id, &client_auth); + decryptor_.OpenSession(g_key_system, NULL, &session_id_); - GenerateKeyRequest(g_key_system, g_key_id, kLicenseTypeOffline); - VerifyKeyRequestResponse(g_license_server, g_client_auth, g_key_id, false); + GenerateKeyRequest(g_key_system, key_id, kLicenseTypeOffline); + VerifyKeyRequestResponse(g_license_server, client_auth, key_id, false); CdmKeySetId key_set_id = key_set_id_; EXPECT_FALSE(key_set_id_.empty()); @@ -714,7 +743,7 @@ TEST_F(WvCdmRequestLicenseTest, DISABLED_ExpiryOnReleaseOfflineKeyTest) { EXPECT_TRUE(listener.session_id().size() != 0); EXPECT_TRUE(listener.session_id().compare(restore_session_id) == 0); EXPECT_TRUE(listener.event_type() == LICENSE_EXPIRED_EVENT); - VerifyKeyRequestResponse(g_license_server, g_client_auth, g_key_id, false); + VerifyKeyRequestResponse(g_license_server, client_auth, key_id, false); decryptor_.CloseSession(restore_session_id); } @@ -732,15 +761,19 @@ TEST_F(WvCdmRequestLicenseTest, StreamingLicenseRenewal) { } TEST_F(WvCdmRequestLicenseTest, OfflineLicenseRenewal) { + std::string key_id; + std::string client_auth; + GetOfflineConfiguration(&key_id, &client_auth); + decryptor_.OpenSession(g_key_system, NULL, &session_id_); - GenerateKeyRequest(g_key_system, g_key_id, kLicenseTypeOffline); - VerifyKeyRequestResponse(g_license_server, g_client_auth, g_key_id, false); + GenerateKeyRequest(g_key_system, key_id, kLicenseTypeOffline); + VerifyKeyRequestResponse(g_license_server, client_auth, key_id, false); std::string license_server; GenerateRenewalRequest(g_key_system, kLicenseTypeOffline, &license_server); if (license_server.empty()) license_server = g_license_server; - VerifyKeyRequestResponse(license_server, g_client_auth, g_key_id, true); + VerifyKeyRequestResponse(license_server, client_auth, key_id, true); decryptor_.CloseSession(session_id_); } @@ -869,6 +902,10 @@ TEST_F(WvCdmRequestLicenseTest, QueryKeyControlInfo) { } TEST_F(WvCdmRequestLicenseTest, SecurityLevelPathBackwardCompatibility) { + std::string key_id; + std::string client_auth; + GetOfflineConfiguration(&key_id, &client_auth); + CdmQueryMap query_info; CdmQueryMap::iterator itr; EXPECT_EQ(wvcdm::NO_ERROR, decryptor_.QueryStatus(&query_info)); @@ -919,8 +956,8 @@ TEST_F(WvCdmRequestLicenseTest, SecurityLevelPathBackwardCompatibility) { decryptor_.CloseSession(session_id_); decryptor_.OpenSession(g_key_system, NULL, &session_id_); - GenerateKeyRequest(g_key_system, g_key_id, kLicenseTypeOffline); - VerifyKeyRequestResponse(g_license_server, g_client_auth, g_key_id, false); + GenerateKeyRequest(g_key_system, key_id, kLicenseTypeOffline); + VerifyKeyRequestResponse(g_license_server, client_auth, key_id, false); CdmKeySetId key_set_id = key_set_id_; EXPECT_FALSE(key_set_id_.empty()); decryptor_.CloseSession(session_id_); @@ -947,7 +984,7 @@ TEST_F(WvCdmRequestLicenseTest, SecurityLevelPathBackwardCompatibility) { decryptor_.OpenSession(g_key_system, NULL, &session_id_); GenerateKeyRequest(g_key_system, g_key_id, kLicenseTypeStreaming); - VerifyKeyRequestResponse(g_license_server, g_client_auth, g_key_id, false); + VerifyKeyRequestResponse(g_license_server, client_auth, g_key_id, false); decryptor_.CloseSession(session_id_); if (security_level != kSecurityLevelL1) return; @@ -976,7 +1013,7 @@ TEST_F(WvCdmRequestLicenseTest, SecurityLevelPathBackwardCompatibility) { EXPECT_EQ(NO_ERROR, decryptor_.OpenSession(g_key_system, &property_set, &session_id_)); GenerateKeyRequest(g_key_system, g_key_id, kLicenseTypeStreaming); - VerifyKeyRequestResponse(g_license_server, g_client_auth, g_key_id, false); + VerifyKeyRequestResponse(g_license_server, client_auth, g_key_id, false); decryptor_.CloseSession(session_id_); } @@ -1207,7 +1244,7 @@ void show_menu(char* prog_name) { 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 Youtube Content Protection server" + std::cout << "cp (case sensitive) for Content Protection server" << std::endl << std::endl; std::cout << std::setw(35) << std::left << " -k/--keyid="; @@ -1262,7 +1299,7 @@ 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::kYouTubeContentProtectionServer; + g_license_server_id = wvcdm::kContentProtectionServer; } else { std::cout << "Invalid license server id" << optarg << std::endl; show_usage = true; @@ -1332,8 +1369,6 @@ int main(int argc, char** argv) { g_key_id = wvcdm::a2bs_hex(g_key_id); g_config->set_license_server(g_license_server); - g_config->set_port(g_port); - g_config->set_key_id(g_key_id); int status = RUN_ALL_TESTS(); delete g_config;