blob: 8edde1c55387a1ac5341439fbacd0709162348ad [file] [edit]
#include "tests.h"
#include "../crypt_tools.c"
char gf_prog_lf = '\r';
unittest(crypt_info_load_cpix)
{
static const char cpix[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"<cpix:CPIX version=\"2.3\" xmlns:cpix=\"urn:dashif:org:cpix\" xmlns:pskc=\"urn:ietf:params:xml:ns:keyprov:pskc\">"
"<cpix:ContentKeyList><cpix:ContentKey kid=\"01234567-8901-2345-6789-012345678901\" explicitIV=\"ASNFZ4kBI0VniQEjRWeJAQ==\" commonEncryptionScheme=\"cenc\">"
"<cpix:Data><pskc:Secret><pskc:PlainValue>Fzsa6fC/yLr6IPmeug0H2Q==</pskc:PlainValue></pskc:Secret></cpix:Data>"
"</cpix:ContentKey></cpix:ContentKeyList>"
"<cpix:DRMSystemList>"
"<cpix:DRMSystem kid=\"01234567-8901-2345-6789-012345678901\" systemId=\"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\">"
"<cpix:PSSH>AAAAP3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAB8SEAEjRWeJASNFZ4kBI0VniQEaBWV6ZHJtSOPclZsG</cpix:PSSH>"
"</cpix:DRMSystem>"
"<cpix:DRMSystem kid=\"01234567-8901-2345-6789-012345678901\" systemId=\"94ce86fb-07ff-4f43-adb8-93d2fa968ca2\">"
"<cpix:HLSSignalingData playlist=\"media\">I0VYVC1YLUtFWTpNRVRIT0Q9U0FNUExFLUFFUyxVUkk9InNrZDovLzAxMjM0NTY3LTg5MDEtMjM0NS02Nzg5LTAxMjM0NTY3ODkwMTowMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMSIsS0VZRk9STUFUPSJjb20uYXBwbGUuc3RyZWFtaW5na2V5ZGVsaXZlcnkiLEtFWUZPUk1BVFZFUlNJT05TPSIxIg==</cpix:HLSSignalingData>"
"</cpix:DRMSystem>"
"</cpix:DRMSystemList>"
"<cpix:ContentKeyUsageRuleList><cpix:ContentKeyUsageRule kid=\"01234567-8901-2345-6789-012345678901\"/></cpix:ContentKeyUsageRuleList>"
"</cpix:CPIX>";
GF_Blob blob;
char *blob_url = NULL;
GF_CryptInfo *info;
GF_TrackCryptInfo *tci;
GF_CryptDRMInfo *drm;
GF_Err e;
static const u8 expected_key[16] = {0x17,0x3b,0x1a,0xe9,0xf0,0xbf,0xc8,0xba,0xfa,0x20,0xf9,0x9e,0xba,0x0d,0x07,0xd9};
static const u8 expected_system[16] = {0xed,0xef,0x8b,0xa9,0x79,0xd6,0x4a,0xce,0xa3,0xc8,0x27,0xdc,0xd5,0x1d,0x21,0xed};
/* gf_file_temp() is allowed to use an unnamed system temporary file, so
* there is no portable path to pass back to gf_crypt_info_load(). */
memset(&blob, 0, sizeof(blob));
blob.data = (u8 *) cpix;
blob.size = sizeof(cpix) - 1;
blob_url = gf_blob_register(&blob);
assert_not_null(blob_url);
if (!blob_url) return;
info = gf_crypt_info_load(blob_url, &e);
assert_equal(e, GF_OK, "%d");
assert_not_null(info);
assert_true(info->is_cpix);
assert_equal(gf_list_count(info->tcis), 1, "%u");
assert_equal(gf_list_count(info->drm_infos), 2, "%u");
tci = (GF_TrackCryptInfo *) gf_list_get(info->tcis, 0);
assert_equal(tci->scheme_type, GF_CRYPT_TYPE_CENC, "%u");
assert_equal_mem(tci->keys[0].key, expected_key, 16);
assert_equal(tci->keys[0].IV_size, 16, "%u");
assert_equal_str(tci->keys[0].hls_info, "URI=\"skd://01234567-8901-2345-6789-012345678901:01234567890123456789012345678901\",KEYFORMAT=\"com.apple.streamingkeydelivery\",KEYFORMATVERSIONS=\"1\"");
drm = (GF_CryptDRMInfo *) gf_list_get(info->drm_infos, 0);
assert_equal(drm->version, 0, "%u");
assert_equal(drm->private_data_size, 31, "%u");
assert_equal_mem(drm->systemID, expected_system, 16);
gf_crypt_info_del(info);
gf_blob_unregister(&blob);
if (blob_url) gf_free(blob_url);
}