// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary // source code may only be used and distributed under the Widevine License // Agreement. #include "device_files.h" #include #include #include #include #include #include "arraysize.h" #include "cdm_random.h" #include "crypto_wrapped_key.h" #include "file_store.h" #include "okp_info.h" #include "properties.h" #include "string_conversions.h" #include "wv_cdm_constants.h" #include "wv_cdm_types.h" namespace wvcdm { namespace { using wvutil::a2bs_hex; using wvutil::ArraySize; using wvutil::b2a_hex; using wvutil::CdmRandom; using wvutil::File; const uint32_t kCertificateLen = 700; const uint32_t kWrappedKeyLen = 500; constexpr size_t kZero = 0; const std::string kOemCertificate = "an oem certificate"; const std::string kDrmCertificate = "a drm certificate"; const std::string kAnotherDrmCertificate = "another drm certificate"; const std::string kWrappedPrivateKey = "a wrapped private key"; const std::string kAnotherWrappedPrivateKey = "another wrapped private key"; const CryptoWrappedKey kCryptoWrappedKey(CryptoWrappedKey::kRsa, kWrappedPrivateKey); const CryptoWrappedKey kAnotherCryptoWrappedKey(CryptoWrappedKey::kEcc, kAnotherWrappedPrivateKey); const std::string kEmptyString; // Structurally valid test certificate of provisioning 3.0. // {'certificate': {'algorithm': 'RSA', // 'creation_time': '2020-12-14T23:17:27', // 'public_key': ... 270 bytes, // 'serial_number': '7CB49F987A635E1E0A52184694582D6E', // 'type': 'DRM_USER_DEVICE'}, // 'signature': ... 256 bytes, // 'signer': { // 'certificate': {'creation_time': '2017-11-17T13:21:39', // 'public_key': ... 270 bytes, // 'serial_number': '65802C9B625E5A319C33DC1CB7C3C6D4', // 'type': 'DRM_INTERMEDIATE'}, // 'signature': ... 384 bytes } // } // Value of |certificate| in DeviceCertFile proto messages // kTestCertificateFileData and kTestCertificateFileWithoutKeyTypeData // This can be used for both ATSC and Legacy certificate const std::string kTestCertificateWithoutExpiration = a2bs_hex( "0AEB03080212107CB49F987A635E1E0A52184694582D6E1887C6E1FE05228E023082010A" "0282010100DB13F5089C061E8EB62562692B3A06A774A99129BD63445FEC24448D07C30D" "7343553442A989AF000B7D962033C290D9A81DDCBCF3980512445EB7E6CF544FC1FB3FC7" "58FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36583C8FDB839C2752C1" "3E184034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B39BA2A7B9B2780344" "DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99DF98221D6FAB25A" "EE24574FB02D614974942A36527C62B73A6FB7CA9EF828EB598DA59060D654851103F857" "A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB" "3EA74CF146BE7D9267020301000128E83D3A0C7769646576696E652E636F6D480152AA01" "080110001A8101044F554B9400E10B17185036B6A1628EFC61B22166DE2235717A44F953" "B7928F3415B9D113835B10106CB6C2187F34188723D82ECF95CF5ECAB58923F173186081" "5999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035" "041173392B1E495428F0D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A" "2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3664EEB1280028CD44E12AA7C1A" "8EBF88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2A" "C1CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540" "BE18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017" "898DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552F" "B4B4A37955EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD292093" "29C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6" "E71E4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC4795A81AB405" "0AAE020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD005228E023082010A" "0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A7510D38021A562" "9B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014DFC8" "45AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E3143862" "34C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3EC475C55C608E771C763AB025" "06F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6890B9274C16066F74FC401EA355F" "0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296A107C36223404F2BF1FCA16FD0" "A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE4391BBFA7A47FB9D01DE857EA88E5" "E36EE36E245859FC0F020301000128E83D1280037E06581A019184AB572AFDCADDD03F16" "1CE68200F8E6F8AD161947360BC8D49C0D68009B1C4644F9B3F3FB6DDFD92EF92DE62D41" "D459D29D81BFAEF3970A3A39D25B2662ECB03B2DA7B68302FAA6DD98D95A143CC8C1CB6A" "DDA76D2EE9C3723FAF95A29CDC3E968B6821A91C051CA280A86669710A1AD7A44BF92180" "27460DF694E2E9270396DF221963F21EE6AA220A5EE4A4D0FEB3D53EB5732F8F91E9A96B" "3B8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E059F9734A96BE25AA44560DBA8" "C38755A42A82BD7F88EDD19DF346A667B33B8114C76A8838C423D824A50B23251A088136" "D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB813B387A10CD2A30E3447634AB" "3408F96B9CF3D98896D405F3F540D9C57962760FCD177CDD101EB8A4148B9C29CED5EAD6" "45A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B16DE370CD9AFB9B25564A73" "A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D426558FA" "98383E3CD2ED4830"); // Certificate data: // Similar to kTestCertificateWithoutExpiration // creation_time_seconds: 0 // expiration_time_seconds: unset const std::string kTestCertificateNoExpirationWithUnlimitedCreationTime = a2bs_hex( "0AE703080212107CB49F987A635E1E0A52184694582D6E1800228E023082010A028201" "0100DB13F5089C061E8EB62562692B3A06A774A99129BD63445FEC24448D07C30D7343" "553442A989AF000B7D962033C290D9A81DDCBCF3980512445EB7E6CF544FC1FB3FC758" "FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36583C8FDB839C2752C1" "3E184034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B39BA2A7B9B27803" "44DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99DF98221D6FA" "B25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF828EB598DA59060D6548511" "03F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88A1" "85B97FEB3EA74CF146BE7D9267020301000128E83D3A0C7769646576696E652E636F6D" "480152AA01080110001A8101044F554B9400E10B17185036B6A1628EFC61B22166DE22" "35717A44F953B7928F3415B9D113835B10106CB6C2187F34188723D82ECF95CF5ECAB5" "8923F1731860815999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096AAEC3AC761B" "624A92158AC91035041173392B1E495428F0D17406B10889B6B701FAF08D2284F95DBB" "CA2220595267DCA89A2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3664EEB" "1280028CD44E12AA7C1A8EBF88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52" "A0E18E929A4923A4172C2AC1CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB906163" "2C1C82333A6FB6BC9C4B2540BE18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE9" "35FDDF7BBAC0BA99AA7FA66017898DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE" "93A97B35A8EAE8D3213D392B552FB4B4A37955EBE7362287502EB649D982F06D308178" "642C1F69B12383B050CF60CD29209329C148FB4F422ED5ED139A25A89E13D4AB2E8DB9" "40299D1414AF30DDF0D06AF55C1978F6E71E4548F20FFAE953A99D492F3D2847783338" "D74F66D2DFEBB50896ACBC4795A81AB4050AAE020801121065802C9B625E5A319C33DC" "1CB7C3C6D418E3A5BDD005228E023082010A0282010100B80502043C2A8A0FD8D25C61" "3E1E3E3B5E349F332F04516A7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3D" "F6860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F842B8BA4" "A5D9200FFA3ED45D705520A5C372A889F9E314386234C6897AE655851FCD9ADB4EF912" "6C78386EA93BCB25BA3EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE" "7B95C6407690533BD6890B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F" "8DB2A47841CD0DAD793296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14A" "CAE3B05A038BD3E4BBBAE4391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F02" "0301000128E83D1280037E06581A019184AB572AFDCADDD03F161CE68200F8E6F8AD16" "1947360BC8D49C0D68009B1C4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3" "970A3A39D25B2662ECB03B2DA7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C372" "3FAF95A29CDC3E968B6821A91C051CA280A86669710A1AD7A44BF9218027460DF694E2" "E9270396DF221963F21EE6AA220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C5" "1339EA284D4D0EDD55B6AD56F7416420E05E059F9734A96BE25AA44560DBA8C38755A4" "2A82BD7F88EDD19DF346A667B33B8114C76A8838C423D824A50B23251A088136D6E8F4" "75299D2AFD46CEA51B5CBDF789A572125CD24FBB813B387A10CD2A30E3447634AB3408" "F96B9CF3D98896D405F3F540D9C57962760FCD177CDD101EB8A4148B9C29CED5EAD645" "A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B16DE370CD9AFB9B25564A73" "A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D426558" "FA98383E3CD2ED4830"); // Certificate data: // Similar to kTestCertificateWithoutExpiration // creation_time_seconds: -5 // expiration_time_seconds: unset const std::string kTestCertificateWithInvalidCreationTime = a2bs_hex( "0AEB03080212107CB49F987A635E1E0A52184694582D6E18FBFFFFFF0F228E023082010A02" "82010100DB13F5089C061E8EB62562692B3A06A774A99129BD63445FEC24448D07C30D7343" "553442A989AF000B7D962033C290D9A81DDCBCF3980512445EB7E6CF544FC1FB3FC758FB9E" "06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36583C8FDB839C2752C13E184034" "EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B39BA2A7B9B2780344DD5834BF71" "F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99DF98221D6FAB25AEE24574FB02D" "614974942A36527C62B73A6FB7CA9EF828EB598DA59060D654851103F857A041E66B2FFB99" "713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D92" "67020301000128E83D3A0C7769646576696E652E636F6D480152AA01080110001A8101044F" "554B9400E10B17185036B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B" "10106CB6C2187F34188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B99" "1B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0D174" "06B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D12742408" "A07C103DF860DC0520C3664EEB1280028CD44E12AA7C1A8EBF88C81A2A54EFD29F8BC6C377" "B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CDADD16E41A7833AA0DE9D09F685" "DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18CED4AB0AF1C3EFE521308F3D4CF5" "13C20500064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F6F5EF90C875D5D8DA39E769E8D" "1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A37955EBE7362287502EB649D982F06D" "308178642C1F69B12383B050CF60CD29209329C148FB4F422ED5ED139A25A89E13D4AB2E8D" "B940299D1414AF30DDF0D06AF55C1978F6E71E4548F20FFAE953A99D492F3D2847783338D7" "4F66D2DFEBB50896ACBC4795A81AB4050AAE020801121065802C9B625E5A319C33DC1CB7C3" "C6D418E3A5BDD005228E023082010A0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E" "349F332F04516A7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B9" "83A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D70" "5520A5C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3EC4" "75C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6890B9274" "C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296A107C362" "23404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE4391BBFA7A47F" "B9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E06581A019184AB57" "2AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C4644F9B3F3FB6DDFD9" "2EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2DA7B68302FAA6DD98D95A14" "3CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A91C051CA280A86669710A1AD7A4" "4BF9218027460DF694E2E9270396DF221963F21EE6AA220A5EE4A4D0FEB3D53EB5732F8F91" "E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E059F9734A96BE25AA44560" "DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A8838C423D824A50B23251A0881" "36D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB813B387A10CD2A30E3447634AB" "3408F96B9CF3D98896D405F3F540D9C57962760FCD177CDD101EB8A4148B9C29CED5EAD645" "A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B16DE370CD9AFB9B25564A73A30E" "2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D426558FA98383E" "3CD2ED4830"); // Certificate data: // Similar to kTestCertificateWithoutExpiration // creation_time_seconds: ~ 03/16/2021 // expiration_time_seconds: ~ 03/2031 const std::string kTestCertificateWithFutureExpiration = a2bs_hex( "0AF103080212107CB49F987A635E1E0A52184694582D6E1887C6E1FE05228E023082010A02" "82010100DB13F5089C061E8EB62562692B3A06A774A99129BD63445FEC24448D07C30D7343" "553442A989AF000B7D962033C290D9A81DDCBCF3980512445EB7E6CF544FC1FB3FC758FB9E" "06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36583C8FDB839C2752C13E184034" "EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B39BA2A7B9B2780344DD5834BF71" "F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99DF98221D6FAB25AEE24574FB02D" "614974942A36527C62B73A6FB7CA9EF828EB598DA59060D654851103F857A041E66B2FFB99" "713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D92" "67020301000128E83D3A0C7769646576696E652E636F6D480152AA01080110001A8101044F" "554B9400E10B17185036B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B" "10106CB6C2187F34188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B99" "1B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0D174" "06B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D12742408" "A07C103DF860DC0520C3664EEB60E29D8399071280028CD44E12AA7C1A8EBF88C81A2A54EF" "D29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CDADD16E41A7833A" "A0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18CED4AB0AF1C3EFE5" "21308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F6F5EF90C875D5D" "8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A37955EBE7362287502E" "B649D982F06D308178642C1F69B12383B050CF60CD29209329C148FB4F422ED5ED139A25A8" "9E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E4548F20FFAE953A99D492F3D" "2847783338D74F66D2DFEBB50896ACBC4795A81AB4050AAE020801121065802C9B625E5A31" "9C33DC1CB7C3C6D418E3A5BDD005228E023082010A0282010100B80502043C2A8A0FD8D25C" "613E1E3E3B5E349F332F04516A7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6" "860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D920" "0FFA3ED45D705520A5C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA9" "3BCB25BA3EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C640769053" "3BD6890B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD79" "3296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE4" "391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E0658" "1A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C4644F9" "B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2DA7B68302FA" "A6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A91C051CA280A866" "69710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A5EE4A4D0FEB3D5" "3EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E059F9734A9" "6BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A8838C423D824A5" "0B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB813B387A10CD2A" "30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760FCD177CDD101EB8A4148B9C" "29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B16DE370CD9AFB9B" "25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D42" "6558FA98383E3CD2ED4830"); // Certificate data: // Similar to kTestCertificateWithoutExpiration // creation_time_seconds: ~ 03/17/2021 // expiration_time_seconds: 0 const std::string kTestCertificateNeverExpires = a2bs_hex( "0AED03080212107CB49F987A635E1E0A52184694582D6E1894AECC8206228E023082010A02" "82010100DB13F5089C061E8EB62562692B3A06A774A99129BD63445FEC24448D07C30D7343" "553442A989AF000B7D962033C290D9A81DDCBCF3980512445EB7E6CF544FC1FB3FC758FB9E" "06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36583C8FDB839C2752C13E184034" "EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B39BA2A7B9B2780344DD5834BF71" "F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99DF98221D6FAB25AEE24574FB02D" "614974942A36527C62B73A6FB7CA9EF828EB598DA59060D654851103F857A041E66B2FFB99" "713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D92" "67020301000128E83D3A0C7769646576696E652E636F6D480152AA01080110001A8101044F" "554B9400E10B17185036B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B" "10106CB6C2187F34188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B99" "1B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0D174" "06B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D12742408" "A07C103DF860DC0520C3664EEB60001280028CD44E12AA7C1A8EBF88C81A2A54EFD29F8BC6" "C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CDADD16E41A7833AA0DE9D09" "F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18CED4AB0AF1C3EFE521308F3D" "4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F6F5EF90C875D5D8DA39E76" "9E8D1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A37955EBE7362287502EB649D982" "F06D308178642C1F69B12383B050CF60CD29209329C148FB4F422ED5ED139A25A89E13D4AB" "2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E4548F20FFAE953A99D492F3D28477833" "38D74F66D2DFEBB50896ACBC4795A81AB4050AAE020801121065802C9B625E5A319C33DC1C" "B7C3C6D418E3A5BDD005228E023082010A0282010100B80502043C2A8A0FD8D25C613E1E3E" "3B5E349F332F04516A7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB" "60B983A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED4" "5D705520A5C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA" "3EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6890B" "9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296A107" "C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE4391BBFA7" "A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E06581A019184" "AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C4644F9B3F3FB6D" "DFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2DA7B68302FAA6DD98D9" "5A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A91C051CA280A86669710A1A" "D7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A5EE4A4D0FEB3D53EB5732F" "8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E059F9734A96BE25AA4" "4560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A8838C423D824A50B23251A" "088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB813B387A10CD2A30E34476" "34AB3408F96B9CF3D98896D405F3F540D9C57962760FCD177CDD101EB8A4148B9C29CED5EA" "D645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B16DE370CD9AFB9B25564A73" "A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D426558FA98" "383E3CD2ED4830"); // Certificate data: // Similar to kTestCertificateWithoutExpiration // creation_time_seconds: ~ 03/07/2021 // expiration_time_seconds: ~ 03/08/2021 const std::string kTestCertificateExpired = a2bs_hex( "0AF103080212107CB49F987A635E1E0A52184694582D6E189EF0968206228E023082010A02" "82010100DB13F5089C061E8EB62562692B3A06A774A99129BD63445FEC24448D07C30D7343" "553442A989AF000B7D962033C290D9A81DDCBCF3980512445EB7E6CF544FC1FB3FC758FB9E" "06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36583C8FDB839C2752C13E184034" "EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B39BA2A7B9B2780344DD5834BF71" "F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99DF98221D6FAB25AEE24574FB02D" "614974942A36527C62B73A6FB7CA9EF828EB598DA59060D654851103F857A041E66B2FFB99" "713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D92" "67020301000128E83D3A0C7769646576696E652E636F6D480152AA01080110001A8101044F" "554B9400E10B17185036B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B" "10106CB6C2187F34188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B99" "1B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0D174" "06B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D12742408" "A07C103DF860DC0520C3664EEB609E939C82061280028CD44E12AA7C1A8EBF88C81A2A54EF" "D29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CDADD16E41A7833A" "A0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18CED4AB0AF1C3EFE5" "21308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F6F5EF90C875D5D" "8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A37955EBE7362287502E" "B649D982F06D308178642C1F69B12383B050CF60CD29209329C148FB4F422ED5ED139A25A8" "9E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E4548F20FFAE953A99D492F3D" "2847783338D74F66D2DFEBB50896ACBC4795A81AB4050AAE020801121065802C9B625E5A31" "9C33DC1CB7C3C6D418E3A5BDD005228E023082010A0282010100B80502043C2A8A0FD8D25C" "613E1E3E3B5E349F332F04516A7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6" "860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D920" "0FFA3ED45D705520A5C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA9" "3BCB25BA3EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C640769053" "3BD6890B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD79" "3296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE4" "391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E0658" "1A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C4644F9" "B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2DA7B68302FA" "A6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A91C051CA280A866" "69710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A5EE4A4D0FEB3D5" "3EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E059F9734A9" "6BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A8838C423D824A5" "0B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB813B387A10CD2A" "30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760FCD177CDD101EB8A4148B9C" "29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B16DE370CD9AFB9B" "25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D42" "6558FA98383E3CD2ED4830"); // Certificate data: // Similar to kTestCertificateWithoutExpiration // creation_time_seconds: unset // expiration_time_seconds: ~ 03/08/2031 const std::string kTestCertificateWithInvalidCreationFutureExpiration = a2bs_hex( "0AEB03080212107CB49F987A635E1E0A52184694582D6E228E023082010A0282010100" "DB13F5089C061E8EB62562692B3A06A774A99129BD63445FEC24448D07C30D73435534" "42A989AF000B7D962033C290D9A81DDCBCF3980512445EB7E6CF544FC1FB3FC758FB9E" "06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36583C8FDB839C2752C13E18" "4034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B39BA2A7B9B2780344DD" "5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99DF98221D6FAB25A" "EE24574FB02D614974942A36527C62B73A6FB7CA9EF828EB598DA59060D654851103F8" "57A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88A185B9" "7FEB3EA74CF146BE7D9267020301000128E83D3A0C7769646576696E652E636F6D4801" "52AA01080110001A8101044F554B9400E10B17185036B6A1628EFC61B22166DE223571" "7A44F953B7928F3415B9D113835B10106CB6C2187F34188723D82ECF95CF5ECAB58923" "F1731860815999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096AAEC3AC761B624A" "92158AC91035041173392B1E495428F0D17406B10889B6B701FAF08D2284F95DBBCA22" "20595267DCA89A2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3664EEB60FD" "8AFC98071280028CD44E12AA7C1A8EBF88C81A2A54EFD29F8BC6C377B0C11C3404F84D" "8B9EAD52A0E18E929A4923A4172C2AC1CDADD16E41A7833AA0DE9D09F685DAC9ACC702" "CB9061632C1C82333A6FB6BC9C4B2540BE18CED4AB0AF1C3EFE521308F3D4CF513C205" "00064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F6F5EF90C875D5D8DA39E769E8D14" "85253EEE93A97B35A8EAE8D3213D392B552FB4B4A37955EBE7362287502EB649D982F0" "6D308178642C1F69B12383B050CF60CD29209329C148FB4F422ED5ED139A25A89E13D4" "AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E4548F20FFAE953A99D492F3D28" "47783338D74F66D2DFEBB50896ACBC4795A81AB4050AAE020801121065802C9B625E5A" "319C33DC1CB7C3C6D418E3A5BDD005228E023082010A0282010100B80502043C2A8A0F" "D8D25C613E1E3E3B5E349F332F04516A7510D38021A5629B9AA027AEAD3C759B7AFE70" "BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F" "842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E314386234C6897AE655851FCD9A" "DB4EF9126C78386EA93BCB25BA3EC475C55C608E771C763AB02506F9B07252D6ABF7EA" "64B1EBDE7B95C6407690533BD6890B9274C16066F74FC401EA355F0A02106814D49BF0" "C89E6E1F8DB2A47841CD0DAD793296A107C36223404F2BF1FCA16FD0A4B982634DB624" "07F8F14ACAE3B05A038BD3E4BBBAE4391BBFA7A47FB9D01DE857EA88E5E36EE36E2458" "59FC0F020301000128E83D1280037E06581A019184AB572AFDCADDD03F161CE68200F8" "E6F8AD161947360BC8D49C0D68009B1C4644F9B3F3FB6DDFD92EF92DE62D41D459D29D" "81BFAEF3970A3A39D25B2662ECB03B2DA7B68302FAA6DD98D95A143CC8C1CB6ADDA76D" "2EE9C3723FAF95A29CDC3E968B6821A91C051CA280A86669710A1AD7A44BF921802746" "0DF694E2E9270396DF221963F21EE6AA220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B" "8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E059F9734A96BE25AA44560DBA8" "C38755A42A82BD7F88EDD19DF346A667B33B8114C76A8838C423D824A50B23251A0881" "36D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB813B387A10CD2A30E34476" "34AB3408F96B9CF3D98896D405F3F540D9C57962760FCD177CDD101EB8A4148B9C29CE" "D5EAD645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B16DE370CD9AFB9B" "25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA06ECD790F1E" "3D426558FA98383E3CD2ED4830"); // Certificate data: // Similar to kTestCertificateWithoutExpiration // creation_time_seconds: 0 // expiration_time_seconds: ~2031 const std::string kTestCertificateWithUnlimitedCreationFutureExpiration = a2bs_hex( "0AEB03080212107CB49F987A635E1E0A52184694582D6E228E023082010A0282010100" "DB13F5089C061E8EB62562692B3A06A774A99129BD63445FEC24448D07C30D73435534" "42A989AF000B7D962033C290D9A81DDCBCF3980512445EB7E6CF544FC1FB3FC758FB9E" "06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36583C8FDB839C2752C13E18" "4034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B39BA2A7B9B2780344DD" "5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99DF98221D6FAB25A" "EE24574FB02D614974942A36527C62B73A6FB7CA9EF828EB598DA59060D654851103F8" "57A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88A185B9" "7FEB3EA74CF146BE7D9267020301000128E83D3A0C7769646576696E652E636F6D4801" "52AA01080110001A8101044F554B9400E10B17185036B6A1628EFC61B22166DE223571" "7A44F953B7928F3415B9D113835B10106CB6C2187F34188723D82ECF95CF5ECAB58923" "F1731860815999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096AAEC3AC761B624A" "92158AC91035041173392B1E495428F0D17406B10889B6B701FAF08D2284F95DBBCA22" "20595267DCA89A2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3664EEB60AE" "91FC98071280028CD44E12AA7C1A8EBF88C81A2A54EFD29F8BC6C377B0C11C3404F84D" "8B9EAD52A0E18E929A4923A4172C2AC1CDADD16E41A7833AA0DE9D09F685DAC9ACC702" "CB9061632C1C82333A6FB6BC9C4B2540BE18CED4AB0AF1C3EFE521308F3D4CF513C205" "00064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F6F5EF90C875D5D8DA39E769E8D14" "85253EEE93A97B35A8EAE8D3213D392B552FB4B4A37955EBE7362287502EB649D982F0" "6D308178642C1F69B12383B050CF60CD29209329C148FB4F422ED5ED139A25A89E13D4" "AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E4548F20FFAE953A99D492F3D28" "47783338D74F66D2DFEBB50896ACBC4795A81AB4050AAE020801121065802C9B625E5A" "319C33DC1CB7C3C6D418E3A5BDD005228E023082010A0282010100B80502043C2A8A0F" "D8D25C613E1E3E3B5E349F332F04516A7510D38021A5629B9AA027AEAD3C759B7AFE70" "BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F" "842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E314386234C6897AE655851FCD9A" "DB4EF9126C78386EA93BCB25BA3EC475C55C608E771C763AB02506F9B07252D6ABF7EA" "64B1EBDE7B95C6407690533BD6890B9274C16066F74FC401EA355F0A02106814D49BF0" "C89E6E1F8DB2A47841CD0DAD793296A107C36223404F2BF1FCA16FD0A4B982634DB624" "07F8F14ACAE3B05A038BD3E4BBBAE4391BBFA7A47FB9D01DE857EA88E5E36EE36E2458" "59FC0F020301000128E83D1280037E06581A019184AB572AFDCADDD03F161CE68200F8" "E6F8AD161947360BC8D49C0D68009B1C4644F9B3F3FB6DDFD92EF92DE62D41D459D29D" "81BFAEF3970A3A39D25B2662ECB03B2DA7B68302FAA6DD98D95A143CC8C1CB6ADDA76D" "2EE9C3723FAF95A29CDC3E968B6821A91C051CA280A86669710A1AD7A44BF921802746" "0DF694E2E9270396DF221963F21EE6AA220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B" "8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E059F9734A96BE25AA44560DBA8" "C38755A42A82BD7F88EDD19DF346A667B33B8114C76A8838C423D824A50B23251A0881" "36D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB813B387A10CD2A30E34476" "34AB3408F96B9CF3D98896D405F3F540D9C57962760FCD177CDD101EB8A4148B9C29CE" "D5EAD645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B16DE370CD9AFB9B" "25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA06ECD790F1E" "3D426558FA98383E3CD2ED4830"); // Certificate data: // Similar to kTestCertificateWithoutExpiration // creation_time_seconds: 03/17/2021 // expiration_time_seconds: 03/07/2021 const std::string kTestCertificateExpiresBeforeCreationTime = a2bs_hex( "0AF103080212107CB49F987A635E1E0A52184694582D6E18EC95CC8206228E023082010A02" "82010100DB13F5089C061E8EB62562692B3A06A774A99129BD63445FEC24448D07C30D7343" "553442A989AF000B7D962033C290D9A81DDCBCF3980512445EB7E6CF544FC1FB3FC758FB9E" "06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36583C8FDB839C2752C13E184034" "EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B39BA2A7B9B2780344DD5834BF71" "F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99DF98221D6FAB25AEE24574FB02D" "614974942A36527C62B73A6FB7CA9EF828EB598DA59060D654851103F857A041E66B2FFB99" "713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D92" "67020301000128E83D3A0C7769646576696E652E636F6D480152AA01080110001A8101044F" "554B9400E10B17185036B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B" "10106CB6C2187F34188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B99" "1B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0D174" "06B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D12742408" "A07C103DF860DC0520C3664EEB60ECB79782061280028CD44E12AA7C1A8EBF88C81A2A54EF" "D29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CDADD16E41A7833A" "A0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18CED4AB0AF1C3EFE5" "21308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F6F5EF90C875D5D" "8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A37955EBE7362287502E" "B649D982F06D308178642C1F69B12383B050CF60CD29209329C148FB4F422ED5ED139A25A8" "9E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E4548F20FFAE953A99D492F3D" "2847783338D74F66D2DFEBB50896ACBC4795A81AB4050AAE020801121065802C9B625E5A31" "9C33DC1CB7C3C6D418E3A5BDD005228E023082010A0282010100B80502043C2A8A0FD8D25C" "613E1E3E3B5E349F332F04516A7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6" "860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D920" "0FFA3ED45D705520A5C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA9" "3BCB25BA3EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C640769053" "3BD6890B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD79" "3296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE4" "391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E0658" "1A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C4644F9" "B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2DA7B68302FA" "A6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A91C051CA280A866" "69710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A5EE4A4D0FEB3D5" "3EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E059F9734A9" "6BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A8838C423D824A5" "0B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB813B387A10CD2A" "30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760FCD177CDD101EB8A4148B9C" "29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B16DE370CD9AFB9B" "25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D42" "6558FA98383E3CD2ED4830"); // A Wrapped Private Key // Value of |wrapped_private_key| in DeviceCertFile proto messages // kTestCertificateFileData and kTestCertificateFileWithoutKeyTypeData. // Value is randomly generated value and is not compatible with a real // OEMCrypto implementation. const std::string kTestWrappedPrivateKeyData = a2bs_hex( "B36550E6BEACCB34F6C3B2ABF86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD61" "E21CEE503E7A40B93B07A4186A362D9E6F88DD48D4516635C6D0C253C03F12EFA6095618" "D647F5212C518C4A6AA7172BC691530703FEDDFDB25ECF885A53FF2B4B98773979D61AE6" "59E340489811512A5C2FD445A4B0AE88A3A7F29ACE5B01ECF580D0993227BC408B602B0B" "C099920C17044FE66242372C2B2E8CA5C1EEC0844BC19198ADADE47FB449DC9B30784952" "B3A8131B912CE928070D665C0557EBE7484FDABFBCA0F2C2BFD4FBDDB6681C4689FD276C" "231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B119991EFF6E72C7D3B8C75CE588D" "B0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13015AD7BEA84CD01E335E68AF15" "3B989FE8BEEC60A94753C638535FA3F215F750F6954AC395F8702941409E7276910CE118" "19649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60C84CB21AB6E75E59DAFBE7" "01D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B69180B697521F3865B4A05DF2B" "B51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14E5BA19DBF9394E18E474E790" "63B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1CA2ABC5DEC2A81B5359771849E" "7B4560EB6D329E59455A70F57F035DFB50EC4354D7E068ADFAFAD4081ACA67FD"); const CryptoWrappedKey kTestWrappedKey = {CryptoWrappedKey::kRsa, kTestWrappedPrivateKeyData}; // Structurally valid test certificate device file, missing |key_type| field. // {'certificate': kTestCertificate, // 'wrapped_private_key': kTestWrappedPrivateKeyData // } const std::string kTestCertificateFileWithoutKeyTypeData = a2bs_hex( "0AA90F080110011AA20F0AA80B0AEB03080212107CB49F987A635E1E0A52184694582D6E" "1887C6E1FE05228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A774A9" "9129BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF398" "0512445EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9" "830E0F36583C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C" "9CF1EBB1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78" "471C11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF828" "EB598DA59060D654851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888" "AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C77696465" "76696E652E636F6D480152AA01080110001A8101044F554B9400E10B17185036B6A1628E" "FC61B22166DE2235717A44F953B7928F3415B9D113835B10106CB6C2187F34188723D82E" "CF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096A" "AEC3AC761B624A92158AC91035041173392B1E495428F0D17406B10889B6B701FAF08D22" "84F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3" "664EEB1280028CD44E12AA7C1A8EBF88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9E" "AD52A0E18E929A4923A4172C2AC1CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061" "632C1C82333A6FB6BC9C4B2540BE18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE9" "35FDDF7BBAC0BA99AA7FA66017898DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93" "A97B35A8EAE8D3213D392B552FB4B4A37955EBE7362287502EB649D982F06D308178642C" "1F69B12383B050CF60CD29209329C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D" "1414AF30DDF0D06AF55C1978F6E71E4548F20FFAE953A99D492F3D2847783338D74F66D2" "DFEBB50896ACBC4795A81AB4050AAE020801121065802C9B625E5A319C33DC1CB7C3C6D4" "18E3A5BDD005228E023082010A0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E34" "9F332F04516A7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B9" "83A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D" "705520A5C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA" "3EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD689" "0B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296" "A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE439" "1BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E0658" "1A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C4644" "F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2DA7B683" "02FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A91C051CA2" "80A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A5EE4A4" "D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E" "059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A88" "38C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB" "813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760FCD177C" "DD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E" "07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAED" "AD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403B36550E6BEACCB34F6C3B2AB" "F86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD61E21CEE503E7A40B93B07A418" "6A362D9E6F88DD48D4516635C6D0C253C03F12EFA6095618D647F5212C518C4A6AA7172B" "C691530703FEDDFDB25ECF885A53FF2B4B98773979D61AE659E340489811512A5C2FD445" "A4B0AE88A3A7F29ACE5B01ECF580D0993227BC408B602B0BC099920C17044FE66242372C" "2B2E8CA5C1EEC0844BC19198ADADE47FB449DC9B30784952B3A8131B912CE928070D665C" "0557EBE7484FDABFBCA0F2C2BFD4FBDDB6681C4689FD276C231B72B15AC4E5C3C088449D" "E4785F1D4835AC44E39B119991EFF6E72C7D3B8C75CE588DB0B3AD69EB79C19B22CB518E" "F964C9D985AFD3677F0D13015AD7BEA84CD01E335E68AF153B989FE8BEEC60A94753C638" "535FA3F215F750F6954AC395F8702941409E7276910CE11819649641318B5BD1B78DECEA" "DB2B562312CC286DB0BCC14A60C84CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422E" "D8EB5ECE330C9886406B3B69180B697521F3865B4A05DF2BB51D16CAFEF05866E5D55C36" "0C759F5B10E0D354D63D5A14E5BA19DBF9394E18E474E79063B4E877C2FE6BCA732ED39B" "091B6D7A21DD9D6D6750C1CA2ABC5DEC2A81B5359771849E7B4560EB6D329E59455A70F5" "7F035DFB50EC4354D7E068ADFAFAD4081ACA67FD1220F07050C50264B496211432D47DAA" "88EE59BAD141B8FD372BAE67A6FF05C74DAC"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithoutExpiration, // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': unset // 'expiration_time_seconds': unset // } const std::string kTestCertificateFileDataWithoutExpiration = a2bs_hex( "0AAB0F080110011AA40F0AA80B0AEB03080212107CB49F987A635E1E0A52184694582D6E" "1887C6E1FE05228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A774A9" "9129BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF398" "0512445EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9" "830E0F36583C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C" "9CF1EBB1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78" "471C11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF828" "EB598DA59060D654851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888" "AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C77696465" "76696E652E636F6D480152AA01080110001A8101044F554B9400E10B17185036B6A1628E" "FC61B22166DE2235717A44F953B7928F3415B9D113835B10106CB6C2187F34188723D82E" "CF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096A" "AEC3AC761B624A92158AC91035041173392B1E495428F0D17406B10889B6B701FAF08D22" "84F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3" "664EEB1280028CD44E12AA7C1A8EBF88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9E" "AD52A0E18E929A4923A4172C2AC1CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061" "632C1C82333A6FB6BC9C4B2540BE18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE9" "35FDDF7BBAC0BA99AA7FA66017898DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93" "A97B35A8EAE8D3213D392B552FB4B4A37955EBE7362287502EB649D982F06D308178642C" "1F69B12383B050CF60CD29209329C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D" "1414AF30DDF0D06AF55C1978F6E71E4548F20FFAE953A99D492F3D2847783338D74F66D2" "DFEBB50896ACBC4795A81AB4050AAE020801121065802C9B625E5A319C33DC1CB7C3C6D4" "18E3A5BDD005228E023082010A0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E34" "9F332F04516A7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B9" "83A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D" "705520A5C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA" "3EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD689" "0B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296" "A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE439" "1BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E0658" "1A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C4644" "F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2DA7B683" "02FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A91C051CA2" "80A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A5EE4A4" "D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E" "059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A88" "38C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB" "813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760FCD177C" "DD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E" "07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAED" "AD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403B36550E6BEACCB34F6C3B2AB" "F86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD61E21CEE503E7A40B93B07A418" "6A362D9E6F88DD48D4516635C6D0C253C03F12EFA6095618D647F5212C518C4A6AA7172B" "C691530703FEDDFDB25ECF885A53FF2B4B98773979D61AE659E340489811512A5C2FD445" "A4B0AE88A3A7F29ACE5B01ECF580D0993227BC408B602B0BC099920C17044FE66242372C" "2B2E8CA5C1EEC0844BC19198ADADE47FB449DC9B30784952B3A8131B912CE928070D665C" "0557EBE7484FDABFBCA0F2C2BFD4FBDDB6681C4689FD276C231B72B15AC4E5C3C088449D" "E4785F1D4835AC44E39B119991EFF6E72C7D3B8C75CE588DB0B3AD69EB79C19B22CB518E" "F964C9D985AFD3677F0D13015AD7BEA84CD01E335E68AF153B989FE8BEEC60A94753C638" "535FA3F215F750F6954AC395F8702941409E7276910CE11819649641318B5BD1B78DECEA" "DB2B562312CC286DB0BCC14A60C84CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422E" "D8EB5ECE330C9886406B3B69180B697521F3865B4A05DF2BB51D16CAFEF05866E5D55C36" "0C759F5B10E0D354D63D5A14E5BA19DBF9394E18E474E79063B4E877C2FE6BCA732ED39B" "091B6D7A21DD9D6D6750C1CA2ABC5DEC2A81B5359771849E7B4560EB6D329E59455A70F5" "7F035DFB50EC4354D7E068ADFAFAD4081ACA67FD18001220A28ED0C0D4697C870B56192C" "F2AF86D7362398EB250F6A29BE3A0C4887F0D653"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithoutExpiration, // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': unset // 'expiration_time_seconds': ~2031 // } const std::string kTestLegacyCertificateFileDataWithClientExpiration = a2bs_hex( "0AB10F080110011AAA0F0AA80B0AEB03080212107CB49F987A635E1E0A52184694582D6E18" "87C6E1FE05228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A774A99129" "BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF398051244" "5EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36" "583C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B3" "9BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99D" "F98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF828EB598DA59060D6" "54851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88" "A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C7769646576696E652E636F6D48" "0152AA01080110001A8101044F554B9400E10B17185036B6A1628EFC61B22166DE2235717A" "44F953B7928F3415B9D113835B10106CB6C2187F34188723D82ECF95CF5ECAB58923F17318" "60815999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC910" "35041173392B1E495428F0D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A" "2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3664EEB1280028CD44E12AA7C1A8E" "BF88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CD" "ADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18CE" "D4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F" "6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A37955" "EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD29209329C148FB4F42" "2ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E4548F20FFA" "E953A99D492F3D2847783338D74F66D2DFEBB50896ACBC4795A81AB4050AAE020801121065" "802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD005228E023082010A0282010100B8050204" "3C2A8A0FD8D25C613E1E3E3B5E349F332F04516A7510D38021A5629B9AA027AEAD3C759B7A" "FE70BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F" "842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E314386234C6897AE655851FCD9ADB4E" "F9126C78386EA93BCB25BA3EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE" "7B95C6407690533BD6890B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2" "A47841CD0DAD793296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A" "038BD3E4BBBAE4391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E8" "3D1280037E06581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D" "68009B1C4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB0" "3B2DA7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A9" "1C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A" "5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420" "E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A" "8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB" "813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760FCD177CDD" "101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B1" "6DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA0" "6ECD790F1E3D426558FA98383E3CD2ED483012F403B36550E6BEACCB34F6C3B2ABF86634EE" "5383829C844F9B0C14DCF9A22FE3543CCBA8FD61E21CEE503E7A40B93B07A4186A362D9E6F" "88DD48D4516635C6D0C253C03F12EFA6095618D647F5212C518C4A6AA7172BC691530703FE" "DDFDB25ECF885A53FF2B4B98773979D61AE659E340489811512A5C2FD445A4B0AE88A3A7F2" "9ACE5B01ECF580D0993227BC408B602B0BC099920C17044FE66242372C2B2E8CA5C1EEC084" "4BC19198ADADE47FB449DC9B30784952B3A8131B912CE928070D665C0557EBE7484FDABFBC" "A0F2C2BFD4FBDDB6681C4689FD276C231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B" "119991EFF6E72C7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13" "015AD7BEA84CD01E335E68AF153B989FE8BEEC60A94753C638535FA3F215F750F6954AC395" "F8702941409E7276910CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60" "C84CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B69180B" "697521F3865B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14E5BA19" "DBF9394E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1CA2ABC5DEC" "2A81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E068ADFAFAD4081A" "CA67FD180028B7BA8499071220752DEC6BBB7DCB2750411F58DEBA61BFE55AEDC0EE92C3C6" "BCDBC0C86A75798C"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithoutExpiration, // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': unset // 'expiration_time_seconds': ~2020 // } const std::string kTestLegacyCertificateFileDataClientExpired = a2bs_hex( "0AB10F080110011AAA0F0AA80B0AEB03080212107CB49F987A635E1E0A52184694582D6E18" "87C6E1FE05228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A774A99129" "BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF398051244" "5EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36" "583C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B3" "9BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99D" "F98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF828EB598DA59060D6" "54851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88" "A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C7769646576696E652E636F6D48" "0152AA01080110001A8101044F554B9400E10B17185036B6A1628EFC61B22166DE2235717A" "44F953B7928F3415B9D113835B10106CB6C2187F34188723D82ECF95CF5ECAB58923F17318" "60815999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC910" "35041173392B1E495428F0D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A" "2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3664EEB1280028CD44E12AA7C1A8E" "BF88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CD" "ADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18CE" "D4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F" "6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A37955" "EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD29209329C148FB4F42" "2ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E4548F20FFA" "E953A99D492F3D2847783338D74F66D2DFEBB50896ACBC4795A81AB4050AAE020801121065" "802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD005228E023082010A0282010100B8050204" "3C2A8A0FD8D25C613E1E3E3B5E349F332F04516A7510D38021A5629B9AA027AEAD3C759B7A" "FE70BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F" "842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E314386234C6897AE655851FCD9ADB4E" "F9126C78386EA93BCB25BA3EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE" "7B95C6407690533BD6890B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2" "A47841CD0DAD793296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A" "038BD3E4BBBAE4391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E8" "3D1280037E06581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D" "68009B1C4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB0" "3B2DA7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A9" "1C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A" "5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420" "E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A" "8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB" "813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760FCD177CDD" "101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B1" "6DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA0" "6ECD790F1E3D426558FA98383E3CD2ED483012F403B36550E6BEACCB34F6C3B2ABF86634EE" "5383829C844F9B0C14DCF9A22FE3543CCBA8FD61E21CEE503E7A40B93B07A4186A362D9E6F" "88DD48D4516635C6D0C253C03F12EFA6095618D647F5212C518C4A6AA7172BC691530703FE" "DDFDB25ECF885A53FF2B4B98773979D61AE659E340489811512A5C2FD445A4B0AE88A3A7F2" "9ACE5B01ECF580D0993227BC408B602B0BC099920C17044FE66242372C2B2E8CA5C1EEC084" "4BC19198ADADE47FB449DC9B30784952B3A8131B912CE928070D665C0557EBE7484FDABFBC" "A0F2C2BFD4FBDDB6681C4689FD276C231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B" "119991EFF6E72C7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13" "015AD7BEA84CD01E335E68AF153B989FE8BEEC60A94753C638535FA3F215F750F6954AC395" "F8702941409E7276910CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60" "C84CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B69180B" "697521F3865B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14E5BA19" "DBF9394E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1CA2ABC5DEC" "2A81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E068ADFAFAD4081A" "CA67FD180028B9A8C2F3051220D2F932E432C200B5B30228317A3BA4A207C429B3F788C072" "8F1E9615DFDD7A34"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithoutExpiration, // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': unset // 'expiration_time_seconds': -5 // } const std::string kTestLegacyCertificateFileDataInvalidClientExpiration = a2bs_hex( "0AB60F080110011AAF0F0AA80B0AEB03080212107CB49F987A635E1E0A52184694582D" "6E1887C6E1FE05228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A7" "74A99129BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDC" "BCF3980512445EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2" "D6043CA9830E0F36583C8FDB839C2752C13E184034EE412BA8A90271295B094255A163" "19706F4D6C9CF1EBB1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4" "F48E79DDFC78471C11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B7" "3A6FB7CA9EF828EB598DA59060D654851103F857A041E66B2FFB99713D31A646059328" "33E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D92670203010001" "28E83D3A0C7769646576696E652E636F6D480152AA01080110001A8101044F554B9400" "E10B17185036B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B1010" "6CB6C2187F34188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B99" "1B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0" "D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D" "12742408A07C103DF860DC0520C3664EEB1280028CD44E12AA7C1A8EBF88C81A2A54EF" "D29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CDADD16E41A7" "833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18CED4AB0A" "F1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F6F" "5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A379" "55EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD29209329C148" "FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E" "4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC4795A81AB4050A" "AE020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD005228E023082010A" "0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A7510D38021A5" "629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014" "DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E3" "14386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3EC475C55C608E771C" "763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6890B9274C16066F74F" "C401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296A107C36223404F" "2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE4391BBFA7A47FB9" "D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E06581A019184AB" "572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C4644F9B3F3FB" "6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2DA7B68302FAA6" "DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A91C051CA280A8" "6669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A5EE4A4D0" "FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E" "059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A" "8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD2" "4FBB813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760F" "CD177CDD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68" "D13CD37E07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F0E67AC00CA99" "2A5296FAEDAD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403B36550E6BEAC" "CB34F6C3B2ABF86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD61E21CEE503E" "7A40B93B07A4186A362D9E6F88DD48D4516635C6D0C253C03F12EFA6095618D647F521" "2C518C4A6AA7172BC691530703FEDDFDB25ECF885A53FF2B4B98773979D61AE659E340" "489811512A5C2FD445A4B0AE88A3A7F29ACE5B01ECF580D0993227BC408B602B0BC099" "920C17044FE66242372C2B2E8CA5C1EEC0844BC19198ADADE47FB449DC9B30784952B3" "A8131B912CE928070D665C0557EBE7484FDABFBCA0F2C2BFD4FBDDB6681C4689FD276C" "231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B119991EFF6E72C7D3B8C75CE58" "8DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13015AD7BEA84CD01E335E68" "AF153B989FE8BEEC60A94753C638535FA3F215F750F6954AC395F8702941409E727691" "0CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60C84CB21AB6E75E" "59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B69180B697521F386" "5B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14E5BA19DBF939" "4E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1CA2ABC5DEC2A" "81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E068ADFAFAD408" "1ACA67FD180028FBFFFFFFFFFFFFFFFF0112201CC3506DE1B3FC6A8DBB4AD85D34B62C" "7EBA023FAD1AACCDBE1C932CFB6A1369"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithFutureExpiration, // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': 03/17/2021 // 'expiration_time_seconds': unset // } const std::string kTestDefaultCertificateFileDataFutureExpiration = a2bs_hex( "0AB70F080110011AB00F0AAE0B0AF103080212107CB49F987A635E1E0A52184694582D6E18" "87C6E1FE05228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A774A99129" "BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF398051244" "5EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36" "583C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B3" "9BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99D" "F98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF828EB598DA59060D6" "54851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88" "A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C7769646576696E652E636F6D48" "0152AA01080110001A8101044F554B9400E10B17185036B6A1628EFC61B22166DE2235717A" "44F953B7928F3415B9D113835B10106CB6C2187F34188723D82ECF95CF5ECAB58923F17318" "60815999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC910" "35041173392B1E495428F0D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A" "2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3664EEB60E29D8399071280028CD4" "4E12AA7C1A8EBF88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923" "A4172C2AC1CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C" "4B2540BE18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA6" "6017898DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B55" "2FB4B4A37955EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD292093" "29C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E7" "1E4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC4795A81AB4050AAE" "020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD005228E023082010A028201" "0100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A7510D38021A5629B9AA027" "AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C66" "00562E9D904F842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E314386234C6897AE655" "851FCD9ADB4EF9126C78386EA93BCB25BA3EC475C55C608E771C763AB02506F9B07252D6AB" "F7EA64B1EBDE7B95C6407690533BD6890B9274C16066F74FC401EA355F0A02106814D49BF0" "C89E6E1F8DB2A47841CD0DAD793296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8" "F14ACAE3B05A038BD3E4BBBAE4391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F02" "0301000128E83D1280037E06581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947" "360BC8D49C0D68009B1C4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39" "D25B2662ECB03B2DA7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC" "3E968B6821A91C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963" "F21EE6AA220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6" "AD56F7416420E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667" "B33B8114C76A8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A5" "72125CD24FBB813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962" "760FCD177CDD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68" "D13CD37E07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A52" "96FAEDAD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403B36550E6BEACCB34F6C3" "B2ABF86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD61E21CEE503E7A40B93B07A4" "186A362D9E6F88DD48D4516635C6D0C253C03F12EFA6095618D647F5212C518C4A6AA7172B" "C691530703FEDDFDB25ECF885A53FF2B4B98773979D61AE659E340489811512A5C2FD445A4" "B0AE88A3A7F29ACE5B01ECF580D0993227BC408B602B0BC099920C17044FE66242372C2B2E" "8CA5C1EEC0844BC19198ADADE47FB449DC9B30784952B3A8131B912CE928070D665C0557EB" "E7484FDABFBCA0F2C2BFD4FBDDB6681C4689FD276C231B72B15AC4E5C3C088449DE4785F1D" "4835AC44E39B119991EFF6E72C7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964C9D985" "AFD3677F0D13015AD7BEA84CD01E335E68AF153B989FE8BEEC60A94753C638535FA3F215F7" "50F6954AC395F8702941409E7276910CE11819649641318B5BD1B78DECEADB2B562312CC28" "6DB0BCC14A60C84CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886" "406B3B69180B697521F3865B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D6" "3D5A14E5BA19DBF9394E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750" "C1CA2ABC5DEC2A81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E068" "ADFAFAD4081ACA67FD180020EA80CA820612204DDB25CD2B324880675C1006CB104524B42C" "9BBA110F0304E6C1E4C6ADF5DA6C"); // Structurally valid test certificate device file. // // {'certificate': kTestCertificateNeverExpires, // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': 03/17/2021 // 'expiration_time_seconds': unset // } const std::string kTestDefaultCertificateFileDataNeverExpires = a2bs_hex( "0AB30F080110011AAC0F0AAA0B0AED03080212107CB49F987A635E1E0A52184694582D6E18" "94AECC8206228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A774A99129" "BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF398051244" "5EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36" "583C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B3" "9BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99D" "F98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF828EB598DA59060D6" "54851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88" "A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C7769646576696E652E636F6D48" "0152AA01080110001A8101044F554B9400E10B17185036B6A1628EFC61B22166DE2235717A" "44F953B7928F3415B9D113835B10106CB6C2187F34188723D82ECF95CF5ECAB58923F17318" "60815999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC910" "35041173392B1E495428F0D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A" "2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3664EEB60001280028CD44E12AA7C" "1A8EBF88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2A" "C1CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE" "18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017898D" "EE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A3" "7955EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD29209329C148FB" "4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E4548F2" "0FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC4795A81AB4050AAE02080112" "1065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD005228E023082010A0282010100B805" "02043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A7510D38021A5629B9AA027AEAD3C75" "9B7AFE70BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C6600562E9D" "904F842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E314386234C6897AE655851FCD9A" "DB4EF9126C78386EA93BCB25BA3EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1" "EBDE7B95C6407690533BD6890B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F" "8DB2A47841CD0DAD793296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3" "B05A038BD3E4BBBAE4391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F0203010001" "28E83D1280037E06581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D4" "9C0D68009B1C4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662" "ECB03B2DA7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B68" "21A91C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA" "220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F741" "6420E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114" "C76A8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD2" "4FBB813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760FCD17" "7CDD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E" "07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD" "7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403B36550E6BEACCB34F6C3B2ABF866" "34EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD61E21CEE503E7A40B93B07A4186A362D" "9E6F88DD48D4516635C6D0C253C03F12EFA6095618D647F5212C518C4A6AA7172BC6915307" "03FEDDFDB25ECF885A53FF2B4B98773979D61AE659E340489811512A5C2FD445A4B0AE88A3" "A7F29ACE5B01ECF580D0993227BC408B602B0BC099920C17044FE66242372C2B2E8CA5C1EE" "C0844BC19198ADADE47FB449DC9B30784952B3A8131B912CE928070D665C0557EBE7484FDA" "BFBCA0F2C2BFD4FBDDB6681C4689FD276C231B72B15AC4E5C3C088449DE4785F1D4835AC44" "E39B119991EFF6E72C7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F" "0D13015AD7BEA84CD01E335E68AF153B989FE8BEEC60A94753C638535FA3F215F750F6954A" "C395F8702941409E7276910CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC1" "4A60C84CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B69" "180B697521F3865B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14E5" "BA19DBF9394E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1CA2ABC" "5DEC2A81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E068ADFAFAD4" "081ACA67FD18002094AECC82061220494C9C49993FA8A9F0982FD684A62B99CC442E2AF264" "CA351478C2BA1077A394"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateExpired // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': 03/12/2021 // 'expiration_time_seconds': unset // } const std::string kTestDefaultCertificateFileDataExpired = a2bs_hex( "0AB70F080110011AB00F0AAE0B0AF103080212107CB49F987A635E1E0A52184694582D6E18" "9EF0968206228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A774A99129" "BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF398051244" "5EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36" "583C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B3" "9BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99D" "F98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF828EB598DA59060D6" "54851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88" "A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C7769646576696E652E636F6D48" "0152AA01080110001A8101044F554B9400E10B17185036B6A1628EFC61B22166DE2235717A" "44F953B7928F3415B9D113835B10106CB6C2187F34188723D82ECF95CF5ECAB58923F17318" "60815999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC910" "35041173392B1E495428F0D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A" "2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3664EEB609E939C82061280028CD4" "4E12AA7C1A8EBF88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923" "A4172C2AC1CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C" "4B2540BE18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA6" "6017898DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B55" "2FB4B4A37955EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD292093" "29C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E7" "1E4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC4795A81AB4050AAE" "020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD005228E023082010A028201" "0100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A7510D38021A5629B9AA027" "AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C66" "00562E9D904F842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E314386234C6897AE655" "851FCD9ADB4EF9126C78386EA93BCB25BA3EC475C55C608E771C763AB02506F9B07252D6AB" "F7EA64B1EBDE7B95C6407690533BD6890B9274C16066F74FC401EA355F0A02106814D49BF0" "C89E6E1F8DB2A47841CD0DAD793296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8" "F14ACAE3B05A038BD3E4BBBAE4391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F02" "0301000128E83D1280037E06581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947" "360BC8D49C0D68009B1C4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39" "D25B2662ECB03B2DA7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC" "3E968B6821A91C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963" "F21EE6AA220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6" "AD56F7416420E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667" "B33B8114C76A8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A5" "72125CD24FBB813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962" "760FCD177CDD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68" "D13CD37E07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A52" "96FAEDAD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403B36550E6BEACCB34F6C3" "B2ABF86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD61E21CEE503E7A40B93B07A4" "186A362D9E6F88DD48D4516635C6D0C253C03F12EFA6095618D647F5212C518C4A6AA7172B" "C691530703FEDDFDB25ECF885A53FF2B4B98773979D61AE659E340489811512A5C2FD445A4" "B0AE88A3A7F29ACE5B01ECF580D0993227BC408B602B0BC099920C17044FE66242372C2B2E" "8CA5C1EEC0844BC19198ADADE47FB449DC9B30784952B3A8131B912CE928070D665C0557EB" "E7484FDABFBCA0F2C2BFD4FBDDB6681C4689FD276C231B72B15AC4E5C3C088449DE4785F1D" "4835AC44E39B119991EFF6E72C7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964C9D985" "AFD3677F0D13015AD7BEA84CD01E335E68AF153B989FE8BEEC60A94753C638535FA3F215F7" "50F6954AC395F8702941409E7276910CE11819649641318B5BD1B78DECEADB2B562312CC28" "6DB0BCC14A60C84CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886" "406B3B69180B697521F3865B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D6" "3D5A14E5BA19DBF9394E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750" "C1CA2ABC5DEC2A81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E068" "ADFAFAD4081ACA67FD1800209E9FB182061220AB902564B722E023C7F31F485B194969C7D9" "F4FB6ADB4EEF1312A0F663A3F092"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithInvalidCreationFutureExpiration // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': 03/17/2021 // 'expiration_time_seconds': unset // } const std::string kTestDefaultCertificateWithInvalidCreationFutureExpiration = a2bs_hex( "0AB10F080110011AAA0F0AA80B0AEB03080212107CB49F987A635E1E0A52184694582D" "6E228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A774A99129BD63" "445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF398051244" "5EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E" "0F36583C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C9C" "F1EBB1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78" "471C11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF8" "28EB598DA59060D654851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0" "F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C77" "69646576696E652E636F6D480152AA01080110001A8101044F554B9400E10B17185036" "B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B10106CB6C2187F34" "188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B991B5F915F2ADC" "EE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0D17406B10889" "B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D12742408A07C" "103DF860DC0520C3664EEB60FD8AFC98071280028CD44E12AA7C1A8EBF88C81A2A54EF" "D29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CDADD16E41A7" "833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18CED4AB0A" "F1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F6F" "5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A379" "55EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD29209329C148" "FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E" "4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC4795A81AB4050A" "AE020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD005228E023082010A" "0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A7510D38021A5" "629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014" "DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E3" "14386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3EC475C55C608E771C" "763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6890B9274C16066F74F" "C401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296A107C36223404F" "2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE4391BBFA7A47FB9" "D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E06581A019184AB" "572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C4644F9B3F3FB" "6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2DA7B68302FAA6" "DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A91C051CA280A8" "6669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A5EE4A4D0" "FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E" "059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A" "8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD2" "4FBB813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760F" "CD177CDD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68" "D13CD37E07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F0E67AC00CA99" "2A5296FAEDAD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403B36550E6BEAC" "CB34F6C3B2ABF86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD61E21CEE503E" "7A40B93B07A4186A362D9E6F88DD48D4516635C6D0C253C03F12EFA6095618D647F521" "2C518C4A6AA7172BC691530703FEDDFDB25ECF885A53FF2B4B98773979D61AE659E340" "489811512A5C2FD445A4B0AE88A3A7F29ACE5B01ECF580D0993227BC408B602B0BC099" "920C17044FE66242372C2B2E8CA5C1EEC0844BC19198ADADE47FB449DC9B30784952B3" "A8131B912CE928070D665C0557EBE7484FDABFBCA0F2C2BFD4FBDDB6681C4689FD276C" "231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B119991EFF6E72C7D3B8C75CE58" "8DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13015AD7BEA84CD01E335E68" "AF153B989FE8BEEC60A94753C638535FA3F215F750F6954AC395F8702941409E727691" "0CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60C84CB21AB6E75E" "59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B69180B697521F386" "5B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14E5BA19DBF939" "4E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1CA2ABC5DEC2A" "81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E068ADFAFAD408" "1ACA67FD180020FD84CC8206122040597EA4CA5BDDB92960D3D616B402EFC44699E3C4" "DF3E0F78A2D3218C3E3055"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithUnlimitedCreationFutureExpiration // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': 03/17/2021 // 'expiration_time_seconds': unset // } const std::string kTestDefaultCertificateFileDataCreationTimeUnlimited = a2bs_hex( "0AB10F080110011AAA0F0AA80B0AEB03080212107CB49F987A635E1E0A52184694582D" "6E228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A774A99129BD63" "445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF398051244" "5EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E" "0F36583C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C9C" "F1EBB1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78" "471C11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF8" "28EB598DA59060D654851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0" "F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C77" "69646576696E652E636F6D480152AA01080110001A8101044F554B9400E10B17185036" "B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B10106CB6C2187F34" "188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B991B5F915F2ADC" "EE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0D17406B10889" "B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D12742408A07C" "103DF860DC0520C3664EEB60AE91FC98071280028CD44E12AA7C1A8EBF88C81A2A54EF" "D29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CDADD16E41A7" "833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18CED4AB0A" "F1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F6F" "5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A379" "55EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD29209329C148" "FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E" "4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC4795A81AB4050A" "AE020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD005228E023082010A" "0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A7510D38021A5" "629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014" "DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E3" "14386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3EC475C55C608E771C" "763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6890B9274C16066F74F" "C401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296A107C36223404F" "2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE4391BBFA7A47FB9" "D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E06581A019184AB" "572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C4644F9B3F3FB" "6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2DA7B68302FAA6" "DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A91C051CA280A8" "6669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A5EE4A4D0" "FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420E05E" "059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A" "8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD2" "4FBB813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760F" "CD177CDD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68" "D13CD37E07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F0E67AC00CA99" "2A5296FAEDAD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403B36550E6BEAC" "CB34F6C3B2ABF86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD61E21CEE503E" "7A40B93B07A4186A362D9E6F88DD48D4516635C6D0C253C03F12EFA6095618D647F521" "2C518C4A6AA7172BC691530703FEDDFDB25ECF885A53FF2B4B98773979D61AE659E340" "489811512A5C2FD445A4B0AE88A3A7F29ACE5B01ECF580D0993227BC408B602B0BC099" "920C17044FE66242372C2B2E8CA5C1EEC0844BC19198ADADE47FB449DC9B30784952B3" "A8131B912CE928070D665C0557EBE7484FDABFBCA0F2C2BFD4FBDDB6681C4689FD276C" "231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B119991EFF6E72C7D3B8C75CE58" "8DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13015AD7BEA84CD01E335E68" "AF153B989FE8BEEC60A94753C638535FA3F215F750F6954AC395F8702941409E727691" "0CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60C84CB21AB6E75E" "59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B69180B697521F386" "5B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14E5BA19DBF939" "4E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1CA2ABC5DEC2A" "81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E068ADFAFAD408" "1ACA67FD180020AE8BCC82061220BA04B988A5E9D931946F2AB8FF3E3DD31C630300CD" "065083437401CD752F8CD2"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithoutExpiration // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': 03/17/2021 // 'expiration_time_seconds': unset // } const std::string kTestDefaultCertificateFileDataExpirationUnset = a2bs_hex( "0AB10F080110011AAA0F0AA80B0AEB03080212107CB49F987A635E1E0A52184694582D6E18" "D991CC8206228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A774A99129" "BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF398051244" "5EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F36" "583C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB1B3" "9BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C11B9E99D" "F98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF828EB598DA59060D6" "54851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0F888AE6E78EDC9DA0D88" "A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C7769646576696E652E636F6D48" "0152AA01080110001A8101044F554B9400E10B17185036B6A1628EFC61B22166DE2235717A" "44F953B7928F3415B9D113835B10106CB6C2187F34188723D82ECF95CF5ECAB58923F17318" "60815999F08BF4BE4A44DB7B991B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC910" "35041173392B1E495428F0D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A" "2E57E7D4CA3C62ED6D12742408A07C103DF860DC0520C3664EEB1280028CD44E12AA7C1A8E" "BF88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CD" "ADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18CE" "D4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA66017898DEE6F" "6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552FB4B4A37955" "EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD29209329C148FB4F42" "2ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55C1978F6E71E4548F20FFA" "E953A99D492F3D2847783338D74F66D2DFEBB50896ACBC4795A81AB4050AAE020801121065" "802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD005228E023082010A0282010100B8050204" "3C2A8A0FD8D25C613E1E3E3B5E349F332F04516A7510D38021A5629B9AA027AEAD3C759B7A" "FE70BED65F3DF6860FF5EB60B983A3FFA33FDE06F3B73014DFC845AB371C6600562E9D904F" "842B8BA4A5D9200FFA3ED45D705520A5C372A889F9E314386234C6897AE655851FCD9ADB4E" "F9126C78386EA93BCB25BA3EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE" "7B95C6407690533BD6890B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2" "A47841CD0DAD793296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A" "038BD3E4BBBAE4391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E8" "3D1280037E06581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D" "68009B1C4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB0" "3B2DA7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A9" "1C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA220A" "5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56F7416420" "E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667B33B8114C76A" "8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF789A572125CD24FBB" "813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540D9C57962760FCD177CDD" "101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85074186080D68D13CD37E07B1" "6DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA0" "6ECD790F1E3D426558FA98383E3CD2ED483012F403B36550E6BEACCB34F6C3B2ABF86634EE" "5383829C844F9B0C14DCF9A22FE3543CCBA8FD61E21CEE503E7A40B93B07A4186A362D9E6F" "88DD48D4516635C6D0C253C03F12EFA6095618D647F5212C518C4A6AA7172BC691530703FE" "DDFDB25ECF885A53FF2B4B98773979D61AE659E340489811512A5C2FD445A4B0AE88A3A7F2" "9ACE5B01ECF580D0993227BC408B602B0BC099920C17044FE66242372C2B2E8CA5C1EEC084" "4BC19198ADADE47FB449DC9B30784952B3A8131B912CE928070D665C0557EBE7484FDABFBC" "A0F2C2BFD4FBDDB6681C4689FD276C231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B" "119991EFF6E72C7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13" "015AD7BEA84CD01E335E68AF153B989FE8BEEC60A94753C638535FA3F215F750F6954AC395" "F8702941409E7276910CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60" "C84CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B69180B" "697521F3865B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14E5BA19" "DBF9394E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1CA2ABC5DEC" "2A81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E068ADFAFAD4081A" "CA67FD180020D991CC82061220CD90FA6F091C73BA7CC7EF0B777B986F4799DCEB5B03C8BC" "360092DCC97CEF0A"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateExpiresBeforeCreationTime // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': 03/17/2021 // 'expiration_time_seconds': unset // } const std::string kTestDefaultCertificateFileDataExpiresBeforeCreationTime = a2bs_hex( "0AB70F080110011AB00F0AAE0B0AF103080212107CB49F987A635E1E0A52184694582D" "6E18EC95CC8206228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A7" "74A99129BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDC" "BCF3980512445EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2" "D6043CA9830E0F36583C8FDB839C2752C13E184034EE412BA8A90271295B094255A163" "19706F4D6C9CF1EBB1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4" "F48E79DDFC78471C11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B7" "3A6FB7CA9EF828EB598DA59060D654851103F857A041E66B2FFB99713D31A646059328" "33E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D92670203010001" "28E83D3A0C7769646576696E652E636F6D480152AA01080110001A8101044F554B9400" "E10B17185036B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B1010" "6CB6C2187F34188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B99" "1B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0" "D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D" "12742408A07C103DF860DC0520C3664EEB60ECB79782061280028CD44E12AA7C1A8EBF" "88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1" "CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540" "BE18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA660" "17898DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B" "552FB4B4A37955EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD" "29209329C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF5" "5C1978F6E71E4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC47" "95A81AB4050AAE020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD00522" "8E023082010A0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A" "7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA33F" "DE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D705520A5" "C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3EC475" "C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6890B92" "74C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296A1" "07C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE439" "1BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E06" "581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C" "4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2D" "A7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A9" "1C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA" "220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56" "F7416420E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667" "B33B8114C76A8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF7" "89A572125CD24FBB813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540" "D9C57962760FCD177CDD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85" "074186080D68D13CD37E07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F" "0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403" "B36550E6BEACCB34F6C3B2ABF86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD" "61E21CEE503E7A40B93B07A4186A362D9E6F88DD48D4516635C6D0C253C03F12EFA609" "5618D647F5212C518C4A6AA7172BC691530703FEDDFDB25ECF885A53FF2B4B98773979" "D61AE659E340489811512A5C2FD445A4B0AE88A3A7F29ACE5B01ECF580D0993227BC40" "8B602B0BC099920C17044FE66242372C2B2E8CA5C1EEC0844BC19198ADADE47FB449DC" "9B30784952B3A8131B912CE928070D665C0557EBE7484FDABFBCA0F2C2BFD4FBDDB668" "1C4689FD276C231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B119991EFF6E72C" "7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13015AD7BEA8" "4CD01E335E68AF153B989FE8BEEC60A94753C638535FA3F215F750F6954AC395F87029" "41409E7276910CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60C8" "4CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B6918" "0B697521F3865B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14" "E5BA19DBF9394E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1" "CA2ABC5DEC2A81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E0" "68ADFAFAD4081ACA67FD180020EC95CC82061220463AF8A7AE265E06A0BF07C366E6E0" "52301A32F3A1DA487EA556519910C7534E"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithFutureExpiration, // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': unset // 'expiration_time_seconds': unset // } const std::string kTestDefaultCertificateFileDataAcquisitionTimeUnset = a2bs_hex( "0AB10F080110011AAA0F0AAE0B0AF103080212107CB49F987A635E1E0A52184694582D" "6E1887C6E1FE05228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A7" "74A99129BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDC" "BCF3980512445EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2" "D6043CA9830E0F36583C8FDB839C2752C13E184034EE412BA8A90271295B094255A163" "19706F4D6C9CF1EBB1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4" "F48E79DDFC78471C11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B7" "3A6FB7CA9EF828EB598DA59060D654851103F857A041E66B2FFB99713D31A646059328" "33E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D92670203010001" "28E83D3A0C7769646576696E652E636F6D480152AA01080110001A8101044F554B9400" "E10B17185036B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B1010" "6CB6C2187F34188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B99" "1B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0" "D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D" "12742408A07C103DF860DC0520C3664EEB60E29D8399071280028CD44E12AA7C1A8EBF" "88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1" "CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540" "BE18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA660" "17898DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B" "552FB4B4A37955EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD" "29209329C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF5" "5C1978F6E71E4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC47" "95A81AB4050AAE020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD00522" "8E023082010A0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A" "7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA33F" "DE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D705520A5" "C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3EC475" "C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6890B92" "74C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296A1" "07C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE439" "1BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E06" "581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C" "4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2D" "A7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A9" "1C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA" "220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56" "F7416420E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667" "B33B8114C76A8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF7" "89A572125CD24FBB813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540" "D9C57962760FCD177CDD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85" "074186080D68D13CD37E07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F" "0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403" "B36550E6BEACCB34F6C3B2ABF86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD" "61E21CEE503E7A40B93B07A4186A362D9E6F88DD48D4516635C6D0C253C03F12EFA609" "5618D647F5212C518C4A6AA7172BC691530703FEDDFDB25ECF885A53FF2B4B98773979" "D61AE659E340489811512A5C2FD445A4B0AE88A3A7F29ACE5B01ECF580D0993227BC40" "8B602B0BC099920C17044FE66242372C2B2E8CA5C1EEC0844BC19198ADADE47FB449DC" "9B30784952B3A8131B912CE928070D665C0557EBE7484FDABFBCA0F2C2BFD4FBDDB668" "1C4689FD276C231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B119991EFF6E72C" "7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13015AD7BEA8" "4CD01E335E68AF153B989FE8BEEC60A94753C638535FA3F215F750F6954AC395F87029" "41409E7276910CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60C8" "4CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B6918" "0B697521F3865B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14" "E5BA19DBF9394E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1" "CA2ABC5DEC2A81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E0" "68ADFAFAD4081ACA67FD180012205984768E4F372E0DF787C4215A337355CD62B5FC0A" "EAE8CC5BA82EA29C2E7A01"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithFutureExpiration, // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': -5 // 'expiration_time_seconds': unset // } const std::string kTestDefaultCertificateFileDataAcquisitionTimeInvalid = a2bs_hex( "0ABC0F080110011AB50F0AAE0B0AF103080212107CB49F987A635E1E0A52184694582D" "6E1887C6E1FE05228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A7" "74A99129BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDC" "BCF3980512445EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2" "D6043CA9830E0F36583C8FDB839C2752C13E184034EE412BA8A90271295B094255A163" "19706F4D6C9CF1EBB1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4" "F48E79DDFC78471C11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B7" "3A6FB7CA9EF828EB598DA59060D654851103F857A041E66B2FFB99713D31A646059328" "33E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D92670203010001" "28E83D3A0C7769646576696E652E636F6D480152AA01080110001A8101044F554B9400" "E10B17185036B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B1010" "6CB6C2187F34188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B99" "1B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0" "D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D" "12742408A07C103DF860DC0520C3664EEB60E29D8399071280028CD44E12AA7C1A8EBF" "88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1" "CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540" "BE18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA660" "17898DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B" "552FB4B4A37955EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD" "29209329C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF5" "5C1978F6E71E4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC47" "95A81AB4050AAE020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD00522" "8E023082010A0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A" "7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA33F" "DE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D705520A5" "C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3EC475" "C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6890B92" "74C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296A1" "07C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE439" "1BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E06" "581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C" "4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2D" "A7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A9" "1C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA" "220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56" "F7416420E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667" "B33B8114C76A8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF7" "89A572125CD24FBB813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540" "D9C57962760FCD177CDD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85" "074186080D68D13CD37E07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F" "0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403" "B36550E6BEACCB34F6C3B2ABF86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD" "61E21CEE503E7A40B93B07A4186A362D9E6F88DD48D4516635C6D0C253C03F12EFA609" "5618D647F5212C518C4A6AA7172BC691530703FEDDFDB25ECF885A53FF2B4B98773979" "D61AE659E340489811512A5C2FD445A4B0AE88A3A7F29ACE5B01ECF580D0993227BC40" "8B602B0BC099920C17044FE66242372C2B2E8CA5C1EEC0844BC19198ADADE47FB449DC" "9B30784952B3A8131B912CE928070D665C0557EBE7484FDABFBCA0F2C2BFD4FBDDB668" "1C4689FD276C231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B119991EFF6E72C" "7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13015AD7BEA8" "4CD01E335E68AF153B989FE8BEEC60A94753C638535FA3F215F750F6954AC395F87029" "41409E7276910CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60C8" "4CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B6918" "0B697521F3865B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14" "E5BA19DBF9394E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1" "CA2ABC5DEC2A81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E0" "68ADFAFAD4081ACA67FD180020FBFFFFFFFFFFFFFFFF011220F653E5406D56276BCB28" "E9D1F8E9D83233A7AF24476732208AEBD9DD33BD6C41"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithFutureExpiration, // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': 0 // 'expiration_time_seconds': unset // } const std::string kTestDefaultCertificateFileDataAcquisitionTimeUnlimited = a2bs_hex( "0AB30F080110011AAC0F0AAE0B0AF103080212107CB49F987A635E1E0A52184694582D" "6E1887C6E1FE05228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A7" "74A99129BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDC" "BCF3980512445EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2" "D6043CA9830E0F36583C8FDB839C2752C13E184034EE412BA8A90271295B094255A163" "19706F4D6C9CF1EBB1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4" "F48E79DDFC78471C11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B7" "3A6FB7CA9EF828EB598DA59060D654851103F857A041E66B2FFB99713D31A646059328" "33E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D92670203010001" "28E83D3A0C7769646576696E652E636F6D480152AA01080110001A8101044F554B9400" "E10B17185036B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B1010" "6CB6C2187F34188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B99" "1B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0" "D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D" "12742408A07C103DF860DC0520C3664EEB60E29D8399071280028CD44E12AA7C1A8EBF" "88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1" "CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540" "BE18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA660" "17898DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B" "552FB4B4A37955EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD" "29209329C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF5" "5C1978F6E71E4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC47" "95A81AB4050AAE020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD00522" "8E023082010A0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A" "7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA33F" "DE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D705520A5" "C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3EC475" "C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6890B92" "74C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296A1" "07C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE439" "1BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E06" "581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C" "4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2D" "A7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A9" "1C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA" "220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56" "F7416420E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667" "B33B8114C76A8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF7" "89A572125CD24FBB813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540" "D9C57962760FCD177CDD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85" "074186080D68D13CD37E07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F" "0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403" "B36550E6BEACCB34F6C3B2ABF86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD" "61E21CEE503E7A40B93B07A4186A362D9E6F88DD48D4516635C6D0C253C03F12EFA609" "5618D647F5212C518C4A6AA7172BC691530703FEDDFDB25ECF885A53FF2B4B98773979" "D61AE659E340489811512A5C2FD445A4B0AE88A3A7F29ACE5B01ECF580D0993227BC40" "8B602B0BC099920C17044FE66242372C2B2E8CA5C1EEC0844BC19198ADADE47FB449DC" "9B30784952B3A8131B912CE928070D665C0557EBE7484FDABFBCA0F2C2BFD4FBDDB668" "1C4689FD276C231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B119991EFF6E72C" "7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13015AD7BEA8" "4CD01E335E68AF153B989FE8BEEC60A94753C638535FA3F215F750F6954AC395F87029" "41409E7276910CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60C8" "4CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B6918" "0B697521F3865B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14" "E5BA19DBF9394E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1" "CA2ABC5DEC2A81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E0" "68ADFAFAD4081ACA67FD1800200012207CBD5A3A5258C9FDF467270ACD4F8B10B33FEC" "3FBCD3409BFB38542C954B9BFD"); // Structurally valid test certificate device file. // {'certificate': kTestCertificateWithFutureExpiration, // 'key_type': 'RSA', // 'wrapped_private_key': kTestWrappedPrivateKeyData // 'acquisition_time_seconds': ~2030 // 'expiration_time_seconds': unset // } const std::string kTestDefaultCertificateFileDataAcquisitionTimeInTheFuture = a2bs_hex( "0AB70F080110011AB00F0AAE0B0AF103080212107CB49F987A635E1E0A52184694582D" "6E1887C6E1FE05228E023082010A0282010100DB13F5089C061E8EB62562692B3A06A7" "74A99129BD63445FEC24448D07C30D7343553442A989AF000B7D962033C290D9A81DDC" "BCF3980512445EB7E6CF544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2" "D6043CA9830E0F36583C8FDB839C2752C13E184034EE412BA8A90271295B094255A163" "19706F4D6C9CF1EBB1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4" "F48E79DDFC78471C11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B7" "3A6FB7CA9EF828EB598DA59060D654851103F857A041E66B2FFB99713D31A646059328" "33E8CCDA6CF0F888AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D92670203010001" "28E83D3A0C7769646576696E652E636F6D480152AA01080110001A8101044F554B9400" "E10B17185036B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B1010" "6CB6C2187F34188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B99" "1B5F915F2ADCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0" "D17406B10889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D" "12742408A07C103DF860DC0520C3664EEB60E29D8399071280028CD44E12AA7C1A8EBF" "88C81A2A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1" "CDADD16E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540" "BE18CED4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA660" "17898DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B" "552FB4B4A37955EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD" "29209329C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF5" "5C1978F6E71E4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC47" "95A81AB4050AAE020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD00522" "8E023082010A0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F04516A" "7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA33F" "DE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D705520A5" "C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3EC475" "C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6890B92" "74C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD793296A1" "07C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4BBBAE439" "1BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1280037E06" "581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C0D68009B1C" "4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2662ECB03B2D" "A7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC3E968B6821A9" "1C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF221963F21EE6AA" "220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D4D0EDD55B6AD56" "F7416420E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F88EDD19DF346A667" "B33B8114C76A8838C423D824A50B23251A088136D6E8F475299D2AFD46CEA51B5CBDF7" "89A572125CD24FBB813B387A10CD2A30E3447634AB3408F96B9CF3D98896D405F3F540" "D9C57962760FCD177CDD101EB8A4148B9C29CED5EAD645A95B698F1CDC6E1DB6678B85" "074186080D68D13CD37E07B16DE370CD9AFB9B25564A73A30E2AF8085EA37D310C474F" "0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D426558FA98383E3CD2ED483012F403" "B36550E6BEACCB34F6C3B2ABF86634EE5383829C844F9B0C14DCF9A22FE3543CCBA8FD" "61E21CEE503E7A40B93B07A4186A362D9E6F88DD48D4516635C6D0C253C03F12EFA609" "5618D647F5212C518C4A6AA7172BC691530703FEDDFDB25ECF885A53FF2B4B98773979" "D61AE659E340489811512A5C2FD445A4B0AE88A3A7F29ACE5B01ECF580D0993227BC40" "8B602B0BC099920C17044FE66242372C2B2E8CA5C1EEC0844BC19198ADADE47FB449DC" "9B30784952B3A8131B912CE928070D665C0557EBE7484FDABFBCA0F2C2BFD4FBDDB668" "1C4689FD276C231B72B15AC4E5C3C088449DE4785F1D4835AC44E39B119991EFF6E72C" "7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964C9D985AFD3677F0D13015AD7BEA8" "4CD01E335E68AF153B989FE8BEEC60A94753C638535FA3F215F750F6954AC395F87029" "41409E7276910CE11819649641318B5BD1B78DECEADB2B562312CC286DB0BCC14A60C8" "4CB21AB6E75E59DAFBE701D6405DD3F47D2F8A95422ED8EB5ECE330C9886406B3B6918" "0B697521F3865B4A05DF2BB51D16CAFEF05866E5D55C360C759F5B10E0D354D63D5A14" "E5BA19DBF9394E18E474E79063B4E877C2FE6BCA732ED39B091B6D7A21DD9D6D6750C1" "CA2ABC5DEC2A81B5359771849E7B4560EB6D329E59455A70F57F035DFB50EC4354D7E0" "68ADFAFAD4081ACA67FD1800208FC2F789071220E3A52D11E90193A9532977A681F032" "D01C8F97E2EAB6C964A0F207D61499D679"); struct CertificateErrorData { DeviceFiles::CertificateState certificate_state; std::string file_data; }; const CertificateErrorData kRetrieveLegacyCertificateErrorData[] = { // Certificate expired based on expiration time set by the client {DeviceFiles::kCertificateExpired, kTestLegacyCertificateFileDataClientExpired}, // Certificate contains an invalid expiration time set by the client {DeviceFiles::kCertificateInvalid, kTestLegacyCertificateFileDataInvalidClientExpiration}, }; /* TODO(b/192430982): Renable expiration of legacy DRM certificates constexpr size_t kNumberOfLegacyCertificates = ArraySize(kRetrieveLegacyCertificateErrorData); */ const CertificateErrorData kRetrieveDefaultCertificateErrorData[] = { // Certificate expired {DeviceFiles::kCertificateExpired, kTestDefaultCertificateFileDataExpired}, // Certificate has a creation time in the future {DeviceFiles::kCertificateInvalid, kTestDefaultCertificateWithInvalidCreationFutureExpiration}, // Certificate has a never expires creation time {DeviceFiles::kCertificateInvalid, kTestDefaultCertificateFileDataCreationTimeUnlimited}, // Certificate expiration time field is not set {DeviceFiles::kCertificateInvalid, kTestDefaultCertificateFileDataExpirationUnset}, // Certificate expires before creation time {DeviceFiles::kCertificateInvalid, kTestDefaultCertificateFileDataExpiresBeforeCreationTime}, // Certificate acqusition time field is not set {DeviceFiles::kCertificateInvalid, kTestDefaultCertificateFileDataAcquisitionTimeUnset}, // Certificate acqusition time is invalid {DeviceFiles::kCertificateInvalid, kTestDefaultCertificateFileDataAcquisitionTimeInvalid}, // Certificate has a never expires acqusition {DeviceFiles::kCertificateInvalid, kTestDefaultCertificateFileDataAcquisitionTimeUnlimited}, // Certificate acqusition time is in the future {DeviceFiles::kCannotHandle, kTestDefaultCertificateFileDataAcquisitionTimeInTheFuture}, }; constexpr size_t kNumberOfDefaultCertificates = ArraySize(kRetrieveDefaultCertificateErrorData); struct LicenseInfo { std::string key_set_id; CdmOfflineLicenseState license_state; std::string pssh_data; std::string key_request; std::string key_response; std::string key_renewal_request; std::string key_renewal_response; std::string key_release_url; int64_t playback_start_time; int64_t last_playback_time; int64_t grace_period_end_time; std::string app_parameters; std::string usage_entry; uint32_t usage_entry_index; std::string drm_certificate; CryptoWrappedKey::Type key_type; std::string private_key; std::string file_data; }; // Sample license data and related data for storage and use for offline // playback. The license data and URLs in this test are not real. Test // storage and retrieval of license-related data. const LicenseInfo kLicenseTestData[] = { // license 0 {"ksid54C57C966E23CEF5", kLicenseStateActive, a2bs_hex("0801121030313233343536373839414243444546"), a2bs_hex("080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591B" "C4D07A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD" "55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EF" "FA0E5DFC3DE9A34BA5F08BE349553C319A9FB274905A8770ADC9CA4A2CBC" "D8E556A1587FA18BFD4D286C644A6904F19EAAFBDFADD3B371B306D0B289" "F459B491C814B5AD1F747610E990A60248A7DA5152F1CCFC047EF4230013" "1F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F5800EF188386B9" "4825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCCEC" "83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC" "66F17FFC29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776" "EE60DD6BFD660BDDCA870203010001288001300112800250D1F8B1ECF849" "B60FF93E37C4DEEF09E6FFB10BCFC996A4A24B7AA96928835ED5A72E1584" "6D0A14015733239BD8B6E6D5E5D229B08394CE1E0692C159C44337CA7CAF" "88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8690E7403209534180" "3408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418BBF1D336C" "E58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A60" "59044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE60" "85D0914F991C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E8" "5476B18AEF8DE871571A75681A75F75028A5B58751C09A5296AAE99CEDCD" "9785E9E2103240D40A1AB6050AB002080112102CE5CCF42200D6B5BCCF33" "D7CC2D9C7018EAD1B88D05228E023082010A0282010100BE1B661EEC4700" "DF4B0C83292D02AE029B8A224DD3048125049F74E30E1257FC2BE8D9CFAF" "0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A805833730D" "C6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C" "7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A69" "1B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7A" "EB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D9249755F129BB0DBE" "CA3B894975A65A36FD005CE77CD407E925D3172E33122A11D327968A08F8" "E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF53291B236E692B" "506A2AF92AF43E3A81020301000128800130011280033A08A60418E5C81B" "8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DCD8" "14426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B87" "73BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7" "E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E86C6B908243987E" "552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7F8642A9B3B244D" "AA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5DDF24C60F4FAC3" "0820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5DEFDF2EB87B61DE" "26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C96961316B" "5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8" "B6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288" "B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304E" "ED4990BB5BE735DB027A6DE35329D321EC051B956C55A5B11674017517FC" "C3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D70616E795F6E61" "6D6512034C47451A150A0A6D6F64656C5F6E616D6512074E657875732034" "1A200A116172636869746563747572655F6E616D65120B61726D65616269" "2D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150A0C70" "726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E" "666F1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D" "52322F3731343239313A7573657264656275672F6465762D6B6579731A21" "0A096465766963655F696412144C474D4332303132313030353030363339" "32373812250A230A14080112103031323334353637383941424344454610" "021A09393837363534333231180120002A0C333934303739343733370000" "30151A8002734FBDED946EB74A1B61811C4C4A491214F6BEA125A80F0141" "65B28AA97AD0AF60E4D129EB7F424AD659F24E5EED4B702BEE328E38B72C" "A6F38CD0ECFD2E6D7B98147744C9B8A9610B3BDFE17675FF7D584C5BF680" "64B0FE513FC322C9148795E4C2F2443C3024F5C1F29E6FEFB6D77005DAB2" "2CD2B63131908DE4D88795BB931CEA38452CC568BE25032245E372F07A12" "97F51748C7EA02F2C88360AFE7ABBC71DCDD5366126258E5AFA27C2A20B3" "39FA1E7AE925B494B361F6F7116F20BE8EE6E446146027F4FD4300F4A0B0" "A3361EE34925F338D0AACF20AE919B4BAE81C1D57A8D2B8FA38732A57697" "C316C180717C182A971C94E4AC4C7DF8F161CB8CC1"), a2bs_hex("080212CC020A190A0939383736353433323112084B9F26DAB8B06E112002" "2800124108011801301E4239687474703A2F2F6B69723033666370673137" "342E7769646576696E652E6E65742F7769646576696E652F6367692D6269" "6E2F64726D2E6367691A6612102531DFD6CCEA511D00F8C0172F1189AA1A" "5057FF9D9DBD5A205B1DEB075E4A90467C1E074CDE6071BFF831AD590BD5" "D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2FEED17A3327" "E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A10303132" "3334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD2C" "7E1A20884EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5EE" "172E7C9736200242340A2050BFE71BB1BA683E35E0B49BB33048E5103FBB" "B9C3E1CD6EBCDA7DD485DBAF431210D69D6F14C95CB6CFDB998E50D00F4D" "A020DBDFA68F051A20AE5D6895E70F86F42F5FE3C58A505A865D05AB94B1" "ABAA6CC59C3322F61C458D228002331F2BE95B5C796E0921CC27A7295501" "DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA8BE6AAD0" "85AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B81" "9F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEBBE" "16AB04493E7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E13" "29A9921604E6F80CB148AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D48" "6294860DFB4F4C42D57D9542B76179E179DD4AA23F9F7B2AE432B39E4CE8" "F156E84877DDA781AAAAFC797FF75AFE2019ADC3A2E419BF0253C705BD47" "97A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0C7D29252F52FD5"), a2bs_hex("08011231121D1A1B0A190A0939383736353433323112084B9F26DAB8B06E" "112002280018022A0C31353532333030360000000030151A20C30375683C" "4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A27"), a2bs_hex("0802123B0A190A0939383736353433323112084B9F26DAB8B06E11200228" "0112001A16200342120A106B63746C0000000000ECDCBE0000000020DBDF" "A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0" "BEA6CABACA1C2C"), "https://test.google.com/license/GetCencLicense", 0x0, 0x0, 0x0, "", "", 0, "", CryptoWrappedKey::kUninitialized, "", a2bs_hex( "0AAE150802100122A7150801121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" "7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302" "5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B" "E349553C319A9FB274905A8770ADC9CA4A2CBCD8E556A1587FA18BFD4D286C644A690" "4F19EAAFBDFADD3B371B306D0B289F459B491C814B5AD1F747610E990A60248A7DA51" "52F1CCFC047EF42300131F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F580" "0EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCC" "EC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC66F17FF" "C29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776EE60DD6BFD660BDD" "CA870203010001288001300112800250D1F8B1ECF849B60FF93E37C4DEEF09E6FFB10" "BCFC996A4A24B7AA96928835ED5A72E15846D0A14015733239BD8B6E6D5E5D229B083" "94CE1E0692C159C44337CA7CAF88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8" "690E74032095341803408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418B" "BF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A605" "9044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE6085D0914F99" "1C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E85476B18AEF8DE871571" "A75681A75F75028A5B58751C09A5296AAE99CEDCD9785E9E2103240D40A1AB6050AB0" "02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0" "282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12" "57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583" "3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB" "8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C" "5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2" "AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E" "925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF" "6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A" "60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC" "D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF" "3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA" "E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597" "83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0" "FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84" "A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9" "6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B" "6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D" "80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027" "A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7" "F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6" "16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B" "61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150" "A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F" "1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343" "239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964" "12144C474D433230313231303035303036333932373812250A230A140801121030313" "23334353637383941424344454610021A09393837363534333231180120002A0C3339" "3430373934373337000030151A8002734FBDED946EB74A1B61811C4C4A491214F6BEA" "125A80F014165B28AA97AD0AF60E4D129EB7F424AD659F24E5EED4B702BEE328E38B7" "2CA6F38CD0ECFD2E6D7B98147744C9B8A9610B3BDFE17675FF7D584C5BF68064B0FE5" "13FC322C9148795E4C2F2443C3024F5C1F29E6FEFB6D77005DAB22CD2B63131908DE4" "D88795BB931CEA38452CC568BE25032245E372F07A1297F51748C7EA02F2C88360AFE" "7ABBC71DCDD5366126258E5AFA27C2A20B339FA1E7AE925B494B361F6F7116F20BE8E" "E6E446146027F4FD4300F4A0B0A3361EE34925F338D0AACF20AE919B4BAE81C1D57A8" "D2B8FA38732A57697C316C180717C182A971C94E4AC4C7DF8F161CB8CC122F6040802" "12CC020A190A0939383736353433323112084B9F26DAB8B06E1120022800124108011" "801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E" "6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A6612102531D" "FD6CCEA511D00F8C0172F1189AA1A5057FF9D9DBD5A205B1DEB075E4A90467C1E074C" "DE6071BFF831AD590BD5D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2" "FEED17A3327E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A103031" "323334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD2C7E1A208" "84EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5EE172E7C9736200242" "340A2050BFE71BB1BA683E35E0B49BB33048E5103FBBB9C3E1CD6EBCDA7DD485DBAF4" "31210D69D6F14C95CB6CFDB998E50D00F4DA020DBDFA68F051A20AE5D6895E70F86F4" "2F5FE3C58A505A865D05AB94B1ABAA6CC59C3322F61C458D228002331F2BE95B5C796" "E0921CC27A7295501DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA" "8BE6AAD085AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B819" "F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEBBE16AB04493E" "7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E1329A9921604E6F80CB14" "8AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D486294860DFB4F4C42D57D9542B761" "79E179DD4AA23F9F7B2AE432B39E4CE8F156E84877DDA781AAAAFC797FF75AFE2019A" "DC3A2E419BF0253C705BD4797A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0" "C7D29252F52FD52A5708011231121D1A1B0A190A0939383736353433323112084B9F2" "6DAB8B06E112002280018022A0C31353532333030360000000030151A20C30375683C" "4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A2732610802123B0A1" "90A0939383736353433323112084B9F26DAB8B06E112002280112001A16200342120A" "106B63746C0000000000ECDCBE0000000020DBDFA68F051A20182F029E35047A3841F" "A176C74E5B387350E8D58DEA6878FF0BEA6CABACA1C2C3A2E68747470733A2F2F7465" "73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7" "365400048005800620068001220785CE1756656A049E77F28C8449AB2DD115B6C43B2" "FF232D23F98B72F1DCE96A")}, // license 1 {"ksidC8EAA2579A282EB0", kLicenseStateReleasing, a2bs_hex("0801121030313233343536373839414243444546"), a2bs_hex("080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591B" "C4D07A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD" "55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EF" "FA0E5DFC3DE9A34BA5F08BE349553C319A9FB274905A8770ADC9CA4A2CBC" "D8E556A1587FA18BFD4D286C644A6904F19EAAFBDFADD3B371B306D0B289" "F459B491C814B5AD1F747610E990A60248A7DA5152F1CCFC047EF4230013" "1F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F5800EF188386B9" "4825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCCEC" "83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC" "66F17FFC29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776" "EE60DD6BFD660BDDCA870203010001288001300112800250D1F8B1ECF849" "B60FF93E37C4DEEF09E6FFB10BCFC996A4A24B7AA96928835ED5A72E1584" "6D0A14015733239BD8B6E6D5E5D229B08394CE1E0692C159C44337CA7CAF" "88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8690E7403209534180" "3408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418BBF1D336C" "E58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A60" "59044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE60" "85D0914F991C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E8" "5476B18AEF8DE871571A75681A75F75028A5B58751C09A5296AAE99CEDCD" "9785E9E2103240D40A1AB6050AB002080112102CE5CCF42200D6B5BCCF33" "D7CC2D9C7018EAD1B88D05228E023082010A0282010100BE1B661EEC4700" "DF4B0C83292D02AE029B8A224DD3048125049F74E30E1257FC2BE8D9CFAF" "0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A805833730D" "C6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C" "7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A69" "1B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7A" "EB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D9249755F129BB0DBE" "CA3B894975A65A36FD005CE77CD407E925D3172E33122A11D327968A08F8" "E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF53291B236E692B" "506A2AF92AF43E3A81020301000128800130011280033A08A60418E5C81B" "8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DCD8" "14426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B87" "73BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7" "E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E86C6B908243987E" "552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7F8642A9B3B244D" "AA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5DDF24C60F4FAC3" "0820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5DEFDF2EB87B61DE" "26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C96961316B" "5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8" "B6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288" "B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304E" "ED4990BB5BE735DB027A6DE35329D321EC051B956C55A5B11674017517FC" "C3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D70616E795F6E61" "6D6512034C47451A150A0A6D6F64656C5F6E616D6512074E657875732034" "1A200A116172636869746563747572655F6E616D65120B61726D65616269" "2D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150A0C70" "726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E" "666F1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D" "52322F3731343239313A7573657264656275672F6465762D6B6579731A21" "0A096465766963655F696412144C474D4332303132313030353030363339" "32373812250A230A14080112103031323334353637383941424344454610" "021A09393837363534333231180120002A0C383837303136333500000000" "30151A80023F7318E29C5A50C8ADAA4B09ADCD97B75588B17002C5C2BC9A" "FA35C53098AF22DF5CC300407CD2E84EBE01911C785513649E2CCF4E4290" "20D3B93F3A54748C11ECFF4D62F562A4D3E96812F663D4F761C00C3E88AB" "D8A1DC10E017A44DD3E040775FED5F07649090D1142C9D21373CD604219E" "24935E10F287F20B0E080FDF76B6096B24F82A3E37850DE229DE33EBCE7A" "0FA53F652C33007EA7027F95A44C36D04CBD676EB5C0BF69508F45E0C322" "0D1706B0B851B3FCAF7AC2370EAD80C5D1620887633A42024862FCEA9F95" "A719AAB989C1923C6452ECB0B75AF1CAFBFB06C5EC31BBF0EE4D16ACCC9A" "F05B77D61C4855491B3D4AC150F3BCB7AE536AF333"), a2bs_hex("080212CC020A190A093938373635343332311208F97F2B3856CBB3DD2002" "2800124108011801301E4239687474703A2F2F6B69723033666370673137" "342E7769646576696E652E6E65742F7769646576696E652F6367692D6269" "6E2F64726D2E6367691A661210C5C43FE0178AEE7B85042F749D5A40251A" "5013A1501E0F90A64E103336944A37BAAAEAC17E46E880DF6EA23A7A890D" "A082CBBF82710B8C3982E8AB25A208A89EEFB5250D4B2CCC2F362856E05D" "1941E387801A19886B1F3AAE60D06EDA400087B06920011A7E0A10303132" "333435363738394142434445461210A34D2B04D596DFE1DC29CFDF116E39" "211A2031AD1B369D225842A14B5D5F8366F5FF8EB94AA7CD13EB45BA7291" "68E19D5F5F200242340A20A0D6D65CC677C12B86A7A99F89F446BCFDA185" "44B15B2FEF8349ED5C247F7BE91210ED8D58320B0F4F948F960C7D49872C" "DE2083E5A68F051A207481A2B82C83DF3090D57EDC042711A42CF4F87E79" "CE136DAFE25F48F4A9068322800256113CA771F4250CAD2928161D07B525" "61019003DBFBD362F20587D51BD999D57D2B035BC115C54C8B4BC37661A6" "6A101DE5B42D82E582309AFD8E211C947A2D33CAFB58F89EEE2DA9524614" "0311134429D8A5D15E03A169B0EB2579DA3BD6E4322D6C46EE964F6931CF" "9DA52FB59B1D3B9BCC5959211CC23D97690FA8E869ADF68BCDA8A1211DDB" "EBF967617AF0BFDA73E0AE79D8A7CCED208602EDC72CEF44A02901A52EEB" "87CF9841D186BC95A65956BAD48F3C9E43F027CC03B73DFF5CAFC0B64727" "E2D7B3A9CF25F97C475207C8A9DF091A585288A71AE64B7B2089871F7272" "381CCBEF55EBF3DCB21B134FE48BFD5299DCCA6B01B55EEA61F9F990D0AF"), a2bs_hex("08011231121D1A1B0A190A093938373635343332311208F97F2B3856CBB3" "DD2002280018022A0C33333932383235393733000030151A209ADE9B0A41" "1583962BDA31BE5BE937E589BB3DCC06F6F4C48FBE4FAE86DC9ABA"), a2bs_hex("0802123B0A190A093938373635343332311208F97F2B3856CBB3DD200228" "0112001A16200342120A106B63746C00000000CA3A6A75000000002083E5" "A68F051A20BDA6A56F7CBFD0942198F87C23A34AA5CBD64AFEB134277774" "CCF8E789D815DD"), "https://test.google.com/license/GetCencLicense", 0x12345678, 0x12348765, 0x0, "Name1 Value1", a2bs_hex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" "22232425262728292a2b2c2d2e2f"), 5, "", CryptoWrappedKey::kUninitialized, "", a2bs_hex( "0AF7150802100122F0150802121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" "7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302" "5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B" "E349553C319A9FB274905A8770ADC9CA4A2CBCD8E556A1587FA18BFD4D286C644A690" "4F19EAAFBDFADD3B371B306D0B289F459B491C814B5AD1F747610E990A60248A7DA51" "52F1CCFC047EF42300131F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F580" "0EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCC" "EC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC66F17FF" "C29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776EE60DD6BFD660BDD" "CA870203010001288001300112800250D1F8B1ECF849B60FF93E37C4DEEF09E6FFB10" "BCFC996A4A24B7AA96928835ED5A72E15846D0A14015733239BD8B6E6D5E5D229B083" "94CE1E0692C159C44337CA7CAF88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8" "690E74032095341803408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418B" "BF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A605" "9044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE6085D0914F99" "1C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E85476B18AEF8DE871571" "A75681A75F75028A5B58751C09A5296AAE99CEDCD9785E9E2103240D40A1AB6050AB0" "02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0" "282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12" "57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583" "3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB" "8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C" "5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2" "AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E" "925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF" "6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A" "60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC" "D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF" "3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA" "E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597" "83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0" "FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84" "A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9" "6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B" "6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D" "80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027" "A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7" "F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6" "16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B" "61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150" "A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F" "1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343" "239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964" "12144C474D433230313231303035303036333932373812250A230A140801121030313" "23334353637383941424344454610021A09393837363534333231180120002A0C3838" "3730313633350000000030151A80023F7318E29C5A50C8ADAA4B09ADCD97B75588B17" "002C5C2BC9AFA35C53098AF22DF5CC300407CD2E84EBE01911C785513649E2CCF4E42" "9020D3B93F3A54748C11ECFF4D62F562A4D3E96812F663D4F761C00C3E88ABD8A1DC1" "0E017A44DD3E040775FED5F07649090D1142C9D21373CD604219E24935E10F287F20B" "0E080FDF76B6096B24F82A3E37850DE229DE33EBCE7A0FA53F652C33007EA7027F95A" "44C36D04CBD676EB5C0BF69508F45E0C3220D1706B0B851B3FCAF7AC2370EAD80C5D1" "620887633A42024862FCEA9F95A719AAB989C1923C6452ECB0B75AF1CAFBFB06C5EC3" "1BBF0EE4D16ACCC9AF05B77D61C4855491B3D4AC150F3BCB7AE536AF33322F6040802" "12CC020A190A093938373635343332311208F97F2B3856CBB3DD20022800124108011" "801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E" "6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A661210C5C43" "FE0178AEE7B85042F749D5A40251A5013A1501E0F90A64E103336944A37BAAAEAC17E" "46E880DF6EA23A7A890DA082CBBF82710B8C3982E8AB25A208A89EEFB5250D4B2CCC2" "F362856E05D1941E387801A19886B1F3AAE60D06EDA400087B06920011A7E0A103031" "32333435363738394142434445461210A34D2B04D596DFE1DC29CFDF116E39211A203" "1AD1B369D225842A14B5D5F8366F5FF8EB94AA7CD13EB45BA729168E19D5F5F200242" "340A20A0D6D65CC677C12B86A7A99F89F446BCFDA18544B15B2FEF8349ED5C247F7BE" "91210ED8D58320B0F4F948F960C7D49872CDE2083E5A68F051A207481A2B82C83DF30" "90D57EDC042711A42CF4F87E79CE136DAFE25F48F4A9068322800256113CA771F4250" "CAD2928161D07B52561019003DBFBD362F20587D51BD999D57D2B035BC115C54C8B4B" "C37661A66A101DE5B42D82E582309AFD8E211C947A2D33CAFB58F89EEE2DA95246140" "311134429D8A5D15E03A169B0EB2579DA3BD6E4322D6C46EE964F6931CF9DA52FB59B" "1D3B9BCC5959211CC23D97690FA8E869ADF68BCDA8A1211DDBEBF967617AF0BFDA73E" "0AE79D8A7CCED208602EDC72CEF44A02901A52EEB87CF9841D186BC95A65956BAD48F" "3C9E43F027CC03B73DFF5CAFC0B64727E2D7B3A9CF25F97C475207C8A9DF091A58528" "8A71AE64B7B2089871F7272381CCBEF55EBF3DCB21B134FE48BFD5299DCCA6B01B55E" "EA61F9F990D0AF2A5708011231121D1A1B0A190A093938373635343332311208F97F2" "B3856CBB3DD2002280018022A0C33333932383235393733000030151A209ADE9B0A41" "1583962BDA31BE5BE937E589BB3DCC06F6F4C48FBE4FAE86DC9ABA32610802123B0A1" "90A093938373635343332311208F97F2B3856CBB3DD2002280112001A16200342120A" "106B63746C00000000CA3A6A75000000002083E5A68F051A20BDA6A56F7CBFD094219" "8F87C23A34AA5CBD64AFEB134277774CCF8E789D815DD3A2E68747470733A2F2F7465" "73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7" "36540F8ACD1910148E58ED29101520F0A054E616D6531120656616C75653158006230" "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212" "2232425262728292A2B2C2D2E2F6805122010DB816A045F2AA5865B17FE2F20DA2114" "17B2F8B2D7511C9DE89A87CB5208AB")}, // license 2 {"ksidE8C37662C88DC673", kLicenseStateReleasing, a2bs_hex("0801121030313233343536373839414243444546"), a2bs_hex("080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591B" "C4D07A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD" "55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EF" "FA0E5DFC3DE9A34BA5F08BE349553C319A9FB274905A8770ADC9CA4A2CBC" "D8E556A1587FA18BFD4D286C644A6904F19EAAFBDFADD3B371B306D0B289" "F459B491C814B5AD1F747610E990A60248A7DA5152F1CCFC047EF4230013" "1F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F5800EF188386B9" "4825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCCEC" "83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC" "66F17FFC29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776" "EE60DD6BFD660BDDCA870203010001288001300112800250D1F8B1ECF849" "B60FF93E37C4DEEF09E6FFB10BCFC996A4A24B7AA96928835ED5A72E1584" "6D0A14015733239BD8B6E6D5E5D229B08394CE1E0692C159C44337CA7CAF" "88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8690E7403209534180" "3408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418BBF1D336C" "E58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A60" "59044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE60" "85D0914F991C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E8" "5476B18AEF8DE871571A75681A75F75028A5B58751C09A5296AAE99CEDCD" "9785E9E2103240D40A1AB6050AB002080112102CE5CCF42200D6B5BCCF33" "D7CC2D9C7018EAD1B88D05228E023082010A0282010100BE1B661EEC4700" "DF4B0C83292D02AE029B8A224DD3048125049F74E30E1257FC2BE8D9CFAF" "0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A805833730D" "C6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C" "7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A69" "1B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7A" "EB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D9249755F129BB0DBE" "CA3B894975A65A36FD005CE77CD407E925D3172E33122A11D327968A08F8" "E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF53291B236E692B" "506A2AF92AF43E3A81020301000128800130011280033A08A60418E5C81B" "8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DCD8" "14426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B87" "73BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7" "E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E86C6B908243987E" "552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7F8642A9B3B244D" "AA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5DDF24C60F4FAC3" "0820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5DEFDF2EB87B61DE" "26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C96961316B" "5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8" "B6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288" "B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304E" "ED4990BB5BE735DB027A6DE35329D321EC051B956C55A5B11674017517FC" "C3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D70616E795F6E61" "6D6512034C47451A150A0A6D6F64656C5F6E616D6512074E657875732034" "1A200A116172636869746563747572655F6E616D65120B61726D65616269" "2D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150A0C70" "726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E" "666F1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D" "52322F3731343239313A7573657264656275672F6465762D6B6579731A21" "0A096465766963655F696412144C474D4332303132313030353030363339" "32373812250A230A14080112103031323334353637383941424344454610" "021A09393837363534333231180120002A0C313038313531363936380000" "30151A80027EA7ADEF77500FBC6A6081E739E0C50E1BDE6DE4AB39110938" "6768A95A04A52BE6693A5A98A25AC8EB9CDD6F40DCCF86A3DA6C700E256A" "676BD3D7E492090DCF732C57333D9370F6D7AB87661701597099CD45C2BC" "DFF1D47183E510D7A6D3561EFC7D4EB21814CB2CA0777F26DD491B4D0146" "9BB81A701545E2D3E98E1ADAB3A3BBD1D0433B312B3B5139E88D3A92520B" "A399B2BE3489A72C3629745E4D8FC6DF6C8925A8FD8D6C809CA80DBC2903" "0615A55523305BC64DDFF52A87BD0DE9EEAB6445C5A1847E5E6FE8D640C7" "B07F3B066B911793F06E973A02FA6EDD274570C4CA982D353F1E72A5B776" "95D554B4FB554B46F5FA5B3B00805C136A9ED21FC2"), a2bs_hex("080212CC020A190A0939383736353433323112087AD49366C8D919132002" "2800124108011801301E4239687474703A2F2F6B69723033666370673137" "342E7769646576696E652E6E65742F7769646576696E652F6367692D6269" "6E2F64726D2E6367691A6612109161841718D5D0A4C4368820F4D030721A" "500F94F9BC0FF6B730709C6DEFD88D1CA8C7991A149D470493BDAD89E333" "AFC949F77D995CEA5E3D3DA5F7DF84E90CD4A9B4E138EA5F7EA75A520A25" "017D69A9460D46548259F82959304CDEFE41936BE420011A7E0A10303132" "3334353637383941424344454612104F88BFEECE468B962BF09EA1257DA5" "0B1A200D48C122E022033C3E67A6ED4DA99B8AEA6F4B9E78634A548C060F" "49D39D9700200242340A209DE408B6F116F428C8E801C63AF34570A6C31D" "72180AA11F85D8DD4BC1C4D35412104E73935C2CC38C21408C537B3A5F19" "8B2081E7A68F051A20BC2696A2A1FBDF425675CAD455DEA2B44040D1F8F0" "B6C675A28384CACFDF2F132280022D09FDA096972AA77FFEB09EA08AE882" "E89AC8591B398452CFB1383CCA16611571E223FE8DE82CDE9111557B2A87" "A253B87B822F037FB492DE4B91B8AD4DB2E2F8B2E81BF1DE36CC7520CB4B" "B3516E18322777287310257F2EC7110332504756DA8BC873448E93BA05FD" "1AEB7AD1016D7BBB7FF5E7111987005322E342679F3D241429AE930A479D" "9F338699D3D6969A6479D1363AEB4AF19BDE9A73B33CD0EBFCF272FCEEC6" "222AC08DCBD36077E0459D940BAE84ABA584700C02E70F3AE034ED7B764C" "6EE5E85663D657270C9AB40D3109920AB1C1C5DA1358E384EDF673253C04" "F20AA6B0CC98F421A4CD86C4C88042B0DE9902D5D00B6AD817B1A313ED5B"), a2bs_hex("08011231121D1A1B0A190A0939383736353433323112087AD49366C8D919" "132002280018022A0C35333631323234343600000030151A208CC3C7D328" "DFACD43764C9FB582B858C8FF1D9863FF59C4D983478DB858AC32A"), a2bs_hex("0802123B0A190A0939383736353433323112087AD49366C8D91913200228" "0112001A16200342120A106B63746C000000001FF4944E000000002082E7" "A68F051A2041EF0A9267D613D17AA90E1D1DA5BE091860E5E296D41D6D0F" "75E73660C279B3"), "https://test.google.com/license/GetCencLicense", 0x0123456789abcdef, 0x123456789abfedc, 0x0, "Name1 Value1 Name2 Param2", a2bs_hex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" "22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"), 12, "", CryptoWrappedKey::kUninitialized, "", a2bs_hex( "0AAD160802100122A6160802121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" "7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302" "5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B" "E349553C319A9FB274905A8770ADC9CA4A2CBCD8E556A1587FA18BFD4D286C644A690" "4F19EAAFBDFADD3B371B306D0B289F459B491C814B5AD1F747610E990A60248A7DA51" "52F1CCFC047EF42300131F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F580" "0EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCC" "EC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC66F17FF" "C29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776EE60DD6BFD660BDD" "CA870203010001288001300112800250D1F8B1ECF849B60FF93E37C4DEEF09E6FFB10" "BCFC996A4A24B7AA96928835ED5A72E15846D0A14015733239BD8B6E6D5E5D229B083" "94CE1E0692C159C44337CA7CAF88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8" "690E74032095341803408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418B" "BF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A605" "9044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE6085D0914F99" "1C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E85476B18AEF8DE871571" "A75681A75F75028A5B58751C09A5296AAE99CEDCD9785E9E2103240D40A1AB6050AB0" "02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0" "282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12" "57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583" "3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB" "8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C" "5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2" "AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E" "925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF" "6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A" "60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC" "D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF" "3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA" "E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597" "83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0" "FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84" "A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9" "6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B" "6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D" "80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027" "A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7" "F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6" "16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B" "61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150" "A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F" "1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343" "239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964" "12144C474D433230313231303035303036333932373812250A230A140801121030313" "23334353637383941424344454610021A09393837363534333231180120002A0C3130" "3831353136393638000030151A80027EA7ADEF77500FBC6A6081E739E0C50E1BDE6DE" "4AB391109386768A95A04A52BE6693A5A98A25AC8EB9CDD6F40DCCF86A3DA6C700E25" "6A676BD3D7E492090DCF732C57333D9370F6D7AB87661701597099CD45C2BCDFF1D47" "183E510D7A6D3561EFC7D4EB21814CB2CA0777F26DD491B4D01469BB81A701545E2D3" "E98E1ADAB3A3BBD1D0433B312B3B5139E88D3A92520BA399B2BE3489A72C3629745E4" "D8FC6DF6C8925A8FD8D6C809CA80DBC29030615A55523305BC64DDFF52A87BD0DE9EE" "AB6445C5A1847E5E6FE8D640C7B07F3B066B911793F06E973A02FA6EDD274570C4CA9" "82D353F1E72A5B77695D554B4FB554B46F5FA5B3B00805C136A9ED21FC222F6040802" "12CC020A190A0939383736353433323112087AD49366C8D9191320022800124108011" "801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E" "6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A66121091618" "41718D5D0A4C4368820F4D030721A500F94F9BC0FF6B730709C6DEFD88D1CA8C7991A" "149D470493BDAD89E333AFC949F77D995CEA5E3D3DA5F7DF84E90CD4A9B4E138EA5F7" "EA75A520A25017D69A9460D46548259F82959304CDEFE41936BE420011A7E0A103031" "323334353637383941424344454612104F88BFEECE468B962BF09EA1257DA50B1A200" "D48C122E022033C3E67A6ED4DA99B8AEA6F4B9E78634A548C060F49D39D9700200242" "340A209DE408B6F116F428C8E801C63AF34570A6C31D72180AA11F85D8DD4BC1C4D35" "412104E73935C2CC38C21408C537B3A5F198B2081E7A68F051A20BC2696A2A1FBDF42" "5675CAD455DEA2B44040D1F8F0B6C675A28384CACFDF2F132280022D09FDA096972AA" "77FFEB09EA08AE882E89AC8591B398452CFB1383CCA16611571E223FE8DE82CDE9111" "557B2A87A253B87B822F037FB492DE4B91B8AD4DB2E2F8B2E81BF1DE36CC7520CB4BB" "3516E18322777287310257F2EC7110332504756DA8BC873448E93BA05FD1AEB7AD101" "6D7BBB7FF5E7111987005322E342679F3D241429AE930A479D9F338699D3D6969A647" "9D1363AEB4AF19BDE9A73B33CD0EBFCF272FCEEC6222AC08DCBD36077E0459D940BAE" "84ABA584700C02E70F3AE034ED7B764C6EE5E85663D657270C9AB40D3109920AB1C1C" "5DA1358E384EDF673253C04F20AA6B0CC98F421A4CD86C4C88042B0DE9902D5D00B6A" "D817B1A313ED5B2A5708011231121D1A1B0A190A0939383736353433323112087AD49" "366C8D919132002280018022A0C35333631323234343600000030151A208CC3C7D328" "DFACD43764C9FB582B858C8FF1D9863FF59C4D983478DB858AC32A32610802123B0A1" "90A0939383736353433323112087AD49366C8D919132002280112001A16200342120A" "106B63746C000000001FF4944E000000002082E7A68F051A2041EF0A9267D613D17AA" "90E1D1DA5BE091860E5E296D41D6D0F75E73660C279B33A2E68747470733A2F2F7465" "73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7" "36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD1910152150A054E616D6531120C5661" "6C756531204E616D653252160A0C4E616D653220506172616D321206506172616D325" "8006240000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E" "1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F680" "C12206AA0237760D1F06E5CB78F5AFC3D124BBF7C26921CB3CC2EA44766801E25D34" "F")}, // license 3 {"ksidF991C5F45E98CB97", kLicenseStateActive, a2bs_hex("0801121030313233343536373839414243444546"), a2bs_hex("080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591B" "FA0E5DFC3DE9A34BA5F08BE349553C319A9FB274905A8770ADC9CA4A2CBC" "D8E556A1587FA18BFD4D286C644A6904F19EAAFBDFADD3B371B306D0B289" "F459B491C814B5AD1F747610E990A60248A7DA5152F1CCFC047EF4230013" "1F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F5800EF188386B9" "4825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCCEC" "83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC" "66F17FFC29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776" "EE60DD6BFD660BDDCA870203010001288001300112800250D1F8B1ECF849" "B60FF93E37C4DEEF09E6FFB10BCFC996A4A24B7AA96928835ED5A72E1584" "6D0A14015733239BD8B6E6D5E5D229B08394CE1E0692C159C44337CA7CAF" "88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8690E7403209534180" "3408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418BBF1D336C" "E58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A60" "59044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE60" "85D0914F991C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E8" "5476B18AEF8DE871571A75681A75F75028A5B58751C09A5296AAE99CEDCD" "9785E9E2103240D40A1AB6050AB002080112102CE5CCF42200D6B5BCCF33" "D7CC2D9C7018EAD1B88D05228E023082010A0282010100BE1B661EEC4700" "DF4B0C83292D02AE029B8A224DD3048125049F74E30E1257FC2BE8D9CFAF" "0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A805833730D" "C6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C" "7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A69" "1B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7A" "EB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D9249755F129BB0DBE" "CA3B894975A65A36FD005CE77CD407E925D3172E33122A11D327968A08F8" "E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF53291B236E692B" "506A2AF92AF43E3A81020301000128800130011280033A08A60418E5C81B" "8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DCD8" "14426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B87" "73BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7" "E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E86C6B908243987E" "552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7F8642A9B3B244D" "AA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5DDF24C60F4FAC3" "0820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5DEFDF2EB87B61DE" "26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C96961316B" "5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8" "B6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288" "B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304E" "ED4990BB5BE735DB027A6DE35329D321EC051B956C55A5B11674017517FC" "C3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D70616E795F6E61" "6D6512034C47451A150A0A6D6F64656C5F6E616D6512074E657875732034" "1A200A116172636869746563747572655F6E616D65120B61726D65616269" "2D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150A0C70" "726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E" "666F1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D" "52322F3731343239313A7573657264656275672F6465762D6B6579731A21" "0A096465766963655F696412144C474D4332303132313030353030363339" "32373812250A230A14080112103031323334353637383941424344454610" "021A09393837363534333231180120002A0C333934303739343733370000" "30151A8002734FBDED946EB74A1B61811C4C4A491214F6BEA125A80F0141" "65B28AA97AD0AF60E4D129EB7F424AD659F24E5EED4B702BEE328E38B72C" "A6F38CD0ECFD2E6D7B98147744C9B8A9610B3BDFE17675FF7D584C5BF680" "64B0FE513FC322C9148795E4C2F2443C3024F5C1F29E6FEFB6D77005DAB2" "2CD2B63131908DE4D88795BB931CEA38452CC568BE25032245E372F07A12" "97F51748C7EA02F2C88360AFE7ABBC71DCDD5366126258E5AFA27C2A20B3" "39FA1E7AE925B494B361F6F7116F20BE8EE6E446146027F4FD4300F4A0B0" "A3361EE34925F338D0AACF20AE919B4BAE81C1D57A8D2B8FA38732A57697" "55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EF" "C316C180717C182A971C94E4AC4C7DF8F161CB8CC1"), a2bs_hex("080212CC020A190A0939383736353433323112084B9F26DAB8B06E112002" "342E7769646576696E652E6E65742F7769646576696E652F6367692D6269" "6E2F64726D2E6367691A6612102531DFD6CCEA511D00F8C0172F1189AA1A" "5057FF9D9DBD5A205B1DEB075E4A90467C1E074CDE6071BFF831AD590BD5" "D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2FEED17A3327" "E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A10303132" "3334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD2C" "7E1A20884EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5EE" "172E7C9736200242340A2050BFE71BB1BA683E35E0B49BB33048E5103FBB" "B9C3E1CD6EBCDA7DD485DBAF431210D69D6F14C95CB6CFDB998E50D00F4D" "A020DBDFA68F051A20AE5D6895E70F86F42F5FE3C58A505A865D05AB94B1" "ABAA6CC59C3322F61C458D228002331F2BE95B5C796E0921CC27A7295501" "DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA8BE6AAD0" "85AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B81" "9F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEBBE" "16AB04493E7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E13" "29A9921604E6F80CB148AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D48" "6294860DFB4F4C42D57D9542B76179E179DD4AA23F9F7B2AE432B39E4CE8" "F156E84877DDA781AAAAFC797FF75AFE2019ADC3A2E419BF0253C705BD47" "2800124108011801301E4239687474703A2F2F6B69723033666370673137" "97A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0C7D29252F52FD5"), a2bs_hex("08011231121D1A1B0A190A0939383736353433323112084B9F26DAB8B06E" "4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A27112002" "280018022A0C31353532333030360000000030151A20C30375683C"), a2bs_hex("0802123B0A190A0939383736353433323112084B9F26DAB8B06E11200228" "A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0" "0112001A16200342120A106B63746C0000000000ECDCBE0000000020DBDF" "BEA6CABACA1C2C"), "https://test.google.com/license/GetCencLicense", 0x1234, 0x1324, 0x10, "Name3 Value3", a2bs_hex("08011231121D1A1B0A190A0939383736353433323112084B9F26DAB8B06E"), 5, kTestCertificateWithFutureExpiration, CryptoWrappedKey::kRsa, kTestWrappedPrivateKeyData, a2bs_hex( "0AEE240802100122E7240801121408011210303132333435363738394142434445461" "AFF0D080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BFA0E" "5DFC3DE9A34BA5F08BE349553C319A9FB274905A8770ADC9CA4A2CBCD8E556A1587FA" "18BFD4D286C644A6904F19EAAFBDFADD3B371B306D0B289F459B491C814B5AD1F7476" "10E990A60248A7DA5152F1CCFC047EF42300131F9C4758F4D9F30579393B860AAD9AD" "2EE43D721D6DB9F5800EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0" "F540207725B9890FCCEC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E88" "82969B433EC66F17FFC29AC6FDBEA79230B0FAED5D94CF6B829A420BBE32703239417" "76EE60DD6BFD660BDDCA870203010001288001300112800250D1F8B1ECF849B60FF93" "E37C4DEEF09E6FFB10BCFC996A4A24B7AA96928835ED5A72E15846D0A14015733239B" "D8B6E6D5E5D229B08394CE1E0692C159C44337CA7CAF88476449B068D9D2FADED8EB1" "BC0F4B8F0FCAF293E8690E74032095341803408A0E8279E545945EE97838FDE7812F7" "171C3CC4F5ECF9418BBF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569" "E13E7719014030A6059044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B5557569" "0E95CE6085D0914F991C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E85" "476B18AEF8DE871571A75681A75F75028A5B58751C09A5296AAE99CEDCD9785E9E210" "3240D40A1AB6050AB002080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88" "D05228E023082010A0282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3" "048125049F74E30E1257FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBF" "B360941A4396A805833730DC6E534C62408B7C5076FC22568021C59ED34F98487196D" "A32078DAFCA37C7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27" "B9A691B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04" "A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65" "A36FD005CE77CD407E925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C49" "06405F47C31F60F0AF6C78AF53291B236E692B506A2AF92AF43E3A810203010001288" "00130011280033A08A60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2" "B36259834000FE35DCD814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3" "956C8267B8773BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1" "F7E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E86C6B908243987E552C869" "3878C9A1B7BEA3759783036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908A" "DE4B533FD9FAFA21D0FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E933" "6DCFAFDF572BB22A84A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7F" "E6F79A9501D1C379C96961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82" "808025451824F00C8B6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD" "1FD32288B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EE" "D4990BB5BE735DB027A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397" "C13A7B7087A1F6AEC7F6761A130A0C636F6D70616E795F6E616D6512034C47451A150" "A0A6D6F64656C5F6E616D6512074E6578757320341A200A1161726368697465637475" "72655F6E616D65120B61726D656162692D7637611A130A0B6465766963655F6E616D6" "512046D616B6F1A150A0C70726F647563745F6E616D6512056F6363616D1A440A0A62" "75696C645F696E666F1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A4" "25F4D52322F3731343239313A7573657264656275672F6465762D6B6579731A210A09" "6465766963655F696412144C474D433230313231303035303036333932373812250A2" "30A14080112103031323334353637383941424344454610021A093938373635343332" "31180120002A0C33393430373934373337000030151A8002734FBDED946EB74A1B618" "11C4C4A491214F6BEA125A80F014165B28AA97AD0AF60E4D129EB7F424AD659F24E5E" "ED4B702BEE328E38B72CA6F38CD0ECFD2E6D7B98147744C9B8A9610B3BDFE17675FF7" "D584C5BF68064B0FE513FC322C9148795E4C2F2443C3024F5C1F29E6FEFB6D77005DA" "B22CD2B63131908DE4D88795BB931CEA38452CC568BE25032245E372F07A1297F5174" "8C7EA02F2C88360AFE7ABBC71DCDD5366126258E5AFA27C2A20B339FA1E7AE925B494" "B361F6F7116F20BE8EE6E446146027F4FD4300F4A0B0A3361EE34925F338D0AACF20A" "E919B4BAE81C1D57A8D2B8FA38732A5769755FB685FDB3025574517CCCC74EE4FEAF6" "629D5179A52FF85CE7409528EFC316C180717C182A971C94E4AC4C7DF8F161CB8CC12" "2F604080212CC020A190A0939383736353433323112084B9F26DAB8B06E112002342E" "7769646576696E652E6E65742F7769646576696E652F6367692D62696E2F64726D2E6" "367691A6612102531DFD6CCEA511D00F8C0172F1189AA1A5057FF9D9DBD5A205B1DEB" "075E4A90467C1E074CDE6071BFF831AD590BD5D117614F33CE2C3CE1824FC0D54B36E" "CEAE58DF5C8F9347C2FEED17A3327E8F52B8ECA6313A1FA6A042EB9525DD328113C05" "F920011A7E0A103031323334353637383941424344454612106D23622142B58F6D1ED" "D33AF3ECD2C7E1A20884EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5" "EE172E7C9736200242340A2050BFE71BB1BA683E35E0B49BB33048E5103FBBB9C3E1C" "D6EBCDA7DD485DBAF431210D69D6F14C95CB6CFDB998E50D00F4DA020DBDFA68F051A" "20AE5D6895E70F86F42F5FE3C58A505A865D05AB94B1ABAA6CC59C3322F61C458D228" "002331F2BE95B5C796E0921CC27A7295501DA10044E5CA36C0E2866FF068EA3515A67" "86BD5D60D74D80C6BA8BE6AAD085AF967909A143171E9CDDE36EA528402867CD04FB6" "F97A150CDE55F9B819F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66" "C45EEBBE16AB04493E7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E132" "9A9921604E6F80CB148AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D486294860DFB" "4F4C42D57D9542B76179E179DD4AA23F9F7B2AE432B39E4CE8F156E84877DDA781AAA" "AFC797FF75AFE2019ADC3A2E419BF0253C705BD472800124108011801301E42396874" "74703A2F2F6B6972303366637067313797A96866AC4C059AD8F2E9C6B617C60C6ADCD" "B894C25F0C7D29252F52FD52A5708011231121D1A1B0A190A09393837363534333231" "12084B9F26DAB8B06E4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768" "A27112002280018022A0C31353532333030360000000030151A20C30375683C326108" "02123B0A190A0939383736353433323112084B9F26DAB8B06E11200228A68F051A201" "82F029E35047A3841FA176C74E5B387350E8D58DEA6878FF00112001A16200342120A" "106B63746C0000000000ECDCBE0000000020DBDFBEA6CABACA1C2C3A2E68747470733" "A2F2F746573742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C" "6963656E736540B42448A426520F0A054E616D6533120656616C7565335810621E080" "11231121D1A1B0A190A0939383736353433323112084B9F26DAB8B06E680572AA0F0A" "AE0B0AF103080212107CB49F987A635E1E0A52184694582D6E1887C6E1FE05228E023" "082010A0282010100DB13F5089C061E8EB62562692B3A06A774A99129BD63445FEC24" "448D07C30D7343553442A989AF000B7D962033C290D9A81DDCBCF3980512445EB7E6C" "F544FC1FB3FC758FB9E06B6C28562A841E4AE2D3368795C41A2D6043CA9830E0F3658" "3C8FDB839C2752C13E184034EE412BA8A90271295B094255A16319706F4D6C9CF1EBB" "1B39BA2A7B9B2780344DD5834BF71F4D5185508D2FDFB10419BD4F48E79DDFC78471C" "11B9E99DF98221D6FAB25AEE24574FB02D614974942A36527C62B73A6FB7CA9EF828E" "B598DA59060D654851103F857A041E66B2FFB99713D31A64605932833E8CCDA6CF0F8" "88AE6E78EDC9DA0D88A185B97FEB3EA74CF146BE7D9267020301000128E83D3A0C776" "9646576696E652E636F6D480152AA01080110001A8101044F554B9400E10B17185036" "B6A1628EFC61B22166DE2235717A44F953B7928F3415B9D113835B10106CB6C2187F3" "4188723D82ECF95CF5ECAB58923F1731860815999F08BF4BE4A44DB7B991B5F915F2A" "DCEE481E26096AAEC3AC761B624A92158AC91035041173392B1E495428F0D17406B10" "889B6B701FAF08D2284F95DBBCA2220595267DCA89A2E57E7D4CA3C62ED6D12742408" "A07C103DF860DC0520C3664EEB60E29D8399071280028CD44E12AA7C1A8EBF88C81A2" "A54EFD29F8BC6C377B0C11C3404F84D8B9EAD52A0E18E929A4923A4172C2AC1CDADD1" "6E41A7833AA0DE9D09F685DAC9ACC702CB9061632C1C82333A6FB6BC9C4B2540BE18C" "ED4AB0AF1C3EFE521308F3D4CF513C20500064FE935FDDF7BBAC0BA99AA7FA6601789" "8DEE6F6F5EF90C875D5D8DA39E769E8D1485253EEE93A97B35A8EAE8D3213D392B552" "FB4B4A37955EBE7362287502EB649D982F06D308178642C1F69B12383B050CF60CD29" "209329C148FB4F422ED5ED139A25A89E13D4AB2E8DB940299D1414AF30DDF0D06AF55" "C1978F6E71E4548F20FFAE953A99D492F3D2847783338D74F66D2DFEBB50896ACBC47" "95A81AB4050AAE020801121065802C9B625E5A319C33DC1CB7C3C6D418E3A5BDD0052" "28E023082010A0282010100B80502043C2A8A0FD8D25C613E1E3E3B5E349F332F0451" "6A7510D38021A5629B9AA027AEAD3C759B7AFE70BED65F3DF6860FF5EB60B983A3FFA" "33FDE06F3B73014DFC845AB371C6600562E9D904F842B8BA4A5D9200FFA3ED45D7055" "20A5C372A889F9E314386234C6897AE655851FCD9ADB4EF9126C78386EA93BCB25BA3" "EC475C55C608E771C763AB02506F9B07252D6ABF7EA64B1EBDE7B95C6407690533BD6" "890B9274C16066F74FC401EA355F0A02106814D49BF0C89E6E1F8DB2A47841CD0DAD7" "93296A107C36223404F2BF1FCA16FD0A4B982634DB62407F8F14ACAE3B05A038BD3E4" "BBBAE4391BBFA7A47FB9D01DE857EA88E5E36EE36E245859FC0F020301000128E83D1" "280037E06581A019184AB572AFDCADDD03F161CE68200F8E6F8AD161947360BC8D49C" "0D68009B1C4644F9B3F3FB6DDFD92EF92DE62D41D459D29D81BFAEF3970A3A39D25B2" "662ECB03B2DA7B68302FAA6DD98D95A143CC8C1CB6ADDA76D2EE9C3723FAF95A29CDC" "3E968B6821A91C051CA280A86669710A1AD7A44BF9218027460DF694E2E9270396DF2" "21963F21EE6AA220A5EE4A4D0FEB3D53EB5732F8F91E9A96B3B8BE284C51339EA284D" "4D0EDD55B6AD56F7416420E05E059F9734A96BE25AA44560DBA8C38755A42A82BD7F8" "8EDD19DF346A667B33B8114C76A8838C423D824A50B23251A088136D6E8F475299D2A" "FD46CEA51B5CBDF789A572125CD24FBB813B387A10CD2A30E3447634AB3408F96B9CF" "3D98896D405F3F540D9C57962760FCD177CDD101EB8A4148B9C29CED5EAD645A95B69" "8F1CDC6E1DB6678B85074186080D68D13CD37E07B16DE370CD9AFB9B25564A73A30E2" "AF8085EA37D310C474F0E67AC00CA992A5296FAEDAD7AA06ECD790F1E3D426558FA98" "383E3CD2ED483012F403B36550E6BEACCB34F6C3B2ABF86634EE5383829C844F9B0C1" "4DCF9A22FE3543CCBA8FD61E21CEE503E7A40B93B07A4186A362D9E6F88DD48D45166" "35C6D0C253C03F12EFA6095618D647F5212C518C4A6AA7172BC691530703FEDDFDB25" "ECF885A53FF2B4B98773979D61AE659E340489811512A5C2FD445A4B0AE88A3A7F29A" "CE5B01ECF580D0993227BC408B602B0BC099920C17044FE66242372C2B2E8CA5C1EEC" "0844BC19198ADADE47FB449DC9B30784952B3A8131B912CE928070D665C0557EBE748" "4FDABFBCA0F2C2BFD4FBDDB6681C4689FD276C231B72B15AC4E5C3C088449DE4785F1" "D4835AC44E39B119991EFF6E72C7D3B8C75CE588DB0B3AD69EB79C19B22CB518EF964" "C9D985AFD3677F0D13015AD7BEA84CD01E335E68AF153B989FE8BEEC60A94753C6385" "35FA3F215F750F6954AC395F8702941409E7276910CE11819649641318B5BD1B78DEC" "EADB2B562312CC286DB0BCC14A60C84CB21AB6E75E59DAFBE701D6405DD3F47D2F8A9" "5422ED8EB5ECE330C9886406B3B69180B697521F3865B4A05DF2BB51D16CAFEF05866" "E5D55C360C759F5B10E0D354D63D5A14E5BA19DBF9394E18E474E79063B4E877C2FE6" "BCA732ED39B091B6D7A21DD9D6D6750C1CA2ABC5DEC2A81B5359771849E7B4560EB6D" "329E59455A70F57F035DFB50EC4354D7E068ADFAFAD4081ACA67FD1800122056D505D" "E2B3989161D0CF88CFFDA6D2E79DA49C87CF1917A3A20109D2F3676EE")}, }; // kLicenseTestData constexpr size_t kNumberOfLicenses = ArraySize(kLicenseTestData); // Sample license data and related data for storage and use for offline // playback. The license data and URLs in this test are not real. // The data is used to test license-related functions. const LicenseInfo kLicenseUpdateTestData[] = { // active license {"key_set_id_: ksid2A048BC7FAEC885A", kLicenseStateActive, a2bs_hex("0801121030313233343536373839414243444546"), a2bs_hex("080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591B" "C4D07A7D5076189EDFB68F05228E023082010A0282010100CC1715C81AD3" "F6F279C686F826E6D7C8961EB13318367D06B4061BBC57E3C616A226A10F" "042CAD54D44C6484C725CD721A2A97C088E60AFF0E9C8E03477A1B56B4C5" "55C27CEAF55024375D8D3FB352DA4AAA2E911C876CB1B36162922E9130CC" "C5FB72F8DD41D05DE6889C4814A7344BA8C605DE399CA3CBBF1E7DE3411E" "DFC60F9D3802C0BEE2B98FB71A5AB9C1A3D53FB55599183B84FDDC98AC30" "96B2EF99C62B545C5DCA3371F4D27DEF2052A23F13DE42DE46B462CED2AB" "ABB96B610A47E0620AA10D862FEB66BB4F00B13DFE61703AE872F0B4850C" "39138FC5DE4538E27BEAC8A48CC9526401BE3B42C7C6C5D9624662081D7A" "5A1C581EB09619DD9DD3020301000128800130011280026AB9AC42F1C17C" "1ECFB710BF2C35383F41CF7EFAB0DFDCC69090C20DE141CB43055FD707C6" "11CDAEE700076A1EBA32432D5C2B62A73B8B1672AD2C4303598C02D34823" "A6BE387046937F55BB65F5B3571FDC6A1F0D947031003BA651F8E48BF33D" "66B7A32A72CAC75EF66EF280B2D4F14FBCA70ECC508091FE83AD886A680F" "55AB62F306435BC0043825F6A401BB9C341230127D3298B67F82767050C9" "5769964B0B5C27A36FA76ED161ABE4B6C18556C807706509A5146ADD958A" "F79B49EDE48CBCD6320C4DEC0BF564C5DD7E7EBA37A4CD1D27F8D80E1B69" "31C92AC8E5C3BEC0ADAE621A3B78952485EBFC81A194BA75BBD2C821C28A" "EB5D21CBE0A270E55E1AB6050AB002080112102CE5CCF42200D6B5BCCF33" "D7CC2D9C7018EAD1B88D05228E023082010A0282010100BE1B661EEC4700" "DF4B0C83292D02AE029B8A224DD3048125049F74E30E1257FC2BE8D9CFAF" "0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A805833730D" "C6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C" "7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A69" "1B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7A" "EB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D9249755F129BB0DBE" "CA3B894975A65A36FD005CE77CD407E925D3172E33122A11D327968A08F8" "E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF53291B236E692B" "506A2AF92AF43E3A81020301000128800130011280033A08A60418E5C81B" "8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DCD8" "14426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B87" "73BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7" "E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E86C6B908243987E" "552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7F8642A9B3B244D" "AA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5DDF24C60F4FAC3" "0820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5DEFDF2EB87B61DE" "26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C96961316B" "5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8" "B6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288" "B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304E" "ED4990BB5BE735DB027A6DE35329D321EC051B956C55A5B11674017517FC" "C3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D70616E795F6E61" "6D6512034C47451A150A0A6D6F64656C5F6E616D6512074E657875732034" "1A200A116172636869746563747572655F6E616D65120B61726D65616269" "2D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150A0C70" "726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E" "666F1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D" "52322F3731343239313A7573657264656275672F6465762D6B6579731A21" "0A096465766963655F696412144C474D4332303132313030353030363339" "32373812250A230A14080112103031323334353637383941424344454610" "021A09393837363534333231180120002A0C333037383036303230340000" "30151A8002B5CA9C6B097EF2CBE2F8136C761130F3456ED706127260151B" "4FF044DE233C1828B8618A312C031A2F844BEF0917F9B8C6B8993A5D33E2" "4B57B672A6C79D93EC98C46C5263EB8195FF7A5EBEBA08A6F1080C19340A" "068E575568AE5EBADDD638FB435AC3EEC901E5F250BC974C498D6378C8BC" "1F4BACCED5725B8B77160444923DA3B729DCB681186565B49EEFFE27CF16" "31F09EC31E543AAFE9F5996FB0BEAA5F80305D67ECF173A8BD4A3B2CC75C" "EC3AA5881FF433E80838E1E1FA23CE7F22346DDDF7FEC3DB0CE2C3F845CF" "9471088A022C8D0A63860764AE558BD0B5F66D78881ADBF2D398F9BA349E" "FB2532C61E243DD45BB11C99422D13A82B7AAE9671"), a2bs_hex("080212CC020A190A09393837363534333231120892BE96420F0D5BF32002" "2800124108011801301E4239687474703A2F2F6B69723033666370673137" "342E7769646576696E652E6E65742F7769646576696E652F6367692D6269" "6E2F64726D2E6367691A661210BB2E2D2B9C39697794897E08262749B41A" "50C0DED62431B1701F59E076E07EB0D2D43AEC6C589B35790739EB0B0ED4" "7236D0ECCE9A5408BE5F46F412334A5F4A4E3E493F202A263E185F06AE37" "BA4351647BB9E6C997189FE1A03DCBF3FC90F46E5120011A7E0A10303132" "333435363738394142434445461210319D7FB66154DFEC2AEDB164F29AAC" "301A207448440734605CB29424FD1DA435A405DEE837757EA6A68C633A65" "228317843D200242340A207F287706380C8085A4E5F85843D1C3B379F9CE" "19ED5A2DAAF476B8AFE10488BF12100C8CDB1DA4C9FEBE5BBB530FE0D3DA" "8720F4DFB68F051A20F4BCCEEEA658C5DD18D7B841E6D8991E616B57B592" "C44ED67050939B136815272280025CD92AB4672778CB865D528A2EAAAD06" "435AE9186F1C159AFA1689473C4D8C8A5B8C64400CBBD0A02659EA0271A1" "F40052030CA285B9C7211791BDD72193D5E01CEE43B0482DEAF034C8E9BD" "88C7331BFA5CD71C2A3062EBD07CE1C80CCF3C5D7EC2D921D1BC5414D797" "0CB098889D3FB5BF669EE5283E009CDCC880E79C77A21B12C7C0B8062D66" "CBDEC2DCFD23885144C776B98C8A7A176C4EA183085EF02D2060904ADA3C" "B161F4D198A0279DA19D7001EB2D20C70ABAA04B3760CB165006F6CBA4BE" "0A2628C0C8398C122FF0DCF9292590E3C37BC7DB20F3B0921268F41FE76B" "D3EE764EBA13A22FDABC170860503FB93CC4A08D61102519D56A25EB9E30"), a2bs_hex("08011231121D1A1B0A190A09393837363534333231120892BE96420F0D5B" "F32002280018022A0C31393132353333373731000030151A20F4FDBECE54" "7252D12BB9D488DAD50C76577A2FBCCC73F36D3C6B35096B8A3DC6"), a2bs_hex("0802123B0A190A09393837363534333231120892BE96420F0D5BF3200228" "0112001A16200342120A106B63746C0000000071FEF30B0000000020F4DF" "B68F051A2000351030900858FCFD6977B67803ADFD1280AA661E6B0BD30B" "08B2C467355129"), "https://test.google.com/license/GetCencLicense", 0x0123456789abcdef, 0x123456789abfedc, 0x0, "Name1 Value1 Name2 Value2 Name3 Value3", a2bs_hex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" "22232425262728292a2b2c2d2e2f"), 15, "", CryptoWrappedKey::kUninitialized, "", a2bs_hex( "0AEE150802100122E7150801121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" "7A7D5076189EDFB68F05228E023082010A0282010100CC1715C81AD3F6F279C686F82" "6E6D7C8961EB13318367D06B4061BBC57E3C616A226A10F042CAD54D44C6484C725CD" "721A2A97C088E60AFF0E9C8E03477A1B56B4C555C27CEAF55024375D8D3FB352DA4AA" "A2E911C876CB1B36162922E9130CCC5FB72F8DD41D05DE6889C4814A7344BA8C605DE" "399CA3CBBF1E7DE3411EDFC60F9D3802C0BEE2B98FB71A5AB9C1A3D53FB55599183B8" "4FDDC98AC3096B2EF99C62B545C5DCA3371F4D27DEF2052A23F13DE42DE46B462CED2" "ABABB96B610A47E0620AA10D862FEB66BB4F00B13DFE61703AE872F0B4850C39138FC" "5DE4538E27BEAC8A48CC9526401BE3B42C7C6C5D9624662081D7A5A1C581EB09619DD" "9DD3020301000128800130011280026AB9AC42F1C17C1ECFB710BF2C35383F41CF7EF" "AB0DFDCC69090C20DE141CB43055FD707C611CDAEE700076A1EBA32432D5C2B62A73B" "8B1672AD2C4303598C02D34823A6BE387046937F55BB65F5B3571FDC6A1F0D9470310" "03BA651F8E48BF33D66B7A32A72CAC75EF66EF280B2D4F14FBCA70ECC508091FE83AD" "886A680F55AB62F306435BC0043825F6A401BB9C341230127D3298B67F82767050C95" "769964B0B5C27A36FA76ED161ABE4B6C18556C807706509A5146ADD958AF79B49EDE4" "8CBCD6320C4DEC0BF564C5DD7E7EBA37A4CD1D27F8D80E1B6931C92AC8E5C3BEC0ADA" "E621A3B78952485EBFC81A194BA75BBD2C821C28AEB5D21CBE0A270E55E1AB6050AB0" "02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0" "282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12" "57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583" "3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB" "8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C" "5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2" "AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E" "925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF" "6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A" "60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC" "D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF" "3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA" "E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597" "83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0" "FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84" "A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9" "6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B" "6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D" "80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027" "A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7" "F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6" "16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B" "61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150" "A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F" "1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343" "239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964" "12144C474D433230313231303035303036333932373812250A230A140801121030313" "23334353637383941424344454610021A09393837363534333231180120002A0C3330" "3738303630323034000030151A8002B5CA9C6B097EF2CBE2F8136C761130F3456ED70" "6127260151B4FF044DE233C1828B8618A312C031A2F844BEF0917F9B8C6B8993A5D33" "E24B57B672A6C79D93EC98C46C5263EB8195FF7A5EBEBA08A6F1080C19340A068E575" "568AE5EBADDD638FB435AC3EEC901E5F250BC974C498D6378C8BC1F4BACCED5725B8B" "77160444923DA3B729DCB681186565B49EEFFE27CF1631F09EC31E543AAFE9F5996FB" "0BEAA5F80305D67ECF173A8BD4A3B2CC75CEC3AA5881FF433E80838E1E1FA23CE7F22" "346DDDF7FEC3DB0CE2C3F845CF9471088A022C8D0A63860764AE558BD0B5F66D78881" "ADBF2D398F9BA349EFB2532C61E243DD45BB11C99422D13A82B7AAE967122F6040802" "12CC020A190A09393837363534333231120892BE96420F0D5BF320022800124108011" "801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E" "6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A661210BB2E2" "D2B9C39697794897E08262749B41A50C0DED62431B1701F59E076E07EB0D2D43AEC6C" "589B35790739EB0B0ED47236D0ECCE9A5408BE5F46F412334A5F4A4E3E493F202A263" "E185F06AE37BA4351647BB9E6C997189FE1A03DCBF3FC90F46E5120011A7E0A103031" "32333435363738394142434445461210319D7FB66154DFEC2AEDB164F29AAC301A207" "448440734605CB29424FD1DA435A405DEE837757EA6A68C633A65228317843D200242" "340A207F287706380C8085A4E5F85843D1C3B379F9CE19ED5A2DAAF476B8AFE10488B" "F12100C8CDB1DA4C9FEBE5BBB530FE0D3DA8720F4DFB68F051A20F4BCCEEEA658C5DD" "18D7B841E6D8991E616B57B592C44ED67050939B136815272280025CD92AB4672778C" "B865D528A2EAAAD06435AE9186F1C159AFA1689473C4D8C8A5B8C64400CBBD0A02659" "EA0271A1F40052030CA285B9C7211791BDD72193D5E01CEE43B0482DEAF034C8E9BD8" "8C7331BFA5CD71C2A3062EBD07CE1C80CCF3C5D7EC2D921D1BC5414D7970CB098889D" "3FB5BF669EE5283E009CDCC880E79C77A21B12C7C0B8062D66CBDEC2DCFD23885144C" "776B98C8A7A176C4EA183085EF02D2060904ADA3CB161F4D198A0279DA19D7001EB2D" "20C70ABAA04B3760CB165006F6CBA4BE0A2628C0C8398C122FF0DCF9292590E3C37BC" "7DB20F3B0921268F41FE76BD3EE764EBA13A22FDABC170860503FB93CC4A08D611025" "19D56A25EB9E302A5708011231121D1A1B0A190A09393837363534333231120892BE9" "6420F0D5BF32002280018022A0C31393132353333373731000030151A20F4FDBECE54" "7252D12BB9D488DAD50C76577A2FBCCC73F36D3C6B35096B8A3DC632610802123B0A1" "90A09393837363534333231120892BE96420F0D5BF32002280112001A16200342120A" "106B63746C0000000071FEF30B0000000020F4DFB68F051A2000351030900858FCFD6" "977B67803ADFD1280AA661E6B0BD30B08B2C4673551293A2E68747470733A2F2F7465" "73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7" "36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD1910158006230000102030405060708" "090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2" "B2C2D2E2F680F122009B8588A8E9926339289BA373DB8479A71F7AA1164083D90613F" "766D60B07CBC")}, // license being released. all fields are identical except for license // state and hashed file data {"", kLicenseStateReleasing, "", "", "", "", "", "", 0, 0, 0, "", "", 15, "", CryptoWrappedKey::kUninitialized, "", a2bs_hex( "0AEE150802100122E7150802121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" "7A7D5076189EDFB68F05228E023082010A0282010100CC1715C81AD3F6F279C686F82" "6E6D7C8961EB13318367D06B4061BBC57E3C616A226A10F042CAD54D44C6484C725CD" "721A2A97C088E60AFF0E9C8E03477A1B56B4C555C27CEAF55024375D8D3FB352DA4AA" "A2E911C876CB1B36162922E9130CCC5FB72F8DD41D05DE6889C4814A7344BA8C605DE" "399CA3CBBF1E7DE3411EDFC60F9D3802C0BEE2B98FB71A5AB9C1A3D53FB55599183B8" "4FDDC98AC3096B2EF99C62B545C5DCA3371F4D27DEF2052A23F13DE42DE46B462CED2" "ABABB96B610A47E0620AA10D862FEB66BB4F00B13DFE61703AE872F0B4850C39138FC" "5DE4538E27BEAC8A48CC9526401BE3B42C7C6C5D9624662081D7A5A1C581EB09619DD" "9DD3020301000128800130011280026AB9AC42F1C17C1ECFB710BF2C35383F41CF7EF" "AB0DFDCC69090C20DE141CB43055FD707C611CDAEE700076A1EBA32432D5C2B62A73B" "8B1672AD2C4303598C02D34823A6BE387046937F55BB65F5B3571FDC6A1F0D9470310" "03BA651F8E48BF33D66B7A32A72CAC75EF66EF280B2D4F14FBCA70ECC508091FE83AD" "886A680F55AB62F306435BC0043825F6A401BB9C341230127D3298B67F82767050C95" "769964B0B5C27A36FA76ED161ABE4B6C18556C807706509A5146ADD958AF79B49EDE4" "8CBCD6320C4DEC0BF564C5DD7E7EBA37A4CD1D27F8D80E1B6931C92AC8E5C3BEC0ADA" "E621A3B78952485EBFC81A194BA75BBD2C821C28AEB5D21CBE0A270E55E1AB6050AB0" "02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0" "282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12" "57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583" "3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB" "8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C" "5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2" "AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E" "925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF" "6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A" "60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC" "D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF" "3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA" "E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597" "83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0" "FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84" "A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9" "6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B" "6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D" "80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027" "A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7" "F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6" "16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B" "61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150" "A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F" "1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343" "239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964" "12144C474D433230313231303035303036333932373812250A230A140801121030313" "23334353637383941424344454610021A09393837363534333231180120002A0C3330" "3738303630323034000030151A8002B5CA9C6B097EF2CBE2F8136C761130F3456ED70" "6127260151B4FF044DE233C1828B8618A312C031A2F844BEF0917F9B8C6B8993A5D33" "E24B57B672A6C79D93EC98C46C5263EB8195FF7A5EBEBA08A6F1080C19340A068E575" "568AE5EBADDD638FB435AC3EEC901E5F250BC974C498D6378C8BC1F4BACCED5725B8B" "77160444923DA3B729DCB681186565B49EEFFE27CF1631F09EC31E543AAFE9F5996FB" "0BEAA5F80305D67ECF173A8BD4A3B2CC75CEC3AA5881FF433E80838E1E1FA23CE7F22" "346DDDF7FEC3DB0CE2C3F845CF9471088A022C8D0A63860764AE558BD0B5F66D78881" "ADBF2D398F9BA349EFB2532C61E243DD45BB11C99422D13A82B7AAE967122F6040802" "12CC020A190A09393837363534333231120892BE96420F0D5BF320022800124108011" "801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E" "6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A661210BB2E2" "D2B9C39697794897E08262749B41A50C0DED62431B1701F59E076E07EB0D2D43AEC6C" "589B35790739EB0B0ED47236D0ECCE9A5408BE5F46F412334A5F4A4E3E493F202A263" "E185F06AE37BA4351647BB9E6C997189FE1A03DCBF3FC90F46E5120011A7E0A103031" "32333435363738394142434445461210319D7FB66154DFEC2AEDB164F29AAC301A207" "448440734605CB29424FD1DA435A405DEE837757EA6A68C633A65228317843D200242" "340A207F287706380C8085A4E5F85843D1C3B379F9CE19ED5A2DAAF476B8AFE10488B" "F12100C8CDB1DA4C9FEBE5BBB530FE0D3DA8720F4DFB68F051A20F4BCCEEEA658C5DD" "18D7B841E6D8991E616B57B592C44ED67050939B136815272280025CD92AB4672778C" "B865D528A2EAAAD06435AE9186F1C159AFA1689473C4D8C8A5B8C64400CBBD0A02659" "EA0271A1F40052030CA285B9C7211791BDD72193D5E01CEE43B0482DEAF034C8E9BD8" "8C7331BFA5CD71C2A3062EBD07CE1C80CCF3C5D7EC2D921D1BC5414D7970CB098889D" "3FB5BF669EE5283E009CDCC880E79C77A21B12C7C0B8062D66CBDEC2DCFD23885144C" "776B98C8A7A176C4EA183085EF02D2060904ADA3CB161F4D198A0279DA19D7001EB2D" "20C70ABAA04B3760CB165006F6CBA4BE0A2628C0C8398C122FF0DCF9292590E3C37BC" "7DB20F3B0921268F41FE76BD3EE764EBA13A22FDABC170860503FB93CC4A08D611025" "19D56A25EB9E302A5708011231121D1A1B0A190A09393837363534333231120892BE9" "6420F0D5BF32002280018022A0C31393132353333373731000030151A20F4FDBECE54" "7252D12BB9D488DAD50C76577A2FBCCC73F36D3C6B35096B8A3DC632610802123B0A1" "90A09393837363534333231120892BE96420F0D5BF32002280112001A16200342120A" "106B63746C0000000071FEF30B0000000020F4DFB68F051A2000351030900858FCFD6" "977B67803ADFD1280AA661E6B0BD30B08B2C4673551293A2E68747470733A2F2F7465" "73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7" "36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD1910158006230000102030405060708" "090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2" "B2C2D2E2F680F12202F5B77A3168AC2A81832231A435D0587F6D1DF3B905A7058C5E8" "565C81B96CA6")}}; // kLicenseUpdateTestData // Application parameters were added to the License message. This data // is used to verify that a License saved without application parameters can // be read out correctly by an updated version of the CDM. const LicenseInfo kLicenseAppParametersBackwardsCompatibilityTestData = { "ksid54C57C966E23CEF5", kLicenseStateActive, a2bs_hex("0801121030313233343536373839414243444546"), a2bs_hex("080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591B" "C4D07A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD" "55FB685FDB3025574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EF" "FA0E5DFC3DE9A34BA5F08BE349553C319A9FB274905A8770ADC9CA4A2CBC" "D8E556A1587FA18BFD4D286C644A6904F19EAAFBDFADD3B371B306D0B289" "F459B491C814B5AD1F747610E990A60248A7DA5152F1CCFC047EF4230013" "1F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F5800EF188386B9" "4825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCCEC" "83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC" "66F17FFC29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776" "EE60DD6BFD660BDDCA870203010001288001300112800250D1F8B1ECF849" "B60FF93E37C4DEEF09E6FFB10BCFC996A4A24B7AA96928835ED5A72E1584" "6D0A14015733239BD8B6E6D5E5D229B08394CE1E0692C159C44337CA7CAF" "88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8690E7403209534180" "3408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418BBF1D336C" "E58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A60" "59044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE60" "85D0914F991C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E8" "5476B18AEF8DE871571A75681A75F75028A5B58751C09A5296AAE99CEDCD" "9785E9E2103240D40A1AB6050AB002080112102CE5CCF42200D6B5BCCF33" "D7CC2D9C7018EAD1B88D05228E023082010A0282010100BE1B661EEC4700" "DF4B0C83292D02AE029B8A224DD3048125049F74E30E1257FC2BE8D9CFAF" "0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A805833730D" "C6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C" "7CFB8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A69" "1B1534F60D78C5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7A" "EB04A9DCC015D9BC37DEF2AB9EAA9AAFD838869081D9249755F129BB0DBE" "CA3B894975A65A36FD005CE77CD407E925D3172E33122A11D327968A08F8" "E771FAEB2540EB52D17C4906405F47C31F60F0AF6C78AF53291B236E692B" "506A2AF92AF43E3A81020301000128800130011280033A08A60418E5C81B" "8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DCD8" "14426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B87" "73BABCF3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7" "E1F4DB58AB1164DAE9CF75C3392284A44B8CDB85D837E86C6B908243987E" "552C8693878C9A1B7BEA3759783036F1595C406D6CBBA7F8642A9B3B244D" "AA1F00531D0B908ADE4B533FD9FAFA21D0FB0C033D2AD5DDF24C60F4FAC3" "0820758877F2E1A78EB44E9336DCFAFDF572BB22A84A5DEFDF2EB87B61DE" "26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C96961316B" "5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8" "B6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288" "B4A5D18D2D80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304E" "ED4990BB5BE735DB027A6DE35329D321EC051B956C55A5B11674017517FC" "C3C7FF7397C13A7B7087A1F6AEC7F6761A130A0C636F6D70616E795F6E61" "6D6512034C47451A150A0A6D6F64656C5F6E616D6512074E657875732034" "1A200A116172636869746563747572655F6E616D65120B61726D65616269" "2D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150A0C70" "726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E" "666F1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D" "52322F3731343239313A7573657264656275672F6465762D6B6579731A21" "0A096465766963655F696412144C474D4332303132313030353030363339" "32373812250A230A14080112103031323334353637383941424344454610" "021A09393837363534333231180120002A0C333934303739343733370000" "30151A8002734FBDED946EB74A1B61811C4C4A491214F6BEA125A80F0141" "65B28AA97AD0AF60E4D129EB7F424AD659F24E5EED4B702BEE328E38B72C" "A6F38CD0ECFD2E6D7B98147744C9B8A9610B3BDFE17675FF7D584C5BF680" "64B0FE513FC322C9148795E4C2F2443C3024F5C1F29E6FEFB6D77005DAB2" "2CD2B63131908DE4D88795BB931CEA38452CC568BE25032245E372F07A12" "97F51748C7EA02F2C88360AFE7ABBC71DCDD5366126258E5AFA27C2A20B3" "39FA1E7AE925B494B361F6F7116F20BE8EE6E446146027F4FD4300F4A0B0" "A3361EE34925F338D0AACF20AE919B4BAE81C1D57A8D2B8FA38732A57697" "C316C180717C182A971C94E4AC4C7DF8F161CB8CC1"), a2bs_hex("080212CC020A190A0939383736353433323112084B9F26DAB8B06E112002" "2800124108011801301E4239687474703A2F2F6B69723033666370673137" "342E7769646576696E652E6E65742F7769646576696E652F6367692D6269" "6E2F64726D2E6367691A6612102531DFD6CCEA511D00F8C0172F1189AA1A" "5057FF9D9DBD5A205B1DEB075E4A90467C1E074CDE6071BFF831AD590BD5" "D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2FEED17A3327" "E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A10303132" "3334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD2C" "7E1A20884EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5EE" "172E7C9736200242340A2050BFE71BB1BA683E35E0B49BB33048E5103FBB" "B9C3E1CD6EBCDA7DD485DBAF431210D69D6F14C95CB6CFDB998E50D00F4D" "A020DBDFA68F051A20AE5D6895E70F86F42F5FE3C58A505A865D05AB94B1" "ABAA6CC59C3322F61C458D228002331F2BE95B5C796E0921CC27A7295501" "DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA8BE6AAD0" "85AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B81" "9F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEBBE" "16AB04493E7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E13" "29A9921604E6F80CB148AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D48" "6294860DFB4F4C42D57D9542B76179E179DD4AA23F9F7B2AE432B39E4CE8" "F156E84877DDA781AAAAFC797FF75AFE2019ADC3A2E419BF0253C705BD47" "97A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0C7D29252F52FD5"), a2bs_hex("08011231121D1A1B0A190A0939383736353433323112084B9F26DAB8B06E" "112002280018022A0C31353532333030360000000030151A20C30375683C" "4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A27"), a2bs_hex("0802123B0A190A0939383736353433323112084B9F26DAB8B06E11200228" "0112001A16200342120A106B63746C0000000000ECDCBE0000000020DBDF" "A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0" "BEA6CABACA1C2C"), "https://test.google.com/license/GetCencLicense", 0x0, 0x0, 0x0, "", "", 0, "", CryptoWrappedKey::kUninitialized, "", a2bs_hex( "0AA8150802100122A1150801121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" "7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302" "5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B" "E349553C319A9FB274905A8770ADC9CA4A2CBCD8E556A1587FA18BFD4D286C644A690" "4F19EAAFBDFADD3B371B306D0B289F459B491C814B5AD1F747610E990A60248A7DA51" "52F1CCFC047EF42300131F9C4758F4D9F30579393B860AAD9AD2EE43D721D6DB9F580" "0EF188386B94825AE05A883AC976D6970DF43EA6C83B86CE6D0F540207725B9890FCC" "EC83A49027872DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433EC66F17FF" "C29AC6FDBEA79230B0FAED5D94CF6B829A420BBE3270323941776EE60DD6BFD660BDD" "CA870203010001288001300112800250D1F8B1ECF849B60FF93E37C4DEEF09E6FFB10" "BCFC996A4A24B7AA96928835ED5A72E15846D0A14015733239BD8B6E6D5E5D229B083" "94CE1E0692C159C44337CA7CAF88476449B068D9D2FADED8EB1BC0F4B8F0FCAF293E8" "690E74032095341803408A0E8279E545945EE97838FDE7812F7171C3CC4F5ECF9418B" "BF1D336CE58F4CBB1B44D4ADE6BF3364BAE7EC093281846E569E13E7719014030A605" "9044FE7BBFF3E8F5723AEDD54DC6E0D041B309D7700B55575690E95CE6085D0914F99" "1C5F45E98CBB9C45BA33F47FD0862EBCC7EEBA8E60643C86E85476B18AEF8DE871571" "A75681A75F75028A5B58751C09A5296AAE99CEDCD9785E9E2103240D40A1AB6050AB0" "02080112102CE5CCF42200D6B5BCCF33D7CC2D9C7018EAD1B88D05228E023082010A0" "282010100BE1B661EEC4700DF4B0C83292D02AE029B8A224DD3048125049F74E30E12" "57FC2BE8D9CFAF0BFFCACAF7305351771C78FA451F13AF5EEBFB360941A4396A80583" "3730DC6E534C62408B7C5076FC22568021C59ED34F98487196DA32078DAFCA37C7CFB" "8E79612FA384963DF2167D5E87305D7BC92D621C10160672C27B9A691B1534F60D78C" "5893E40C5FF8A3F9DF8898612E9A5CCB56F4A0CC2A61A7AEB04A9DCC015D9BC37DEF2" "AB9EAA9AAFD838869081D9249755F129BB0DBECA3B894975A65A36FD005CE77CD407E" "925D3172E33122A11D327968A08F8E771FAEB2540EB52D17C4906405F47C31F60F0AF" "6C78AF53291B236E692B506A2AF92AF43E3A81020301000128800130011280033A08A" "60418E5C81B8D71A5C0A28C26999FF4FA992E14107CA8A9E6A2B36259834000FE35DC" "D814426F9C5D332418ED94C9C0C992217B1B6DC01C99085A3C3956C8267B8773BABCF" "3F2C841C67D830F9DBC780DD68BF4E2FE424C6A54123BE4B2A1F7E1F4DB58AB1164DA" "E9CF75C3392284A44B8CDB85D837E86C6B908243987E552C8693878C9A1B7BEA37597" "83036F1595C406D6CBBA7F8642A9B3B244DAA1F00531D0B908ADE4B533FD9FAFA21D0" "FB0C033D2AD5DDF24C60F4FAC30820758877F2E1A78EB44E9336DCFAFDF572BB22A84" "A5DEFDF2EB87B61DE26EE9C4CEAA646A2AFDB2BB953845E6D7FE6F79A9501D1C379C9" "6961316B5D2A66F38C222091AF74141B6CAF93507485A5D8F82808025451824F00C8B" "6A0CD5803F6564584138C8B18BC679B442D837307B5CC90B1FD1FD32288B4A5D18D2D" "80E5E6A7A9EFD255B8B363038BCC67AF534EAEE4A5903E304EED4990BB5BE735DB027" "A6DE35329D321EC051B956C55A5B11674017517FCC3C7FF7397C13A7B7087A1F6AEC7" "F6761A130A0C636F6D70616E795F6E616D6512034C47451A150A0A6D6F64656C5F6E6" "16D6512074E6578757320341A200A116172636869746563747572655F6E616D65120B" "61726D656162692D7637611A130A0B6465766963655F6E616D6512046D616B6F1A150" "A0C70726F647563745F6E616D6512056F6363616D1A440A0A6275696C645F696E666F" "1236676F6F676C652F6F6363616D2F6D616B6F3A342E332F4A425F4D52322F3731343" "239313A7573657264656275672F6465762D6B6579731A210A096465766963655F6964" "12144C474D433230313231303035303036333932373812250A230A140801121030313" "23334353637383941424344454610021A09393837363534333231180120002A0C3339" "3430373934373337000030151A8002734FBDED946EB74A1B61811C4C4A491214F6BEA" "125A80F014165B28AA97AD0AF60E4D129EB7F424AD659F24E5EED4B702BEE328E38B7" "2CA6F38CD0ECFD2E6D7B98147744C9B8A9610B3BDFE17675FF7D584C5BF68064B0FE5" "13FC322C9148795E4C2F2443C3024F5C1F29E6FEFB6D77005DAB22CD2B63131908DE4" "D88795BB931CEA38452CC568BE25032245E372F07A1297F51748C7EA02F2C88360AFE" "7ABBC71DCDD5366126258E5AFA27C2A20B339FA1E7AE925B494B361F6F7116F20BE8E" "E6E446146027F4FD4300F4A0B0A3361EE34925F338D0AACF20AE919B4BAE81C1D57A8" "D2B8FA38732A57697C316C180717C182A971C94E4AC4C7DF8F161CB8CC122F6040802" "12CC020A190A0939383736353433323112084B9F26DAB8B06E1120022800124108011" "801301E4239687474703A2F2F6B69723033666370673137342E7769646576696E652E" "6E65742F7769646576696E652F6367692D62696E2F64726D2E6367691A6612102531D" "FD6CCEA511D00F8C0172F1189AA1A5057FF9D9DBD5A205B1DEB075E4A90467C1E074C" "DE6071BFF831AD590BD5D117614F33CE2C3CE1824FC0D54B36ECEAE58DF5C8F9347C2" "FEED17A3327E8F52B8ECA6313A1FA6A042EB9525DD328113C05F920011A7E0A103031" "323334353637383941424344454612106D23622142B58F6D1EDD33AF3ECD2C7E1A208" "84EE13BEA9DECDDBF68B532131C82B11CEC4D23C7FA9F3EF4C5EE172E7C9736200242" "340A2050BFE71BB1BA683E35E0B49BB33048E5103FBBB9C3E1CD6EBCDA7DD485DBAF4" "31210D69D6F14C95CB6CFDB998E50D00F4DA020DBDFA68F051A20AE5D6895E70F86F4" "2F5FE3C58A505A865D05AB94B1ABAA6CC59C3322F61C458D228002331F2BE95B5C796" "E0921CC27A7295501DA10044E5CA36C0E2866FF068EA3515A6786BD5D60D74D80C6BA" "8BE6AAD085AF967909A143171E9CDDE36EA528402867CD04FB6F97A150CDE55F9B819" "F4104BEF48E4280D76645569E10AEF524D34D865B5B9E3EBC66C45EEBBE16AB04493E" "7AEC4F99E7A99F3FC08FA431BECCC1978A079FA4801DB75E1329A9921604E6F80CB14" "8AA2DD5C8348057E9F4FC2AEA57EA4D215D0A8D486294860DFB4F4C42D57D9542B761" "79E179DD4AA23F9F7B2AE432B39E4CE8F156E84877DDA781AAAAFC797FF75AFE2019A" "DC3A2E419BF0253C705BD4797A96866AC4C059AD8F2E9C6B617C60C6ADCDB894C25F0" "C7D29252F52FD52A5708011231121D1A1B0A190A0939383736353433323112084B9F2" "6DAB8B06E112002280018022A0C31353532333030360000000030151A20C30375683C" "4D2033E05DCC95DDFB278CFB5125A021C3C043A16ACC933A768A2732610802123B0A1" "90A0939383736353433323112084B9F26DAB8B06E112002280112001A16200342120A" "106B63746C0000000000ECDCBE0000000020DBDFA68F051A20182F029E35047A3841F" "A176C74E5B387350E8D58DEA6878FF0BEA6CABACA1C2C3A2E68747470733A2F2F7465" "73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7" "365400048001220CD0599C2B85D9F2D573AC7893CE77CB5A10B326828BA8C89047505" "A8C9B606AC")}; // kLicenseAppParametersBackwardsCompatibilityTestData struct DeviceFilesTestListUsageInfoData { std::string file_name; bool is_usage_info_file; }; const DeviceFilesTestListUsageInfoData kTestListUsageInfoData[] = { {"ksid056fe6e9c.lic", false}, {"usage.bin", true}, {"cert.bin", false}, {"usage345agdf==.bin", true}, {"usageyd6e.lic", false}, {"usgtable.bin", false}, {"usaget3ED.bin", true}, }; struct UsageInfoTestContext { std::string app_id; DeviceFiles::CdmUsageData usage_data; std::string file_data; }; const std::string kEmptyUsageInfoFileData = a2bs_hex( "0A06080310012A001220468A9A97B23D0E17147416276CB133175F0A18534155C6FFEF024A" "D80371D7C4"); const UsageInfoTestContext kUsageInfoTestData[] = { // Test vector 0 - app id: "", usage entry count: 1 {"", { // PST: a2bs_hex("b8e7f26b6b8b59babf05b5a1f8927b412a85bc8551a928f00856329814ae" "5a82"), // License request: a2bs_hex("4463dc57079c27e34ae115c6f65b08f6311c4ea604a6512c42470b6f692a" "76ea769d60d0b6bcf8d565ef31eb925f38e2095039c9f2f113ecee020f11" "26eb30165372d538b551ebd7bae5cf0bbeebb3cdb6f180d42868051aab8f" "f4947460dd96f0f8259fc6001059c998d2eb6902c064f9ae08e6cd3c7807" "e50379507b41620d15dd76c0b1e7ed9417efd6825959b5077f464e6429a4" "dee467a1ba2b05d38049912d5539f1ee9f5d8a569aa1c384384f847ed64f" "6ffc101036da70e69c06e4916493e82e9fe3f65d85254c8c14f6ca0579bf" "b3eaa86b2d7bb5ff572eccfd70f2ea4695f326beadf241ae4311e428c7c1" "2a0d4d1915cd0537ff0f62cf13eb2fa2"), // License: a2bs_hex( "bbe6b4b60da9d9bc34dcc8502fb81d8fd5fdbc8fa89605c86205f2b8c6530ff64" "c8c31f579bd8eca603dfd5e397ac35e48931fd330351d01361bb31caaa7dbf816" "a6144a12b6c22d1dceba20669ed635a40831066abd8071342119d7da11c43696b" "2898d3df3b36beb8da013d9dc145343494b19d6da085f4a41e421d3def2ad8b72" "dffffb6e79bbceaf8594045d16a62eed16904a3569860c531a32eaa5abb868b1d" "d6a0b03d69c1a3f8336af80eb80badbbc7b80ca5943bd5b374302147052201fae" "d30e9ffa99fc00b47f7eeb469512a413e873f91d959cccacccd3585b7f00ed8d4" "685022101713c3adc439f27512a45926c1d2473477662c4bace72f380d105ddc9" "f7be49ed71991b3d9e29a2038201373f98a845a57624a692f44ebd316d26c48fe" "e82b655583317eca4aaa4dac841524a2dca111749629637ef29fa7e72645a8759" "57fb3d98a5e6c8065b1349cfa23011cd6349d911c535475fed50be9eacb6a1ff3" "ea7458823f0229f2fa90b7a7099e8ec349d3d0fe0277cba5157ca62c8fbaa893f" "37b8c8cea2a0d2d2912caccf92d31aa17439479711b4a5b77445cc02c18bfe019" "5ce8f1fe59e317214005cee5e25904c9fb0af7e2b6b4dccdf78e61e179a9f9399" "6ec3c76f6da9b5a291bf08a73032b37edcbbbdd20cff94088a489167c56e5e75b" "376874e9750212fe94d7656d9cd835db3b771ba5b58d2b255"), // Key set ID: "ksid854c8a60a5a547e122c24fca", // Usage entry: a2bs_hex("7d2b905e5eafd4b28aeeb7633283579e48add21a68eb26cc8c3b2e344579" "003b12a38554336305525fa6ab70f024a18c73631bb1531eca3f0782c72d" "ba017311b3f1e98c739632e305e4bc0b2561ae2b"), // Usage entry index: 5, // DRM certificate: kEmptyString, // Wrapped private key: CryptoWrappedKey(), }, // File contents for test vector 0 // sessions: // -token: // b8e7f26b6b8b59babf05b5a1f8927b412a85bc8551a928f00856329814ae // 5a82 // license_request: // 4463dc57079c27e34ae115c6f65b08f6311c4ea604a6512c42470b6f692a // 76ea769d60d0b6bcf8d565ef31eb925f38e2095039c9f2f113ecee020f11 // 26eb30165372d538b551ebd7bae5cf0bbeebb3cdb6f180d42868051aab8f // f4947460dd96f0f8259fc6001059c998d2eb6902c064f9ae08e6cd3c7807 // e50379507b41620d15dd76c0b1e7ed9417efd6825959b5077f464e6429a4 // dee467a1ba2b05d38049912d5539f1ee9f5d8a569aa1c384384f847ed64f // 6ffc101036da70e69c06e4916493e82e9fe3f65d85254c8c14f6ca0579bf // b3eaa86b2d7bb5ff572eccfd70f2ea4695f326beadf241ae4311e428c7c1 // 2a0d4d1915cd0537ff0f62cf13eb2fa2 // license: // bbe6b4b60da9d9bc34dcc8502fb81d8fd5fdbc8fa89605c86205f2b8c653 // 0ff64c8c31f579bd8eca603dfd5e397ac35e48931fd330351d01361bb31c // aaa7dbf816a6144a12b6c22d1dceba20669ed635a40831066abd80713421 // 19d7da11c43696b2898d3df3b36beb8da013d9dc145343494b19d6da085f // 4a41e421d3def2ad8b72dffffb6e79bbceaf8594045d16a62eed16904a35 // 69860c531a32eaa5abb868b1dd6a0b03d69c1a3f8336af80eb80badbbc7b // 80ca5943bd5b374302147052201faed30e9ffa99fc00b47f7eeb469512a4 // 13e873f91d959cccacccd3585b7f00ed8d4685022101713c3adc439f2751 // 2a45926c1d2473477662c4bace72f380d105ddc9f7be49ed71991b3d9e29 // a2038201373f98a845a57624a692f44ebd316d26c48fee82b655583317ec // a4aaa4dac841524a2dca111749629637ef29fa7e72645a875957fb3d98a5 // e6c8065b1349cfa23011cd6349d911c535475fed50be9eacb6a1ff3ea745 // 8823f0229f2fa90b7a7099e8ec349d3d0fe0277cba5157ca62c8fbaa893f // 37b8c8cea2a0d2d2912caccf92d31aa17439479711b4a5b77445cc02c18b // fe0195ce8f1fe59e317214005cee5e25904c9fb0af7e2b6b4dccdf78e61e // 179a9f93996ec3c76f6da9b5a291bf08a73032b37edcbbbdd20cff94088a // 489167c56e5e75b376874e9750212fe94d7656d9cd835db3b771ba5b58d2 // b255 // key_set_id: "ksid854c8a60a5a547e122c24fca" // usage_entry: // 7d2b905e5eafd4b28aeeb7633283579e48add21a68eb26cc8c3b2e344579 // 003b12a38554336305525fa6ab70f024a18c73631bb1531eca3f0782c72d // ba017311b3f1e98c739632e305e4bc0b2561ae2b // usage_entry_index: 5 // drm_certificate_id: 0 // drm_certificate_cache: a2bs_hex( "0AA407080310012A9D070A9A070A20B8E7F26B6B8B59BABF05B5A1F8927B412A85BC8" "551A928F00856329814AE5A821280024463DC57079C27E34AE115C6F65B08F6311C4E" "A604A6512C42470B6F692A76EA769D60D0B6BCF8D565EF31EB925F38E2095039C9F2F" "113ECEE020F1126EB30165372D538B551EBD7BAE5CF0BBEEBB3CDB6F180D42868051A" "AB8FF4947460DD96F0F8259FC6001059C998D2EB6902C064F9AE08E6CD3C7807E5037" "9507B41620D15DD76C0B1E7ED9417EFD6825959B5077F464E6429A4DEE467A1BA2B05" "D38049912D5539F1EE9F5D8A569AA1C384384F847ED64F6FFC101036DA70E69C06E49" "16493E82E9FE3F65D85254C8C14F6CA0579BFB3EAA86B2D7BB5FF572ECCFD70F2EA46" "95F326BEADF241AE4311E428C7C12A0D4D1915CD0537FF0F62CF13EB2FA21A8004BBE" "6B4B60DA9D9BC34DCC8502FB81D8FD5FDBC8FA89605C86205F2B8C6530FF64C8C31F5" "79BD8ECA603DFD5E397AC35E48931FD330351D01361BB31CAAA7DBF816A6144A12B6C" "22D1DCEBA20669ED635A40831066ABD8071342119D7DA11C43696B2898D3DF3B36BEB" "8DA013D9DC145343494B19D6DA085F4A41E421D3DEF2AD8B72DFFFFB6E79BBCEAF859" "4045D16A62EED16904A3569860C531A32EAA5ABB868B1DD6A0B03D69C1A3F8336AF80" "EB80BADBBC7B80CA5943BD5B374302147052201FAED30E9FFA99FC00B47F7EEB46951" "2A413E873F91D959CCCACCCD3585B7F00ED8D4685022101713C3ADC439F27512A4592" "6C1D2473477662C4BACE72F380D105DDC9F7BE49ED71991B3D9E29A2038201373F98A" "845A57624A692F44EBD316D26C48FEE82B655583317ECA4AAA4DAC841524A2DCA1117" "49629637EF29FA7E72645A875957FB3D98A5E6C8065B1349CFA23011CD6349D911C53" "5475FED50BE9EACB6A1FF3EA7458823F0229F2FA90B7A7099E8EC349D3D0FE0277CBA" "5157CA62C8FBAA893F37B8C8CEA2A0D2D2912CACCF92D31AA17439479711B4A5B7744" "5CC02C18BFE0195CE8F1FE59E317214005CEE5E25904C9FB0AF7E2B6B4DCCDF78E61E" "179A9F93996EC3C76F6DA9B5A291BF08A73032B37EDCBBBDD20CFF94088A489167C56" "E5E75B376874E9750212FE94D7656D9CD835DB3B771BA5B58D2B255221C6B73696438" "35346338613630613561353437653132326332346663612A507D2B905E5EAFD4B28AE" "EB7633283579E48ADD21A68EB26CC8C3B2E344579003B12A38554336305525FA6AB70" "F024A18C73631BB1531ECA3F0782C72DBA017311B3F1E98C739632E305E4BC0B2561A" "E2B30051220BCA71B49A97A2CFD5A3C4619807FE9EFCB68F9C69C4D63254FF10B22F1" "13FA82")}, // Test vector 1 - app id: "", usage entry count: 2 {"", { // PST: a2bs_hex("5d637be37a9722aa35c23d346470851aca7d2edcd1a27edf124ea6"), // License request: a2bs_hex("bc96d6878e3086c33624821f1f3ece23f27e58222c2bb8d1615476a11792" "63b58f6427e92911d961fc7a3afd947aed8c9aead1f08457925d2ce4e0f6" "18b21942baa60b231eae864048f94f74ffa700e5777f812adb6f0cb6ba6f" "0d145e3951191eb217140c32f2c7565053222131ff823bc36d80b24b561c" "cbea9d397fe00942e7ff73b8152cdc083b63a9f9c4a77056a0d79f44f267" "da0ed629d9c902f7e838957ea41aa442221c3aa9410db58302b468c6d7f2" "113663809f0dcf187c108ced"), // License: a2bs_hex("f6fb3693413cc1d7d5e3459b856e4156c78f8d85d548939fd00474c8cded" "c46835cc981758500fe61cc79383b4d9f87c3e33d19c2d25d7d15dd0f3d2" "b1af4583b71e90c59886d297e78e929c2f3840c82c626914a4eb537b3a51" "61d963472b6592c0fa1e415556bc009c2da22bcf743ac434e22f8a33b432" "10dfd8aa09fe86105610f366e6fb7da18996cf7c7db425a9bb50e4a13190" "a680b9f82d37d09658585abe3bf9f009a5c1ce38a7cefe17f71fb402768b" "2d66b4ca523ed06729349695d7864d7cf7a1cc11d0da2b8a43db834d10b4" "7d9579ec9e46986a133277b92c636cb2a6a823afe73317266c9c0601ddba" "db76e1d254d6183b93a1ea91a7e6c567331b3ee3a5ab1484af91fd0f8dac" "5fd980a67d8f33cc1d6cf20ee4c24582d03967ed48b6f28e7514e4d18f38" "c8cb1e54fba59af7d6a79c6c5a7ab06baac964c7958d201910adca018022" "fbeb8535b64f5ce83d3c"), // Key set ID: "ksid2f2e85ce8a677f60047d7024e07b5ae6", // Usge entry: a2bs_hex("b74880fbddc5bb9db82f09bc7de3ffd95a0a671b979d4c1f0564eaf63eb6" "b5a8c3f16d9f964afbd011e2326f9c27afbe74536f3f0601a71d9c1c422f" "335611bf3bf1a1c89e2dea27c17a9d9a58a74121e840b002e8a6fb590072" "45be786c1f64"), // Usage entry index: 9, // DRM certificate: kEmptyString, // Wrapped private key: CryptoWrappedKey(), }, // File contents for test vector 1 // sessions: // -token: // b8e7f26b6b8b59babf05b5a1f8927b412a85bc8551a928f00856329814ae // 5a82 // license_request: // 4463dc57079c27e34ae115c6f65b08f6311c4ea604a6512c42470b6f692a // 76ea769d60d0b6bcf8d565ef31eb925f38e2095039c9f2f113ecee020f11 // 26eb30165372d538b551ebd7bae5cf0bbeebb3cdb6f180d42868051aab8f // f4947460dd96f0f8259fc6001059c998d2eb6902c064f9ae08e6cd3c7807 // e50379507b41620d15dd76c0b1e7ed9417efd6825959b5077f464e6429a4 // dee467a1ba2b05d38049912d5539f1ee9f5d8a569aa1c384384f847ed64f // 6ffc101036da70e69c06e4916493e82e9fe3f65d85254c8c14f6ca0579bf // b3eaa86b2d7bb5ff572eccfd70f2ea4695f326beadf241ae4311e428c7c1 // 2a0d4d1915cd0537ff0f62cf13eb2fa2 // license: // bbe6b4b60da9d9bc34dcc8502fb81d8fd5fdbc8fa89605c86205f2b8c653 // 0ff64c8c31f579bd8eca603dfd5e397ac35e48931fd330351d01361bb31c // aaa7dbf816a6144a12b6c22d1dceba20669ed635a40831066abd80713421 // 19d7da11c43696b2898d3df3b36beb8da013d9dc145343494b19d6da085f // 4a41e421d3def2ad8b72dffffb6e79bbceaf8594045d16a62eed16904a35 // 69860c531a32eaa5abb868b1dd6a0b03d69c1a3f8336af80eb80badbbc7b // 80ca5943bd5b374302147052201faed30e9ffa99fc00b47f7eeb469512a4 // 13e873f91d959cccacccd3585b7f00ed8d4685022101713c3adc439f2751 // 2a45926c1d2473477662c4bace72f380d105ddc9f7be49ed71991b3d9e29 // a2038201373f98a845a57624a692f44ebd316d26c48fee82b655583317ec // a4aaa4dac841524a2dca111749629637ef29fa7e72645a875957fb3d98a5 // e6c8065b1349cfa23011cd6349d911c535475fed50be9eacb6a1ff3ea745 // 8823f0229f2fa90b7a7099e8ec349d3d0fe0277cba5157ca62c8fbaa893f // 37b8c8cea2a0d2d2912caccf92d31aa17439479711b4a5b77445cc02c18b // fe0195ce8f1fe59e317214005cee5e25904c9fb0af7e2b6b4dccdf78e61e // 179a9f93996ec3c76f6da9b5a291bf08a73032b37edcbbbdd20cff94088a // 489167c56e5e75b376874e9750212fe94d7656d9cd835db3b771ba5b58d2 // b255 // key_set_id: "ksid854c8a60a5a547e122c24fca" // usage_entry: // 7d2b905e5eafd4b28aeeb7633283579e48add21a68eb26cc8c3b2e344579 // 003b12a38554336305525fa6ab70f024a18c73631bb1531eca3f0782c72d // ba017311b3f1e98c739632e305e4bc0b2561ae2b // usage_entry_index: 5 // drm_certificate_id: 0 // -token: // 5d637be37a9722aa35c23d346470851aca7d2edcd1a27edf124ea6 // license_request: // bc96d6878e3086c33624821f1f3ece23f27e58222c2bb8d1615476a11792 // 63b58f6427e92911d961fc7a3afd947aed8c9aead1f08457925d2ce4e0f6 // 18b21942baa60b231eae864048f94f74ffa700e5777f812adb6f0cb6ba6f // 0d145e3951191eb217140c32f2c7565053222131ff823bc36d80b24b561c // cbea9d397fe00942e7ff73b8152cdc083b63a9f9c4a77056a0d79f44f267 // da0ed629d9c902f7e838957ea41aa442221c3aa9410db58302b468c6d7f2 // 113663809f0dcf187c108ced // license: // f6fb3693413cc1d7d5e3459b856e4156c78f8d85d548939fd00474c8cded // c46835cc981758500fe61cc79383b4d9f87c3e33d19c2d25d7d15dd0f3d2 // b1af4583b71e90c59886d297e78e929c2f3840c82c626914a4eb537b3a51 // 61d963472b6592c0fa1e415556bc009c2da22bcf743ac434e22f8a33b432 // 10dfd8aa09fe86105610f366e6fb7da18996cf7c7db425a9bb50e4a13190 // a680b9f82d37d09658585abe3bf9f009a5c1ce38a7cefe17f71fb402768b // 2d66b4ca523ed06729349695d7864d7cf7a1cc11d0da2b8a43db834d10b4 // 7d9579ec9e46986a133277b92c636cb2a6a823afe73317266c9c0601ddba // db76e1d254d6183b93a1ea91a7e6c567331b3ee3a5ab1484af91fd0f8dac // 5fd980a67d8f33cc1d6cf20ee4c24582d03967ed48b6f28e7514e4d18f38 // c8cb1e54fba59af7d6a79c6c5a7ab06baac964c7958d201910adca018022 // fbeb8535b64f5ce83d3c // key_set_id: "ksid2f2e85ce8a677f60047d7024e07b5ae6" // usage_entry: // b74880fbddc5bb9db82f09bc7de3ffd95a0a671b979d4c1f0564eaf63eb6 // b5a8c3f16d9f964afbd011e2326f9c27afbe74536f3f0601a71d9c1c422f // 335611bf3bf1a1c89e2dea27c17a9d9a58a74121e840b002e8a6fb590072 // 45be786c1f64 // usage_entry_index: 9 // drm_certificate_id: 0 // drm_certificate_cache: a2bs_hex( "0AE80C080310012AE10C0A9A070A20B8E7F26B6B8B59BABF05B5A1F8927B412A85BC8" "551A928F00856329814AE5A821280024463DC57079C27E34AE115C6F65B08F6311C4E" "A604A6512C42470B6F692A76EA769D60D0B6BCF8D565EF31EB925F38E2095039C9F2F" "113ECEE020F1126EB30165372D538B551EBD7BAE5CF0BBEEBB3CDB6F180D42868051A" "AB8FF4947460DD96F0F8259FC6001059C998D2EB6902C064F9AE08E6CD3C7807E5037" "9507B41620D15DD76C0B1E7ED9417EFD6825959B5077F464E6429A4DEE467A1BA2B05" "D38049912D5539F1EE9F5D8A569AA1C384384F847ED64F6FFC101036DA70E69C06E49" "16493E82E9FE3F65D85254C8C14F6CA0579BFB3EAA86B2D7BB5FF572ECCFD70F2EA46" "95F326BEADF241AE4311E428C7C12A0D4D1915CD0537FF0F62CF13EB2FA21A8004BBE" "6B4B60DA9D9BC34DCC8502FB81D8FD5FDBC8FA89605C86205F2B8C6530FF64C8C31F5" "79BD8ECA603DFD5E397AC35E48931FD330351D01361BB31CAAA7DBF816A6144A12B6C" "22D1DCEBA20669ED635A40831066ABD8071342119D7DA11C43696B2898D3DF3B36BEB" "8DA013D9DC145343494B19D6DA085F4A41E421D3DEF2AD8B72DFFFFB6E79BBCEAF859" "4045D16A62EED16904A3569860C531A32EAA5ABB868B1DD6A0B03D69C1A3F8336AF80" "EB80BADBBC7B80CA5943BD5B374302147052201FAED30E9FFA99FC00B47F7EEB46951" "2A413E873F91D959CCCACCCD3585B7F00ED8D4685022101713C3ADC439F27512A4592" "6C1D2473477662C4BACE72F380D105DDC9F7BE49ED71991B3D9E29A2038201373F98A" "845A57624A692F44EBD316D26C48FEE82B655583317ECA4AAA4DAC841524A2DCA1117" "49629637EF29FA7E72645A875957FB3D98A5E6C8065B1349CFA23011CD6349D911C53" "5475FED50BE9EACB6A1FF3EA7458823F0229F2FA90B7A7099E8EC349D3D0FE0277CBA" "5157CA62C8FBAA893F37B8C8CEA2A0D2D2912CACCF92D31AA17439479711B4A5B7744" "5CC02C18BFE0195CE8F1FE59E317214005CEE5E25904C9FB0AF7E2B6B4DCCDF78E61E" "179A9F93996EC3C76F6DA9B5A291BF08A73032B37EDCBBBDD20CFF94088A489167C56" "E5E75B376874E9750212FE94D7656D9CD835DB3B771BA5B58D2B255221C6B73696438" "35346338613630613561353437653132326332346663612A507D2B905E5EAFD4B28AE" "EB7633283579E48ADD21A68EB26CC8C3B2E344579003B12A38554336305525FA6AB70" "F024A18C73631BB1531ECA3F0782C72DBA017311B3F1E98C739632E305E4BC0B2561A" "E2B30050AC1050A1B5D637BE37A9722AA35C23D346470851ACA7D2EDCD1A27EDF124E" "A612C001BC96D6878E3086C33624821F1F3ECE23F27E58222C2BB8D1615476A117926" "3B58F6427E92911D961FC7A3AFD947AED8C9AEAD1F08457925D2CE4E0F618B21942BA" "A60B231EAE864048F94F74FFA700E5777F812ADB6F0CB6BA6F0D145E3951191EB2171" "40C32F2C7565053222131FF823BC36D80B24B561CCBEA9D397FE00942E7FF73B8152C" "DC083B63A9F9C4A77056A0D79F44F267DA0ED629D9C902F7E838957EA41AA442221C3" "AA9410DB58302B468C6D7F2113663809F0DCF187C108CED1AD402F6FB3693413CC1D7" "D5E3459B856E4156C78F8D85D548939FD00474C8CDEDC46835CC981758500FE61CC79" "383B4D9F87C3E33D19C2D25D7D15DD0F3D2B1AF4583B71E90C59886D297E78E929C2F" "3840C82C626914A4EB537B3A5161D963472B6592C0FA1E415556BC009C2DA22BCF743" "AC434E22F8A33B43210DFD8AA09FE86105610F366E6FB7DA18996CF7C7DB425A9BB50" "E4A13190A680B9F82D37D09658585ABE3BF9F009A5C1CE38A7CEFE17F71FB402768B2" "D66B4CA523ED06729349695D7864D7CF7A1CC11D0DA2B8A43DB834D10B47D9579EC9E" "46986A133277B92C636CB2A6A823AFE73317266C9C0601DDBADB76E1D254D6183B93A" "1EA91A7E6C567331B3EE3A5AB1484AF91FD0F8DAC5FD980A67D8F33CC1D6CF20EE4C2" "4582D03967ED48B6F28E7514E4D18F38C8CB1E54FBA59AF7D6A79C6C5A7AB06BAAC96" "4C7958D201910ADCA018022FBEB8535B64F5CE83D3C22246B73696432663265383563" "653861363737663630303437643730323465303762356165362A60B74880FBDDC5BB9" "DB82F09BC7DE3FFD95A0A671B979D4C1F0564EAF63EB6B5A8C3F16D9F964AFBD011E2" "326F9C27AFBE74536F3F0601A71D9C1C422F335611BF3BF1A1C89E2DEA27C17A9D9A5" "8A74121E840B002E8A6FB59007245BE786C1F6430091220B9626315C7601BC2BD1E1C" "88F752C956261CE7509669B2AEAA1E7F1304017941")}, // Test vector 2 - app id: "app_1", usage entry count: 1 {"app_1", { // PST: a2bs_hex("bb3370ccd3c3c49573d6b74386d1886d9888bd81fe3241bcd2bac9407d1a" "834e"), // License request: a2bs_hex("dc0e51cfa5863f6c0b32a4ad7fa40625dadcc2dcde9e7fa3983b8804d996" "6803181682fc8ae831472e0b2fc26276242fbce624d286eedecce5555804" "913b4f8f86c5ae86160b8434b109169a63da04c5265102d772c1180543ef" "226d2140357aca6cf87da3f7e370dfc08ca92a1f7c7d314eab36292a9170" "8f6c6ad84b37ee1c7dfafb99289206cb752d063f330efd85885f4b72ba1c" "a5823eed865a461345e3d6417872bf3b0608b3d9e1004c11e7326d3ed406" "192e13455d0ec4e1f558a147"), // License: a2bs_hex("f42a68ca3a14fb68f5992e4519f57970c3dae73f8da1d5b0b1da3eff7a95" "4012a0dc634357f3f5477a820e182182f24ae8e835ab10c18386cc8a0727" "d3f38b628639bfbd69a94d4053eab1c31e075e014cc578b226cfe24d6b42" "db242972def8f23a4aae88451307c2abaf54c1803ae54e3f1149aa6e6d42" "88cc7d474e876be07954e8b2deff4ade4bf30229fb6c92df4d66cd463f68" "6b4754b940210eb59f1581d658ddf8de8389e0e2d123e2cae3c2be6eb194" "8ccc896dd4cdf45f9090c96dfb925795cfb4ccda83e3eb4f745577b17fc1" "66bf5f4103c9085134cad7863a41b04f32ef20201e54b55f1817ce589619" "b096c254fd2c2fa4a06f4de35ccfd23e"), // Key set ID: "kside11109bf20cde544083ef4ee", // Usage entry: a2bs_hex("ea106c124476b753d39368a5966972a2729bb8bbea734a2b3e812b705eac" "e016c8a03c9a406094d80059ef4ca26f1928fa2daa5de9a6f22372e5c7a9" "41e610d1efb56ed7ce2228a70e2e150afb66edc2da066d463aa90ba0caff" "078fbfec05c8"), 0, kEmptyString, CryptoWrappedKey(), }, // File contents for test vector 2 // sessions: // -token: // bb3370ccd3c3c49573d6b74386d1886d9888bd81fe3241bcd2bac9407d1a // 834e // license_request: // dc0e51cfa5863f6c0b32a4ad7fa40625dadcc2dcde9e7fa3983b8804d996 // 6803181682fc8ae831472e0b2fc26276242fbce624d286eedecce5555804 // 913b4f8f86c5ae86160b8434b109169a63da04c5265102d772c1180543ef // 226d2140357aca6cf87da3f7e370dfc08ca92a1f7c7d314eab36292a9170 // 8f6c6ad84b37ee1c7dfafb99289206cb752d063f330efd85885f4b72ba1c // a5823eed865a461345e3d6417872bf3b0608b3d9e1004c11e7326d3ed406 // 192e13455d0ec4e1f558a147 // license: // f42a68ca3a14fb68f5992e4519f57970c3dae73f8da1d5b0b1da3eff7a95 // 4012a0dc634357f3f5477a820e182182f24ae8e835ab10c18386cc8a0727 // d3f38b628639bfbd69a94d4053eab1c31e075e014cc578b226cfe24d6b42 // db242972def8f23a4aae88451307c2abaf54c1803ae54e3f1149aa6e6d42 // 88cc7d474e876be07954e8b2deff4ade4bf30229fb6c92df4d66cd463f68 // 6b4754b940210eb59f1581d658ddf8de8389e0e2d123e2cae3c2be6eb194 // 8ccc896dd4cdf45f9090c96dfb925795cfb4ccda83e3eb4f745577b17fc1 // 66bf5f4103c9085134cad7863a41b04f32ef20201e54b55f1817ce589619 // b096c254fd2c2fa4a06f4de35ccfd23e // key_set_id: "kside11109bf20cde544083ef4ee" // usage_entry: // ea106c124476b753d39368a5966972a2729bb8bbea734a2b3e812b705eac // e016c8a03c9a406094d80059ef4ca26f1928fa2daa5de9a6f22372e5c7a9 // 41e610d1efb56ed7ce2228a70e2e150afb66edc2da066d463aa90ba0caff // 078fbfec05c8 // usage_entry_index: 0 // drm_certificate_id: 0 // drm_certificate_cache: a2bs_hex("0AF404080310012AED040AEA040A20BB3370CCD3C3C49573D6B74386D1886D98" "88BD81FE3241BCD2BAC9407D1A834E12C001DC0E51CFA5863F6C0B32A4AD7FA4" "0625DADCC2DCDE9E7FA3983B8804D9966803181682FC8AE831472E0B2FC26276" "242FBCE624D286EEDECCE5555804913B4F8F86C5AE86160B8434B109169A63DA" "04C5265102D772C1180543EF226D2140357ACA6CF87DA3F7E370DFC08CA92A1F" "7C7D314EAB36292A91708F6C6AD84B37EE1C7DFAFB99289206CB752D063F330E" "FD85885F4B72BA1CA5823EED865A461345E3D6417872BF3B0608B3D9E1004C11" "E7326D3ED406192E13455D0EC4E1F558A1471A8002F42A68CA3A14FB68F5992E" "4519F57970C3DAE73F8DA1D5B0B1DA3EFF7A954012A0DC634357F3F5477A820E" "182182F24AE8E835AB10C18386CC8A0727D3F38B628639BFBD69A94D4053EAB1" "C31E075E014CC578B226CFE24D6B42DB242972DEF8F23A4AAE88451307C2ABAF" "54C1803AE54E3F1149AA6E6D4288CC7D474E876BE07954E8B2DEFF4ADE4BF302" "29FB6C92DF4D66CD463F686B4754B940210EB59F1581D658DDF8DE8389E0E2D1" "23E2CAE3C2BE6EB1948CCC896DD4CDF45F9090C96DFB925795CFB4CCDA83E3EB" "4F745577B17FC166BF5F4103C9085134CAD7863A41B04F32EF20201E54B55F18" "17CE589619B096C254FD2C2FA4A06F4DE35CCFD23E221C6B7369646531313130" "396266323063646535343430383365663465652A60EA106C124476B753D39368" "A5966972A2729BB8BBEA734A2B3E812B705EACE016C8A03C9A406094D80059EF" "4CA26F1928FA2DAA5DE9A6F22372E5C7A941E610D1EFB56ED7CE2228A70E2E15" "0AFB66EDC2DA066D463AA90BA0CAFF078FBFEC05C8300012203384AAAFD3A883" "17E6ED20BB88B0B3C01388AB1DF721547AE6FCB586659BC437")}, // Test vector 3 - app id: "app_2", usage entry count: 1 {"app_2", { // PST: a2bs_hex( "9212a6926f21c6727c1ee89d5607047a1636f206f70e21fda86e01b6a4b5"), // License request: a2bs_hex("ef947abed64078edf5b21fe6d3fb65384595d63a6d03e4d1d397c5019dee" "b6890d3ef8773002b91e255af0820fb594069df55d8abf96498e493f5c70" "f6b85f50e12a1ed3c039ad0cd838fe44d3fa9e2bbddeb2919041203111ed" "7778701b04d6b15f41d0bde799e20a38b27bf96fdbe844f10364baeb5935" "96220993c608ac793de76c237ca350931a7e216538074dbd83ddf262d9f1" "8acd91e1ea5372f7e773c5b64333"), // License: a2bs_hex("7709721b3aa48597e88c99e82eaf7dff07e87e0318d9d7cec29096ec5918" "26aa7a359316d6de1d1329b408543e237de84c986987ead1bb6a0c38817e" "93013e5c989d366f49590b834453ec64b7433bf0b3335b9e222bad4caf55" "4d69575c58595283166fea42e89645fc7e2d3ac9e0c1399b096cf3fed1e5" "deb1bc4e0ee894f0ae3f929dd7dba4530e5655edbbf6041df430482eb2e8" "91b6a93af84d3c16dbad92733ffd34e8f4ce24506bead578d20cd3e291c2" "fc2f811db875f49abc21a24277d2ba474fe6af6c14021cfead5513e0999e" "094020ce08209bbc08f13fe2b96d7ba8213c8e9c85b6a623788d34da794e" "17e4cd3bd65680b97fb30bad64ddc42b1bcfb0b83e5dda3501a5902ca609" "f41837a0d5cd096e0659b67c"), // Key set ID: "ksid62d88ed7b292217b0238be", // Usage entry: a2bs_hex("5422463fd2e4dd47626e97dd6b4ee0b89523aaebe8d11e7e7be703ef01e4" "9b17eaf020cede0a9e0e7b5d91e4db7abdce445936cb2deecdefefdb14b7" "8f67b7ca5c733c9e88446fd814584584b86becbf6eb2b0e3d5603e8b"), // Usage entry index: 25, // DRM certificate: kEmptyString, // Wrapped private key: CryptoWrappedKey(), }, // File contents for test vector 3 // sessions: // -token: // 9212a6926f21c6727c1ee89d5607047a1636f206f70e21fda86e01b6a4b5 // license_request: // ef947abed64078edf5b21fe6d3fb65384595d63a6d03e4d1d397c5019dee // b6890d3ef8773002b91e255af0820fb594069df55d8abf96498e493f5c70 // f6b85f50e12a1ed3c039ad0cd838fe44d3fa9e2bbddeb2919041203111ed // 7778701b04d6b15f41d0bde799e20a38b27bf96fdbe844f10364baeb5935 // 96220993c608ac793de76c237ca350931a7e216538074dbd83ddf262d9f1 // 8acd91e1ea5372f7e773c5b64333 // license: // 7709721b3aa48597e88c99e82eaf7dff07e87e0318d9d7cec29096ec5918 // 26aa7a359316d6de1d1329b408543e237de84c986987ead1bb6a0c38817e // 93013e5c989d366f49590b834453ec64b7433bf0b3335b9e222bad4caf55 // 4d69575c58595283166fea42e89645fc7e2d3ac9e0c1399b096cf3fed1e5 // deb1bc4e0ee894f0ae3f929dd7dba4530e5655edbbf6041df430482eb2e8 // 91b6a93af84d3c16dbad92733ffd34e8f4ce24506bead578d20cd3e291c2 // fc2f811db875f49abc21a24277d2ba474fe6af6c14021cfead5513e0999e // 094020ce08209bbc08f13fe2b96d7ba8213c8e9c85b6a623788d34da794e // 17e4cd3bd65680b97fb30bad64ddc42b1bcfb0b83e5dda3501a5902ca609 // f41837a0d5cd096e0659b67c // key_set_id: "ksid62d88ed7b292217b0238be" // usage_entry: // 5422463fd2e4dd47626e97dd6b4ee0b89523aaebe8d11e7e7be703ef01e4 // 9b17eaf020cede0a9e0e7b5d91e4db7abdce445936cb2deecdefefdb14b7 // 8f67b7ca5c733c9e88446fd814584584b86becbf6eb2b0e3d5603e8b // usage_entry_index: 25 // drm_certificate_id: 0 // drm_certificate_cache: a2bs_hex( "0AE604080310012ADF040ADC040A1E9212A6926F21C6727C1EE89D5607047A1636F20" "6F70E21FDA86E01B6A4B512A401EF947ABED64078EDF5B21FE6D3FB65384595D63A6D" "03E4D1D397C5019DEEB6890D3EF8773002B91E255AF0820FB594069DF55D8ABF96498" "E493F5C70F6B85F50E12A1ED3C039AD0CD838FE44D3FA9E2BBDDEB2919041203111ED" "7778701B04D6B15F41D0BDE799E20A38B27BF96FDBE844F10364BAEB593596220993C" "608AC793DE76C237CA350931A7E216538074DBD83DDF262D9F18ACD91E1EA5372F7E7" "73C5B643331A9A027709721B3AA48597E88C99E82EAF7DFF07E87E0318D9D7CEC2909" "6EC591826AA7A359316D6DE1D1329B408543E237DE84C986987EAD1BB6A0C38817E93" "013E5C989D366F49590B834453EC64B7433BF0B3335B9E222BAD4CAF554D69575C585" "95283166FEA42E89645FC7E2D3AC9E0C1399B096CF3FED1E5DEB1BC4E0EE894F0AE3F" "929DD7DBA4530E5655EDBBF6041DF430482EB2E891B6A93AF84D3C16DBAD92733FFD3" "4E8F4CE24506BEAD578D20CD3E291C2FC2F811DB875F49ABC21A24277D2BA474FE6AF" "6C14021CFEAD5513E0999E094020CE08209BBC08F13FE2B96D7BA8213C8E9C85B6A62" "3788D34DA794E17E4CD3BD65680B97FB30BAD64DDC42B1BCFB0B83E5DDA3501A5902C" "A609F41837A0D5CD096E0659B67C221A6B73696436326438386564376232393232313" "7623032333862652A585422463FD2E4DD47626E97DD6B4EE0B89523AAEBE8D11E7E7B" "E703EF01E49B17EAF020CEDE0A9E0E7B5D91E4DB7ABDCE445936CB2DEECDEFEFDB14B" "78F67B7CA5C733C9E88446FD814584584B86BECBF6EB2B0E3D5603E8B30191220E964" "7EB0AC28F0CB11C85111D69B5FA74E80015F4A07FB5C144E6CFE0E8E3709")}, // Test vector 4 - app id: "app_2", usage entry count: 2 {"app_2", { // PST: a2bs_hex("831fad51e52a403524539eab6a1b201e46674ca3b9167b1c1b53f5e5e3"), // License request: a2bs_hex("36d83acbc5e4ed027ed583e3b2169d98f4abedda15b781408e68efa14fef" "a9f3f0309bcb5a9fff6580636ebe3548e5acb43b76cfeb29a9c86324e62a" "eb40556005c6686e718f9bf61b0681d43b5b1e88084b3aea27a6b0e844e5" "500b6fcfacf2ee44d6af7f64154ab3fd4fbd0b8056cf63971076a1eb3642" "b78d5e76b84f4ed9f6220089863f8a4911691e79feffc9f804c4c36c7f85" "e45b1d276c85875875267eb65da70fd2d5e9176d6914"), // License: a2bs_hex("317bd7063bfb9fae1b2e46f4cf15b7bc8c92517ff5c32cbb52ae4b67afc5" "d569cb66a462def7a18a7d0acebf9f6e8a604356ade2c81450c5466a4728" "90b03eefcf65388f060e24551c67b7d46ae5d4d841d5cc63d137fd543fae" "2c771756590b90e480ca0126f1fc0090ace62499e47569fc52196c788f80" "139755bdf12a7acb29fd6e23a46a4c036f04ff1ed6cd714094253bf1c587" "62c93f0ddf8a73c4be927ffec2723a16d8ffe5128851f58537461275f6aa" "1976e3b399b7243919207e040ec16c5328e8ab082278fce0e5d3df5c5f92" "dba51fa6613587d4ece31f2c001b49bfaed434f9512e895c2e09c88ddbf1" "84bfafe4d82e5d05a26ac06cde29faf6ab05b96685649c923779ce5ef7f3" "16531ada8e74e45ab1dc1d75648aa2de052674728867e87639ff9b782a3" "3"), // Key set ID. "kside1d30b33b55f2deb4716", // Usage entry: a2bs_hex("d44a9d70a7c582559f089b1c0fdfcbdaf5e26b672fca5d58e889b407a0ba" "8599079cde11fadfab23aa1b97622839f3b7e1a96f8332bec5fbcbc9eb64" "fd5ed05887b8fa3bfd6ecc7bc91e621342732062d2f4411b763e20328af6" "f8ef5030e2f8027aef9e"), // Usage entry index: 6, // DRM certirficate: kEmptyString, // Wrapped private key: CryptoWrappedKey(), }, // File contents for test vector 4 // sessions: // -token: // 9212a6926f21c6727c1ee89d5607047a1636f206f70e21fda86e01b6a4b5 // license_request: // ef947abed64078edf5b21fe6d3fb65384595d63a6d03e4d1d397c5019dee // b6890d3ef8773002b91e255af0820fb594069df55d8abf96498e493f5c70 // f6b85f50e12a1ed3c039ad0cd838fe44d3fa9e2bbddeb2919041203111ed // 7778701b04d6b15f41d0bde799e20a38b27bf96fdbe844f10364baeb5935 // 96220993c608ac793de76c237ca350931a7e216538074dbd83ddf262d9f1 // 8acd91e1ea5372f7e773c5b64333 // license: // 7709721b3aa48597e88c99e82eaf7dff07e87e0318d9d7cec29096ec5918 // 26aa7a359316d6de1d1329b408543e237de84c986987ead1bb6a0c38817e // 93013e5c989d366f49590b834453ec64b7433bf0b3335b9e222bad4caf55 // 4d69575c58595283166fea42e89645fc7e2d3ac9e0c1399b096cf3fed1e5 // deb1bc4e0ee894f0ae3f929dd7dba4530e5655edbbf6041df430482eb2e8 // 91b6a93af84d3c16dbad92733ffd34e8f4ce24506bead578d20cd3e291c2 // fc2f811db875f49abc21a24277d2ba474fe6af6c14021cfead5513e0999e // 094020ce08209bbc08f13fe2b96d7ba8213c8e9c85b6a623788d34da794e // 17e4cd3bd65680b97fb30bad64ddc42b1bcfb0b83e5dda3501a5902ca609 // f41837a0d5cd096e0659b67c // key_set_id: "ksid62d88ed7b292217b0238be" // usage_entry: // 5422463fd2e4dd47626e97dd6b4ee0b89523aaebe8d11e7e7be703ef01e4 // 9b17eaf020cede0a9e0e7b5d91e4db7abdce445936cb2deecdefefdb14b7 // 8f67b7ca5c733c9e88446fd814584584b86becbf6eb2b0e3d5603e8b // usage_entry_index: 25 // drm_certificate_id: 0 // -token: // 831fad51e52a403524539eab6a1b201e46674ca3b9167b1c1b53f5e5e3 // license_request: // 36d83acbc5e4ed027ed583e3b2169d98f4abedda15b781408e68efa14fef // a9f3f0309bcb5a9fff6580636ebe3548e5acb43b76cfeb29a9c86324e62a // eb40556005c6686e718f9bf61b0681d43b5b1e88084b3aea27a6b0e844e5 // 500b6fcfacf2ee44d6af7f64154ab3fd4fbd0b8056cf63971076a1eb3642 // b78d5e76b84f4ed9f6220089863f8a4911691e79feffc9f804c4c36c7f85 // e45b1d276c85875875267eb65da70fd2d5e9176d6914 // license: // 317bd7063bfb9fae1b2e46f4cf15b7bc8c92517ff5c32cbb52ae4b67afc5 // d569cb66a462def7a18a7d0acebf9f6e8a604356ade2c81450c5466a4728 // 90b03eefcf65388f060e24551c67b7d46ae5d4d841d5cc63d137fd543fae // 2c771756590b90e480ca0126f1fc0090ace62499e47569fc52196c788f80 // 139755bdf12a7acb29fd6e23a46a4c036f04ff1ed6cd714094253bf1c587 // 62c93f0ddf8a73c4be927ffec2723a16d8ffe5128851f58537461275f6aa // 1976e3b399b7243919207e040ec16c5328e8ab082278fce0e5d3df5c5f92 // dba51fa6613587d4ece31f2c001b49bfaed434f9512e895c2e09c88ddbf1 // 84bfafe4d82e5d05a26ac06cde29faf6ab05b96685649c923779ce5ef7f3 // 16531ada8e74e45ab1dc1d75648aa2de052674728867e87639ff9b782a33 // key_set_id: "kside1d30b33b55f2deb4716" // usage_entry: // d44a9d70a7c582559f089b1c0fdfcbdaf5e26b672fca5d58e889b407a0ba // 8599079cde11fadfab23aa1b97622839f3b7e1a96f8332bec5fbcbc9eb64 // fd5ed05887b8fa3bfd6ecc7bc91e621342732062d2f4411b763e20328af6 // f8ef5030e2f8027aef9e // usage_entry_index: 6 // drm_certificate_id: 0 // drm_certificate_cache: a2bs_hex( "0AE809080310012AE1090ADC040A1E9212A6926F21C6727C1EE89D5607047A1636F20" "6F70E21FDA86E01B6A4B512A401EF947ABED64078EDF5B21FE6D3FB65384595D63A6D" "03E4D1D397C5019DEEB6890D3EF8773002B91E255AF0820FB594069DF55D8ABF96498" "E493F5C70F6B85F50E12A1ED3C039AD0CD838FE44D3FA9E2BBDDEB2919041203111ED" "7778701B04D6B15F41D0BDE799E20A38B27BF96FDBE844F10364BAEB593596220993C" "608AC793DE76C237CA350931A7E216538074DBD83DDF262D9F18ACD91E1EA5372F7E7" "73C5B643331A9A027709721B3AA48597E88C99E82EAF7DFF07E87E0318D9D7CEC2909" "6EC591826AA7A359316D6DE1D1329B408543E237DE84C986987EAD1BB6A0C38817E93" "013E5C989D366F49590B834453EC64B7433BF0B3335B9E222BAD4CAF554D69575C585" "95283166FEA42E89645FC7E2D3AC9E0C1399B096CF3FED1E5DEB1BC4E0EE894F0AE3F" "929DD7DBA4530E5655EDBBF6041DF430482EB2E891B6A93AF84D3C16DBAD92733FFD3" "4E8F4CE24506BEAD578D20CD3E291C2FC2F811DB875F49ABC21A24277D2BA474FE6AF" "6C14021CFEAD5513E0999E094020CE08209BBC08F13FE2B96D7BA8213C8E9C85B6A62" "3788D34DA794E17E4CD3BD65680B97FB30BAD64DDC42B1BCFB0B83E5DDA3501A5902C" "A609F41837A0D5CD096E0659B67C221A6B73696436326438386564376232393232313" "7623032333862652A585422463FD2E4DD47626E97DD6B4EE0B89523AAEBE8D11E7E7B" "E703EF01E49B17EAF020CEDE0A9E0E7B5D91E4DB7ABDCE445936CB2DEECDEFEFDB14B" "78F67B7CA5C733C9E88446FD814584584B86BECBF6EB2B0E3D5603E8B30190AFF040A" "1D831FAD51E52A403524539EAB6A1B201E46674CA3B9167B1C1B53F5E5E312AC0136D" "83ACBC5E4ED027ED583E3B2169D98F4ABEDDA15B781408E68EFA14FEFA9F3F0309BCB" "5A9FFF6580636EBE3548E5ACB43B76CFEB29A9C86324E62AEB40556005C6686E718F9" "BF61B0681D43B5B1E88084B3AEA27A6B0E844E5500B6FCFACF2EE44D6AF7F64154AB3" "FD4FBD0B8056CF63971076A1EB3642B78D5E76B84F4ED9F6220089863F8A4911691E7" "9FEFFC9F804C4C36C7F85E45B1D276C85875875267EB65DA70FD2D5E9176D69141AAC" "02317BD7063BFB9FAE1B2E46F4CF15B7BC8C92517FF5C32CBB52AE4B67AFC5D569CB6" "6A462DEF7A18A7D0ACEBF9F6E8A604356ADE2C81450C5466A472890B03EEFCF65388F" "060E24551C67B7D46AE5D4D841D5CC63D137FD543FAE2C771756590B90E480CA0126F" "1FC0090ACE62499E47569FC52196C788F80139755BDF12A7ACB29FD6E23A46A4C036F" "04FF1ED6CD714094253BF1C58762C93F0DDF8A73C4BE927FFEC2723A16D8FFE512885" "1F58537461275F6AA1976E3B399B7243919207E040EC16C5328E8AB082278FCE0E5D3" "DF5C5F92DBA51FA6613587D4ECE31F2C001B49BFAED434F9512E895C2E09C88DDBF18" "4BFAFE4D82E5D05A26AC06CDE29FAF6AB05B96685649C923779CE5EF7F316531ADA8E" "74E45AB1DC1D75648AA2DE052674728867E87639FF9B782A3322186B7369646531643" "3306233336235356632646562343731362A64D44A9D70A7C582559F089B1C0FDFCBDA" "F5E26B672FCA5D58E889B407A0BA8599079CDE11FADFAB23AA1B97622839F3B7E1A96" "F8332BEC5FBCBC9EB64FD5ED05887B8FA3BFD6ECC7BC91E621342732062D2F4411B76" "3E20328AF6F8EF5030E2F8027AEF9E300612203F1EEC1DDC56EE480AC744C1D72379E" "AFFD4675FF15A7D53BD56AC9736D62FC1")}, // Test vector 5 - app id: "app_1", usage entry 2 {"app_1", { // PST a2bs_hex("eace80e30bfda213f1ce4dbcfd9d4d24b8e2ae00054d167d9d7ae9954706" "2b9113"), // License request: a2bs_hex( "68a7665a21348fc0590328608dc520be40f5b749328568fe383ef69c1a58" "7ab2446cf9c41d821373d0856a883b316519a42218f80e7bd5764d16bac9" "a9b427a7278f5940e563fcf6dee0ff3aadbb702ebf2c54ec354ae7acc84e" "e6a54bca1f30e38ef71c44a81d0009b1484feaf4f1a56f58c35bb2372c80" "c6dfb389e6de60bdd3d46c03975715260f6fdbe42facb64c22eda9635c04" "da79434e1c41fbd2fdbbab6598283226c0278e8e0a96d780d3436523efd1"), // License: a2bs_hex("ff6fecf7157828812a2d6dcb15383a6d9af4519ef804c6053a10c436002d" "e3a4efcc017755f4ad1101bdc813e2d211732418dee529cbb413c48aa588" "4c76a5c6f556a715055560d4247f5bf310956949a3a171a4aa608a484468" "84e7676d558ff64d392b84e617805693d90f1e9b7b540c383d384d7f7ce0" "6c23618681bd838ceb1a514047f1c562c43159cc5e21588fbfce8a354111" "160f1a1e2bd3d798a000579bdfdb977252809ee1502df8045972fe8aac84" "0211c2f8d9e4d5be18509c327c647d654c4b6cc430b98f1ff37c96fab087" "fb561b8cc18480f877c873594d3148ff74b0e3c6327c27ca876dae742239" "8fc5e85269cba49ad099"), // Key set ID: "ksid8e80350cbef6463a0025e6cc", // Usage entry: a2bs_hex("7ccc7ce96055e16a52fa192ea2cf3c9df3e89b9133a52286f71e6c6d82d0" "435f6b2155dfde590b347d8c86f62d7dfbaae640c237256f609e5da9cc6c" "103465fe3441612bbdfdf4d1c24b2147feb8565cef4993e439c9d564a39a" "4ac5bb1da69acb44da06e4522c9a93d310cdda5dac1e1e0b91abff41e4e2" "edda4001"), // Usage entry index: 7, // DRM certificate: kDrmCertificate, // Wrapped private key: kCryptoWrappedKey, }, // File contents for test vector 5 // sessions: // -token: // bb3370ccd3c3c49573d6b74386d1886d9888bd81fe3241bcd2bac9407d1a // 834e // license_request: // dc0e51cfa5863f6c0b32a4ad7fa40625dadcc2dcde9e7fa3983b8804d996 // 6803181682fc8ae831472e0b2fc26276242fbce624d286eedecce5555804 // 913b4f8f86c5ae86160b8434b109169a63da04c5265102d772c1180543ef // 226d2140357aca6cf87da3f7e370dfc08ca92a1f7c7d314eab36292a9170 // 8f6c6ad84b37ee1c7dfafb99289206cb752d063f330efd85885f4b72ba1c // a5823eed865a461345e3d6417872bf3b0608b3d9e1004c11e7326d3ed406 // 192e13455d0ec4e1f558a147 // license: // f42a68ca3a14fb68f5992e4519f57970c3dae73f8da1d5b0b1da3eff7a95 // 4012a0dc634357f3f5477a820e182182f24ae8e835ab10c18386cc8a0727 // d3f38b628639bfbd69a94d4053eab1c31e075e014cc578b226cfe24d6b42 // db242972def8f23a4aae88451307c2abaf54c1803ae54e3f1149aa6e6d42 // 88cc7d474e876be07954e8b2deff4ade4bf30229fb6c92df4d66cd463f68 // 6b4754b940210eb59f1581d658ddf8de8389e0e2d123e2cae3c2be6eb194 // 8ccc896dd4cdf45f9090c96dfb925795cfb4ccda83e3eb4f745577b17fc1 // 66bf5f4103c9085134cad7863a41b04f32ef20201e54b55f1817ce589619 // b096c254fd2c2fa4a06f4de35ccfd23e // key_set_id: "kside11109bf20cde544083ef4ee" // usage_entry: // ea106c124476b753d39368a5966972a2729bb8bbea734a2b3e812b705eac // e016c8a03c9a406094d80059ef4ca26f1928fa2daa5de9a6f22372e5c7a9 // 41e610d1efb56ed7ce2228a70e2e150afb66edc2da066d463aa90ba0caff // 078fbfec05c8 // usage_entry_index: 0 // drm_certificate_id: 0 // -token: // eace80e30bfda213f1ce4dbcfd9d4d24b8e2ae00054d167d9d7ae9954706 // 2b9113 // license_request: // 68a7665a21348fc0590328608dc520be40f5b749328568fe383ef69c1a58 // 7ab2446cf9c41d821373d0856a883b316519a42218f80e7bd5764d16bac9 // a9b427a7278f5940e563fcf6dee0ff3aadbb702ebf2c54ec354ae7acc84e // e6a54bca1f30e38ef71c44a81d0009b1484feaf4f1a56f58c35bb2372c80 // c6dfb389e6de60bdd3d46c03975715260f6fdbe42facb64c22eda9635c04 // da79434e1c41fbd2fdbbab6598283226c0278e8e0a96d780d3436523efd1 // license: // ff6fecf7157828812a2d6dcb15383a6d9af4519ef804c6053a10c436002d // e3a4efcc017755f4ad1101bdc813e2d211732418dee529cbb413c48aa588 // 4c76a5c6f556a715055560d4247f5bf310956949a3a171a4aa608a484468 // 84e7676d558ff64d392b84e617805693d90f1e9b7b540c383d384d7f7ce0 // 6c23618681bd838ceb1a514047f1c562c43159cc5e21588fbfce8a354111 // 160f1a1e2bd3d798a000579bdfdb977252809ee1502df8045972fe8aac84 // 0211c2f8d9e4d5be18509c327c647d654c4b6cc430b98f1ff37c96fab087 // fb561b8cc18480f877c873594d3148ff74b0e3c6327c27ca876dae742239 // 8fc5e85269cba49ad099 // key_set_id: "ksid8e80350cbef6463a0025e6cc" // usage_entry: // 7ccc7ce96055e16a52fa192ea2cf3c9df3e89b9133a52286f71e6c6d82d0 // 435f6b2155dfde590b347d8c86f62d7dfbaae640c237256f609e5da9cc6c // 103465fe3441612bbdfdf4d1c24b2147feb8565cef4993e439c9d564a39a // 4ac5bb1da69acb44da06e4522c9a93d310cdda5dac1e1e0b91abff41e4e2 // edda4001 // usage_entry_index: 7 // drm_certificate_id: 0 // drm_certificate_cache: // -drm_certificate_id: 0 // drm_certificate: // certificate: "a drm certificate" // wrapped_private_key: "a wrapped private key" // key_type: RSA // acquisition_time_seconds: 0 // expiration_time_seconds: 0 a2bs_hex( "0AA00A080310012A990A0AEA040A20BB3370CCD3C3C49573D6B74386D1886D9888BD8" "1FE3241BCD2BAC9407D1A834E12C001DC0E51CFA5863F6C0B32A4AD7FA40625DADCC2" "DCDE9E7FA3983B8804D9966803181682FC8AE831472E0B2FC26276242FBCE624D286E" "EDECCE5555804913B4F8F86C5AE86160B8434B109169A63DA04C5265102D772C11805" "43EF226D2140357ACA6CF87DA3F7E370DFC08CA92A1F7C7D314EAB36292A91708F6C6" "AD84B37EE1C7DFAFB99289206CB752D063F330EFD85885F4B72BA1CA5823EED865A46" "1345E3D6417872BF3B0608B3D9E1004C11E7326D3ED406192E13455D0EC4E1F558A14" "71A8002F42A68CA3A14FB68F5992E4519F57970C3DAE73F8DA1D5B0B1DA3EFF7A9540" "12A0DC634357F3F5477A820E182182F24AE8E835AB10C18386CC8A0727D3F38B62863" "9BFBD69A94D4053EAB1C31E075E014CC578B226CFE24D6B42DB242972DEF8F23A4AAE" "88451307C2ABAF54C1803AE54E3F1149AA6E6D4288CC7D474E876BE07954E8B2DEFF4" "ADE4BF30229FB6C92DF4D66CD463F686B4754B940210EB59F1581D658DDF8DE8389E0" "E2D123E2CAE3C2BE6EB1948CCC896DD4CDF45F9090C96DFB925795CFB4CCDA83E3EB4" "F745577B17FC166BF5F4103C9085134CAD7863A41B04F32EF20201E54B55F1817CE58" "9619B096C254FD2C2FA4A06F4DE35CCFD23E221C6B736964653131313039626632306" "3646535343430383365663465652A60EA106C124476B753D39368A5966972A2729BB8" "BBEA734A2B3E812B705EACE016C8A03C9A406094D80059EF4CA26F1928FA2DAA5DE9A" "6F22372E5C7A941E610D1EFB56ED7CE2228A70E2E150AFB66EDC2DA066D463AA90BA0" "CAFF078FBFEC05C830000AF7040A21EACE80E30BFDA213F1CE4DBCFD9D4D24B8E2AE0" "0054D167D9D7AE99547062B911312B40168A7665A21348FC0590328608DC520BE40F5" "B749328568FE383EF69C1A587AB2446CF9C41D821373D0856A883B316519A42218F80" "E7BD5764D16BAC9A9B427A7278F5940E563FCF6DEE0FF3AADBB702EBF2C54EC354AE7" "ACC84EE6A54BCA1F30E38EF71C44A81D0009B1484FEAF4F1A56F58C35BB2372C80C6D" "FB389E6DE60BDD3D46C03975715260F6FDBE42FACB64C22EDA9635C04DA79434E1C41" "FBD2FDBBAB6598283226C0278E8E0A96D780D3436523EFD11AFA01FF6FECF71578288" "12A2D6DCB15383A6D9AF4519EF804C6053A10C436002DE3A4EFCC017755F4AD1101BD" "C813E2D211732418DEE529CBB413C48AA5884C76A5C6F556A715055560D4247F5BF31" "0956949A3A171A4AA608A48446884E7676D558FF64D392B84E617805693D90F1E9B7B" "540C383D384D7F7CE06C23618681BD838CEB1A514047F1C562C43159CC5E21588FBF" "CE8A354111160F1A1E2BD3D798A000579BDFDB977252809EE1502DF8045972FE8AAC8" "40211C2F8D9E4D5BE18509C327C647D654C4B6CC430B98F1FF37C96FAB087FB561B8C" "C18480F877C873594D3148FF74B0E3C6327C27CA876DAE7422398FC5E85269CBA49AD" "099221C6B7369643865383033353063626566363436336130303235653663632A7C7C" "CC7CE96055E16A52FA192EA2CF3C9DF3E89B9133A52286F71E6C6D82D0435F6B2155D" "FDE590B347D8C86F62D7DFBAAE640C237256F609E5DA9CC6C103465FE3441612BBDFD" "F4D1C24B2147FEB8565CEF4993E439C9D564A39A4AC5BB1DA69ACB44DA06E4522C9A9" "3D310CDDA5DAC1E1E0B91ABFF41E4E2EDDA40013007380012300800122C0A11612064" "726D20636572746966696361746512156120777261707065642070726976617465206" "B657918001220BD67878F6AA958EC6996061F69BF65E9806221BCA1CF26FFA4BF1D0B" "4ECE8806")}, // Test vector 6 - app id: "", usage entry count: 3 {"", { // PST: a2bs_hex("1fbf0a1d2432805a0f8292ff627a9a7c60b733a51b365892c832261d71"), // License request: a2bs_hex("1ad116a26f423c7019fa8dca226c2d2bdeec91beb1fd38d6890e32745a4d" "bb9409b65fe834c2522d92621b265a9d526b4fcadcacf4c4deb364661118" "494fd1561621392bf4450e6833be290d49e59e665a031375ee56ad1f3392" "436ba213abc5ac10a199e73123f84f7644282137da24cbde30c10a6eb847" "ca72b8b311ad329d2c9cb0909c2ecbe3fbaf88e81bb5aeaa6480fff67e87" "77fa00c783aa160f1e211cb9bf3835fa8f82923c05895c359cf306f5cb90" "a73b8ce2ce9ed210485e1c57"), // License: a2bs_hex("0bf120627d01690d14321fa967d81997b959b35ed7745dee9e885dd402df" "83c3b8f52999b16c2d1d47bf4724a9ced984175eb8a032d613294c148020" "74154c34fd40fe6ea74fa830fdcb9cc7e0799a75aadaf41ddda3d0038896" "da966b1a67ff4e6c7403debfdbe7d1d48f1a3304124f04c974bfa0eff4d0" "b1733a84aa6f89ec74c89dad2168da4706f6dfcfd980502b573d0f7b3791" "252cc918394e8b3a3e1ef37ce48b7fd6a2040db5915f55809f284ce4ec24" "4149f53038b432964705e26c3bb6535461b7fff27ac8eff679dce8e5bfe1" "d000b69a22d9efc1f310ba2f0115c96b00bc15888fbb3edd230834458491" "eede2440550dd59c613dc8433efe979c71e9"), // Key set ID: "ksida5d27d7b0ccd433203e157", // Usage entry: a2bs_hex("1be7cd47cefdef69576348ef9a143be2311041a5f80259938fa886139679" "4eabcc985a695be2ef4a8361d86979859c490922d92d3ed0484e1666270a" "a96388bf6be3c4f4f0b7e2f59efc6b8e965d8fadd5ab86b2bb816d2573ec" "36eb42b571297681be152d40639d"), // Usage entry index: 0, // DRM certificate: kEmptyString, // Wrapped private key. CryptoWrappedKey(), }, // File contents for test vector 6 // sessions: // -token: // b8e7f26b6b8b59babf05b5a1f8927b412a85bc8551a928f00856329814ae // 5a82 // license_request: // 4463dc57079c27e34ae115c6f65b08f6311c4ea604a6512c42470b6f692a // 76ea769d60d0b6bcf8d565ef31eb925f38e2095039c9f2f113ecee020f11 // 26eb30165372d538b551ebd7bae5cf0bbeebb3cdb6f180d42868051aab8f // f4947460dd96f0f8259fc6001059c998d2eb6902c064f9ae08e6cd3c7807 // e50379507b41620d15dd76c0b1e7ed9417efd6825959b5077f464e6429a4 // dee467a1ba2b05d38049912d5539f1ee9f5d8a569aa1c384384f847ed64f // 6ffc101036da70e69c06e4916493e82e9fe3f65d85254c8c14f6ca0579bf // b3eaa86b2d7bb5ff572eccfd70f2ea4695f326beadf241ae4311e428c7c1 // 2a0d4d1915cd0537ff0f62cf13eb2fa2 // license: // bbe6b4b60da9d9bc34dcc8502fb81d8fd5fdbc8fa89605c86205f2b8c653 // 0ff64c8c31f579bd8eca603dfd5e397ac35e48931fd330351d01361bb31c // aaa7dbf816a6144a12b6c22d1dceba20669ed635a40831066abd80713421 // 19d7da11c43696b2898d3df3b36beb8da013d9dc145343494b19d6da085f // 4a41e421d3def2ad8b72dffffb6e79bbceaf8594045d16a62eed16904a35 // 69860c531a32eaa5abb868b1dd6a0b03d69c1a3f8336af80eb80badbbc7b // 80ca5943bd5b374302147052201faed30e9ffa99fc00b47f7eeb469512a4 // 13e873f91d959cccacccd3585b7f00ed8d4685022101713c3adc439f2751 // 2a45926c1d2473477662c4bace72f380d105ddc9f7be49ed71991b3d9e29 // a2038201373f98a845a57624a692f44ebd316d26c48fee82b655583317ec // a4aaa4dac841524a2dca111749629637ef29fa7e72645a875957fb3d98a5 // e6c8065b1349cfa23011cd6349d911c535475fed50be9eacb6a1ff3ea745 // 8823f0229f2fa90b7a7099e8ec349d3d0fe0277cba5157ca62c8fbaa893f // 37b8c8cea2a0d2d2912caccf92d31aa17439479711b4a5b77445cc02c18b // fe0195ce8f1fe59e317214005cee5e25904c9fb0af7e2b6b4dccdf78e61e // 179a9f93996ec3c76f6da9b5a291bf08a73032b37edcbbbdd20cff94088a // 489167c56e5e75b376874e9750212fe94d7656d9cd835db3b771ba5b58d2 // b255 // key_set_id: "ksid854c8a60a5a547e122c24fca" // usage_entry: // 7d2b905e5eafd4b28aeeb7633283579e48add21a68eb26cc8c3b2e344579 // 003b12a38554336305525fa6ab70f024a18c73631bb1531eca3f0782c72d // ba017311b3f1e98c739632e305e4bc0b2561ae2b // usage_entry_index: 5 // drm_certificate_id: 0 // -token: // 5d637be37a9722aa35c23d346470851aca7d2edcd1a27edf124ea6 // license_request: // bc96d6878e3086c33624821f1f3ece23f27e58222c2bb8d1615476a11792 // 63b58f6427e92911d961fc7a3afd947aed8c9aead1f08457925d2ce4e0f6 // 18b21942baa60b231eae864048f94f74ffa700e5777f812adb6f0cb6ba6f // 0d145e3951191eb217140c32f2c7565053222131ff823bc36d80b24b561c // cbea9d397fe00942e7ff73b8152cdc083b63a9f9c4a77056a0d79f44f267 // da0ed629d9c902f7e838957ea41aa442221c3aa9410db58302b468c6d7f2 // 113663809f0dcf187c108ced // license: // f6fb3693413cc1d7d5e3459b856e4156c78f8d85d548939fd00474c8cded // c46835cc981758500fe61cc79383b4d9f87c3e33d19c2d25d7d15dd0f3d2 // b1af4583b71e90c59886d297e78e929c2f3840c82c626914a4eb537b3a51 // 61d963472b6592c0fa1e415556bc009c2da22bcf743ac434e22f8a33b432 // 10dfd8aa09fe86105610f366e6fb7da18996cf7c7db425a9bb50e4a13190 // a680b9f82d37d09658585abe3bf9f009a5c1ce38a7cefe17f71fb402768b // 2d66b4ca523ed06729349695d7864d7cf7a1cc11d0da2b8a43db834d10b4 // 7d9579ec9e46986a133277b92c636cb2a6a823afe73317266c9c0601ddba // db76e1d254d6183b93a1ea91a7e6c567331b3ee3a5ab1484af91fd0f8dac // 5fd980a67d8f33cc1d6cf20ee4c24582d03967ed48b6f28e7514e4d18f38 // c8cb1e54fba59af7d6a79c6c5a7ab06baac964c7958d201910adca018022 // fbeb8535b64f5ce83d3c // key_set_id: "ksid2f2e85ce8a677f60047d7024e07b5ae6" // usage_entry: // b74880fbddc5bb9db82f09bc7de3ffd95a0a671b979d4c1f0564eaf63eb6 // b5a8c3f16d9f964afbd011e2326f9c27afbe74536f3f0601a71d9c1c422f // 335611bf3bf1a1c89e2dea27c17a9d9a58a74121e840b002e8a6fb590072 // 45be786c1f64 // usage_entry_index: 9 // drm_certificate_id: 0 // -token: // 1fbf0a1d2432805a0f8292ff627a9a7c60b733a51b365892c832261d71 // license_request: // 1ad116a26f423c7019fa8dca226c2d2bdeec91beb1fd38d6890e32745a4d // bb9409b65fe834c2522d92621b265a9d526b4fcadcacf4c4deb364661118 // 494fd1561621392bf4450e6833be290d49e59e665a031375ee56ad1f3392 // 436ba213abc5ac10a199e73123f84f7644282137da24cbde30c10a6eb847 // ca72b8b311ad329d2c9cb0909c2ecbe3fbaf88e81bb5aeaa6480fff67e87 // 77fa00c783aa160f1e211cb9bf3835fa8f82923c05895c359cf306f5cb90 // a73b8ce2ce9ed210485e1c57 // license: // 0bf120627d01690d14321fa967d81997b959b35ed7745dee9e885dd402df // 83c3b8f52999b16c2d1d47bf4724a9ced984175eb8a032d613294c148020 // 74154c34fd40fe6ea74fa830fdcb9cc7e0799a75aadaf41ddda3d0038896 // da966b1a67ff4e6c7403debfdbe7d1d48f1a3304124f04c974bfa0eff4d0 // b1733a84aa6f89ec74c89dad2168da4706f6dfcfd980502b573d0f7b3791 // 252cc918394e8b3a3e1ef37ce48b7fd6a2040db5915f55809f284ce4ec24 // 4149f53038b432964705e26c3bb6535461b7fff27ac8eff679dce8e5bfe1 // d000b69a22d9efc1f310ba2f0115c96b00bc15888fbb3edd230834458491 // eede2440550dd59c613dc8433efe979c71e9 // key_set_id: "ksida5d27d7b0ccd433203e157" // usage_entry: // 1be7cd47cefdef69576348ef9a143be2311041a5f80259938fa886139679 // 4eabcc985a695be2ef4a8361d86979859c490922d92d3ed0484e1666270a // a96388bf6be3c4f4f0b7e2f59efc6b8e965d8fadd5ab86b2bb816d2573ec // 36eb42b571297681be152d40639d // usage_entry_index: 0 // drm_certificate_id: 0 // drm_certificate_cache: a2bs_hex( "0ADA11080310012AD3110A9A070A20B8E7F26B6B8B59BABF05B5A1F8927B412A85BC8" "551A928F00856329814AE5A821280024463DC57079C27E34AE115C6F65B08F6311C4E" "A604A6512C42470B6F692A76EA769D60D0B6BCF8D565EF31EB925F38E2095039C9F2F" "113ECEE020F1126EB30165372D538B551EBD7BAE5CF0BBEEBB3CDB6F180D42868051A" "AB8FF4947460DD96F0F8259FC6001059C998D2EB6902C064F9AE08E6CD3C7807E5037" "9507B41620D15DD76C0B1E7ED9417EFD6825959B5077F464E6429A4DEE467A1BA2B05" "D38049912D5539F1EE9F5D8A569AA1C384384F847ED64F6FFC101036DA70E69C06E49" "16493E82E9FE3F65D85254C8C14F6CA0579BFB3EAA86B2D7BB5FF572ECCFD70F2EA46" "95F326BEADF241AE4311E428C7C12A0D4D1915CD0537FF0F62CF13EB2FA21A8004BBE" "6B4B60DA9D9BC34DCC8502FB81D8FD5FDBC8FA89605C86205F2B8C6530FF64C8C31F5" "79BD8ECA603DFD5E397AC35E48931FD330351D01361BB31CAAA7DBF816A6144A12B6C" "22D1DCEBA20669ED635A40831066ABD8071342119D7DA11C43696B2898D3DF3B36BEB" "8DA013D9DC145343494B19D6DA085F4A41E421D3DEF2AD8B72DFFFFB6E79BBCEAF859" "4045D16A62EED16904A3569860C531A32EAA5ABB868B1DD6A0B03D69C1A3F8336AF80" "EB80BADBBC7B80CA5943BD5B374302147052201FAED30E9FFA99FC00B47F7EEB46951" "2A413E873F91D959CCCACCCD3585B7F00ED8D4685022101713C3ADC439F27512A4592" "6C1D2473477662C4BACE72F380D105DDC9F7BE49ED71991B3D9E29A2038201373F98A" "845A57624A692F44EBD316D26C48FEE82B655583317ECA4AAA4DAC841524A2DCA1117" "49629637EF29FA7E72645A875957FB3D98A5E6C8065B1349CFA23011CD6349D911C53" "5475FED50BE9EACB6A1FF3EA7458823F0229F2FA90B7A7099E8EC349D3D0FE0277CBA" "5157CA62C8FBAA893F37B8C8CEA2A0D2D2912CACCF92D31AA17439479711B4A5B7744" "5CC02C18BFE0195CE8F1FE59E317214005CEE5E25904C9FB0AF7E2B6B4DCCDF78E61E" "179A9F93996EC3C76F6DA9B5A291BF08A73032B37EDCBBBDD20CFF94088A489167C56" "E5E75B376874E9750212FE94D7656D9CD835DB3B771BA5B58D2B255221C6B73696438" "35346338613630613561353437653132326332346663612A507D2B905E5EAFD4B28AE" "EB7633283579E48ADD21A68EB26CC8C3B2E344579003B12A38554336305525FA6AB70" "F024A18C73631BB1531ECA3F0782C72DBA017311B3F1E98C739632E305E4BC0B2561A" "E2B30050AC1050A1B5D637BE37A9722AA35C23D346470851ACA7D2EDCD1A27EDF124E" "A612C001BC96D6878E3086C33624821F1F3ECE23F27E58222C2BB8D1615476A117926" "3B58F6427E92911D961FC7A3AFD947AED8C9AEAD1F08457925D2CE4E0F618B21942BA" "A60B231EAE864048F94F74FFA700E5777F812ADB6F0CB6BA6F0D145E3951191EB2171" "40C32F2C7565053222131FF823BC36D80B24B561CCBEA9D397FE00942E7FF73B8152C" "DC083B63A9F9C4A77056A0D79F44F267DA0ED629D9C902F7E838957EA41AA442221C3" "AA9410DB58302B468C6D7F2113663809F0DCF187C108CED1AD402F6FB3693413CC1D7" "D5E3459B856E4156C78F8D85D548939FD00474C8CDEDC46835CC981758500FE61CC79" "383B4D9F87C3E33D19C2D25D7D15DD0F3D2B1AF4583B71E90C59886D297E78E929C2F" "3840C82C626914A4EB537B3A5161D963472B6592C0FA1E415556BC009C2DA22BCF743" "AC434E22F8A33B43210DFD8AA09FE86105610F366E6FB7DA18996CF7C7DB425A9BB50" "E4A13190A680B9F82D37D09658585ABE3BF9F009A5C1CE38A7CEFE17F71FB402768B2" "D66B4CA523ED06729349695D7864D7CF7A1CC11D0DA2B8A43DB834D10B47D9579EC9E" "46986A133277B92C636CB2A6A823AFE73317266C9C0601DDBADB76E1D254D6183B93A" "1EA91A7E6C567331B3EE3A5AB1484AF91FD0F8DAC5FD980A67D8F33CC1D6CF20EE4C2" "4582D03967ED48B6F28E7514E4D18F38C8CB1E54FBA59AF7D6A79C6C5A7AB06BAAC96" "4C7958D201910ADCA018022FBEB8535B64F5CE83D3C22246B73696432663265383563" "653861363737663630303437643730323465303762356165362A60B74880FBDDC5BB9" "DB82F09BC7DE3FFD95A0A671B979D4C1F0564EAF63EB6B5A8C3F16D9F964AFBD011E2" "326F9C27AFBE74536F3F0601A71D9C1C422F335611BF3BF1A1C89E2DEA27C17A9D9A5" "8A74121E840B002E8A6FB59007245BE786C1F6430090AEF040A1D1FBF0A1D2432805A" "0F8292FF627A9A7C60B733A51B365892C832261D7112C0011AD116A26F423C7019FA8" "DCA226C2D2BDEEC91BEB1FD38D6890E32745A4DBB9409B65FE834C2522D92621B265A" "9D526B4FCADCACF4C4DEB364661118494FD1561621392BF4450E6833BE290D49E59E6" "65A031375EE56AD1F3392436BA213ABC5AC10A199E73123F84F7644282137DA24CBDE" "30C10A6EB847CA72B8B311AD329D2C9CB0909C2ECBE3FBAF88E81BB5AEAA6480FFF67" "E8777FA00C783AA160F1E211CB9BF3835FA8F82923C05895C359CF306F5CB90A73B8C" "E2CE9ED210485E1C571A82020BF120627D01690D14321FA967D81997B959B35ED7745" "DEE9E885DD402DF83C3B8F52999B16C2D1D47BF4724A9CED984175EB8A032D613294C" "14802074154C34FD40FE6EA74FA830FDCB9CC7E0799A75AADAF41DDDA3D0038896DA9" "66B1A67FF4E6C7403DEBFDBE7D1D48F1A3304124F04C974BFA0EFF4D0B1733A84AA6F" "89EC74C89DAD2168DA4706F6DFCFD980502B573D0F7B3791252CC918394E8B3A3E1EF" "37CE48B7FD6A2040DB5915F55809F284CE4EC244149F53038B432964705E26C3BB653" "5461B7FFF27AC8EFF679DCE8E5BFE1D000B69A22D9EFC1F310BA2F0115C96B00BC158" "88FBB3EDD230834458491EEDE2440550DD59C613DC8433EFE979C71E9221A6B736964" "613564323764376230636364343333323033653135372A681BE7CD47CEFDEF6957634" "8EF9A143BE2311041A5F80259938FA8861396794EABCC985A695BE2EF4A8361D86979" "859C490922D92D3ED0484E1666270AA96388BF6BE3C4F4F0B7E2F59EFC6B8E965D8FA" "DD5AB86B2BB816D2573EC36EB42B571297681BE152D40639D3000122076CFC9DBA6CD" "93FFC6BB74D61C1B644CC32121553C50817A9F6F00633575E659")}, // Test vector 7 - app id: "app_2", usage entry count: 3 {"app_2", { // PST: a2bs_hex("8f922e955b269458ed1345bde9a24516520a536817e8e8612154a1"), // License request: a2bs_hex("d4acc596a52055cee710e1fec44796dbf3ae6b017ab156d9bff7bfdb8f1e" "6352bfbe453034968f940c36ac18800e22bb2ff71268053702ef3fce3fb2" "d607a078e0d1449fcc9d0675d41b1a65f78e3c02370d18112aae1e2577ff" "9087825a45125db5dee8e27bd14ea8666b4e8e6aba6811c40b585aabb9c9" "185209a48d11130ff690316916961f28286c71c3e985d7dc3352166e414b" "89da2c17cc5b69fc9c00990697f5"), // License: a2bs_hex("169d3c432f9c2f8b99e11632bd7d6a63f3d57679c567bedcb2e596ace105" "0453732040cb468e9c43f6009b430ca4a4046d017e67a4badd5b71c0c9fc" "e2274817f0bcda311a4f8703e6dc32aedf30e6f9abd40e249fc8b0a5045c" "c1e47e60a60b4893ef92602f5584e1162f4ff3ee6d906228f97b442ace1f" "b175d113b671bdbe4ceffdd98f2bb094c0dfac03b79541a44d8affdc987f" "4268706b5a554e998907eb7126e8c6bc07c837d8aeebea3249e37b4b7dd7" "327300fe7e62c15981cf73a13e806d065bcadc2c747256907a5493592b07" "a0c07f9cd805fcdc0d30f70e4c4b2959a0f52385c6bd3e6eeb4e3d81fdc1" "a9dc3c76faf1bfed913d58567fa9b296d27dff5217c583e7c134a642601f" "8237"), // Key set ID: "kside684918d6c39bfa652a40ad936", // Usage entry: a2bs_hex("703f69807c8f4d140168874b924a625132eb3b896a381d617b8fb83c7314" "a6b634d840925f711ae330599f0e0863800902b05d201a8a87b88a4bc170" "65a1a8a556c34bf86b53afcc9951be15bea9ab55"), // Usage entry index: 27, // DRM certificate: kAnotherDrmCertificate, // Wrapped private key: kAnotherCryptoWrappedKey, }, // File contents for test vector 7 // sessions: // -token: // 9212a6926f21c6727c1ee89d5607047a1636f206f70e21fda86e01b6a4b5 // license_request: // ef947abed64078edf5b21fe6d3fb65384595d63a6d03e4d1d397c5019dee // b6890d3ef8773002b91e255af0820fb594069df55d8abf96498e493f5c70 // f6b85f50e12a1ed3c039ad0cd838fe44d3fa9e2bbddeb2919041203111ed // 7778701b04d6b15f41d0bde799e20a38b27bf96fdbe844f10364baeb5935 // 96220993c608ac793de76c237ca350931a7e216538074dbd83ddf262d9f1 // 8acd91e1ea5372f7e773c5b64333 // license: // 7709721b3aa48597e88c99e82eaf7dff07e87e0318d9d7cec29096ec5918 // 26aa7a359316d6de1d1329b408543e237de84c986987ead1bb6a0c38817e // 93013e5c989d366f49590b834453ec64b7433bf0b3335b9e222bad4caf55 // 4d69575c58595283166fea42e89645fc7e2d3ac9e0c1399b096cf3fed1e5 // deb1bc4e0ee894f0ae3f929dd7dba4530e5655edbbf6041df430482eb2e8 // 91b6a93af84d3c16dbad92733ffd34e8f4ce24506bead578d20cd3e291c2 // fc2f811db875f49abc21a24277d2ba474fe6af6c14021cfead5513e0999e // 094020ce08209bbc08f13fe2b96d7ba8213c8e9c85b6a623788d34da794e // 17e4cd3bd65680b97fb30bad64ddc42b1bcfb0b83e5dda3501a5902ca609 // f41837a0d5cd096e0659b67c // key_set_id: "ksid62d88ed7b292217b0238be" // usage_entry: // 5422463fd2e4dd47626e97dd6b4ee0b89523aaebe8d11e7e7be703ef01e4 // 9b17eaf020cede0a9e0e7b5d91e4db7abdce445936cb2deecdefefdb14b7 // 8f67b7ca5c733c9e88446fd814584584b86becbf6eb2b0e3d5603e8b // usage_entry_index: 25 // drm_certificate_id: 0 // -token: // 831fad51e52a403524539eab6a1b201e46674ca3b9167b1c1b53f5e5e3 // license_request: // 36d83acbc5e4ed027ed583e3b2169d98f4abedda15b781408e68efa14fef // a9f3f0309bcb5a9fff6580636ebe3548e5acb43b76cfeb29a9c86324e62a // eb40556005c6686e718f9bf61b0681d43b5b1e88084b3aea27a6b0e844e5 // 500b6fcfacf2ee44d6af7f64154ab3fd4fbd0b8056cf63971076a1eb3642 // b78d5e76b84f4ed9f6220089863f8a4911691e79feffc9f804c4c36c7f85 // e45b1d276c85875875267eb65da70fd2d5e9176d6914 // license: // 317bd7063bfb9fae1b2e46f4cf15b7bc8c92517ff5c32cbb52ae4b67afc5 // d569cb66a462def7a18a7d0acebf9f6e8a604356ade2c81450c5466a4728 // 90b03eefcf65388f060e24551c67b7d46ae5d4d841d5cc63d137fd543fae // 2c771756590b90e480ca0126f1fc0090ace62499e47569fc52196c788f80 // 139755bdf12a7acb29fd6e23a46a4c036f04ff1ed6cd714094253bf1c587 // 62c93f0ddf8a73c4be927ffec2723a16d8ffe5128851f58537461275f6aa // 1976e3b399b7243919207e040ec16c5328e8ab082278fce0e5d3df5c5f92 // dba51fa6613587d4ece31f2c001b49bfaed434f9512e895c2e09c88ddbf1 // 84bfafe4d82e5d05a26ac06cde29faf6ab05b96685649c923779ce5ef7f3 // 16531ada8e74e45ab1dc1d75648aa2de052674728867e87639ff9b782a33 // key_set_id: "kside1d30b33b55f2deb4716" // usage_entry: // d44a9d70a7c582559f089b1c0fdfcbdaf5e26b672fca5d58e889b407a0ba // 8599079cde11fadfab23aa1b97622839f3b7e1a96f8332bec5fbcbc9eb64 // fd5ed05887b8fa3bfd6ecc7bc91e621342732062d2f4411b763e20328af6 // f8ef5030e2f8027aef9e // usage_entry_index: 6 // drm_certificate_id: 0 // -token: 8f922e955b269458ed1345bde9a24516520a536817e8e8612154a1 // license_request: // d4acc596a52055cee710e1fec44796dbf3ae6b017ab156d9bff7bfdb8f1e // 6352bfbe453034968f940c36ac18800e22bb2ff71268053702ef3fce3fb2 // d607a078e0d1449fcc9d0675d41b1a65f78e3c02370d18112aae1e2577ff // 9087825a45125db5dee8e27bd14ea8666b4e8e6aba6811c40b585aabb9c9 // 185209a48d11130ff690316916961f28286c71c3e985d7dc3352166e414b // 89da2c17cc5b69fc9c00990697f5 // license: // 169d3c432f9c2f8b99e11632bd7d6a63f3d57679c567bedcb2e596ace105 // 0453732040cb468e9c43f6009b430ca4a4046d017e67a4badd5b71c0c9fc // e2274817f0bcda311a4f8703e6dc32aedf30e6f9abd40e249fc8b0a5045c // c1e47e60a60b4893ef92602f5584e1162f4ff3ee6d906228f97b442ace1f // b175d113b671bdbe4ceffdd98f2bb094c0dfac03b79541a44d8affdc987f // 4268706b5a554e998907eb7126e8c6bc07c837d8aeebea3249e37b4b7dd7 // 327300fe7e62c15981cf73a13e806d065bcadc2c747256907a5493592b07 // a0c07f9cd805fcdc0d30f70e4c4b2959a0f52385c6bd3e6eeb4e3d81fdc1 // a9dc3c76faf1bfed913d58567fa9b296d27dff5217c583e7c134a642601f // 8237 // key_set_id: "kside684918d6c39bfa652a40ad936" // usage_entry: // 703f69807c8f4d140168874b924a625132eb3b896a381d617b8fb83c7314 // a6b634d840925f711ae330599f0e0863800902b05d201a8a87b88a4bc170 // 65a1a8a556c34bf86b53afcc9951be15bea9ab55 // usage_entry_index: 27 // drm_certificate_id: 0 // drm_certificate_cache: // -drm_certificate_id: 0 // drm_certificate: // certificate: "another drm certificate" // wrapped_private_key: "another wrapped private key" // key_type: ECC // acquisition_time_seconds: 0 // expiration_time_seconds: 0 a2bs_hex( "0AF60E080310012AEF0E0ADC040A1E9212A6926F21C6727C1EE89D5607047A1636F20" "6F70E21FDA86E01B6A4B512A401EF947ABED64078EDF5B21FE6D3FB65384595D63A6D" "03E4D1D397C5019DEEB6890D3EF8773002B91E255AF0820FB594069DF55D8ABF96498" "E493F5C70F6B85F50E12A1ED3C039AD0CD838FE44D3FA9E2BBDDEB2919041203111ED" "7778701B04D6B15F41D0BDE799E20A38B27BF96FDBE844F10364BAEB593596220993C" "608AC793DE76C237CA350931A7E216538074DBD83DDF262D9F18ACD91E1EA5372F7E7" "73C5B643331A9A027709721B3AA48597E88C99E82EAF7DFF07E87E0318D9D7CEC2909" "6EC591826AA7A359316D6DE1D1329B408543E237DE84C986987EAD1BB6A0C38817E93" "013E5C989D366F49590B834453EC64B7433BF0B3335B9E222BAD4CAF554D69575C585" "95283166FEA42E89645FC7E2D3AC9E0C1399B096CF3FED1E5DEB1BC4E0EE894F0AE3F" "929DD7DBA4530E5655EDBBF6041DF430482EB2E891B6A93AF84D3C16DBAD92733FFD3" "4E8F4CE24506BEAD578D20CD3E291C2FC2F811DB875F49ABC21A24277D2BA474FE6AF" "6C14021CFEAD5513E0999E094020CE08209BBC08F13FE2B96D7BA8213C8E9C85B6A62" "3788D34DA794E17E4CD3BD65680B97FB30BAD64DDC42B1BCFB0B83E5DDA3501A5902C" "A609F41837A0D5CD096E0659B67C221A6B73696436326438386564376232393232313" "7623032333862652A585422463FD2E4DD47626E97DD6B4EE0B89523AAEBE8D11E7E7B" "E703EF01E49B17EAF020CEDE0A9E0E7B5D91E4DB7ABDCE445936CB2DEECDEFEFDB14B" "78F67B7CA5C733C9E88446FD814584584B86BECBF6EB2B0E3D5603E8B30190AFF040A" "1D831FAD51E52A403524539EAB6A1B201E46674CA3B9167B1C1B53F5E5E312AC0136D" "83ACBC5E4ED027ED583E3B2169D98F4ABEDDA15B781408E68EFA14FEFA9F3F0309BCB" "5A9FFF6580636EBE3548E5ACB43B76CFEB29A9C86324E62AEB40556005C6686E718F9" "BF61B0681D43B5B1E88084B3AEA27A6B0E844E5500B6FCFACF2EE44D6AF7F64154AB3" "FD4FBD0B8056CF63971076A1EB3642B78D5E76B84F4ED9F6220089863F8A4911691E7" "9FEFFC9F804C4C36C7F85E45B1D276C85875875267EB65DA70FD2D5E9176D69141AAC" "02317BD7063BFB9FAE1B2E46F4CF15B7BC8C92517FF5C32CBB52AE4B67AFC5D569CB6" "6A462DEF7A18A7D0ACEBF9F6E8A604356ADE2C81450C5466A472890B03EEFCF65388F" "060E24551C67B7D46AE5D4D841D5CC63D137FD543FAE2C771756590B90E480CA0126F" "1FC0090ACE62499E47569FC52196C788F80139755BDF12A7ACB29FD6E23A46A4C036F" "04FF1ED6CD714094253BF1C58762C93F0DDF8A73C4BE927FFEC2723A16D8FFE51288" "51F58537461275F6AA1976E3B399B7243919207E040EC16C5328E8AB082278FCE0E5D" "3DF5C5F92DBA51FA6613587D4ECE31F2C001B49BFAED434F9512E895C2E09C88DDBF1" "84BFAFE4D82E5D05A26AC06CDE29FAF6AB05B96685649C923779CE5EF7F316531ADA8" "E74E45AB1DC1D75648AA2DE052674728867E87639FF9B782A3322186B736964653164" "33306233336235356632646562343731362A64D44A9D70A7C582559F089B1C0FDFCBD" "AF5E26B672FCA5D58E889B407A0BA8599079CDE11FADFAB23AA1B97622839F3B7E1A9" "6F8332BEC5FBCBC9EB64FD5ED05887B8FA3BFD6ECC7BC91E621342732062D2F4411B7" "63E20328AF6F8EF5030E2F8027AEF9E30060ACD040A1B8F922E955B269458ED1345BD" "E9A24516520A536817E8E8612154A112A401D4ACC596A52055CEE710E1FEC44796DBF" "3AE6B017AB156D9BFF7BFDB8F1E6352BFBE453034968F940C36AC18800E22BB2FF712" "68053702EF3FCE3FB2D607A078E0D1449FCC9D0675D41B1A65F78E3C02370D18112AA" "E1E2577FF9087825A45125DB5DEE8E27BD14EA8666B4E8E6ABA6811C40B585AABB9C9" "185209A48D11130FF690316916961F28286C71C3E985D7DC3352166E414B89DA2C17C" "C5B69FC9C00990697F51A9002169D3C432F9C2F8B99E11632BD7D6A63F3D57679C567" "BEDCB2E596ACE1050453732040CB468E9C43F6009B430CA4A4046D017E67A4BADD5B7" "1C0C9FCE2274817F0BCDA311A4F8703E6DC32AEDF30E6F9ABD40E249FC8B0A5045CC1" "E47E60A60B4893EF92602F5584E1162F4FF3EE6D906228F97B442ACE1FB175D113B67" "1BDBE4CEFFDD98F2BB094C0DFAC03B79541A44D8AFFDC987F4268706B5A554E998907" "EB7126E8C6BC07C837D8AEEBEA3249E37B4B7DD7327300FE7E62C15981CF73A13E806" "D065BCADC2C747256907A5493592B07A0C07F9CD805FCDC0D30F70E4C4B2959A0F523" "85C6BD3E6EEB4E3D81FDC1A9DC3C76FAF1BFED913D58567FA9B296D27DFF5217C583E" "7C134A642601F8237221E6B7369646536383439313864366333396266613635326134" "3061643933362A50703F69807C8F4D140168874B924A625132EB3B896A381D617B8FB" "83C7314A6B634D840925F711AE330599F0E0863800902B05D201A8A87B88A4BC17065" "A1A8A556C34BF86B53AFCC9951BE15BEA9AB55301B3800123C080012380A17616E6F7" "46865722064726D206365727469666963617465121B616E6F74686572207772617070" "65642070726976617465206B65791801122082BB366A1D04CD51FA6BE0E5E1F7B9393" "0C2E887586E2E5FBC6838ADDD3A209B")}, // Test vector 8 - app id: "app_1", usage entry count: 2 {"app_1", { // PST: a2bs_hex("d0b9a07ad7ffeec13784bd60da011be3589f3e450227fd36b1a3f6786cdb" "fe8f"), // License request: a2bs_hex("a419c5687a592099dc67da8bc4f5ef238c80fe4ce3e2fcb025392efb1438" "4b581b595a0e8fa95de637fb2184719eb36ad6539ee9df0f67697f91d018" "6e04552e811196029cf4e256518ddf3215af8ec61442c17d6753b93f9d3a" "9240bae39bacf5563659cf47d3a611ce20ed3ebbf86cddad60cc2847c459" "5dcfd934d012ce205960052158461d7c5d480de2e597876e64e8f8de6928" "29a3"), // Licenes: a2bs_hex("f7c19357e50fc474437c1a635c5bae8f6f51afa20750766db19457dff7ae" "f2cae78848a225cc6a088bbcffead5be6aab6fc8af091bf459c3bd9bcfa1" "8de53ef76db1b4826cf0b8ff7b2d7c44bbadb3cd7aedd8f639d1f38c52a5" "8611a9782aeace72be69a73d2e091a1120dc63f7ba6f1cb6cddd69e9a236" "232ed8c14cee665756ba51f1d2e2530ab3662ce1b6efba91c5f10c53abc8" "86d6f25b5dc40417e54270843f3b454c8c047fc366249e30379b0fbe0174" "fcab8b8405ae7f20f6f2b81f11082ff0e270b75f1e1aa7ed5806f4e65b46" "b872dbcb703d7bf20b9ecaa481425a5218d85a49595f3ed268d61f1be8e3" "8e6126eb075fa6b7ae80431c8521c4bc2ce701e45d33bfca9a5b0b66b550" "aab21eae41f84cadfd2517dee9a2c139ad475c387d25"), // Key set ID: "ksid321bb636f8a3f5cd5d54a236", // Usage entry: a2bs_hex("c3cb027611397b5d70cc0b08e0f5249cd19996da674e33722902173d45d7" "09914a3d7e898d93170317bfcff34861c0d687048cc93542a75a2c99b232" "3fafea1ee0c3e3d24edf2633"), // Usage entry index: 7, // DRM certificate: kDrmCertificate, // Wrapped private key. kCryptoWrappedKey, }, // File contents for test vector 8 // sessions: // -token: // bb3370ccd3c3c49573d6b74386d1886d9888bd81fe3241bcd2bac9407d1a // 834e // license_request: // dc0e51cfa5863f6c0b32a4ad7fa40625dadcc2dcde9e7fa3983b8804d996 // 6803181682fc8ae831472e0b2fc26276242fbce624d286eedecce5555804 // 913b4f8f86c5ae86160b8434b109169a63da04c5265102d772c1180543ef // 226d2140357aca6cf87da3f7e370dfc08ca92a1f7c7d314eab36292a9170 // 8f6c6ad84b37ee1c7dfafb99289206cb752d063f330efd85885f4b72ba1c // a5823eed865a461345e3d6417872bf3b0608b3d9e1004c11e7326d3ed406 // 192e13455d0ec4e1f558a147 // license: // f42a68ca3a14fb68f5992e4519f57970c3dae73f8da1d5b0b1da3eff7a95 // 4012a0dc634357f3f5477a820e182182f24ae8e835ab10c18386cc8a0727 // d3f38b628639bfbd69a94d4053eab1c31e075e014cc578b226cfe24d6b42 // db242972def8f23a4aae88451307c2abaf54c1803ae54e3f1149aa6e6d42 // 88cc7d474e876be07954e8b2deff4ade4bf30229fb6c92df4d66cd463f68 // 6b4754b940210eb59f1581d658ddf8de8389e0e2d123e2cae3c2be6eb194 // 8ccc896dd4cdf45f9090c96dfb925795cfb4ccda83e3eb4f745577b17fc1 // 66bf5f4103c9085134cad7863a41b04f32ef20201e54b55f1817ce589619 // b096c254fd2c2fa4a06f4de35ccfd23e // key_set_id: "kside11109bf20cde544083ef4ee" // usage_entry: // ea106c124476b753d39368a5966972a2729bb8bbea734a2b3e812b705eac // e016c8a03c9a406094d80059ef4ca26f1928fa2daa5de9a6f22372e5c7a9 // 41e610d1efb56ed7ce2228a70e2e150afb66edc2da066d463aa90ba0caff // 078fbfec05c8 // usage_entry_index: 0 // drm_certificate_id: 0 // -token: // eace80e30bfda213f1ce4dbcfd9d4d24b8e2ae00054d167d9d7ae9954706 // 2b9113 // license_request: // 68a7665a21348fc0590328608dc520be40f5b749328568fe383ef69c1a58 // 7ab2446cf9c41d821373d0856a883b316519a42218f80e7bd5764d16bac9 // a9b427a7278f5940e563fcf6dee0ff3aadbb702ebf2c54ec354ae7acc84e // e6a54bca1f30e38ef71c44a81d0009b1484feaf4f1a56f58c35bb2372c80 // c6dfb389e6de60bdd3d46c03975715260f6fdbe42facb64c22eda9635c04 // da79434e1c41fbd2fdbbab6598283226c0278e8e0a96d780d3436523efd1 // license: // ff6fecf7157828812a2d6dcb15383a6d9af4519ef804c6053a10c436002d // e3a4efcc017755f4ad1101bdc813e2d211732418dee529cbb413c48aa588 // 4c76a5c6f556a715055560d4247f5bf310956949a3a171a4aa608a484468 // 84e7676d558ff64d392b84e617805693d90f1e9b7b540c383d384d7f7ce0 // 6c23618681bd838ceb1a514047f1c562c43159cc5e21588fbfce8a354111 // 160f1a1e2bd3d798a000579bdfdb977252809ee1502df8045972fe8aac84 // 0211c2f8d9e4d5be18509c327c647d654c4b6cc430b98f1ff37c96fab087 // fb561b8cc18480f877c873594d3148ff74b0e3c6327c27ca876dae742239 // 8fc5e85269cba49ad099 // key_set_id: "ksid8e80350cbef6463a0025e6cc" // usage_entry: // 7ccc7ce96055e16a52fa192ea2cf3c9df3e89b9133a52286f71e6c6d82d0 // 435f6b2155dfde590b347d8c86f62d7dfbaae640c237256f609e5da9cc6c // 103465fe3441612bbdfdf4d1c24b2147feb8565cef4993e439c9d564a39a // 4ac5bb1da69acb44da06e4522c9a93d310cdda5dac1e1e0b91abff41e4e2 // edda4001 // usage_entry_index: 7 // drm_certificate_id: 0 // -token: // d0b9a07ad7ffeec13784bd60da011be3589f3e450227fd36b1a3f6786cdb // fe8f // license_request: // a419c5687a592099dc67da8bc4f5ef238c80fe4ce3e2fcb025392efb1438 // 4b581b595a0e8fa95de637fb2184719eb36ad6539ee9df0f67697f91d018 // 6e04552e811196029cf4e256518ddf3215af8ec61442c17d6753b93f9d3a // 9240bae39bacf5563659cf47d3a611ce20ed3ebbf86cddad60cc2847c459 // 5dcfd934d012ce205960052158461d7c5d480de2e597876e64e8f8de6928 // 29a3 // license: // f7c19357e50fc474437c1a635c5bae8f6f51afa20750766db19457dff7ae // f2cae78848a225cc6a088bbcffead5be6aab6fc8af091bf459c3bd9bcfa1 // 8de53ef76db1b4826cf0b8ff7b2d7c44bbadb3cd7aedd8f639d1f38c52a5 // 8611a9782aeace72be69a73d2e091a1120dc63f7ba6f1cb6cddd69e9a236 // 232ed8c14cee665756ba51f1d2e2530ab3662ce1b6efba91c5f10c53abc8 // 86d6f25b5dc40417e54270843f3b454c8c047fc366249e30379b0fbe0174 // fcab8b8405ae7f20f6f2b81f11082ff0e270b75f1e1aa7ed5806f4e65b46 // b872dbcb703d7bf20b9ecaa481425a5218d85a49595f3ed268d61f1be8e3 // 8e6126eb075fa6b7ae80431c8521c4bc2ce701e45d33bfca9a5b0b66b550 // aab21eae41f84cadfd2517dee9a2c139ad475c387d25 // key_set_id: "ksid321bb636f8a3f5cd5d54a236" // usage_entry: // c3cb027611397b5d70cc0b08e0f5249cd19996da674e33722902173d45d7 // 09914a3d7e898d93170317bfcff34861c0d687048cc93542a75a2c99b232 // 3fafea1ee0c3e3d24edf2633 // usage_entry_index: 7 // drm_certificate_id: 0 // drm_certificate_cache: // -drm_certificate_id: 0 // drm_certificate: // certificate: "a drm certificate" // wrapped_private_key: "a wrapped private key" // key_type: RSA // acquisition_time_seconds: 0 // expiration_time_seconds: 0 a2bs_hex( "0AF30E080310012AEC0E0AEA040A20BB3370CCD3C3C49573D6B74386D1886D9888BD8" "1FE3241BCD2BAC9407D1A834E12C001DC0E51CFA5863F6C0B32A4AD7FA40625DADCC2" "DCDE9E7FA3983B8804D9966803181682FC8AE831472E0B2FC26276242FBCE624D286E" "EDECCE5555804913B4F8F86C5AE86160B8434B109169A63DA04C5265102D772C11805" "43EF226D2140357ACA6CF87DA3F7E370DFC08CA92A1F7C7D314EAB36292A91708F6C6" "AD84B37EE1C7DFAFB99289206CB752D063F330EFD85885F4B72BA1CA5823EED865A46" "1345E3D6417872BF3B0608B3D9E1004C11E7326D3ED406192E13455D0EC4E1F558A14" "71A8002F42A68CA3A14FB68F5992E4519F57970C3DAE73F8DA1D5B0B1DA3EFF7A9540" "12A0DC634357F3F5477A820E182182F24AE8E835AB10C18386CC8A0727D3F38B62863" "9BFBD69A94D4053EAB1C31E075E014CC578B226CFE24D6B42DB242972DEF8F23A4AAE" "88451307C2ABAF54C1803AE54E3F1149AA6E6D4288CC7D474E876BE07954E8B2DEFF4" "ADE4BF30229FB6C92DF4D66CD463F686B4754B940210EB59F1581D658DDF8DE8389E0" "E2D123E2CAE3C2BE6EB1948CCC896DD4CDF45F9090C96DFB925795CFB4CCDA83E3EB4" "F745577B17FC166BF5F4103C9085134CAD7863A41B04F32EF20201E54B55F1817CE58" "9619B096C254FD2C2FA4A06F4DE35CCFD23E221C6B736964653131313039626632306" "3646535343430383365663465652A60EA106C124476B753D39368A5966972A2729BB8" "BBEA734A2B3E812B705EACE016C8A03C9A406094D80059EF4CA26F1928FA2DAA5DE9A" "6F22372E5C7A941E610D1EFB56ED7CE2228A70E2E150AFB66EDC2DA066D463AA90BA0" "CAFF078FBFEC05C830000AF7040A21EACE80E30BFDA213F1CE4DBCFD9D4D24B8E2AE0" "0054D167D9D7AE99547062B911312B40168A7665A21348FC0590328608DC520BE40F5" "B749328568FE383EF69C1A587AB2446CF9C41D821373D0856A883B316519A42218F80" "E7BD5764D16BAC9A9B427A7278F5940E563FCF6DEE0FF3AADBB702EBF2C54EC354AE7" "ACC84EE6A54BCA1F30E38EF71C44A81D0009B1484FEAF4F1A56F58C35BB2372C80C6D" "FB389E6DE60BDD3D46C03975715260F6FDBE42FACB64C22EDA9635C04DA79434E1C41" "FBD2FDBBAB6598283226C0278E8E0A96D780D3436523EFD11AFA01FF6FECF71578288" "12A2D6DCB15383A6D9AF4519EF804C6053A10C436002DE3A4EFCC017755F4AD1101BD" "C813E2D211732418DEE529CBB413C48AA5884C76A5C6F556A715055560D4247F5BF31" "0956949A3A171A4AA608A48446884E7676D558FF64D392B84E617805693D90F1E9B7B" "540C383D384D7F7CE06C23618681BD838CEB1A514047F1C562C43159CC5E21588FBFC" "E8A354111160F1A1E2BD3D798A000579BDFDB977252809EE1502DF8045972FE8AAC84" "0211C2F8D9E4D5BE18509C327C647D654C4B6CC430B98F1FF37C96FAB087FB561B8CC" "18480F877C873594D3148FF74B0E3C6327C27CA876DAE7422398FC5E85269CBA49AD0" "99221C6B7369643865383033353063626566363436336130303235653663632A7C7CC" "C7CE96055E16A52FA192EA2CF3C9DF3E89B9133A52286F71E6C6D82D0435F6B2155DF" "DE590B347D8C86F62D7DFBAAE640C237256F609E5DA9CC6C103465FE3441612BBDFDF" "4D1C24B2147FEB8565CEF4993E439C9D564A39A4AC5BB1DA69ACB44DA06E4522C9A93" "D310CDDA5DAC1E1E0B91ABFF41E4E2EDDA4001300738000AD0040A20D0B9A07AD7FFE" "EC13784BD60DA011BE3589F3E450227FD36B1A3F6786CDBFE8F129801A419C5687A59" "2099DC67DA8BC4F5EF238C80FE4CE3E2FCB025392EFB14384B581B595A0E8FA95DE63" "7FB2184719EB36AD6539EE9DF0F67697F91D0186E04552E811196029CF4E256518DDF" "3215AF8EC61442C17D6753B93F9D3A9240BAE39BACF5563659CF47D3A611CE20ED3EB" "BF86CDDAD60CC2847C4595DCFD934D012CE205960052158461D7C5D480DE2E597876E" "64E8F8DE692829A31AA402F7C19357E50FC474437C1A635C5BAE8F6F51AFA20750766" "DB19457DFF7AEF2CAE78848A225CC6A088BBCFFEAD5BE6AAB6FC8AF091BF459C3BD9B" "CFA18DE53EF76DB1B4826CF0B8FF7B2D7C44BBADB3CD7AEDD8F639D1F38C52A58611A" "9782AEACE72BE69A73D2E091A1120DC63F7BA6F1CB6CDDD69E9A236232ED8C14CEE66" "5756BA51F1D2E2530AB3662CE1B6EFBA91C5F10C53ABC886D6F25B5DC40417E542708" "43F3B454C8C047FC366249E30379B0FBE0174FCAB8B8405AE7F20F6F2B81F11082FF0" "E270B75F1E1AA7ED5806F4E65B46B872DBCB703D7BF20B9ECAA481425A5218D85A495" "95F3ED268D61F1BE8E38E6126EB075FA6B7AE80431C8521C4BC2CE701E45D33BFCA9A" "5B0B66B550AAB21EAE41F84CADFD2517DEE9A2C139AD475C387D25221C6B736964333" "2316262363336663861336635636435643534613233362A48C3CB027611397B5D70CC" "0B08E0F5249CD19996DA674E33722902173D45D709914A3D7E898D93170317BFCFF34" "861C0D687048CC93542A75A2C99B2323FAFEA1EE0C3E3D24EDF263330073800123008" "00122C0A11612064726D2063657274696669636174651215612077726170706564207" "0726976617465206B657918001220C662693A9E231B85CEB7A3A50DEAA8279777B363" "2C6D9ABC12FBB295018482E4")}, }; // kUsageInfoTestData const DeviceFiles::CdmUsageData kUsageInfoUpdateTestData = { a2bs_hex("b8e7f26b6b83d6b74386d1886d9888bd81fe3241bca928f09407329814ae" "5a82"), a2bs_hex("4463dc57079c27e34ae115c6f65b08f6311c4ea604a6512c42470b6f692a" "6803181682fc8ae831472e0b2fc26276242fbce624d286eedecce5555804" "913b4f8f86c5ae86160b8434b109169a63da04c5265102d772c1180543ef" "226d2140357aca6cf87da3f7e370dfc08ca92a1f7c7d314eab36292a9170" "26eb30165372d538b551ebd7bae5cf0bbeebb3cdb6f180d42868051aab8f" "e50379507b41620d15dd76c0b1e7ed9417efd6825959b5077f464e6429a4" "6ffc101036da70e69c06e4916493e82e9fe3f65d85254c8c14f6ca0579bf" "2a0d4d1915cd0537ff0f62cf13eb2fa2"), a2bs_hex("bbe6b4b60da9d9bc34dcc8502fb81d8fd5fdbc8fa89605c86205f2b8c6530ff64" "c84012a0dc634357f3f5477a820e182182f24ae8e835ab10c18386cc8a0727816" "a6144a12b6c22d1dceba20669ed635a40831066abd8071342119d7da11c43696b" "289d3f38b628639bfbd69a94d4053eab1c31e075e014cc578b226cfe24d6b4272" "dffffb6e79bbceaf8594045d16a62eed16904a3569860c531a32eaa5abb868b1d" "d6adb242972def8f23a4aae88451307c2abaf54c1803ae54e3f1149aa6e6d42ae" "d30e9ffa99fc00b47f7eeb469512a413e873f91d959cccacccd3585b7f00ed8d4" "685022101713c3adc439f27512a45926c1d2473477662c4bace72f380d105ddc9" "f88cc7d474e876be07954e8b2deff4ade4bf30229fb6c92df4d66cd463f6848fe" "e82b655583317eca4aaa4dac841524a2dca111749629637ef29fa7e72645a8759" "57fb6b4754b940210eb59f1581d658ddf8de8389e0e2d123e2cae3c2be6eb1943" "ea7458823f0229f2fa90b7a7099e8ec349d3d0fe0277cba5157ca62c8fbaa893f" "37b8c8cea2a0d2d2912caccf92d31aa17439479711b4a5b77445cc02c18bfe019" "5ce8ccc896dd4cdf45f9090c96dfb925795cfb4ccda83e3eb4f745577b17fc199" "6ec66bf5f4103c9085134cad7863a41b04f32ef20201e54b55f1817ce5896195b" "376874e9750212fe94d7656d9cd835db3b771ba5b58d2b255"), "ksid854c89bf20cde54122c24fca", a2bs_hex("7d2b905e368a5966972a2729bb8bbea734a2b21a68eb26cc8c3b2e344579" "003b12a3855016c8a03c9a406094d80059ef4ca26f1928fa2a3f0782c72d" "ba0e2228a70e2e150afb66e305e4bc0b2561ae2b"), 6, kEmptyString, CryptoWrappedKey(), }; // kUsageInfoUpdateTestData struct HlsAttributesInfo { std::string key_set_id; CdmHlsMethod method; std::string media_segment_iv; std::string file_data; }; const HlsAttributesInfo kHlsAttributesTestData[] = { { "ksidC8EAA2579A282EB0", kHlsMethodAes128, // hls attributes 0 a2bs_hex("F7C4D15BD466BF285E241A4E58638543"), a2bs_hex("0A1A08041001321408011210F7C4D15BD466BF285E241A4E5863854312201" "39114B0372FF80FADF92614106E27BE8BD1588B4CAE6E1AEFB7F9C34EA52E" "CC"), }, { "ksidE8C37662C88DC673", kHlsMethodSampleAes, // hls attributes 1 a2bs_hex("16413F038088438B5D4CD99F03EBB3D8"), a2bs_hex("0A1A0804100132140802121016413F038088438B5D4CD99F03EBB3D812205" "9EA13188B75C55D1EB78B3A65DB3EA3F43BD1B16642266D988E3543943C5F" "41"), }}; constexpr size_t kNumberOfHlsAttributes = ArraySize(kHlsAttributesTestData); // Usage Table and Entry Test Data // Note: Make sure the number of entries in kUsageEntriesTestData and // kUsageTableInfoTestData are equal. const CdmUsageEntryInfo kUsageEntriesTestData[] = { // usage entry 0 {kStorageLicense, "ksid0", "", 1318402800, 1321254000}, // usage entry 1 {kStorageLicense, "ksid1", "", 1050649200, 1053500400}, // usage entry 2 {kStorageUsageInfo, "", "app_id_2", 694252800, 0}, // usage entry 3 {kStorageUsageInfo, "", "app_id_3", 983001600, 0}, // usage entry 4 {kStorageLicense, "ksid4", "", 316166400, 319017600}, // usage entry 5 {kStorageUsageInfo, "", "app_id_5", 802162800, 0}, }; struct UsageTableTestInfo { UsageTableHeader usage_table_header; std::string file_data; }; const UsageTableTestInfo kUsageTableInfoTestData[] = { // usage table 0 {a2bs_hex("5574517CCC"), a2bs_hex("0A26080510013A200A055574517CCC1215080112056B7369643020F0F5D4F404" "28F0F882F6041801122055C2834976220A2819445B8D6EF5ADE9D7A050006941" "3EDFB9948F928B317B89")}, // usage table 1 {a2bs_hex("CA870203010001288001"), a2bs_hex("0A46080510013A400A0ACA8702030100012880011217080112056B736964301A" "0020F0F5D4F40428F0F882F6041217080112056B736964311A0020F0C4FEF403" "28F0C7ACF60318011220B000674E4E24E67384C4631DE05CB3C1E07CDE6B0412" "CACE359DEAED6CF2D566")}, // usage table 2 {a2bs_hex("7A7D507618A5D3A68F05228E023082010A028201"), a2bs_hex("0A66080510013A600A147A7D507618A5D3A68F05228E023082010A0282011217" "080112056B736964301A0020F0F5D4F40428F0F882F6041217080112056B7369" "64311A0020F0C4FEF40328F0C7ACF6031214080212001A086170705F69645F32" "2080EA85CB02180112202701F8F75537EBA12217796401A81E9E0F59A5B10F51" "F6C12E3BE3D8747CB745")}, // usage table 3 {a2bs_hex("E83A4902772DAFD2740B7748E9C3B1752D6F12859CED07E82969B4EC"), a2bs_hex("0A8401080510013A7E0A1CE83A4902772DAFD2740B7748E9C3B1752D6F12859C" "ED07E82969B4EC1217080112056B736964301A0020F0F5D4F40428F0F882F604" "1217080112056B736964311A0020F0C4FEF40328F0C7ACF6031214080212001A" "086170705F69645F322080EA85CB021214080212001A086170705F69645F3320" "80D4DDD40318011220776BD3D0BBCC573AEC7466A8B0E4F1A013495A3BE492F3" "FF4BA3D15FC9697902")}, // usage table 4 {a2bs_hex("CA870203010001288001300112800250D1F8B1ECF849B60FF93E37C4DEEF" "52F1CCFC047EF42300131F9C4758F4"), a2bs_hex("0AAF01080510013AA8010A2DCA870203010001288001300112800250D1F8B1EC" "F849B60FF93E37C4DEEF52F1CCFC047EF42300131F9C4758F41217080112056B" "736964301A0020F0F5D4F40428F0F882F6041217080112056B736964311A0020" "F0C4FEF40328F0C7ACF6031214080212001A086170705F69645F322080EA85CB" "021214080212001A086170705F69645F332080D4DDD4031217080112056B7369" "64341A002080A2E196012880A58F980118011220E7F0F123E513FCF3BC6BC17B" "1531A8317654C5EF005655348D82FA01FDAD85CB")}, // usage table 5 {a2bs_hex("EC83A4902772DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433E" "C29AC6FDBE79230B0FAED5D94CF6B829A420BBE3270323941776EE60DD6B"), a2bs_hex("0AD401080510013ACD010A3CEC83A4902772DAFD2740B7748E9C3B1752D6F128" "59CED07E8882969B433EC29AC6FDBE79230B0FAED5D94CF6B829A420BBE32703" "23941776EE60DD6B1217080112056B736964301A0020F0F5D4F40428F0F882F6" "041217080112056B736964311A0020F0C4FEF40328F0C7ACF603121408021200" "1A086170705F69645F322080EA85CB021214080212001A086170705F69645F33" "2080D4DDD4031217080112056B736964341A002080A2E196012880A58F980112" "14080212001A086170705F69645F3520F090C0FE0218011220A35C771A67AECF" "06A72468DC2C380E5CFDCD377A8ADF848F26B7F22D24D23872")}, }; const CdmUsageEntryInfo kUsageEntriesWithoutLruData[] = { {kStorageLicense, "ksid0", "", 0, 0}, {kStorageUsageInfo, "", "app_id_1", 0, 0}}; const std::string kUsageTableWithoutLruData = a2bs_hex( "0A1F080510013A191209080112056B73696430120C08021A086170705F69645F" "31122044C964271799F0631AE388BD150A873C5DD16B35F61BFF0300857AEEB8" "454FA2"); // DeleteMultipleUsageInfoByKeySetIds test data. const std::string kHashedUsageInfoFileWithThreeKeySetIds = a2bs_hex( "0A36080310012A300A0E220C6B65795F7365745F69645F310A0E220C6B65795F" "7365745F69645F320A0E220C6B65795F7365745F69645F331220781BE848CE8A" "0CE84FF563D54D30150A115EAB27F7023C19191EC41BDC4EDAA9"); // Only contains key set ID 1 & 2. const std::string kHashedUsageInfoFileWithTwoKeySetIds = a2bs_hex( "0A26080310012A200A0E220C6B65795F7365745F69645F310A0E220C6B65795F" "7365745F69645F321220B693E7142BF263FF51B6F8AF4DD7F20E2701059A841C" "F947995A7B39354E1CA9"); const std::string kHashedUsageInfoFileWithKeySet1 = a2bs_hex( "0A16080310012A100A0E220C6B65795F7365745F69645F3112200FBBB47C89DE" "484D02BFB4CB20B19BA43CBCAD6F4A78EFB295ACC66BA0B83B85"); const std::string kHashedUsageInfoFileWithKeySet2 = a2bs_hex( "0A16080310012A100A0E220C6B65795F7365745F69645F321220B5F53E5A1D8E" "860196D2B3E027FFB32F11C1B2269784A904A3EA6E59C2A6A96D"); const std::string kHashedUsageInfoFileWithKeySet3 = a2bs_hex( "0A16080310012A100A0E220C6B65795F7365745F69645F331220F28C1B20A302" "543F44659D995A58899A03B9D51C65FD6C05AD1E6D2BACACADA7"); const std::vector kHashedUsageInfoFileWithSingleKeySetList = { kHashedUsageInfoFileWithKeySet1, kHashedUsageInfoFileWithKeySet2, kHashedUsageInfoFileWithKeySet3}; const std::vector kHashedUsageInfoFileKeySetList = { "key_set_id_1", "key_set_id_2", "key_set_id_3"}; // Contains kOemCertificate and kCryptoWrappedKey const std::string kFakeOemCertificateFile = a2bs_hex( "0A33080710014A2D0A12616E206F656D206365727469666963617465121561207772617070" "65642070726976617465206B6579180012201C910430EBCEDD66BF0FBFE52917A71C6B66D5" "DF1E01EA43D3A375B0703E1E1B"); class MockFile : public File { public: MockFile() {} ~MockFile() override {} MOCK_METHOD(ssize_t, Read, (char*, size_t), (override)); MOCK_METHOD(ssize_t, Write, (const char*, size_t), (override)); }; class MockFileSystem : public wvutil::FileSystem { public: MockFileSystem() {} ~MockFileSystem() override {} MOCK_METHOD(std::unique_ptr, Open, (const std::string&, int flags), (override)); MOCK_METHOD(bool, Exists, (const std::string&), (override)); MOCK_METHOD(bool, Exists, (const std::string&, int*), (override)); MOCK_METHOD(bool, Remove, (const std::string&), (override)); MOCK_METHOD(ssize_t, FileSize, (const std::string&), (override)); MOCK_METHOD(bool, List, (const std::string&, std::vector*), (override)); }; } // namespace // gmock methods using ::testing::_; using ::testing::AllArgs; using ::testing::AtLeast; using ::testing::ByMove; using ::testing::DoAll; using ::testing::Eq; using ::testing::Expectation; using ::testing::Invoke; using ::testing::NotNull; using ::testing::Return; using ::testing::ReturnArg; using ::testing::SetArgPointee; using ::testing::SetArrayArgument; using ::testing::StrEq; class DeviceFilesTest : public ::testing::Test { protected: void SetUp() override { ASSERT_TRUE(Properties::GetDeviceFilesBasePath(kSecurityLevelL1, &device_base_path_)); } size_t GetLicenseDataSize(const LicenseInfo& data) { CdmAppParameterMap app_parameters = GetAppParameters(data.app_parameters); size_t app_parameters_len = 0; for (auto itr = app_parameters.cbegin(); itr != app_parameters.cend(); ++itr) { app_parameters_len += itr->first.length(); app_parameters_len += itr->second.length(); } return sizeof(CdmOfflineLicenseState) + data.pssh_data.size() + data.key_request.size() + data.key_response.size() + data.key_renewal_request.size() + data.key_renewal_response.size() + data.key_release_url.size() + 3 * sizeof(int64_t) + app_parameters_len + data.usage_entry.size(); } CdmAppParameterMap GetAppParameters(std::string str) { CdmAppParameterMap app_parameters; size_t start_pos = 0; size_t len = str.length(); while (start_pos < len) { size_t name_end_pos = str.find(' ', start_pos); if (name_end_pos == std::string::npos) return app_parameters; if (name_end_pos + 1 >= len) return app_parameters; size_t value_end_pos = str.find(' ', name_end_pos + 1); app_parameters[str.substr(start_pos, name_end_pos - start_pos)] = str.substr(name_end_pos + 1, value_end_pos - name_end_pos - 1); if (value_end_pos == std::string::npos || value_end_pos + 1 >= len) return app_parameters; start_pos = value_end_pos + 1; } return app_parameters; } std::string device_base_path_; }; class DeviceFilesStoreTest : public DeviceFilesTest, public ::testing::WithParamInterface {}; class DeviceFilesSecurityLevelTest : public DeviceFilesTest, public ::testing::WithParamInterface {}; class DeviceFilesUsageInfoListTest : public DeviceFilesTest, public ::testing::WithParamInterface { }; class DeviceFilesUsageInfoTest : public DeviceFilesTest, public ::testing::WithParamInterface {}; class DeviceFilesHlsAttributesTest : public DeviceFilesTest, public ::testing::WithParamInterface {}; class DeviceFilesUsageTableTest : public DeviceFilesTest, public ::testing::WithParamInterface {}; class DeviceFilesDeleteMultipleUsageInfoTest : public DeviceFilesTest, public ::testing::WithParamInterface {}; MATCHER(IsCreateFileFlagSet, "") { return wvutil::FileSystem::kCreate & arg; } MATCHER_P(StrAndLenEq, str, "") { const std::string data(std::get<0>(arg), std::get<1>(arg)); return data == str; } MATCHER_P(StrAndLenContains, str_vector, "") { const std::string data(std::get<0>(arg), std::get<1>(arg)); for (const std::string& str : str_vector) { if (data.find(str) == std::string::npos) { return false; } } return true; } TEST_F(DeviceFilesTest, StoreCertificateInvalidParams) { const std::string certificate(CdmRandom::RandomData(kCertificateLen)); const CryptoWrappedKey private_key(CryptoWrappedKey::kRsa, CdmRandom::RandomData(kWrappedKeyLen)); const CryptoWrappedKey empty_private_key; MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); // Empty parameters EXPECT_FALSE(device_files.StoreCertificate(kEmptyString, private_key)); EXPECT_FALSE(device_files.StoreCertificate(certificate, empty_private_key)); // Certificate is not a valid Signed DRM certificate EXPECT_FALSE(device_files.StoreCertificate(certificate, private_key)); // Certificate has an invalid creation time (negative or unlimited) EXPECT_FALSE(device_files.StoreCertificate( kTestCertificateWithInvalidCreationTime, private_key)); EXPECT_FALSE(device_files.StoreCertificate( kTestCertificateNoExpirationWithUnlimitedCreationTime, private_key)); } class StoreCertificateTest : public DeviceFilesTest, public ::testing::WithParamInterface {}; TEST_P(StoreCertificateTest, DefaultAndLegacy) { MockFileSystem file_system; const bool certificate_type_default = GetParam(); /* otherwise legacy */ const std::string& certificate = certificate_type_default ? kTestCertificateWithFutureExpiration : kTestCertificateWithoutExpiration; const CryptoWrappedKey private_key(CryptoWrappedKey::kRsa, CdmRandom::RandomData(kWrappedKeyLen)); std::string certificate_file_name; if (certificate_type_default) { EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); } else { EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateLegacy, &certificate_file_name)); } const std::string device_certificate_path = device_base_path_ + certificate_file_name; // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Open(StrEq(device_certificate_path), IsCreateFileFlagSet())) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Write(_, _)) .With(AllArgs(StrAndLenContains( std::vector{certificate, private_key.key()}))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(*file, Read(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_TRUE(device_files.StoreCertificate(certificate, private_key)); } INSTANTIATE_TEST_SUITE_P(CertificateTest, StoreCertificateTest, ::testing::Values(false, true)); TEST_F(DeviceFilesTest, RetrieveCertificateInvalidParams) { std::string certificate, serial_number; CryptoWrappedKey wrapped_private_key; uint32_t system_id; MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_EQ(DeviceFiles::kCannotHandle, device_files.RetrieveCertificate(false, &certificate, nullptr, &serial_number, &system_id)); EXPECT_EQ( DeviceFiles::kCannotHandle, device_files.RetrieveCertificate(false, nullptr, &wrapped_private_key, &serial_number, &system_id)); } TEST_F(DeviceFilesTest, RetrieveAtscCertificate) { MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName(DeviceFiles::kCertificateAtsc, &certificate_file_name)); const std::string device_certificate_path = device_base_path_ + certificate_file_name; const std::string& data = kTestCertificateFileDataWithoutExpiration; // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path), NotNull())) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(device_certificate_path))) .WillOnce(Return(data.size())); EXPECT_CALL(file_system, Open(StrEq(device_certificate_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), Eq(data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(data.begin(), data.end()), Return(data.size()))); EXPECT_CALL(*file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; std::string serial_number; uint32_t system_id = 0; ASSERT_EQ(DeviceFiles::kCertificateValid, device_files.RetrieveCertificate(true, &certificate, &private_key, &serial_number, &system_id)); EXPECT_EQ(kTestCertificateWithoutExpiration, certificate); EXPECT_EQ(kTestWrappedKey, private_key); EXPECT_EQ("7CB49F987A635E1E0A52184694582D6E", b2a_hex(serial_number)); } TEST_F(DeviceFilesTest, RetrieveAtscCertificateNotFound) { MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName(DeviceFiles::kCertificateAtsc, &certificate_file_name)); const std::string device_certificate_path = device_base_path_ + certificate_file_name; EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path))) .WillOnce(Return(false)); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; std::string serial_number; uint32_t system_id = 0; ASSERT_EQ(DeviceFiles::kCertificateNotFound, device_files.RetrieveCertificate(true, &certificate, &private_key, &serial_number, &system_id)); } /* TODO(b/192430982): Renable expiration of legacy DRM certificates TEST_F(DeviceFilesTest, RetrieveLegacyCertificateWithoutExpirationTime) { MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateLegacy, &certificate_file_name)); const std::string device_legacy_certificate_path = device_base_path_ + certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); const std::string device_default_certificate_path = device_base_path_ + certificate_file_name; const std::string& data = kTestCertificateFileDataWithoutExpiration; // Call to Open will return a unique_ptr, freeing this object. MockFile* read_file = new MockFile(); MockFile* write_file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(device_legacy_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(device_default_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(false)); EXPECT_CALL(file_system, FileSize(StrEq(device_legacy_certificate_path))) .WillOnce(Return(data.size())); // Retrieving the legacy license will cause a read as well as a write // to fill in a random expiry date ~6 months later if one has not been set EXPECT_CALL(file_system, Open(StrEq(device_legacy_certificate_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(read_file)))) .WillOnce(Return(ByMove(std::unique_ptr(write_file)))); EXPECT_CALL(*read_file, Read(NotNull(), Eq(data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(data.begin(), data.end()), Return(data.size()))); EXPECT_CALL(*read_file, Write(_, _)).Times(0); EXPECT_CALL(*write_file, Read(_, _)).Times(0); EXPECT_CALL(*write_file, Write(_, _)) .With(AllArgs(StrAndLenContains(std::vector{ kTestCertificateWithoutExpiration, kTestWrappedKey.key()}))) .WillOnce(ReturnArg<1>()); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; std::string serial_number; uint32_t system_id = 0; ASSERT_EQ(DeviceFiles::kCertificateValid, device_files.RetrieveCertificate(false, &certificate, &private_key, &serial_number, &system_id)); EXPECT_EQ(kTestCertificateWithoutExpiration, certificate); EXPECT_EQ(kTestWrappedKey, private_key); EXPECT_EQ("7CB49F987A635E1E0A52184694582D6E", b2a_hex(serial_number)); } TEST_F(DeviceFilesTest, RetrieveLegacyCertificateWithClientExpirationTime) { MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateLegacy, &certificate_file_name)); const std::string device_legacy_certificate_path = device_base_path_ + certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); const std::string device_default_certificate_path = device_base_path_ + certificate_file_name; const std::string& data = kTestLegacyCertificateFileDataWithClientExpiration; // Call to Open will return a unique_ptr, freeing this object. MockFile* read_file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(device_legacy_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(device_default_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(false)); EXPECT_CALL(file_system, FileSize(StrEq(device_legacy_certificate_path))) .WillOnce(Return(data.size())); EXPECT_CALL(file_system, Open(StrEq(device_legacy_certificate_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(read_file)))); EXPECT_CALL(*read_file, Read(NotNull(), Eq(data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(data.begin(), data.end()), Return(data.size()))); EXPECT_CALL(*read_file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; std::string serial_number; uint32_t system_id = 0; // Retrieve the legacy certificate. The expiration data is in the future. ASSERT_EQ(DeviceFiles::kCertificateValid, device_files.RetrieveCertificate(false, &certificate, &private_key, &serial_number, &system_id)); EXPECT_EQ(kTestCertificateWithoutExpiration, certificate); EXPECT_EQ(kTestWrappedKey, private_key); EXPECT_EQ("7CB49F987A635E1E0A52184694582D6E", b2a_hex(serial_number)); } class RetrieveLegacyCertificateTest : public DeviceFilesTest, public ::testing::WithParamInterface {}; TEST_P(RetrieveLegacyCertificateTest, ErrorScenarios) { const size_t index = GetParam(); MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateLegacy, &certificate_file_name)); const std::string device_legacy_certificate_path = device_base_path_ + certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); const std::string device_default_certificate_path = device_base_path_ + certificate_file_name; const CertificateErrorData& param = kRetrieveLegacyCertificateErrorData[index]; const std::string& data = param.file_data; // Call to Open will return a unique_ptr, freeing this object. MockFile* read_file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(device_legacy_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(device_default_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(false)); EXPECT_CALL(file_system, FileSize(StrEq(device_legacy_certificate_path))) .WillOnce(Return(data.size())); EXPECT_CALL(file_system, Open(StrEq(device_legacy_certificate_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(read_file)))); EXPECT_CALL(*read_file, Read(NotNull(), Eq(data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(data.begin(), data.end()), Return(data.size()))); EXPECT_CALL(*read_file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; std::string serial_number; uint32_t system_id = 0; // Retrieve the legacy certificate. The license has expired. ASSERT_EQ(param.certificate_state, device_files.RetrieveCertificate(false, &certificate, &private_key, &serial_number, &system_id)); if (param.certificate_state == DeviceFiles::kCertificateExpired) { EXPECT_EQ(kTestCertificateWithoutExpiration, certificate); EXPECT_EQ(kTestWrappedKey, private_key); EXPECT_EQ("7CB49F987A635E1E0A52184694582D6E", b2a_hex(serial_number)); } } INSTANTIATE_TEST_SUITE_P(CertificateTest, RetrieveLegacyCertificateTest, ::testing::Range(kZero, kNumberOfLegacyCertificates)); TEST_F(DeviceFilesTest, RetrieveDefaultCertificate) { MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); const std::string device_certificate_path = device_base_path_ + certificate_file_name; const std::string& data = kTestDefaultCertificateFileDataFutureExpiration; // Call to Open will return a unique_ptr, freeing this object. MockFile* read_file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(device_certificate_path))) .WillOnce(Return(data.size())); EXPECT_CALL(file_system, Open(StrEq(device_certificate_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(read_file)))); EXPECT_CALL(*read_file, Read(NotNull(), Eq(data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(data.begin(), data.end()), Return(data.size()))); EXPECT_CALL(*read_file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; std::string serial_number; uint32_t system_id = 0; // Retrieve the default certificate. It should be available. ASSERT_EQ(DeviceFiles::kCertificateValid, device_files.RetrieveCertificate(false, &certificate, &private_key, &serial_number, &system_id)); EXPECT_EQ(kTestCertificateWithFutureExpiration, certificate); EXPECT_EQ(kTestWrappedKey, private_key); EXPECT_EQ("7CB49F987A635E1E0A52184694582D6E", b2a_hex(serial_number)); } */ TEST_F(DeviceFilesTest, RetrieveDefaultCertificateNeverExpires) { MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); const std::string device_certificate_path = device_base_path_ + certificate_file_name; const std::string& data = kTestDefaultCertificateFileDataNeverExpires; // Call to Open will return a unique_ptr, freeing this object. MockFile* read_file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path), NotNull())) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(device_certificate_path))) .WillOnce(Return(data.size())); EXPECT_CALL(file_system, Open(StrEq(device_certificate_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(read_file)))); EXPECT_CALL(*read_file, Read(NotNull(), Eq(data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(data.begin(), data.end()), Return(data.size()))); EXPECT_CALL(*read_file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; std::string serial_number; uint32_t system_id = 0; // Retrieve the default certificate. It should be available. ASSERT_EQ(DeviceFiles::kCertificateValid, device_files.RetrieveCertificate(false, &certificate, &private_key, &serial_number, &system_id)); EXPECT_EQ(kTestCertificateNeverExpires, certificate); EXPECT_EQ(kTestWrappedKey, private_key); EXPECT_EQ("7CB49F987A635E1E0A52184694582D6E", b2a_hex(serial_number)); } class RetrieveDefaultCertificateTest : public DeviceFilesTest, public ::testing::WithParamInterface {}; TEST_P(RetrieveDefaultCertificateTest, ErrorScenarios) { const size_t index = GetParam(); MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); const std::string device_certificate_path = device_base_path_ + certificate_file_name; const CertificateErrorData& param = kRetrieveDefaultCertificateErrorData[index]; const std::string& data = param.file_data; // Call to Open will return a unique_ptr, freeing this object. MockFile* read_file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path), NotNull())) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(device_certificate_path))) .WillOnce(Return(data.size())); EXPECT_CALL(file_system, Open(StrEq(device_certificate_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(read_file)))); EXPECT_CALL(*read_file, Read(NotNull(), Eq(data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(data.begin(), data.end()), Return(data.size()))); EXPECT_CALL(*read_file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; std::string serial_number; uint32_t system_id = 0; // Retrieve the default certificate. It should be available. ASSERT_EQ(param.certificate_state, device_files.RetrieveCertificate(false, &certificate, &private_key, &serial_number, &system_id)); if (param.certificate_state == DeviceFiles::kCertificateExpired) { EXPECT_EQ(kTestCertificateExpired, certificate); EXPECT_EQ(kTestWrappedKey, private_key); EXPECT_EQ("7CB49F987A635E1E0A52184694582D6E", b2a_hex(serial_number)); } } INSTANTIATE_TEST_SUITE_P(CertificateTest, RetrieveDefaultCertificateTest, ::testing::Range(kZero, kNumberOfDefaultCertificates)); TEST_F(DeviceFilesTest, RetrieveCertificateWithoutKeyType) { // Stored files without an explicit key type should default to RSA. MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateLegacy, &certificate_file_name)); const std::string device_legacy_certificate_path = device_base_path_ + certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); const std::string device_default_certificate_path = device_base_path_ + certificate_file_name; const std::string& data = kTestCertificateFileWithoutKeyTypeData; // Call to Open will return a unique_ptr, freeing this object. // The file will be re-written with a new client expiration time MockFile* read_file = new MockFile(); /* TODO(b/192430982): Renable expiration of legacy DRM certificates MockFile* write_file = new MockFile(); */ EXPECT_CALL(file_system, Exists(StrEq(device_legacy_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(device_legacy_certificate_path), NotNull())) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(device_default_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(false)); EXPECT_CALL(file_system, FileSize(StrEq(device_legacy_certificate_path))) .WillOnce(Return(data.size())); EXPECT_CALL(file_system, Open(StrEq(device_legacy_certificate_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(read_file)))); /* TODO(b/192430982): Renable expiration of legacy DRM certificates .WillOnce(Return(ByMove(std::unique_ptr(write_file)))); */ EXPECT_CALL(*read_file, Read(NotNull(), Eq(data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(data.begin(), data.end()), Return(data.size()))); EXPECT_CALL(*read_file, Write(_, _)).Times(0); /* TODO(b/192430982): Renable expiration of legacy DRM certificates EXPECT_CALL(*write_file, Read(_, _)).Times(0); EXPECT_CALL(*write_file, Write(_, _)) .With(AllArgs(StrAndLenContains(std::vector{ kTestCertificateWithoutExpiration, kTestWrappedKey.key()}))) .WillOnce(ReturnArg<1>()); */ DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; std::string serial_number; uint32_t system_id = 0; ASSERT_EQ(DeviceFiles::kCertificateValid, device_files.RetrieveCertificate(false, &certificate, &private_key, &serial_number, &system_id)); EXPECT_EQ(kTestCertificateWithoutExpiration, certificate); EXPECT_EQ(kTestWrappedKey, private_key); EXPECT_EQ("7CB49F987A635E1E0A52184694582D6E", b2a_hex(serial_number)); } TEST_F(DeviceFilesTest, HasCertificateAtsc) { MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName(DeviceFiles::kCertificateAtsc, &certificate_file_name)); const std::string device_certificate_path = device_base_path_ + certificate_file_name; EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path))) .WillOnce(Return(false)) .WillOnce(Return(true)); EXPECT_CALL(file_system, Open(_, _)).Times(0); DeviceFiles device_files(&file_system); ASSERT_TRUE(device_files.Init(kSecurityLevelL1)); // MockFile returns false. EXPECT_FALSE(device_files.HasCertificate(true)); // MockFile returns true. EXPECT_TRUE(device_files.HasCertificate(true)); } TEST_F(DeviceFilesTest, HasCertificateDefault) { MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); const std::string device_certificate_path = device_base_path_ + certificate_file_name; EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path))) .WillOnce(Return(true)); EXPECT_CALL(file_system, Open(_, _)).Times(0); DeviceFiles device_files(&file_system); ASSERT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_TRUE(device_files.HasCertificate(false)); } TEST_F(DeviceFilesTest, HasCertificateLegacy) { MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); const std::string device_default_certificate_path = device_base_path_ + certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateLegacy, &certificate_file_name)); const std::string device_legacy_certificate_path = device_base_path_ + certificate_file_name; EXPECT_CALL(file_system, Exists(StrEq(device_default_certificate_path))) .WillOnce(Return(false)); EXPECT_CALL(file_system, Exists(StrEq(device_legacy_certificate_path))) .WillOnce(Return(true)); EXPECT_CALL(file_system, Open(_, _)).Times(0); DeviceFiles device_files(&file_system); ASSERT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_TRUE(device_files.HasCertificate(false)); } TEST_F(DeviceFilesTest, HasCertificateNone) { MockFileSystem file_system; std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); const std::string device_default_certificate_path = device_base_path_ + certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateLegacy, &certificate_file_name)); const std::string device_legacy_certificate_path = device_base_path_ + certificate_file_name; EXPECT_CALL(file_system, Exists(StrEq(device_default_certificate_path))) .WillOnce(Return(false)); EXPECT_CALL(file_system, Exists(StrEq(device_legacy_certificate_path))) .WillOnce(Return(false)); EXPECT_CALL(file_system, Open(_, _)).Times(0); DeviceFiles device_files(&file_system); ASSERT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_FALSE(device_files.HasCertificate(false)); } TEST_P(DeviceFilesSecurityLevelTest, RequestedSecurityLevel) { CdmSecurityLevel security_level = GetParam(); MockFileSystem file_system; std::string certificate(kTestCertificateWithFutureExpiration); const CryptoWrappedKey private_key(CryptoWrappedKey::kRsa, CdmRandom::RandomData(kWrappedKeyLen)); std::string device_base_path; ASSERT_TRUE( Properties::GetDeviceFilesBasePath(security_level, &device_base_path)); std::string certificate_file_name; EXPECT_TRUE(DeviceFiles::GetCertificateFileName( DeviceFiles::kCertificateDefault, &certificate_file_name)); const std::string device_certificate_path = device_base_path + certificate_file_name; // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Open(StrEq(device_certificate_path), IsCreateFileFlagSet())) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Write(_, _)) .With(AllArgs(StrAndLenContains( std::vector{certificate, private_key.key()}))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(*file, Read(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(security_level)); EXPECT_TRUE(device_files.StoreCertificate(certificate, private_key)); } INSTANTIATE_TEST_SUITE_P(SecurityLevel, DeviceFilesSecurityLevelTest, ::testing::Values(kSecurityLevelL1, kSecurityLevelL3)); TEST_P(DeviceFilesStoreTest, StoreLicense) { MockFileSystem file_system; size_t license_num = 0; std::string license_path = device_base_path_ + kLicenseTestData[license_num].key_set_id + DeviceFiles::GetLicenseFileNameExtension(); CdmAppParameterMap app_parameters = GetAppParameters(kLicenseTestData[license_num].app_parameters); std::vector expected_substrings{ kLicenseTestData[license_num].pssh_data, kLicenseTestData[license_num].key_request, kLicenseTestData[license_num].key_response, kLicenseTestData[license_num].key_renewal_request, kLicenseTestData[license_num].key_renewal_response, kLicenseTestData[license_num].key_release_url, kLicenseTestData[license_num].usage_entry, }; for (const auto& iter : app_parameters) { expected_substrings.push_back(iter.first); expected_substrings.push_back(iter.second); } // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Open(StrEq(license_path), IsCreateFileFlagSet())) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Write(_, _)) .With(AllArgs(StrAndLenContains(std::move(expected_substrings)))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(*file, Read(_, _)).Times(0); DeviceFiles::ResponseType sub_error_code; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); CryptoWrappedKey wrapped_private_key; DeviceFiles::CdmLicenseData license_data{ kLicenseTestData[license_num].key_set_id, kLicenseTestData[license_num].license_state, kLicenseTestData[license_num].pssh_data, kLicenseTestData[license_num].key_request, kLicenseTestData[license_num].key_response, kLicenseTestData[license_num].key_renewal_request, kLicenseTestData[license_num].key_renewal_response, kLicenseTestData[license_num].key_release_url, kLicenseTestData[license_num].playback_start_time, kLicenseTestData[license_num].last_playback_time, kLicenseTestData[license_num].grace_period_end_time, std::move(app_parameters), kLicenseTestData[license_num].usage_entry, kLicenseTestData[license_num].usage_entry_index, kLicenseTestData[license_num].drm_certificate, CryptoWrappedKey(kLicenseTestData[license_num].key_type, kLicenseTestData[license_num].private_key), /* exported_license_data= */ ""}; EXPECT_TRUE(device_files.StoreLicense(license_data, &sub_error_code)); EXPECT_EQ(DeviceFiles::kNoError, sub_error_code); } INSTANTIATE_TEST_SUITE_P(StoreLicense, DeviceFilesStoreTest, ::testing::Bool()); TEST_F(DeviceFilesTest, StoreLicenses) { MockFileSystem file_system; for (size_t i = 0; i < kNumberOfLicenses; ++i) { std::string license_path = device_base_path_ + kLicenseTestData[i].key_set_id + DeviceFiles::GetLicenseFileNameExtension(); CdmAppParameterMap app_parameters = GetAppParameters(kLicenseTestData[i].app_parameters); std::vector expected_substrings{ kLicenseTestData[i].pssh_data, kLicenseTestData[i].key_request, kLicenseTestData[i].key_response, kLicenseTestData[i].key_renewal_request, kLicenseTestData[i].key_renewal_response, kLicenseTestData[i].key_release_url, kLicenseTestData[i].usage_entry, kLicenseTestData[i].drm_certificate, kLicenseTestData[i].private_key, }; for (const auto& iter : app_parameters) { expected_substrings.push_back(iter.first); expected_substrings.push_back(iter.second); } // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Open(StrEq(license_path), IsCreateFileFlagSet())) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Write(_, _)) .With(AllArgs(StrAndLenContains(std::move(expected_substrings)))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(*file, Read(_, _)).Times(0); } DeviceFiles::ResponseType sub_error_code; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); for (size_t i = 0; i < kNumberOfLicenses; i++) { CdmAppParameterMap app_parameters = GetAppParameters(kLicenseTestData[i].app_parameters); DeviceFiles::CdmLicenseData license_data{ kLicenseTestData[i].key_set_id, kLicenseTestData[i].license_state, kLicenseTestData[i].pssh_data, kLicenseTestData[i].key_request, kLicenseTestData[i].key_response, kLicenseTestData[i].key_renewal_request, kLicenseTestData[i].key_renewal_response, kLicenseTestData[i].key_release_url, kLicenseTestData[i].playback_start_time, kLicenseTestData[i].last_playback_time, kLicenseTestData[i].grace_period_end_time, std::move(app_parameters), kLicenseTestData[i].usage_entry, kLicenseTestData[i].usage_entry_index, kLicenseTestData[i].drm_certificate, CryptoWrappedKey(kLicenseTestData[i].key_type, kLicenseTestData[i].private_key), /* exported_license_data= */ ""}; EXPECT_TRUE(device_files.StoreLicense(license_data, &sub_error_code)); EXPECT_EQ(DeviceFiles::kNoError, sub_error_code); } } TEST_F(DeviceFilesTest, RetrieveLicenses) { MockFileSystem file_system; for (size_t i = 0; i < kNumberOfLicenses; ++i) { std::string license_path = device_base_path_ + kLicenseTestData[i].key_set_id + DeviceFiles::GetLicenseFileNameExtension(); size_t size = kLicenseTestData[i].file_data.size(); // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(license_path), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(license_path))) .WillOnce(Return(size)); EXPECT_CALL(file_system, Open(StrEq(license_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), Eq(size))) .WillOnce( DoAll(SetArrayArgument<0>(kLicenseTestData[i].file_data.begin(), kLicenseTestData[i].file_data.end()), Return(size))); EXPECT_CALL(*file, Write(_, _)).Times(0); } DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); DeviceFiles::CdmLicenseData license_data; DeviceFiles::ResponseType sub_error_code; for (size_t i = 0; i < kNumberOfLicenses; i++) { EXPECT_TRUE(device_files.RetrieveLicense(kLicenseTestData[i].key_set_id, &license_data, &sub_error_code)); EXPECT_EQ(kLicenseTestData[i].key_set_id, license_data.key_set_id); EXPECT_EQ(kLicenseTestData[i].license_state, license_data.state); EXPECT_EQ(kLicenseTestData[i].pssh_data, license_data.pssh_data); EXPECT_EQ(kLicenseTestData[i].key_request, license_data.license_request); EXPECT_EQ(kLicenseTestData[i].key_response, license_data.license); EXPECT_EQ(kLicenseTestData[i].key_renewal_request, license_data.license_renewal_request); EXPECT_EQ(kLicenseTestData[i].key_renewal_response, license_data.license_renewal); EXPECT_EQ(kLicenseTestData[i].playback_start_time, license_data.playback_start_time); EXPECT_EQ(kLicenseTestData[i].last_playback_time, license_data.last_playback_time); EXPECT_EQ(kLicenseTestData[i].grace_period_end_time, license_data.grace_period_end_time); EXPECT_EQ(kLicenseTestData[i].usage_entry, license_data.usage_entry); EXPECT_EQ(kLicenseTestData[i].usage_entry_index, license_data.usage_entry_index); EXPECT_EQ(kLicenseTestData[i].drm_certificate, license_data.drm_certificate); EXPECT_EQ(kLicenseTestData[i].key_type, license_data.wrapped_private_key.type()); EXPECT_EQ(kLicenseTestData[i].private_key, license_data.wrapped_private_key.key()); EXPECT_EQ(DeviceFiles::kNoError, sub_error_code); std::map::iterator itr; for (itr = license_data.app_parameters.begin(); itr != license_data.app_parameters.end(); ++itr) { EXPECT_NE(std::string::npos, kLicenseTestData[i].app_parameters.find(itr->first)); EXPECT_NE(std::string::npos, kLicenseTestData[i].app_parameters.find(itr->second)); } license_data.app_parameters.clear(); } } TEST_F(DeviceFilesTest, AppParametersBackwardCompatibility) { MockFileSystem file_system; const LicenseInfo* test_data = &kLicenseAppParametersBackwardsCompatibilityTestData; std::string license_path = device_base_path_ + test_data->key_set_id + DeviceFiles::GetLicenseFileNameExtension(); size_t size = test_data->file_data.size(); // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(license_path), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(license_path))) .WillOnce(Return(size)); EXPECT_CALL(file_system, Open(StrEq(license_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), Eq(size))) .WillOnce(DoAll(SetArrayArgument<0>(test_data->file_data.begin(), test_data->file_data.end()), Return(size))); EXPECT_CALL(*file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); DeviceFiles::CdmLicenseData license_data; DeviceFiles::ResponseType sub_error_code; EXPECT_TRUE(device_files.RetrieveLicense(test_data->key_set_id, &license_data, &sub_error_code)); EXPECT_EQ(test_data->license_state, license_data.state); EXPECT_EQ(test_data->pssh_data, license_data.pssh_data); EXPECT_EQ(test_data->key_request, license_data.license_request); EXPECT_EQ(test_data->key_response, license_data.license); EXPECT_EQ(test_data->key_renewal_request, license_data.license_renewal_request); EXPECT_EQ(test_data->key_renewal_response, license_data.license_renewal); EXPECT_EQ(test_data->playback_start_time, license_data.playback_start_time); EXPECT_EQ(test_data->last_playback_time, license_data.last_playback_time); EXPECT_EQ(test_data->grace_period_end_time, license_data.grace_period_end_time); EXPECT_EQ(0u, license_data.app_parameters.size()); EXPECT_EQ(test_data->usage_entry, license_data.usage_entry); EXPECT_EQ(test_data->usage_entry_index, license_data.usage_entry_index); EXPECT_EQ(test_data->drm_certificate, license_data.drm_certificate); EXPECT_EQ(test_data->key_type, license_data.wrapped_private_key.type()); EXPECT_EQ(test_data->private_key, license_data.wrapped_private_key.key()); EXPECT_EQ(DeviceFiles::kNoError, sub_error_code); } TEST_F(DeviceFilesTest, UpdateLicenseState) { MockFileSystem file_system; std::string license_path = device_base_path_ + kLicenseUpdateTestData[0].key_set_id + DeviceFiles::GetLicenseFileNameExtension(); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); for (size_t i = 0; i < ArraySize(kLicenseUpdateTestData); i++) { // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Open(StrEq(license_path), IsCreateFileFlagSet())) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Write(_, _)) .With(AllArgs(StrAndLenEq(kLicenseUpdateTestData[i].file_data))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(*file, Read(_, _)).Times(0); DeviceFiles::CdmLicenseData license_data{ kLicenseUpdateTestData[0].key_set_id, kLicenseUpdateTestData[i].license_state, kLicenseUpdateTestData[0].pssh_data, kLicenseUpdateTestData[0].key_request, kLicenseUpdateTestData[0].key_response, kLicenseUpdateTestData[0].key_renewal_request, kLicenseUpdateTestData[0].key_renewal_response, kLicenseUpdateTestData[0].key_release_url, kLicenseUpdateTestData[0].playback_start_time, kLicenseUpdateTestData[0].last_playback_time, kLicenseUpdateTestData[0].grace_period_end_time, GetAppParameters(kLicenseTestData[0].app_parameters), kLicenseUpdateTestData[0].usage_entry, kLicenseUpdateTestData[0].usage_entry_index, kLicenseUpdateTestData[0].drm_certificate, CryptoWrappedKey(kLicenseTestData[0].key_type, kLicenseTestData[0].private_key), /* exported_license_data= */ ""}; DeviceFiles::ResponseType sub_error_code; EXPECT_TRUE(device_files.StoreLicense(license_data, &sub_error_code)); EXPECT_EQ(DeviceFiles::kNoError, sub_error_code); } } TEST_F(DeviceFilesTest, DeleteLicense) { MockFileSystem file_system; std::string license_path = device_base_path_ + kLicenseTestData[0].key_set_id + DeviceFiles::GetLicenseFileNameExtension(); size_t size = kLicenseTestData[0].file_data.size(); // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(license_path))).WillOnce(Return(false)); EXPECT_CALL(file_system, Exists(StrEq(license_path), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(license_path))) .WillOnce(Return(size)); EXPECT_CALL(file_system, Open(StrEq(license_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), Eq(size))) .WillOnce(DoAll(SetArrayArgument<0>(kLicenseTestData[0].file_data.begin(), kLicenseTestData[0].file_data.end()), Return(size))); EXPECT_CALL(file_system, Remove(StrEq(license_path))).WillOnce(Return(true)); EXPECT_CALL(*file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); DeviceFiles::CdmLicenseData license_data; DeviceFiles::ResponseType sub_error_code; EXPECT_TRUE(device_files.RetrieveLicense(kLicenseTestData[0].key_set_id, &license_data, &sub_error_code)); EXPECT_EQ(kLicenseTestData[0].key_set_id, license_data.key_set_id); EXPECT_EQ(kLicenseTestData[0].license_state, license_data.state); EXPECT_EQ(kLicenseTestData[0].pssh_data, license_data.pssh_data); EXPECT_EQ(kLicenseTestData[0].key_request, license_data.license_request); EXPECT_EQ(kLicenseTestData[0].key_response, license_data.license); EXPECT_EQ(kLicenseTestData[0].key_renewal_request, license_data.license_renewal_request); EXPECT_EQ(kLicenseTestData[0].key_renewal_response, license_data.license_renewal); EXPECT_EQ(kLicenseTestData[0].playback_start_time, license_data.playback_start_time); EXPECT_EQ(kLicenseTestData[0].last_playback_time, license_data.last_playback_time); EXPECT_EQ(kLicenseTestData[0].grace_period_end_time, license_data.grace_period_end_time); std::map::iterator itr; for (itr = license_data.app_parameters.begin(); itr != license_data.app_parameters.end(); ++itr) { EXPECT_NE(kLicenseTestData[0].app_parameters.find(itr->first), std::string::npos); EXPECT_NE(kLicenseTestData[0].app_parameters.find(itr->second), std::string::npos); } EXPECT_EQ(kLicenseTestData[0].usage_entry, license_data.usage_entry); EXPECT_EQ(kLicenseTestData[0].usage_entry_index, license_data.usage_entry_index); EXPECT_EQ(kLicenseTestData[0].drm_certificate, license_data.drm_certificate); EXPECT_EQ(kLicenseTestData[0].key_type, license_data.wrapped_private_key.type()); EXPECT_EQ(kLicenseTestData[0].private_key, license_data.wrapped_private_key.key()); EXPECT_EQ(DeviceFiles::kNoError, sub_error_code); EXPECT_TRUE(device_files.DeleteLicense(kLicenseTestData[0].key_set_id)); EXPECT_FALSE(device_files.LicenseExists(kLicenseTestData[0].key_set_id)); } TEST_F(DeviceFilesTest, ReserveLicenseIdsDoesNotUseFileSystem) { // Validate that ReserveLicenseIds does not touch the file system. MockFileSystem file_system; EXPECT_CALL(file_system, Open(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); for (size_t i = 0; i < kNumberOfLicenses; i++) { EXPECT_TRUE(device_files.ReserveLicenseId(kLicenseTestData[i].key_set_id)); // Validate that the license IDs are actually reserved. EXPECT_TRUE(device_files.LicenseExists(kLicenseTestData[i].key_set_id)); // Unreserve these IDs to avoid polluting other tests. EXPECT_TRUE( device_files.UnreserveLicenseId(kLicenseTestData[i].key_set_id)); } } // OKP info can only be stored on L1 device files. TEST_F(DeviceFilesTest, OkpInfo_L1Only) { MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL3)); okp::SystemFallbackInfo info; info.SetState(okp::SystemState::kNeedsProvisioning); info.SetFirstCheckedTime(1234); const std::string kErrorMessage = "OKP should not be available on L3"; EXPECT_FALSE(device_files.StoreOkpInfo(info)) << kErrorMessage; EXPECT_FALSE(device_files.RetrieveOkpInfo(&info)) << kErrorMessage; EXPECT_FALSE(device_files.DeleteOkpInfo()) << kErrorMessage; } // Uninitialized info cannot be stored. TEST_F(DeviceFilesTest, OkpInfo_UninitializedInfo) { MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); okp::SystemFallbackInfo info; // Uninitialized. EXPECT_FALSE(device_files.StoreOkpInfo(info)); } TEST_F(DeviceFilesTest, OkpInfo_FileDoesNotExist) { MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); int errno_value = ENOENT; const std::string kOkpInfoPath = device_base_path_ + DeviceFiles::GetOkpInfoFileName(); EXPECT_CALL(file_system, Exists(StrEq(kOkpInfoPath), NotNull())) .WillRepeatedly(DoAll(SetArgPointee<1>(errno_value), (Return(false)))); okp::SystemFallbackInfo info; EXPECT_FALSE(device_files.RetrieveOkpInfo(&info)); } TEST_F(DeviceFilesTest, OkpInfo_RetrieveWithNull) { MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_FALSE(device_files.RetrieveOkpInfo(nullptr)); } TEST_F(DeviceFilesTest, OkpInfo_DeleteFile) { MockFileSystem file_system; DeviceFiles device_files(&file_system); // L1 - Should succeed. EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); const std::string kOkpInfoPath = device_base_path_ + DeviceFiles::GetOkpInfoFileName(); EXPECT_CALL(file_system, Remove(kOkpInfoPath)).WillOnce(Return(true)); EXPECT_TRUE(device_files.DeleteOkpInfo()); // L3 - Should fail. EXPECT_TRUE(device_files.Init(kSecurityLevelL3)); EXPECT_FALSE(device_files.DeleteOkpInfo()); } TEST_F(DeviceFilesTest, OkpInfo_StoreAndRetrieve) { MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); // Prepare data. okp::SystemFallbackInfo info; info.SetState(okp::SystemState::kFallbackMode); info.SetFirstCheckedTime(1234); info.SetBackoffStartTime(2345); info.SetBackoffDuration(1111); // Set store expectations. const std::string kOkpInfoPath = device_base_path_ + DeviceFiles::GetOkpInfoFileName(); MockFile* file = new MockFile(); EXPECT_CALL(file_system, Open(kOkpInfoPath, _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); std::string serialized; EXPECT_CALL(*file, Write(NotNull(), _)) .WillOnce(DoAll(Invoke([&](const char* buf, size_t len) { serialized.assign(buf, len); }), ReturnArg<1>())); EXPECT_TRUE(device_files.StoreOkpInfo(info)); ASSERT_FALSE(serialized.empty()) << "OKP info was not serialized"; // Set retrieve expectations. file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(kOkpInfoPath), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(kOkpInfoPath)) .WillOnce(Return(serialized.size())); EXPECT_CALL(file_system, Open(kOkpInfoPath, _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), _)) .WillOnce(DoAll(SetArrayArgument<0>(serialized.begin(), serialized.end()), Return(serialized.size()))); okp::SystemFallbackInfo retrieved_info; EXPECT_TRUE(device_files.RetrieveOkpInfo(&retrieved_info)); EXPECT_EQ(retrieved_info, info); } // From a usage info file containing 3 provider sessions, 2 will be // deleted using the |key_set_id| associated with them. // It is expected that once the provider sessions are deleted, the // usage info file will be overwritten with only the remaining provider // session token present. TEST_P(DeviceFilesDeleteMultipleUsageInfoTest, DeleteAllButOne) { static const std::string kUsageInfoFileName = "usage_info_file.bin"; const int key_set_id_index = GetParam(); const std::string& result_hashed_usage_info_file = kHashedUsageInfoFileWithSingleKeySetList[key_set_id_index]; MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string file_path; ASSERT_TRUE(Properties::GetDeviceFilesBasePath(kSecurityLevelL1, &file_path)); file_path += kUsageInfoFileName; EXPECT_CALL(file_system, Exists(_)).WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(_, NotNull())).WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(file_path)) .WillOnce(Return(kHashedUsageInfoFileWithThreeKeySetIds.size())); // File read expectations. MockFile* file_in = new MockFile(); EXPECT_CALL(file_system, Open(file_path, wvutil::FileSystem::kReadOnly)) .WillOnce(Return(ByMove(std::unique_ptr(file_in)))); Expectation read_original = EXPECT_CALL(*file_in, Read(NotNull(), _)) .WillOnce( DoAll(SetArrayArgument<0>( kHashedUsageInfoFileWithThreeKeySetIds.cbegin(), kHashedUsageInfoFileWithThreeKeySetIds.cend()), Return(kHashedUsageInfoFileWithThreeKeySetIds.size()))); // File write expectations. MockFile* file_out = new MockFile(); EXPECT_CALL(file_system, Open(file_path, wvutil::FileSystem::kCreate | wvutil::FileSystem::kTruncate)) .WillOnce(Return(ByMove(std::unique_ptr(file_out)))); EXPECT_CALL(*file_out, Write(StrEq(result_hashed_usage_info_file), _)) .After(read_original) .WillOnce(Return(result_hashed_usage_info_file.size())); const auto not_current_key_set = [key_set_id_index](const std::string& key_set_id) { return key_set_id != kHashedUsageInfoFileKeySetList[key_set_id_index]; }; std::vector to_remove; std::copy_if(kHashedUsageInfoFileKeySetList.cbegin(), kHashedUsageInfoFileKeySetList.cend(), std::back_inserter(to_remove), not_current_key_set); EXPECT_TRUE(device_files.DeleteMultipleUsageInfoByKeySetIds( kUsageInfoFileName, to_remove)); } INSTANTIATE_TEST_SUITE_P(DeviceFilesTest, DeviceFilesDeleteMultipleUsageInfoTest, ::testing::Range(0, 3)); // Delete all provider sessions from a usage info file. It is expected // that the usage info file will be deleted (not written back to with // an empty provider session list). TEST_F(DeviceFilesDeleteMultipleUsageInfoTest, DeleteAllKeySetIds) { static const std::string kUsageInfoFileName = "usage_info_file.bin"; // Setup MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string file_path; ASSERT_TRUE(Properties::GetDeviceFilesBasePath(kSecurityLevelL1, &file_path)); file_path += kUsageInfoFileName; // File read expectations. MockFile* file_in = new MockFile(); EXPECT_CALL(file_system, Exists(_)).WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(_, NotNull())).WillRepeatedly(Return(true)); EXPECT_CALL(file_system, FileSize(file_path)) .WillOnce(Return(kHashedUsageInfoFileWithThreeKeySetIds.size())); EXPECT_CALL(file_system, Open(file_path, wvutil::FileSystem::kReadOnly)) .WillOnce(Return(ByMove(std::unique_ptr(file_in)))); EXPECT_CALL(*file_in, Read(NotNull(), _)) .WillOnce(DoAll( SetArrayArgument<0>(kHashedUsageInfoFileWithThreeKeySetIds.cbegin(), kHashedUsageInfoFileWithThreeKeySetIds.cend()), Return(kHashedUsageInfoFileWithThreeKeySetIds.size()))); EXPECT_CALL(file_system, Remove(file_path)).WillOnce(Return(true)); // Remove all sessions, and the file should be deleted. EXPECT_TRUE(device_files.DeleteMultipleUsageInfoByKeySetIds( kUsageInfoFileName, kHashedUsageInfoFileKeySetList)); } // If the key set IDs provided cannot be found in the usage info file, // then no action should be taken, and the function returns true. TEST_F(DeviceFilesDeleteMultipleUsageInfoTest, DeleteNone) { static const std::string kUsageInfoFileName = "usage_info_file.bin"; // Setup MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string file_path; ASSERT_TRUE(Properties::GetDeviceFilesBasePath(kSecurityLevelL1, &file_path)); file_path += kUsageInfoFileName; EXPECT_CALL(file_system, Exists(_)).WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(_, NotNull())).WillRepeatedly(Return(true)); // Call, not providing any key set IDs. Should return true without any // action, assuming the file exists. EXPECT_TRUE(device_files.DeleteMultipleUsageInfoByKeySetIds( kUsageInfoFileName, std::vector())); MockFile* file_in = new MockFile(); EXPECT_CALL(file_system, FileSize(file_path)) .WillOnce(Return(kHashedUsageInfoFileWithThreeKeySetIds.size())); EXPECT_CALL(file_system, Open(file_path, wvutil::FileSystem::kReadOnly)) .WillOnce(Return(ByMove(std::unique_ptr(file_in)))); EXPECT_CALL(*file_in, Read(NotNull(), _)) .WillOnce(DoAll( SetArrayArgument<0>(kHashedUsageInfoFileWithThreeKeySetIds.cbegin(), kHashedUsageInfoFileWithThreeKeySetIds.cend()), Return(kHashedUsageInfoFileWithThreeKeySetIds.size()))); // Call, providing key set IDs which do not exist in the usage info // file. const std::vector key_set_ids = {"fictional_key_set_id_1", "fictional_key_set_id_2", "fictional_key_set_id_3"}; EXPECT_TRUE(device_files.DeleteMultipleUsageInfoByKeySetIds( kUsageInfoFileName, key_set_ids)); } // Delete a single key from the file. // Test will delete "key_set_id_2" from the usage info file containing // "key_set_id_1" & "key_set_id_2". TEST_F(DeviceFilesDeleteMultipleUsageInfoTest, DeleteOne) { static const std::string kUsageInfoFileName = "usage_info_file.bin"; MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string file_path; ASSERT_TRUE(Properties::GetDeviceFilesBasePath(kSecurityLevelL1, &file_path)); file_path += kUsageInfoFileName; EXPECT_CALL(file_system, Exists(_)).WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(_, NotNull())).WillRepeatedly(Return(true)); EXPECT_CALL(file_system, FileSize(file_path)) .WillOnce(Return(kHashedUsageInfoFileWithTwoKeySetIds.size())); // File read expectations. MockFile* file_in = new MockFile(); EXPECT_CALL(file_system, Open(file_path, wvutil::FileSystem::kReadOnly)) .WillOnce(Return(ByMove(std::unique_ptr(file_in)))); Expectation read_original = EXPECT_CALL(*file_in, Read(NotNull(), _)) .WillOnce(DoAll( SetArrayArgument<0>(kHashedUsageInfoFileWithTwoKeySetIds.cbegin(), kHashedUsageInfoFileWithTwoKeySetIds.cend()), Return(kHashedUsageInfoFileWithTwoKeySetIds.size()))); // File write expectations. MockFile* file_out = new MockFile(); EXPECT_CALL(file_system, Open(file_path, wvutil::FileSystem::kCreate | wvutil::FileSystem::kTruncate)) .WillOnce(Return(ByMove(std::unique_ptr(file_out)))); EXPECT_CALL(*file_out, Write(StrEq(kHashedUsageInfoFileWithKeySet1), _)) .After(read_original) .WillOnce(Return(kHashedUsageInfoFileWithKeySet1.size())); const std::vector to_remove = {"key_set_id_2"}; EXPECT_TRUE(device_files.DeleteMultipleUsageInfoByKeySetIds( kUsageInfoFileName, to_remove)); } // There are a few error cases where DeleteMultipleUsageInfoByKeySetIds() // will fail. Such as if the specified file does not exist, or if it // the file is found to have a hash mismatch. In both these cases, // false should be returned. TEST_F(DeviceFilesDeleteMultipleUsageInfoTest, BadFile) { static const std::string kUsageInfoFileName = "usage_info_file.bin"; static const std::string kHashlessUsageInfoFile = a2bs_hex( "0A36080310012A300A0E220C6B65795F7365745F69645F310A0E220C6B65795F" "7365745F69645F320A0E220C6B65795F7365745F69645F331220000000000000" "0000000000000000000000000000000000000000000000000000"); // Setup MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string file_path; ASSERT_TRUE(Properties::GetDeviceFilesBasePath(kSecurityLevelL1, &file_path)); file_path += kUsageInfoFileName; // File does not exist. EXPECT_CALL(file_system, Exists(_)).WillRepeatedly(Return(false)); EXPECT_FALSE(device_files.DeleteMultipleUsageInfoByKeySetIds( kUsageInfoFileName, kHashedUsageInfoFileKeySetList)); // File is missing hash. MockFile* file_in = new MockFile(); EXPECT_CALL(file_system, Exists(_)).WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Exists(_, NotNull())).WillRepeatedly(Return(true)); EXPECT_CALL(file_system, FileSize(file_path)) .WillOnce(Return(kHashlessUsageInfoFile.size())); EXPECT_CALL(file_system, Open(file_path, wvutil::FileSystem::kReadOnly)) .WillOnce(Return(ByMove(std::unique_ptr(file_in)))); EXPECT_CALL(*file_in, Read(NotNull(), _)) .WillOnce(DoAll(SetArrayArgument<0>(kHashlessUsageInfoFile.cbegin(), kHashlessUsageInfoFile.cend()), Return(kHashlessUsageInfoFile.size()))); EXPECT_CALL(file_system, Remove(file_path)).WillOnce(Return(true)); // Remove all sessions, and the file should be deleted. EXPECT_FALSE(device_files.DeleteMultipleUsageInfoByKeySetIds( kUsageInfoFileName, kHashedUsageInfoFileKeySetList)); } TEST_F(DeviceFilesUsageInfoTest, ListNullParam) { MockFileSystem file_system; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_FALSE(device_files.ListUsageInfoFiles(nullptr)); } TEST_F(DeviceFilesUsageInfoTest, ListIdsNull) { MockFileSystem file_system; const std::string& app_id = kUsageInfoTestData[0].app_id; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_FALSE(device_files.ListUsageIds(app_id, nullptr, nullptr)); } TEST_F(DeviceFilesUsageInfoTest, ListUsageIds) { MockFileSystem file_system; const int index = 8; const std::string& app_id = kUsageInfoTestData[index].app_id; const std::string file_name = DeviceFiles::GetUsageInfoFileName(app_id); const std::string path = device_base_path_ + file_name; const std::string& file_data = (index < 0) ? kEmptyUsageInfoFileData : kUsageInfoTestData[index].file_data; if (index >= 0) { // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(path))).WillOnce(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(path), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(path))) .Times(2) .WillRepeatedly(Return(file_data.size())); EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), Eq(file_data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(file_data.begin(), file_data.end()), Return(file_data.size()))); } else { EXPECT_CALL(file_system, Exists(StrEq(path))).WillOnce(Return(false)); } DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::vector key_set_ids; std::vector provider_session_tokens; EXPECT_TRUE(device_files.ListUsageIds(app_id, &key_set_ids, &provider_session_tokens)); ASSERT_EQ(key_set_ids.size(), provider_session_tokens.size()); if (index < 0) return; // Ensure that all the listed key set IDs and PSTs are found within // the list of usage entries. // Note: Any entry found in |.file_data| would have been defined in // in |.usage_data| at or before the current |index|. for (size_t i = 0; i < provider_session_tokens.size(); ++i) { const std::string& pst = provider_session_tokens[i]; const CdmKeySetId& ksid = key_set_ids[i]; bool found = false; for (int j = 0; !found && j <= index; ++j) { if (kUsageInfoTestData[j].app_id != app_id) continue; const DeviceFiles::CdmUsageData& usage_data = kUsageInfoTestData[j].usage_data; if (pst == usage_data.provider_session_token && ksid == usage_data.key_set_id) { found = true; } } EXPECT_TRUE(found); } } TEST_P(DeviceFilesUsageInfoListTest, UsageInfoList) { MockFileSystem file_system; const int index = GetParam(); // List of all file names. std::vector file_list; // List of only usage info files. std::vector expected_usage_file_list; for (int i = 0; i <= index; ++i) { file_list.push_back(kTestListUsageInfoData[i].file_name); if (kTestListUsageInfoData[i].is_usage_info_file) expected_usage_file_list.push_back(kTestListUsageInfoData[i].file_name); } EXPECT_CALL(file_system, List(StrEq(device_base_path_), NotNull())) .WillOnce(DoAll(SetArgPointee<1>(std::move(file_list)), Return(true))); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::vector usage_info_file_names; EXPECT_TRUE(device_files.ListUsageInfoFiles(&usage_info_file_names)); EXPECT_EQ(expected_usage_file_list.size(), usage_info_file_names.size()); EXPECT_THAT(usage_info_file_names, ::testing::UnorderedElementsAreArray(expected_usage_file_list)); } INSTANTIATE_TEST_SUITE_P(UsageInfo, DeviceFilesUsageInfoListTest, ::testing::Range(0, 7)); TEST_P(DeviceFilesUsageInfoTest, Store) { MockFileSystem file_system; // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); const int index = GetParam(); const std::string app_id = (index >= 0) ? kUsageInfoTestData[index].app_id : ""; const std::string file_name = DeviceFiles::GetUsageInfoFileName(app_id); const std::string path = device_base_path_ + file_name; // Raw data fields for each usage info record matching belonging // to the same |app_id|. std::vector usage_data_fields; std::vector usage_data_list; for (int i = 0; i <= index; ++i) { if (kUsageInfoTestData[i].app_id != app_id) continue; const DeviceFiles::CdmUsageData& usage_data = kUsageInfoTestData[i].usage_data; usage_data_list.push_back(kUsageInfoTestData[i].usage_data); usage_data_fields.push_back(usage_data.provider_session_token); usage_data_fields.push_back(usage_data.license_request); usage_data_fields.push_back(usage_data.license); usage_data_fields.push_back(usage_data.key_set_id); usage_data_fields.push_back(usage_data.usage_entry); usage_data_fields.push_back(usage_data.drm_certificate); usage_data_fields.push_back(usage_data.wrapped_private_key.key()); } EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Write(_, _)) .With(AllArgs(StrAndLenContains(std::move(usage_data_fields)))) .WillOnce(ReturnArg<1>()); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_TRUE(device_files.StoreUsageInfo(file_name, usage_data_list)); } TEST_P(DeviceFilesUsageInfoTest, Retrieve) { MockFileSystem file_system; const int index = GetParam(); const std::string app_id = (index >= 0) ? kUsageInfoTestData[index].app_id : ""; const std::string file_name = DeviceFiles::GetUsageInfoFileName(app_id); const std::string path = device_base_path_ + file_name; const std::string& file_data = (index < 0) ? kEmptyUsageInfoFileData : kUsageInfoTestData[index].file_data; if (index >= 0) { // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(path))).WillOnce(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(path), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(path))) .Times(2) .WillRepeatedly(Return(file_data.size())); EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), Eq(file_data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(file_data.begin(), file_data.end()), Return(file_data.size()))); } else { EXPECT_CALL(file_system, Exists(StrEq(path))).WillOnce(Return(false)); } std::vector usage_data_list; DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_TRUE(device_files.RetrieveUsageInfo(file_name, &usage_data_list)); for (const auto& retrieved_usage_data : usage_data_list) { bool found = false; for (int i = 0; !found && i <= index; i++) { if (kUsageInfoTestData[i].app_id != app_id) continue; const auto& known_usage_data = kUsageInfoTestData[i].usage_data; if (known_usage_data.key_set_id != retrieved_usage_data.key_set_id) continue; // Rest of the entry data must match. EXPECT_EQ(retrieved_usage_data.provider_session_token, known_usage_data.provider_session_token); EXPECT_EQ(retrieved_usage_data.license_request, known_usage_data.license_request); EXPECT_EQ(retrieved_usage_data.license, known_usage_data.license); EXPECT_EQ(retrieved_usage_data.key_set_id, known_usage_data.key_set_id); EXPECT_EQ(retrieved_usage_data.usage_entry, known_usage_data.usage_entry); EXPECT_EQ(retrieved_usage_data.usage_entry_index, known_usage_data.usage_entry_index); EXPECT_EQ(retrieved_usage_data.drm_certificate, known_usage_data.drm_certificate); EXPECT_EQ(retrieved_usage_data.wrapped_private_key, known_usage_data.wrapped_private_key); found = true; } EXPECT_TRUE(found) << "key_set_id = " << retrieved_usage_data.key_set_id; } } TEST_P(DeviceFilesUsageInfoTest, ListKeySetIds) { MockFileSystem file_system; const int index = GetParam(); const std::string app_id = (index >= 0) ? kUsageInfoTestData[index].app_id : ""; const std::string file_name = DeviceFiles::GetUsageInfoFileName(app_id); const std::string path = device_base_path_ + file_name; const std::string& file_data = (index < 0) ? kEmptyUsageInfoFileData : kUsageInfoTestData[index].file_data; if (index >= 0) { // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(path))).WillOnce(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(path), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(path))) .Times(2) .WillRepeatedly(Return(file_data.size())); EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), Eq(file_data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(file_data.begin(), file_data.end()), Return(file_data.size()))); } else { EXPECT_CALL(file_system, Exists(StrEq(path))).WillOnce(Return(false)); } DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::vector key_set_ids; EXPECT_TRUE(device_files.ListUsageIds(app_id, &key_set_ids, nullptr)); if (index < 0) { EXPECT_TRUE(key_set_ids.empty()); return; } for (const CdmKeySetId& key_set_id : key_set_ids) { bool found = false; for (int i = 0; !found && i <= index; i++) { if (app_id == kUsageInfoTestData[i].app_id && kUsageInfoTestData[i].usage_data.key_set_id == key_set_id) { found = true; } } EXPECT_TRUE(found); } } TEST_P(DeviceFilesUsageInfoTest, ListProviderSessionTokenIds) { MockFileSystem file_system; const int index = GetParam(); const std::string app_id = (index >= 0) ? kUsageInfoTestData[index].app_id : ""; const std::string file_name = DeviceFiles::GetUsageInfoFileName(app_id); const std::string path = device_base_path_ + file_name; const std::string& file_data = (index < 0) ? kEmptyUsageInfoFileData : kUsageInfoTestData[index].file_data; if (index >= 0) { // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(path))).WillOnce(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(path), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(path))) .Times(2) .WillRepeatedly(Return(file_data.size())); EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), Eq(file_data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(file_data.begin(), file_data.end()), Return(file_data.size()))); } else { EXPECT_CALL(file_system, Exists(StrEq(path))).WillOnce(Return(false)); } DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::vector provider_session_tokens; EXPECT_TRUE( device_files.ListUsageIds(app_id, nullptr, &provider_session_tokens)); if (index < 0) { EXPECT_TRUE(provider_session_tokens.empty()); return; } for (const std::string& pst : provider_session_tokens) { bool found = false; for (int i = 0; !found && i <= index; i++) { if (app_id == kUsageInfoTestData[i].app_id && kUsageInfoTestData[i].usage_data.provider_session_token == pst) { found = true; } } EXPECT_TRUE(found); } } TEST_P(DeviceFilesUsageInfoTest, RetrieveByProviderSessionToken) { MockFileSystem file_system; // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); const int index = GetParam(); const std::string app_id = (index >= 0) ? kUsageInfoTestData[index].app_id : ""; const std::string file_name = DeviceFiles::GetUsageInfoFileName(app_id); const std::string path = device_base_path_ + file_name; // Use the file info which contains all usage info sessions for the // current |app_id|. size_t max_index_by_app_id = 0; for (size_t i = 0; i < ArraySize(kUsageInfoTestData); ++i) { if (app_id == kUsageInfoTestData[i].app_id) max_index_by_app_id = i; } const std::string& file_data = (index < 0) ? kEmptyUsageInfoFileData : kUsageInfoTestData[max_index_by_app_id].file_data; const std::string& provider_session_token = kUsageInfoTestData[index < 0 ? 0 : index] .usage_data.provider_session_token; EXPECT_CALL(file_system, Exists(StrEq(path), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(path))) .WillOnce(Return(file_data.size())); EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), Eq(file_data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(file_data.begin(), file_data.end()), Return(file_data.size()))); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); DeviceFiles::CdmUsageData usage_data; if (index < 0) { EXPECT_FALSE(device_files.RetrieveUsageInfo( file_name, provider_session_token, &usage_data)); } else { EXPECT_TRUE(device_files.RetrieveUsageInfo( file_name, provider_session_token, &usage_data)); const DeviceFiles::CdmUsageData& expected_usage_data = kUsageInfoTestData[index].usage_data; EXPECT_EQ(expected_usage_data.provider_session_token, usage_data.provider_session_token); EXPECT_EQ(expected_usage_data.license_request, usage_data.license_request); EXPECT_EQ(expected_usage_data.license, usage_data.license); EXPECT_EQ(expected_usage_data.key_set_id, usage_data.key_set_id); EXPECT_EQ(expected_usage_data.usage_entry, usage_data.usage_entry); EXPECT_EQ(expected_usage_data.usage_entry_index, usage_data.usage_entry_index); } } TEST_P(DeviceFilesUsageInfoTest, UpdateUsageInfo) { MockFileSystem file_system; // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); const int index = GetParam(); const std::string app_id = (index >= 0) ? kUsageInfoTestData[index].app_id : ""; const std::string file_name = DeviceFiles::GetUsageInfoFileName(app_id); const std::string path = device_base_path_ + file_name; // Fields expected to be written back when usage info is updated. std::vector usage_data_fields; size_t max_index_by_app_id = 0; for (size_t i = 0; i < ArraySize(kUsageInfoTestData); ++i) { if (app_id != kUsageInfoTestData[i].app_id) continue; max_index_by_app_id = i; // Skip the entry that will be overwritten. if ((int)i == index) continue; usage_data_fields.push_back( kUsageInfoTestData[i].usage_data.provider_session_token); usage_data_fields.push_back( kUsageInfoTestData[i].usage_data.license_request); usage_data_fields.push_back(kUsageInfoTestData[i].usage_data.license); usage_data_fields.push_back(kUsageInfoTestData[i].usage_data.key_set_id); usage_data_fields.push_back(kUsageInfoTestData[i].usage_data.usage_entry); } DeviceFiles::CdmUsageData updated_entry = kUsageInfoUpdateTestData; if (index >= 0) { // Updated entry must keep the same PST and key set ID. updated_entry.provider_session_token = kUsageInfoTestData[index].usage_data.provider_session_token; updated_entry.key_set_id = kUsageInfoTestData[index].usage_data.key_set_id; usage_data_fields.push_back(updated_entry.provider_session_token); usage_data_fields.push_back(updated_entry.license_request); usage_data_fields.push_back(updated_entry.license); usage_data_fields.push_back(updated_entry.key_set_id); usage_data_fields.push_back(updated_entry.usage_entry); usage_data_fields.push_back(updated_entry.drm_certificate); usage_data_fields.push_back(updated_entry.wrapped_private_key.key()); } const std::string& file_data = (index < 0) ? kEmptyUsageInfoFileData : kUsageInfoTestData[max_index_by_app_id].file_data; EXPECT_CALL(file_system, Exists(StrEq(path))).WillOnce(Return(true)); EXPECT_CALL(file_system, Exists(StrEq(path), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(path))) .WillOnce(Return(file_data.size())); EXPECT_CALL(*file, Read(NotNull(), Eq(file_data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(file_data.begin(), file_data.end()), Return(file_data.size()))); if (index < 0) { EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); } else { MockFile* next_file = new MockFile(); EXPECT_CALL(file_system, Open(StrEq(path), _)) .Times(2) .WillOnce(Return(ByMove(std::unique_ptr(file)))) .WillOnce(Return(ByMove(std::unique_ptr(next_file)))); EXPECT_CALL(*next_file, Write(_, _)) .With(AllArgs(StrAndLenContains(std::move(usage_data_fields)))) .WillOnce(ReturnArg<1>()); } DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); if (index < 0) { EXPECT_FALSE(device_files.UpdateUsageInfo(file_name, updated_entry)); } else { EXPECT_TRUE(device_files.UpdateUsageInfo(file_name, updated_entry)); } } INSTANTIATE_TEST_SUITE_P(UsageInfo, DeviceFilesUsageInfoTest, ::testing::Range(-1, 9)); TEST_P(DeviceFilesHlsAttributesTest, Read) { MockFileSystem file_system; // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); const size_t hls_attribute_index = GetParam(); const HlsAttributesInfo* param = &kHlsAttributesTestData[hls_attribute_index]; std::string path = device_base_path_ + param->key_set_id + DeviceFiles::GetHlsAttributesFileNameExtension(); EXPECT_CALL(file_system, Exists(StrEq(path), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(path))) .WillRepeatedly(Return(param->file_data.size())); EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), Eq(param->file_data.size()))) .WillOnce(DoAll( SetArrayArgument<0>(param->file_data.begin(), param->file_data.end()), Return(param->file_data.size()))); EXPECT_CALL(*file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); CdmHlsMethod method; std::vector media_segment_iv; ASSERT_TRUE(device_files.RetrieveHlsAttributes(param->key_set_id, &method, &media_segment_iv)); EXPECT_EQ(param->method, method); EXPECT_EQ(b2a_hex(param->media_segment_iv), wvutil::b2a_hex(media_segment_iv)); } TEST_P(DeviceFilesHlsAttributesTest, Store) { MockFileSystem file_system; // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); const size_t hls_attribute_index = GetParam(); const HlsAttributesInfo* param = &kHlsAttributesTestData[hls_attribute_index]; std::string path = device_base_path_ + param->key_set_id + DeviceFiles::GetHlsAttributesFileNameExtension(); EXPECT_CALL(file_system, Exists(StrEq(path))).WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Write(_, _)) .With(AllArgs( StrAndLenContains(std::vector{param->media_segment_iv}))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(*file, Read(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::vector iv(param->media_segment_iv.begin(), param->media_segment_iv.end()); ASSERT_TRUE( device_files.StoreHlsAttributes(param->key_set_id, param->method, iv)); } TEST_P(DeviceFilesHlsAttributesTest, Delete) { MockFileSystem file_system; const size_t hls_attribute_index = GetParam(); const HlsAttributesInfo* param = &kHlsAttributesTestData[hls_attribute_index]; std::string path = device_base_path_ + param->key_set_id + DeviceFiles::GetHlsAttributesFileNameExtension(); EXPECT_CALL(file_system, Remove(StrEq(path))).WillOnce(Return(true)); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); ASSERT_TRUE(device_files.DeleteHlsAttributes(param->key_set_id)); } INSTANTIATE_TEST_SUITE_P(HlsAttributes, DeviceFilesHlsAttributesTest, ::testing::Range(0, kNumberOfHlsAttributes)); TEST_P(DeviceFilesUsageTableTest, Store) { MockFileSystem file_system; // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); int index = GetParam(); std::vector entry_data; std::vector usage_entry_info; usage_entry_info.resize(index + 1); for (int i = 0; i <= index; ++i) { usage_entry_info[i] = kUsageEntriesTestData[i]; entry_data.push_back(kUsageEntriesTestData[i].key_set_id); entry_data.push_back(kUsageEntriesTestData[i].usage_info_file_name); } entry_data.push_back(kUsageTableInfoTestData[index].usage_table_header); std::string path = device_base_path_ + DeviceFiles::GetUsageTableFileName(); EXPECT_CALL(file_system, Exists(StrEq(path))).WillRepeatedly(Return(true)); EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Write(_, _)) .With(AllArgs(StrAndLenContains(std::move(entry_data)))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(*file, Read(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); ASSERT_TRUE(device_files.StoreUsageTableInfo( kUsageTableInfoTestData[index].usage_table_header, usage_entry_info)); } TEST_P(DeviceFilesUsageTableTest, Read) { MockFileSystem file_system; // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); size_t index = GetParam(); std::string path = device_base_path_ + DeviceFiles::GetUsageTableFileName(); const std::string& file_data = kUsageTableInfoTestData[index].file_data; EXPECT_CALL(file_system, Exists(StrEq(path), NotNull())) .WillOnce(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(path))) .WillRepeatedly(Return(file_data.size())); EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Read(NotNull(), Eq(file_data.size()))) .WillOnce(DoAll(SetArrayArgument<0>(file_data.begin(), file_data.end()), Return(file_data.size()))); EXPECT_CALL(*file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::vector usage_entry_info; UsageTableHeader usage_table_header; bool lru_upgrade; ASSERT_TRUE(device_files.RetrieveUsageTableInfo( &usage_table_header, &usage_entry_info, &lru_upgrade)); EXPECT_EQ(kUsageTableInfoTestData[index].usage_table_header, usage_table_header); EXPECT_EQ(index + 1u, usage_entry_info.size()); for (size_t i = 0; i <= index; ++i) { EXPECT_EQ(kUsageEntriesTestData[i].storage_type, usage_entry_info[i].storage_type); EXPECT_EQ(kUsageEntriesTestData[i].key_set_id, usage_entry_info[i].key_set_id); EXPECT_EQ(kUsageEntriesTestData[i].usage_info_file_name, usage_entry_info[i].usage_info_file_name); EXPECT_EQ(kUsageEntriesTestData[i].last_use_time, usage_entry_info[i].last_use_time); EXPECT_EQ(kUsageEntriesTestData[i].offline_license_expiry_time, usage_entry_info[i].offline_license_expiry_time); } EXPECT_FALSE(lru_upgrade); } INSTANTIATE_TEST_SUITE_P(UsageInfo, DeviceFilesUsageTableTest, ::testing::Range(0, 6)); TEST_F(DeviceFilesUsageTableTest, ReadWithoutLruData) { // Setup file. MockFile* file = new MockFile(); EXPECT_CALL(*file, Read(NotNull(), Eq(kUsageTableWithoutLruData.size()))) .WillOnce(DoAll(SetArrayArgument<0>(kUsageTableWithoutLruData.cbegin(), kUsageTableWithoutLruData.cend()), Return(kUsageTableWithoutLruData.size()))); // Setup filesystem. const std::string path = device_base_path_ + DeviceFiles::GetUsageTableFileName(); MockFileSystem file_system; EXPECT_CALL(file_system, Exists(StrEq(path), NotNull())) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(path))) .WillRepeatedly(Return(kUsageTableWithoutLruData.size())); EXPECT_CALL(file_system, Open(StrEq(path), _)) .WillOnce(Return(ByMove(std::unique_ptr(file)))); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::vector usage_entry_info; UsageTableHeader usage_table_header; bool lru_upgrade; ASSERT_TRUE(device_files.RetrieveUsageTableInfo( &usage_table_header, &usage_entry_info, &lru_upgrade)); EXPECT_EQ(ArraySize(kUsageEntriesWithoutLruData), usage_entry_info.size()); for (size_t i = 0; i < ArraySize(kUsageEntriesWithoutLruData); ++i) { const CdmUsageEntryInfo& expected_entry = kUsageEntriesWithoutLruData[i]; const CdmUsageEntryInfo& retrieved_entry = usage_entry_info[i]; EXPECT_EQ(expected_entry, retrieved_entry); } EXPECT_TRUE(lru_upgrade); } TEST_F(DeviceFilesTest, StoreOemCertificateSuccess) { MockFileSystem file_system; const std::string oem_certificate_path = device_base_path_ + wvutil::kOemCertificateFileName; // Call to Open will return a unique_ptr, freeing this object. MockFile* file = new MockFile(); EXPECT_CALL(file_system, Open(StrEq(oem_certificate_path), IsCreateFileFlagSet())) .WillOnce(Return(ByMove(std::unique_ptr(file)))); EXPECT_CALL(*file, Write(_, _)) .With(AllArgs(StrAndLenContains( std::vector{kOemCertificate, kCryptoWrappedKey.key()}))) .WillOnce(ReturnArg<1>()); EXPECT_CALL(*file, Read(_, _)).Times(0); DeviceFiles device_files(&file_system); ASSERT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_TRUE( device_files.StoreOemCertificate(kOemCertificate, kCryptoWrappedKey)); } TEST_F(DeviceFilesTest, StoreOemCertificateEmptyCertFail) { MockFileSystem file_system; const CryptoWrappedKey private_key(CryptoWrappedKey::kRsa, CdmRandom::RandomData(kWrappedKeyLen)); EXPECT_CALL(file_system, Open(_, _)).Times(0); DeviceFiles device_files(&file_system); ASSERT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_FALSE( device_files.StoreOemCertificate(/*certificate=*/"", private_key)); } TEST_F(DeviceFilesTest, StoreOemCertificateUninitializedKeyTypeFail) { MockFileSystem file_system; const std::string& certificate = "fake_oem_cert"; const CryptoWrappedKey private_key(CryptoWrappedKey::kUninitialized, CdmRandom::RandomData(kWrappedKeyLen)); EXPECT_CALL(file_system, Open(_, _)).Times(0); DeviceFiles device_files(&file_system); ASSERT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_FALSE(device_files.StoreOemCertificate(certificate, private_key)); } TEST_F(DeviceFilesTest, StoreOemCertificateEmptyKeyFail) { MockFileSystem file_system; const std::string& certificate = "fake_oem_cert"; const CryptoWrappedKey private_key(CryptoWrappedKey::kRsa, ""); EXPECT_CALL(file_system, Open(_, _)).Times(0); DeviceFiles device_files(&file_system); ASSERT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_FALSE(device_files.StoreOemCertificate(certificate, private_key)); } TEST_F(DeviceFilesTest, HasOemCertificate) { MockFileSystem file_system; const std::string device_certificate_path = device_base_path_ + wvutil::kOemCertificateFileName; EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); DeviceFiles device_files(&file_system); ASSERT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_TRUE(device_files.HasOemCertificate()); } TEST_F(DeviceFilesTest, HasNoOemCertificate) { MockFileSystem file_system; const std::string device_certificate_path = device_base_path_ + wvutil::kOemCertificateFileName; EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path))) .Times(AtLeast(1)) .WillRepeatedly(Return(false)); DeviceFiles device_files(&file_system); ASSERT_TRUE(device_files.Init(kSecurityLevelL1)); EXPECT_FALSE(device_files.HasOemCertificate()); } TEST_F(DeviceFilesTest, RetrieveOemCertificateSuccess) { MockFileSystem file_system; const std::string device_certificate_path = device_base_path_ + wvutil::kOemCertificateFileName; // Call to Open will return a unique_ptr, freeing this object. MockFile* read_file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path), NotNull())) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(device_certificate_path))) .WillOnce(Return(kFakeOemCertificateFile.size())); EXPECT_CALL(file_system, Open(StrEq(device_certificate_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(read_file)))); EXPECT_CALL(*read_file, Read(NotNull(), Eq(kFakeOemCertificateFile.size()))) .WillOnce(DoAll(SetArrayArgument<0>(kFakeOemCertificateFile.begin(), kFakeOemCertificateFile.end()), Return(kFakeOemCertificateFile.size()))); EXPECT_CALL(*read_file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; ASSERT_EQ(device_files.RetrieveOemCertificate(&certificate, &private_key), DeviceFiles::kCertificateValid); EXPECT_EQ(certificate, kOemCertificate); EXPECT_EQ(private_key, kCryptoWrappedKey); } TEST_F(DeviceFilesTest, RetrieveOemCertificateRandomCertFail) { MockFileSystem file_system; const std::string device_certificate_path = device_base_path_ + wvutil::kOemCertificateFileName; std::string ramdom_cert = "random_cert"; // Call to Open will return a unique_ptr, freeing this object. MockFile* read_file = new MockFile(); EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path), NotNull())) .Times(AtLeast(1)) .WillRepeatedly(Return(true)); EXPECT_CALL(file_system, FileSize(StrEq(device_certificate_path))) .WillOnce(Return(ramdom_cert.size())); EXPECT_CALL(file_system, Open(StrEq(device_certificate_path), _)) .WillOnce(Return(ByMove(std::unique_ptr(read_file)))); EXPECT_CALL(*read_file, Read(NotNull(), Eq(ramdom_cert.size()))) .WillOnce( DoAll(SetArrayArgument<0>(ramdom_cert.begin(), ramdom_cert.end()), Return(ramdom_cert.size()))); EXPECT_CALL(*read_file, Write(_, _)).Times(0); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; EXPECT_EQ(device_files.RetrieveOemCertificate(&certificate, &private_key), DeviceFiles::kCertificateNotFound); } TEST_F(DeviceFilesTest, RetrieveOemCertificateNotFoundFail) { MockFileSystem file_system; const std::string device_certificate_path = device_base_path_ + wvutil::kOemCertificateFileName; int errno_value = ENOENT; EXPECT_CALL(file_system, Exists(StrEq(device_certificate_path), NotNull())) .Times(AtLeast(1)) .WillRepeatedly(DoAll(SetArgPointee<1>(errno_value), (Return(false)))); DeviceFiles device_files(&file_system); EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::string certificate; CryptoWrappedKey private_key; EXPECT_EQ(device_files.RetrieveOemCertificate(&certificate, &private_key), DeviceFiles::kCertificateNotFound); } } // namespace wvcdm