commit bb871cd8dc296c07fac77e9b45419abe03743c02 Author: widevinedump <96489252+widevinedump@users.noreply.github.com> Date: Tue Dec 21 22:10:34 2021 +0530 new updates added diff --git a/Helpers/Keybox.py b/Helpers/Keybox.py new file mode 100644 index 0000000..b9f265b --- /dev/null +++ b/Helpers/Keybox.py @@ -0,0 +1,90 @@ +import io +import json +import struct +from base64 import b64decode, b64encode +from binascii import hexlify + + +def create_table(): + a = [] + for i in range(256): + k = i << 24 + for _ in range(8): + k = (k << 1) ^ 0x4c11db7 if k & 0x80000000 else k << 1 + a.append(k & 0xffffffff) + return a + + +def crc32_mpeg(data, length): + crc_val = 0xFFFFFFFF + crctab = create_table() + for i in range(length): + crc_val = (crctab[(data[i] & 0xFF) ^ (crc_val >> 24)] ^ (crc_val << 8)) & 0xFFFFFFFF + return crc_val + + +class Keybox: + def __init__(self, keybox_data: any): + if isinstance(keybox_data, str): + self.__keybox = b64decode(keybox_data) + elif isinstance(keybox_data, io.BufferedReader): + self.__keybox = keybox_data.read() + elif isinstance(keybox_data, dict): + self.__keybox = self.__generate_crc(keybox_data) + else: + print(type(keybox_data)) + raise ValueError('unable to read the file/string, etc') + + self.__parse() + + @staticmethod + def __generate_crc(keybox) -> bytes: + device_id = keybox['device_id'] + device_token = keybox['device_token'] + device_key = keybox['device_key'] + key_box = bytes.fromhex(device_id) + bytes.fromhex(device_key) + bytes.fromhex(device_token) + b'kbox' + crc = crc32_mpeg(key_box, len(key_box)) + key_box += struct.pack('>I', crc) + key_box += keybox['security_level'].encode() + return key_box + + def __parse(self): + self.device_id = self.__keybox[0:32] + # this is the aes key + self.device_key = self.__keybox[32:48] + self.device_token = self.__keybox[48:120] + self.keybox_tag = self.__keybox[120:124] + self.crc32 = struct.unpack('>I', self.__keybox[124:128])[0] + self.crc32_raw = hexlify(self.__keybox[124:128]) + # this is optional, most likely not required + self.level_tag = self.__keybox[128:132] + self.flags = struct.unpack(">L", self.__keybox[48:120][0:4])[0] + self.version = struct.unpack(">I", self.__keybox[48:52])[0] + self.system_id = struct.unpack(">I", self.__keybox[52:56])[0] + # or unique_id as in wv pdf, encrypted by pre-provisioning key + self.provisioning_id = self.__keybox[56:72] + # encrypted with unique id, contains device key, device key hash, and flags + self.encrypted_bits = self.__keybox[72:120] + + def __repr__(self): + return json.dumps({ + 'device_id': b64encode(self.device_id).decode(), + 'device_id_size': len(self.device_id), + 'device_key': b64encode(self.device_key).decode(), + 'device_token': b64encode(self.device_token).decode(), + 'device_token_size': len(self.device_token), + 'kbox_tag': self.keybox_tag.decode(), + 'crc32': self.crc32, + 'crc32_raw': self.crc32_raw.decode(), + 'lvl1_tag': self.level_tag.decode(), + 'flags': self.flags, + 'released': True if self.flags & 2 == 2 else False, + 'version': self.version, + 'system_id': self.system_id, + 'provisioning_id': b64encode(self.provisioning_id).decode(), + 'encrypted_bits': b64encode(self.encrypted_bits).decode(), + 'keybox': b64encode(self.__keybox).decode() + }, indent=4) + + def get_keybox(self): + return self.__keybox diff --git a/Helpers/Scanner.py b/Helpers/Scanner.py new file mode 100644 index 0000000..dd64e2b --- /dev/null +++ b/Helpers/Scanner.py @@ -0,0 +1,187 @@ +import os +import json +from Crypto.PublicKey import RSA +from google.protobuf import message +import logging +from Helpers.Keybox import Keybox +from Helpers.wv_proto2_pb2 import SignedLicenseRequest + + +class Scan: + def __init__(self, device_name): + self.logger = logging.getLogger(__name__) + self.KEY_DUMP_LOC = 'keydump/' + self.device_name = device_name + self.saved_keys = {} + self.frida_script = open('Helpers/script.js', 'r').read() + self.device = { + 'device_id': None, + 'device_token': None, + 'device_key': os.urandom(16).hex(), + 'security_level': '' + } + self.widevine_libraries = [ + 'libwvhidl.so', + 'libwvdrmengine.so', + 'liboemcrypto.so', + 'libmediadrm.so', + 'libwvdrm_L1.so', + 'libWVStreamControlAPI_L1.so', + 'libdrmwvmplugin.so', + 'libwvm.so' + ] + + def export_key(self, k): + root = SignedLicenseRequest() + root.ParseFromString(k['id']) + cid = root.Msg.ClientId + system_id = cid.Token._DeviceCertificate.SystemId + save_dir = os.path.join('key_dumps', f'{self.device_name}/private_keys/{system_id}/{str(k["key"].n)[:10]}') + + if not os.path.exists(save_dir): + os.makedirs(save_dir) + + with open(os.path.join(save_dir, 'client_id.bin'), 'wb+') as writer: + writer.write(cid.SerializeToString()) + + with open(os.path.join(save_dir, 'private_key.pem'), 'wb+') as writer: + writer.write(k['key'].exportKey('PEM')) + self.logger.info('Key pairs saved at ' + save_dir) + + def on_message(self, msg, data): + try: + if msg['payload'] == 'priv': + self.logger.debug('processing private key') + self.private_key_message(msg, data) + elif msg['payload'] == 'id': + self.logger.debug('processing id') + self.license_request_message(data) + elif msg['payload'] == 'device_id': + self.logger.debug('processing device id') + self.device_id_message(data) + elif msg['payload'] == 'device_token': + self.logger.debug('processing device token') + self.device_token_message(data) + elif msg['payload'] == 'security_level': + tag = data.decode() + if tag == 'L1': + self.device['security_level'] = 'LVL1' + else: + self.device['security_level'] = 'LVL3' + elif msg['payload'] == 'aes_key': + self.aes_key_message(data) + elif msg['payload'] == 'message': + payload = json.loads(data.decode()) + self.logger.debug( + json.dumps( + payload, + indent=4 + ) + ) + elif msg['payload'] == 'message_info': + self.logger.info(data.decode()) + + except: + self.logger.error('unable to process the message') + self.logger.error(msg) + self.logger.error(data) + + def private_key_message(self, private_key_message, data): + try: + try: + key = RSA.importKey(data) + cur = self.saved_keys.get(key.n, {}) + if 'id' in cur: + if 'key' not in cur: + cur['key'] = key + self.saved_keys[key.n] = cur + self.export_key(cur) + else: + self.saved_keys[key.n] = {'key': key} + except: + self.logger.error('unable to load private key') + self.logger.error(data) + pass + except: + self.logger.error('payload of type priv failed') + self.logger.error(private_key_message) + + def license_request_message(self, data): + with open('license_request.bin', 'wb+') as f: + f.write(data) + root = SignedLicenseRequest() + try: + root.ParseFromString(data) + except message.DecodeError: + return + try: + key = RSA.importKey(root.Msg.ClientId.Token._DeviceCertificate.PublicKey) + cur = self.saved_keys.get(key.n, {}) + if 'key' in cur: + if 'id' not in cur: + cur['id'] = data + self.saved_keys[key.n] = cur + self.export_key(cur) + else: + self.saved_keys[key.n] = {'id': data} + except Exception as error: + self.logger.error(error) + + def device_id_message(self, data_buffer): + if not self.device['device_id']: + self.device['device_id'] = data_buffer.hex() + if self.device['device_id'] and self.device['device_token'] and self.device['device_key']: + self.save_key_box() + + def device_token_message(self, data_buffer): + if not self.device['device_token']: + self.device['device_token'] = data_buffer.hex() + if self.device['device_id'] and self.device['device_token']: + self.save_key_box() + + def aes_key_message(self, data_buffer): + if not self.device['device_key']: + self.device['device_key'] = data_buffer.hex() + if self.device['device_id'] and self.device['device_token']: + self.save_key_box() + + def find_widevine_process(self, dev, process_name): + process = dev.attach(process_name) + script = process.create_script(self.frida_script) + script.load() + loaded = [] + try: + for lib in self.widevine_libraries: + try: + loaded.append(script.exports.widevinelibrary(lib)) + except: + pass + finally: + process.detach() + return loaded + + def hook_to_process(self, device, process, library): + session = device.attach(process) + script = session.create_script(self.frida_script) + script.on('message', self.on_message) + script.load() + script.exports.inject(library, process) + return session + + def save_key_box(self): + try: + if self.device['device_id'] is not None and self.device['device_token'] is not None: + self.logger.info('saving key box') + keybox = Keybox(self.device) + box = os.path.join('key_dumps', f'{self.device_name}/key_boxes/{keybox.system_id}') + self.logger.debug(f'saving to {box}') + if not os.path.exists(box): + os.makedirs(box) + with open(os.path.join(box, f'{keybox.system_id}.bin'), 'wb') as writer: + writer.write(keybox.get_keybox()) + with open(os.path.join(box, f'{keybox.system_id}.json'), 'w') as writer: + writer.write(keybox.__repr__()) + self.logger.info(f'saved keybox to {box}') + except Exception as error: + self.logger.error('unable to save keybox') + self.logger.error(error) \ No newline at end of file diff --git a/Helpers/script.js b/Helpers/script.js new file mode 100644 index 0000000..2e4c1f5 --- /dev/null +++ b/Helpers/script.js @@ -0,0 +1,940 @@ +const KNOWN_DYNAMIC_FUNC = ['ulns', 'cwkfcplc', 'dnvffnze', 'kgaitijd', 'polorucp']; + +function TextEncoder() { +} + +TextEncoder.prototype.encode = function (string) { + var octets = []; + var length = string.length; + var i = 0; + while (i < length) { + var codePoint = string.codePointAt(i); + var c = 0; + var bits = 0; + if (codePoint <= 0x0000007F) { + c = 0; + bits = 0x00; + } else if (codePoint <= 0x000007FF) { + c = 6; + bits = 0xC0; + } else if (codePoint <= 0x0000FFFF) { + c = 12; + bits = 0xE0; + } else if (codePoint <= 0x001FFFFF) { + c = 18; + bits = 0xF0; + } + octets.push(bits | (codePoint >> c)); + c -= 6; + while (c >= 0) { + octets.push(0x80 | ((codePoint >> c) & 0x3F)); + c -= 6; + } + i += codePoint >= 0x10000 ? 2 : 1; + } + return octets; +} + +function TextDecoder() { +} + +TextDecoder.prototype.decode = function (octets) { + var string = ""; + var i = 0; + while (i < octets.length) { + var octet = octets[i]; + var bytesNeeded = 0; + var codePoint = 0; + if (octet <= 0x7F) { + bytesNeeded = 0; + codePoint = octet & 0xFF; + } else if (octet <= 0xDF) { + bytesNeeded = 1; + codePoint = octet & 0x1F; + } else if (octet <= 0xEF) { + bytesNeeded = 2; + codePoint = octet & 0x0F; + } else if (octet <= 0xF4) { + bytesNeeded = 3; + codePoint = octet & 0x07; + } + if (octets.length - i - bytesNeeded > 0) { + var k = 0; + while (k < bytesNeeded) { + octet = octets[i + k + 1]; + codePoint = (codePoint << 6) | (octet & 0x3F); + k += 1; + } + } else { + codePoint = 0xFFFD; + bytesNeeded = octets.length - i; + } + string += String.fromCodePoint(codePoint); + i += bytesNeeded + 1; + } + return string +} + +function containsLib(library){ + return Process.getModuleByName(library); +} + +function containsFunction(name, address) { + var result = false; + for (var i = 0; i < KNOWN_DYNAMIC_FUNC.length; i++) { + result = KNOWN_DYNAMIC_FUNC[i] === name; + if (result) { + sender_payload({ + from: 'Dynamic Function', + message: 'L3 RSA Key export function found: ' + name + }); + return result; + } + } + + return result; + +} + + +function inject(lib, process_name){ + // printer('Running ' + lib['name'] + ' at ' + lib['base'], 'Hook'); + sender_payload_info( + 'Running ' + lib['name'] + ' at ' + lib['base'] + ); + Hooker(lib, process_name) +} + +function Hooker(lib, process_name) { + const name = lib['name']; + Module.enumerateExportsSync(name).forEach(function(exp){ + try { + var module_address = exp.address; + if (exp.name === '_lcc00' || exp.name === '_oecc00') { + GetLevel3_IsInApp(module_address, process_name); + } else if (exp.name === '_lcc01' || exp.name === '_oecc01') { + GetLevel3_Initialize(module_address, process_name); + } else if (exp.name === '_lcc49' || exp.name === '_oecc49') { + GetLevel3_GetProvisioningMethod(module_address, process_name); + } else if (exp.name === '_lcc38' || exp.name === '_oecc38') { + GetLevel3_GetNumberOfOpenSessions(module_address, process_name); + } else if (exp.name === '_lcc37' || exp.name === '_oecc37') { + GetLevel3_GetMaxNumberOfSessions(module_address, process_name); + } else if (exp.name === '_lcc22' || exp.name === '_oecc22') { + GetApiVersion(module_address, process_name); + } else if (exp.name === '_lcc46' || exp.name === '_oecc46') { + GetSecurityPatchLevel(module_address, process_name); + } else if (exp.name === '_lcc23' || exp.name === '_oecc23') { + GetSecurityLevel(module_address, process_name); + } else if (exp.name === '_lcc90' || exp.name === '_oecc90') { + GetLevel3_BuildInformation(module_address, process_name); + } else if (exp.name === '_lcc52' || exp.name === '_oecc52') { + GetSupportedCertificates(module_address, process_name); + } else if (exp.name === '_lcc02' || exp.name === '_oecc02') { + GetLevel3_Terminate_Status(module_address, process_name); + } else if (exp.name === '_lcc07' || exp.name === '_oecc07') { + GetLevel3_GetDeviceID(module_address, process_name); + } else if (exp.name === '_lcc04' || exp.name === '_oecc04') { + GetLevel3_GetKeyData(module_address, process_name) + } else if (exp.name === 'OEMCrypto_LoadKeys_Back_Compat') { + GetLevel3_LoadKeys(module_address, process_name); + } else if (exp.name === '_lcc12' || exp.name === '_oecc12') { + GetLevel3_GenerateDerivedKeys(module_address, process_name); + } else if (exp.name === '_lcc13' || exp.name === '_oecc13') { + GetLevel3_GenerateSignature(module_address, process_name); + } else if (exp.name === '_lcc50' || exp.name === '_oecc50') { + GetLevel3_GetOEMPublicCertificate(module_address, process_name); + } else if (exp.name === '_lcc19' || exp.name === '_oecc19') { + GetLevel3_LoadDeviceRSAKey(module_address, process_name) + } else if (exp.name === '_lcc18' || exp.name === '_oecc18') { + GetLevel3_RewrapDeviceRSAKey(module_address, process_name); + } else if (exp.name === 'AES_unwrap_key') { + AES_unwrap_key(module_address, process_name) + } else if (containsFunction(exp.name, exp.address)) { + polorucp(module_address, process_name); + } else if (exp.name.includes('UsePrivacyMode')) { + UsePrivacyMode(module_address, process_name); + } else if (exp.name === 'CdmInfo') { + CdmInfo(module_address, process_name); + } else if (exp.name.includes('PrepareKeyRequest')) { + PrepareKeyRequest(module_address, process_name); + } else if (exp.name.includes("_ZN14video_widevine25SignedProvisioningMessageC2Ev")) { + SignedProvisioningMessage(module_address, process_name) + } else if (exp.name === 'AES_set_encrypt_key') { + AES_set_encrypt_key(module_address, process_name) + } else if (exp.name.includes('jnyxqs')) { + // this needs to be changed to an array of methods since they all differ between oemcryptos for l1 and l3 + jnyxqs(module_address) + } else if (exp.name === 'fwemrknr') { + fwemrknr(module_address, process_name) + } else if (exp.name === 'pbntpypb') { + pbntpypb(module_address, process_name) + } + } catch (e) { + console.log("Error: " + e + " at F: " + exp.name); + } +}); +} + +function pbntpypb(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function(args) { + this.data = { + '1': args[0] + } + }, + onLeave: function(returnResult) { + console.log(hexdump(returnResult)); + // console.log('onleave') + // console.log('first parameter'); + // const data = Memory.readPointer(this.data['1']); + // const param1 = hexdump(data); + // console.log(param1); + // console.log('ended') + } + }); +} + +function fwemrknr(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function(args) { + this.data = { + '0': args[0], + '1': args[1], + '2': args[2], + '3': args[3], + '4': args[4], + '5': args[5], + '6': args[6], + '7': args[7], + '8': args[8], + '9': args[9], + '10': args[10], + '11': args[11], + '12': args[12], + '13': args[13], + '14': args[14], + '15': args[15], + '16': args[16] + } + }, + onLeave: function(returnResult) { + // console.log('onleave') + // console.log('first parameter'); + // const data = Memory.readPointer(this.data['1']); + // const param1 = hexdump(data); + // console.log(param1); + // console.log('ended') + } + }); +} + +function jnyxqs(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function(args) { + this.data = { + '1': args[0], + '2': args[1] + } + }, + onLeave: function(returnResult) { + printer('jnyxqs', process_name); + console.log(hexdump(returnResult)); + console.log(Memory.readByteArray(this.data['1'], this.data['2'].toInt32())); + console.log(this.data['2'].toInt32()); + send('aes_key', Memory.readByteArray(this.data['1'], this.data['2'].toInt32())) + } + }); +} + +function ithomqf(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function(args) { + this.data = { + '1': args[0], + '2': args[1] + } + }, + onLeave: function(returnResult) { + printer('ithomqf', process_name); + console.log(hexdump(returnResult)); + } + }); +} + +function AES_set_encrypt_key(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + // both of these are pointers + this.data = { + "userKey": args[0], + "bits": args[1], + 'key': args[2] + + } + }, + onLeave: function (returnResult) { + const size = this.data['bits'].toInt32() / 8; + const userKey = Memory.readByteArray(this.data['userKey'], size); + const key = Memory.readByteArray(this.data['key'], size); + printer('return result: ' + returnResult); + const data = { + from: process_name, + message: 'AES_set_encrypt_key', + payload: { + 'size': size, + 'user_key': byteArrayToHex(userKey), + 'key': byteArrayToHex(key) + + } + } + sender_payload(data) + } + }); +} + + +function SignedProvisioningMessage(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + this.data = args[0] + }, + onLeave: function () { + printer('SignedProvisioningMessage', process_name); + console.log(this.data); + console.log(hexdump(this.data)); + console.log(hexdump(Memory.readPointer(this.data))); + console.log(hexdump(Memory.readPointer(Memory.readPointer(this.data)))); + console.log(Memory.readByteArray(Memory.readPointer(Memory.readPointer(this.data)), 2000)); + + } + }); +} + +function readStdString(str) { + const size = str.add(Process.pointerSize).readUInt(); + return str.add(Process.pointerSize * 2).readPointer().readByteArray(size); +} + +function printer(message, origination){ + console.log('['+origination+']:[INFO]:', message) +} + +function CdmInfo(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function(args) { + console.log('CdmInfo'); + console.log(JSON.stringify(args)) + } + }); +} + +function polorucp(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function(args) { + if (!args[6].isNull()) { + const size = args[6].toInt32(); + if (size >= 1000 && size <= 2000 && !args[5].isNull()) { + const k = args[5].readByteArray(size); + const view = new Uint8Array(k); + if (view[0] === 0x30 && view[1] === 0x82) { + const data = { + from: process_name, + data: 'Captured Private Key' + }; + sender_payload(data); + send('priv', k); + } + } + } + } + }); +} + +function PrepareKeyRequest(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + this.ret = args[4]; + }, + onLeave: function () { + if (this.ret) { + const message = readStdString(this.ret); + const data = { + from: process_name, + message: 'PrepareKeyRequest, Captured License Request' + }; + sender_payload(data); + send('id', message); + } + } + }); +} + +function UsePrivacyMode(address, process_name) { + Interceptor.attach(address, { + onLeave: function (retval) { + const data = { + from: process_name, + message: 'Replacing PrivacyMode' + }; + sender_payload(data); + retval.replace(ptr(0)); + } + }); +} + +function AES_unwrap_key(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + console.log('entering aes unwrap key') + } + }) +} + +function GetLevel3_Initialize(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function(args) { + sender_payload( + { + from: process_name, + message: 'OEMCrypto_Initialize' + } + ) + } + }) +} + +function GetApiVersion(address, process_name) { + Interceptor.attach(ptr(address), { + onLeave: function (retval) { + // const message = 'OEMCryptoVersion: ' + retval.toInt32(); + const data = { + from: process_name, + message: 'OEMCryptoVersion', + payload: { + 'Version': retval.toInt32() + } + }; + sender_payload(data) + } + }); +} + +function GetSecurityPatchLevel(address, process_name) { + Interceptor.attach(ptr(address), { + onLeave: function (retval) { + sender_payload({ + from: process_name, + message: 'OEMSecurityPatchLevel', + payload:{ + 'Patch_Level': retval.toInt32() + } + }) + } + }); +} + +function GetSecurityLevel(address, process_name) { + Interceptor.attach(ptr(address), { + onLeave: function (retval) { + const level = Memory.readUtf8String(retval); + sender_payload({ + from: process_name, + message: 'OEMSecurityLevel', + payload: { + 'Level': level + } + }); + send('security_level', new TextEncoder().encode(level)) + } + }); +} + +function GetLevel3_BuildInformation(address, process_name) { + Interceptor.attach(ptr(address), { + onLeave: function (retval) { + const message = 'OEMCrypto_BuildInformation: ' + Memory.readUtf8String(retval); + sender_payload({ + from: process_name, + message: message + }); + } + }); +} + +function GetSupportedCertificates(address, process_name) { + Interceptor.attach(ptr(address), { + onLeave: function (retval) { + const message = 'OEMSupportedCertificates: ' + OEMCrypto_RSA_Support[retval.toInt32()]; + sender_payload({ + from: process_name, + message: message + }); + } + }); +} + +function GetLevel3_IsInApp(address, process_name) { + Interceptor.attach(ptr(address), { + onLeave: function (retval) { + sender_payload({ + from: process_name, + message: 'OEMCrypto_IsInApp', + payload: { + 'in_app': Boolean(retval) + } + }); + } + }); +} + +function GetLevel3_GetProvisioningMethod(address, process_name) { + Interceptor.attach(ptr(address), { + onLeave: function (retval) { + sender_payload({ + from: process_name, + message: 'OEMCrypto_GetProvisioningMethod', + payload: { + 'Method': OEMCrypto_ProvisioningMethod[retval.toInt32()] + } + }); + } + }); +} + +function GetLevel3_GetNumberOfOpenSessions(address, process_name) { + Interceptor.attach(ptr(address), { + onLeave: function (retval) { + const message = 'OEMCrypto_GetNumberOfOpenSessions: ' + retval.toInt32(); + sender_payload({ + from: process_name, + message: message + }); + } + }); +} + +function GetLevel3_GetMaxNumberOfSessions(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + this.maximum = args[0] + }, + onLeave: function () { + const message = 'OEMCrypto_GetMaxNumberOfSessions: ' + Memory.readPointer(this.maximum).toInt32(); + sender_payload({ + from: process_name, + message: message + }); + } + }); +} + +function GetLevel3_Terminate_Status(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + this.maximum = args[0] + }, + onLeave: function (retvalue) { + const message = 'OEMCrypto_Terminate_Status: ' + OEMCryptoResult[retvalue.toInt32()]; + sender_payload({ + from: process_name, + message: message + }); + } + }); +} + +function GetLevel3_GetDeviceID(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function(args) { + this.deviceId = args[0]; + this.idLength = args[1] + }, + onLeave: function (retval) { + var idLength = Memory.readPointer(this.idLength).toInt32(); + const deviceIdArray = Memory.readByteArray(this.deviceId, idLength); + const deviceId = byteArrayToHex(deviceIdArray); + const data = { + from: process_name, + message: 'OEMCrypto_GetDeviceID', + payload: { + 'Status': OEMCryptoResult[retval.toInt32()], + 'Length': idLength, + 'DeviceId': deviceId + } + }; + sender_payload(data); + send('device_id', deviceIdArray) + } + }); +} + + + +function GetLevel3_GetKeyData(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + this.keyData = args[0]; + this.keyDataLength = args[1]; + }, + onLeave: function (retvalue) { + const keyDataLength = Memory.readPointer(this.keyDataLength).toInt32(); + const keyDataArray = Memory.readByteArray(this.keyData, keyDataLength); + const device_token = byteArrayToHex(keyDataArray); + const data = { + from: process_name, + message: 'OEMCrypto_GetKeyData', + payload: { + 'Status': OEMCryptoResult[retvalue.toInt32()], + 'Size': keyDataLength, + 'Device_Token': device_token + } + }; + sender_payload(data); + send('device_token', keyDataArray) + } + }); +} + +function GetLevel3_LoadKeys(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + this.data = { + 'session': args[0], + 'message': args[1], + 'message_length': args[2], + 'signature': args[3], + 'signature_length': args[4], + 'ivs': args[5], + 'keys': args[6], + 'num_keys': args[7], + 'key_array': args[8], + 'pst': args[9], + 'srm_restriction_data': args[10], + 'license_type': args[11] + } + }, + onLeave: function (retvalue) { + const message_length = this.data['message_length'].toInt32(); + const message = Memory.readByteArray(this.data['message'], message_length); + const signature_length = this.data['signature_length'].toInt32(); + const signature = Memory.readByteArray(this.data['signature'], signature_length); + // const ivs = this.data['ivs']; + // const keys = Memory.readPointer(this.data['keys']); + // const num_keys = this.data['num_keys'].toInt32(); + // const key_array = Memory.readPointer(this.data['key_array']); + // const pst = this.data['pst']; + // const srm_restriction_data = this.data['srm_restriction_data']; + const license_type = OEMCrypto_LicenseType[this.data['license_type'].toInt32()]; + const data = { + from: process_name, + message: 'OEMCrypto_LoadKeys', + payload: { + 'Status': OEMCryptoResult[retvalue.toInt32()], + 'Type': license_type, + 'Message': byteArrayToHex(message), + 'Signature': byteArrayToHex(signature) + } + }; + sender_payload(data) + } + }); +} + + +function GetLevel3_GenerateDerivedKeys(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + this.data = { + 'session': args[0], + 'mac_key_context': args[1], + 'mac_key_context_length': args[2], + 'enc_key_context': args[3], + 'enc_key_context_length': args[4] + } + }, + onLeave: function (retvalue) { + const mac_length = this.data['mac_key_context_length'].toInt32(); + const mac_context = Memory.readByteArray(this.data['mac_key_context'], mac_length); + const enc_length = this.data['enc_key_context_length'].toInt32(); + const enc_context = Memory.readByteArray(this.data['enc_key_context'], enc_length); + const data = { + from: process_name, + message: 'GetLevel3_GenerateDerivedKeys', + payload: { + 'Status': OEMCryptoResult[retvalue.toInt32()], + 'Session': this.data['session'].toInt32(), + 'Mac_Length': mac_length, + 'Mac_Context': mac_context, + 'Enc_Length': enc_length, + 'Enc_Context': enc_context + } + }; + sender_payload(data) + + } + }); +} + +function GetLevel3_GenerateSignature(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + this.data = { + 'session': args[0], + 'message': args[1], + 'message_length': args[2], + 'signature': args[3], + 'signature_lenght': args[4] + } + }, + onLeave: function (retvalue) { + const message_length = this.data['message_length'].toInt32(); + const message = Memory.readByteArray(this.data['message'], message_length); + const signature_lenght = Memory.readPointer(this.data['signature_lenght']).toInt32(); + const signature = Memory.readByteArray(this.data['signature'], signature_lenght); + const data = { + from: process_name, + message: 'GetLevel3_GenerateSignature', + payload: { + 'Status': OEMCryptoResult[retvalue.toInt32()], + 'Session': this.data['session'].toInt32(), + message: { + 'length': message_length, + 'context': byteArrayToHex(message) + }, + signature: { + 'length': signature_lenght, + 'context': byteArrayToHex(signature) + } + } + }; + sender_payload(data) + + } + }); +} + + +function GetLevel3_GetOEMPublicCertificate(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + this.data = { + 'session': args[0], + 'public_cert': args[1], + 'public_cert_length': args[2] + } + }, + onLeave: function (retvalue) { + const result = OEMCryptoResult[retvalue.toInt32()]; + const data = { + from: process_name, + message: 'GetLevel3_GetOEMPublicCertificate', + payload: { + 'Status': result + } + }; + sender_payload(data); + if (result === OEMCryptoResult["0"]) { + const public_cert_length = Memory.readPointer(this.data['public_cert_length']).toInt32(); + const public_cert = Memory.readByteArray(this.data['public_cert'], public_cert_length); + const data2 = { + from: process_name, + message: 'GetLevel3_GetOEMPublicCertificate', + payload: { + 'Session': this.data['session'].toInt32(), + 'Public_Cert_Length': public_cert_length, + 'Cert': public_cert + } + }; + sender_payload(data2); + } + } + }); +} + +function GetLevel3_LoadDeviceRSAKey(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + this.data = { + 'session': args[0], + 'wrapped_rsa_key': args[1], + 'wrapped_rsa_key_length': args[2] + } + }, + onLeave: function (retvalue) { + const wrapped_rsa_key_length = this.data['wrapped_rsa_key_length'].toInt32(); + const wrapped_rsa_key = Memory.readByteArray(this.data['wrapped_rsa_key'], wrapped_rsa_key_length); + const data = { + from: process_name, + message: 'GetLevel3_LoadDeviceRSAKey', + payload: { + 'Status': OEMCryptoResult[retvalue.toInt32()], + 'Session': this.data['session'].toInt32(), + 'Length': wrapped_rsa_key_length, + 'Context': byteArrayToHex(wrapped_rsa_key) + } + }; + sender_payload(data) + } + }); +} + + +function GetLevel3_RewrapDeviceRSAKey(address, process_name) { + Interceptor.attach(ptr(address), { + onEnter: function (args) { + this.data = { + 'session': args[0], + 'message': args[1], + 'message_length': args[2], + 'signature': args[3], + 'signature_length': args[4], + 'nonce': args[5], + 'enc_rsa_key': args[6], + 'enc_rsa_key_length': args[7], + 'enc_rsa_key_iv': args[8], + 'wrapped_rsa_key': args[9], + 'wrapped_rsa_key_length': args[10] + } + }, + onLeave: function (retvalue) { + const status = OEMCryptoResult[retvalue.toInt32()]; + if (status === OEMCryptoResult["0"]) { + const message_length = this.data['message_length'].toInt32(); + const message = Memory.readByteArray(this.data['message'], message_length); + const signature_length = this.data['signature_length'].toInt32(); + const signature = Memory.readByteArray(this.data['signature'], signature_length); + const enc_rsa_key_length = this.data['enc_rsa_key_length'].toInt32(); + const enc_rsa_key = Memory.readByteArray(this.data['enc_rsa_key'], enc_rsa_key_length); + const wrapped_rsa_key_length = Memory.readPointer(this.data['wrapped_rsa_key_length']).toInt32(); + const wrapped_rsa_key = Memory.readByteArray(this.data['wrapped_rsa_key'], wrapped_rsa_key_length); + const data = { + from: process_name, + message: 'GetLevel3_RewrapDeviceRSAKey', + status: status, + session: this.data['session'].toInt32(), + payload: { + enc_rsa_key: { + 'length': enc_rsa_key_length, + 'key': enc_rsa_key + }, + wrapped_rsa_key: { + 'length': wrapped_rsa_key_length, + 'key': wrapped_rsa_key + }, + signature: { + 'length': signature_length, + 'signature': signature + }, + message: { + 'lenght': message_length, + 'message': message + } + } + }; + sender_payload(data) + } + + } + }); +} + +function byteArrayToHex(data) { + var array = new Uint8Array(data); + var result = ''; + for (var i = 0; i < array.length; ++i) + result += ('0' + (array[i] & 0xFF).toString(16)).slice(-2); + return result; +} + +function sender_payload(data) { + var encoded = new TextEncoder().encode(JSON.stringify(data)); + send('message', encoded); +} + +function sender_payload_info(message) { + send('message_info', new TextEncoder().encode(message)) +} + +const OEMCrypto_ProvisioningMethod = { + 0: 'OEMCrypto_ProvisioningError', // Device cannot be provisioned. + 1: 'OEMCrypto_DrmCertificate', // Device has baked in DRM certificate + // (level 3 only) + 2: 'OEMCrypto_Keybox', // Device has factory installed unique keybox. + 3: 'OEMCrypto_OEMCertificate' // Device has factory installed OEM certificate. +}; + +const OEMCrypto_RSA_Support = { + 1: 'OEMCrypto_Supports_RSA_2048bit', + 2: 'OEMCrypto_Supports_RSA_3072bit', + 10: 'OEMCrypto_Supports_RSA_CAST' +}; + +const OEMCryptoResult = { + 0: 'OEMCrypto_SUCCESS', + 1: 'OEMCrypto_ERROR_INIT_FAILED', + 2: 'OEMCrypto_ERROR_TERMINATE_FAILED', + 3: 'OEMCrypto_ERROR_OPEN_FAILURE', + 4: 'OEMCrypto_ERROR_CLOSE_FAILURE', + 5: 'OEMCrypto_ERROR_ENTER_SECURE_PLAYBACK_FAILED', // deprecated + 6: 'OEMCrypto_ERROR_EXIT_SECURE_PLAYBACK_FAILED', // deprecated + 7: 'OEMCrypto_ERROR_SHORT_BUFFER', + 8: 'OEMCrypto_ERROR_NO_DEVICE_KEY', // no keybox device key. + 9: 'OEMCrypto_ERROR_NO_ASSET_KEY', + 10: 'OEMCrypto_ERROR_KEYBOX_INVALID', + 11: 'OEMCrypto_ERROR_NO_KEYDATA', + 12: 'OEMCrypto_ERROR_NO_CW', + 13: 'OEMCrypto_ERROR_DECRYPT_FAILED', + 14: 'OEMCrypto_ERROR_WRITE_KEYBOX', + 15: 'OEMCrypto_ERROR_WRAP_KEYBOX', + 16: 'OEMCrypto_ERROR_BAD_MAGIC', + 17: 'OEMCrypto_ERROR_BAD_CRC', + 18: 'OEMCrypto_ERROR_NO_DEVICEID', + 19: 'OEMCrypto_ERROR_RNG_FAILED', + 20: 'OEMCrypto_ERROR_RNG_NOT_SUPPORTED', + 21: 'OEMCrypto_ERROR_SETUP', + 22: 'OEMCrypto_ERROR_OPEN_SESSION_FAILED', + 23: 'OEMCrypto_ERROR_CLOSE_SESSION_FAILED', + 24: 'OEMCrypto_ERROR_INVALID_SESSION', + 25: 'OEMCrypto_ERROR_NOT_IMPLEMENTED', + 26: 'OEMCrypto_ERROR_NO_CONTENT_KEY', + 27: 'OEMCrypto_ERROR_CONTROL_INVALID', + 28: 'OEMCrypto_ERROR_UNKNOWN_FAILURE', + 29: 'OEMCrypto_ERROR_INVALID_CONTEXT', + 30: 'OEMCrypto_ERROR_SIGNATURE_FAILURE', + 31: 'OEMCrypto_ERROR_TOO_MANY_SESSIONS', + 32: 'OEMCrypto_ERROR_INVALID_NONCE', + 33: 'OEMCrypto_ERROR_TOO_MANY_KEYS', + 34: 'OEMCrypto_ERROR_DEVICE_NOT_RSA_PROVISIONED', + 35: 'OEMCrypto_ERROR_INVALID_RSA_KEY', + 36: 'OEMCrypto_ERROR_KEY_EXPIRED', + 37: 'OEMCrypto_ERROR_INSUFFICIENT_RESOURCES', + 38: 'OEMCrypto_ERROR_INSUFFICIENT_HDCP', + 39: 'OEMCrypto_ERROR_BUFFER_TOO_LARGE', + 40: 'OEMCrypto_WARNING_GENERATION_SKEW', // Warning, not an error. + 41: 'OEMCrypto_ERROR_GENERATION_SKEW', + 42: 'OEMCrypto_LOCAL_DISPLAY_ONLY', + 43: 'OEMCrypto_ERROR_ANALOG_OUTPUT', + 44: 'OEMCrypto_ERROR_WRONG_PST', + 45: 'OEMCrypto_ERROR_WRONG_KEYS', + 46: 'OEMCrypto_ERROR_MISSING_MASTER', + 47: 'OEMCrypto_ERROR_LICENSE_INACTIVE', + 48: 'OEMCrypto_ERROR_ENTRY_NEEDS_UPDATE', + 49: 'OEMCrypto_ERROR_ENTRY_IN_USE', + 50: 'OEMCrypto_ERROR_USAGE_TABLE_UNRECOVERABLE', // Reserved. Do not use. + 51: 'OEMCrypto_KEY_NOT_LOADED', // obsolete. use error 26. + 52: 'OEMCrypto_KEY_NOT_ENTITLED', + 53: 'OEMCrypto_ERROR_BAD_HASH', + 54: 'OEMCrypto_ERROR_OUTPUT_TOO_LARGE', + 55: 'OEMCrypto_ERROR_SESSION_LOST_STATE', + 56:'OEMCrypto_ERROR_SYSTEM_INVALIDATED', +}; + +const OEMCrypto_LicenseType = { + 0: 'OEMCrypto_ContentLicense', + 1: 'OEMCrypto_EntitlementLicense' +}; + +rpc.exports.inject = inject; + +rpc.exports.widevinelibrary = containsLib; diff --git a/Helpers/wv_proto2_pb2.py b/Helpers/wv_proto2_pb2.py new file mode 100644 index 0000000..4c2a6d1 --- /dev/null +++ b/Helpers/wv_proto2_pb2.py @@ -0,0 +1,3324 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: pywidevine/cdm/formats/wv_proto2.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='pywidevine/cdm/formats/wv_proto2.proto', + package='', + syntax='proto2', + serialized_pb=_b('\n&pywidevine/cdm/formats/wv_proto2.proto\"\xe7\x05\n\x14\x43lientIdentification\x12-\n\x04Type\x18\x01 \x02(\x0e\x32\x1f.ClientIdentification.TokenType\x12\'\n\x05Token\x18\x02 \x01(\x0b\x32\x18.SignedDeviceCertificate\x12\x33\n\nClientInfo\x18\x03 \x03(\x0b\x32\x1f.ClientIdentification.NameValue\x12\x1b\n\x13ProviderClientToken\x18\x04 \x01(\x0c\x12\x16\n\x0eLicenseCounter\x18\x05 \x01(\r\x12\x45\n\x13_ClientCapabilities\x18\x06 \x01(\x0b\x32(.ClientIdentification.ClientCapabilities\x12 \n\x0b_FileHashes\x18\x07 \x01(\x0b\x32\x0b.FileHashes\x1a(\n\tNameValue\x12\x0c\n\x04Name\x18\x01 \x02(\t\x12\r\n\x05Value\x18\x02 \x02(\t\x1a\xa4\x02\n\x12\x43lientCapabilities\x12\x13\n\x0b\x43lientToken\x18\x01 \x01(\r\x12\x14\n\x0cSessionToken\x18\x02 \x01(\r\x12\"\n\x1aVideoResolutionConstraints\x18\x03 \x01(\r\x12L\n\x0eMaxHdcpVersion\x18\x04 \x01(\x0e\x32\x34.ClientIdentification.ClientCapabilities.HdcpVersion\x12\x1b\n\x13OemCryptoApiVersion\x18\x05 \x01(\r\"T\n\x0bHdcpVersion\x12\r\n\tHDCP_NONE\x10\x00\x12\x0b\n\x07HDCP_V1\x10\x01\x12\x0b\n\x07HDCP_V2\x10\x02\x12\r\n\tHDCP_V2_1\x10\x03\x12\r\n\tHDCP_V2_2\x10\x04\"S\n\tTokenType\x12\n\n\x06KEYBOX\x10\x00\x12\x16\n\x12\x44\x45VICE_CERTIFICATE\x10\x01\x12\"\n\x1eREMOTE_ATTESTATION_CERTIFICATE\x10\x02\"\x9b\x02\n\x11\x44\x65viceCertificate\x12\x30\n\x04Type\x18\x01 \x02(\x0e\x32\".DeviceCertificate.CertificateType\x12\x14\n\x0cSerialNumber\x18\x02 \x01(\x0c\x12\x1b\n\x13\x43reationTimeSeconds\x18\x03 \x01(\r\x12\x11\n\tPublicKey\x18\x04 \x01(\x0c\x12\x10\n\x08SystemId\x18\x05 \x01(\r\x12\x1c\n\x14TestDeviceDeprecated\x18\x06 \x01(\r\x12\x11\n\tServiceId\x18\x07 \x01(\x0c\"K\n\x0f\x43\x65rtificateType\x12\x08\n\x04ROOT\x10\x00\x12\x10\n\x0cINTERMEDIATE\x10\x01\x12\x0f\n\x0bUSER_DEVICE\x10\x02\x12\x0b\n\x07SERVICE\x10\x03\"\xc4\x01\n\x17\x44\x65viceCertificateStatus\x12\x14\n\x0cSerialNumber\x18\x01 \x01(\x0c\x12:\n\x06Status\x18\x02 \x01(\x0e\x32*.DeviceCertificateStatus.CertificateStatus\x12*\n\nDeviceInfo\x18\x04 \x01(\x0b\x32\x16.ProvisionedDeviceInfo\"+\n\x11\x43\x65rtificateStatus\x12\t\n\x05VALID\x10\x00\x12\x0b\n\x07REVOKED\x10\x01\"o\n\x1b\x44\x65viceCertificateStatusList\x12\x1b\n\x13\x43reationTimeSeconds\x18\x01 \x01(\r\x12\x33\n\x11\x43\x65rtificateStatus\x18\x02 \x03(\x0b\x32\x18.DeviceCertificateStatus\"\xaf\x01\n\x1d\x45ncryptedClientIdentification\x12\x11\n\tServiceId\x18\x01 \x02(\t\x12&\n\x1eServiceCertificateSerialNumber\x18\x02 \x01(\x0c\x12\x19\n\x11\x45ncryptedClientId\x18\x03 \x02(\x0c\x12\x1b\n\x13\x45ncryptedClientIdIv\x18\x04 \x02(\x0c\x12\x1b\n\x13\x45ncryptedPrivacyKey\x18\x05 \x02(\x0c\"\x9c\x01\n\x15LicenseIdentification\x12\x11\n\tRequestId\x18\x01 \x01(\x0c\x12\x11\n\tSessionId\x18\x02 \x01(\x0c\x12\x12\n\nPurchaseId\x18\x03 \x01(\x0c\x12\x1a\n\x04Type\x18\x04 \x01(\x0e\x32\x0c.LicenseType\x12\x0f\n\x07Version\x18\x05 \x01(\r\x12\x1c\n\x14ProviderSessionToken\x18\x06 \x01(\x0c\"\xa1\x0e\n\x07License\x12\"\n\x02Id\x18\x01 \x01(\x0b\x32\x16.LicenseIdentification\x12 \n\x07_Policy\x18\x02 \x01(\x0b\x32\x0f.License.Policy\x12\"\n\x03Key\x18\x03 \x03(\x0b\x32\x15.License.KeyContainer\x12\x18\n\x10LicenseStartTime\x18\x04 \x01(\r\x12!\n\x19RemoteAttestationVerified\x18\x05 \x01(\r\x12\x1b\n\x13ProviderClientToken\x18\x06 \x01(\x0c\x12\x18\n\x10ProtectionScheme\x18\x07 \x01(\r\x1a\xbb\x02\n\x06Policy\x12\x0f\n\x07\x43\x61nPlay\x18\x01 \x01(\x08\x12\x12\n\nCanPersist\x18\x02 \x01(\x08\x12\x10\n\x08\x43\x61nRenew\x18\x03 \x01(\x08\x12\x1d\n\x15RentalDurationSeconds\x18\x04 \x01(\r\x12\x1f\n\x17PlaybackDurationSeconds\x18\x05 \x01(\r\x12\x1e\n\x16LicenseDurationSeconds\x18\x06 \x01(\r\x12&\n\x1eRenewalRecoveryDurationSeconds\x18\x07 \x01(\r\x12\x18\n\x10RenewalServerUrl\x18\x08 \x01(\t\x12\x1b\n\x13RenewalDelaySeconds\x18\t \x01(\r\x12#\n\x1bRenewalRetryIntervalSeconds\x18\n \x01(\r\x12\x16\n\x0eRenewWithUsage\x18\x0b \x01(\x08\x1a\xf9\t\n\x0cKeyContainer\x12\n\n\x02Id\x18\x01 \x01(\x0c\x12\n\n\x02Iv\x18\x02 \x01(\x0c\x12\x0b\n\x03Key\x18\x03 \x01(\x0c\x12+\n\x04Type\x18\x04 \x01(\x0e\x32\x1d.License.KeyContainer.KeyType\x12\x32\n\x05Level\x18\x05 \x01(\x0e\x32#.License.KeyContainer.SecurityLevel\x12\x42\n\x12RequiredProtection\x18\x06 \x01(\x0b\x32&.License.KeyContainer.OutputProtection\x12\x43\n\x13RequestedProtection\x18\x07 \x01(\x0b\x32&.License.KeyContainer.OutputProtection\x12\x35\n\x0b_KeyControl\x18\x08 \x01(\x0b\x32 .License.KeyContainer.KeyControl\x12[\n\x1e_OperatorSessionKeyPermissions\x18\t \x01(\x0b\x32\x33.License.KeyContainer.OperatorSessionKeyPermissions\x12S\n\x1aVideoResolutionConstraints\x18\n \x03(\x0b\x32/.License.KeyContainer.VideoResolutionConstraint\x1a\xdb\x01\n\x10OutputProtection\x12\x42\n\x04Hdcp\x18\x01 \x01(\x0e\x32\x34.ClientIdentification.ClientCapabilities.HdcpVersion\x12>\n\tCgmsFlags\x18\x02 \x01(\x0e\x32+.License.KeyContainer.OutputProtection.CGMS\"C\n\x04\x43GMS\x12\r\n\tCOPY_FREE\x10\x00\x12\r\n\tCOPY_ONCE\x10\x02\x12\x0e\n\nCOPY_NEVER\x10\x03\x12\r\n\tCGMS_NONE\x10*\x1a\x31\n\nKeyControl\x12\x17\n\x0fKeyControlBlock\x18\x01 \x02(\x0c\x12\n\n\x02Iv\x18\x02 \x02(\x0c\x1a|\n\x1dOperatorSessionKeyPermissions\x12\x14\n\x0c\x41llowEncrypt\x18\x01 \x01(\r\x12\x14\n\x0c\x41llowDecrypt\x18\x02 \x01(\r\x12\x11\n\tAllowSign\x18\x03 \x01(\r\x12\x1c\n\x14\x41llowSignatureVerify\x18\x04 \x01(\r\x1a\x99\x01\n\x19VideoResolutionConstraint\x12\x1b\n\x13MinResolutionPixels\x18\x01 \x01(\r\x12\x1b\n\x13MaxResolutionPixels\x18\x02 \x01(\r\x12\x42\n\x12RequiredProtection\x18\x03 \x01(\x0b\x32&.License.KeyContainer.OutputProtection\"J\n\x07KeyType\x12\x0b\n\x07SIGNING\x10\x01\x12\x0b\n\x07\x43ONTENT\x10\x02\x12\x0f\n\x0bKEY_CONTROL\x10\x03\x12\x14\n\x10OPERATOR_SESSION\x10\x04\"z\n\rSecurityLevel\x12\x14\n\x10SW_SECURE_CRYPTO\x10\x01\x12\x14\n\x10SW_SECURE_DECODE\x10\x02\x12\x14\n\x10HW_SECURE_CRYPTO\x10\x03\x12\x14\n\x10HW_SECURE_DECODE\x10\x04\x12\x11\n\rHW_SECURE_ALL\x10\x05\"\x98\x01\n\x0cLicenseError\x12&\n\tErrorCode\x18\x01 \x01(\x0e\x32\x13.LicenseError.Error\"`\n\x05\x45rror\x12\x1e\n\x1aINVALID_DEVICE_CERTIFICATE\x10\x01\x12\x1e\n\x1aREVOKED_DEVICE_CERTIFICATE\x10\x02\x12\x17\n\x13SERVICE_UNAVAILABLE\x10\x03\"\xac\x07\n\x0eLicenseRequest\x12\'\n\x08\x43lientId\x18\x01 \x01(\x0b\x32\x15.ClientIdentification\x12\x38\n\tContentId\x18\x02 \x01(\x0b\x32%.LicenseRequest.ContentIdentification\x12)\n\x04Type\x18\x03 \x01(\x0e\x32\x1b.LicenseRequest.RequestType\x12\x13\n\x0bRequestTime\x18\x04 \x01(\r\x12!\n\x19KeyControlNonceDeprecated\x18\x05 \x01(\x0c\x12)\n\x0fProtocolVersion\x18\x06 \x01(\x0e\x32\x10.ProtocolVersion\x12\x17\n\x0fKeyControlNonce\x18\x07 \x01(\r\x12\x39\n\x11\x45ncryptedClientId\x18\x08 \x01(\x0b\x32\x1e.EncryptedClientIdentification\x1a\xa2\x04\n\x15\x43ontentIdentification\x12:\n\x06\x43\x65ncId\x18\x01 \x01(\x0b\x32*.LicenseRequest.ContentIdentification.CENC\x12:\n\x06WebmId\x18\x02 \x01(\x0b\x32*.LicenseRequest.ContentIdentification.WebM\x12\x46\n\x07License\x18\x03 \x01(\x0b\x32\x35.LicenseRequest.ContentIdentification.ExistingLicense\x1a_\n\x04\x43\x45NC\x12!\n\x04Pssh\x18\x01 \x01(\x0b\x32\x13.WidevineCencHeader\x12!\n\x0bLicenseType\x18\x02 \x01(\x0e\x32\x0c.LicenseType\x12\x11\n\tRequestId\x18\x03 \x01(\x0c\x1aL\n\x04WebM\x12\x0e\n\x06Header\x18\x01 \x01(\x0c\x12!\n\x0bLicenseType\x18\x02 \x01(\x0e\x32\x0c.LicenseType\x12\x11\n\tRequestId\x18\x03 \x01(\x0c\x1a\x99\x01\n\x0f\x45xistingLicense\x12)\n\tLicenseId\x18\x01 \x01(\x0b\x32\x16.LicenseIdentification\x12\x1b\n\x13SecondsSinceStarted\x18\x02 \x01(\r\x12\x1e\n\x16SecondsSinceLastPlayed\x18\x03 \x01(\r\x12\x1e\n\x16SessionUsageTableEntry\x18\x04 \x01(\x0c\"0\n\x0bRequestType\x12\x07\n\x03NEW\x10\x01\x12\x0b\n\x07RENEWAL\x10\x02\x12\x0b\n\x07RELEASE\x10\x03\"\xa9\x07\n\x11LicenseRequestRaw\x12\'\n\x08\x43lientId\x18\x01 \x01(\x0b\x32\x15.ClientIdentification\x12;\n\tContentId\x18\x02 \x01(\x0b\x32(.LicenseRequestRaw.ContentIdentification\x12,\n\x04Type\x18\x03 \x01(\x0e\x32\x1e.LicenseRequestRaw.RequestType\x12\x13\n\x0bRequestTime\x18\x04 \x01(\r\x12!\n\x19KeyControlNonceDeprecated\x18\x05 \x01(\x0c\x12)\n\x0fProtocolVersion\x18\x06 \x01(\x0e\x32\x10.ProtocolVersion\x12\x17\n\x0fKeyControlNonce\x18\x07 \x01(\r\x12\x39\n\x11\x45ncryptedClientId\x18\x08 \x01(\x0b\x32\x1e.EncryptedClientIdentification\x1a\x96\x04\n\x15\x43ontentIdentification\x12=\n\x06\x43\x65ncId\x18\x01 \x01(\x0b\x32-.LicenseRequestRaw.ContentIdentification.CENC\x12=\n\x06WebmId\x18\x02 \x01(\x0b\x32-.LicenseRequestRaw.ContentIdentification.WebM\x12I\n\x07License\x18\x03 \x01(\x0b\x32\x38.LicenseRequestRaw.ContentIdentification.ExistingLicense\x1aJ\n\x04\x43\x45NC\x12\x0c\n\x04Pssh\x18\x01 \x01(\x0c\x12!\n\x0bLicenseType\x18\x02 \x01(\x0e\x32\x0c.LicenseType\x12\x11\n\tRequestId\x18\x03 \x01(\x0c\x1aL\n\x04WebM\x12\x0e\n\x06Header\x18\x01 \x01(\x0c\x12!\n\x0bLicenseType\x18\x02 \x01(\x0e\x32\x0c.LicenseType\x12\x11\n\tRequestId\x18\x03 \x01(\x0c\x1a\x99\x01\n\x0f\x45xistingLicense\x12)\n\tLicenseId\x18\x01 \x01(\x0b\x32\x16.LicenseIdentification\x12\x1b\n\x13SecondsSinceStarted\x18\x02 \x01(\r\x12\x1e\n\x16SecondsSinceLastPlayed\x18\x03 \x01(\r\x12\x1e\n\x16SessionUsageTableEntry\x18\x04 \x01(\x0c\"0\n\x0bRequestType\x12\x07\n\x03NEW\x10\x01\x12\x0b\n\x07RENEWAL\x10\x02\x12\x0b\n\x07RELEASE\x10\x03\"\xa6\x02\n\x15ProvisionedDeviceInfo\x12\x10\n\x08SystemId\x18\x01 \x01(\r\x12\x0b\n\x03Soc\x18\x02 \x01(\t\x12\x14\n\x0cManufacturer\x18\x03 \x01(\t\x12\r\n\x05Model\x18\x04 \x01(\t\x12\x12\n\nDeviceType\x18\x05 \x01(\t\x12\x11\n\tModelYear\x18\x06 \x01(\r\x12=\n\rSecurityLevel\x18\x07 \x01(\x0e\x32&.ProvisionedDeviceInfo.WvSecurityLevel\x12\x12\n\nTestDevice\x18\x08 \x01(\r\"O\n\x0fWvSecurityLevel\x12\x15\n\x11LEVEL_UNSPECIFIED\x10\x00\x12\x0b\n\x07LEVEL_1\x10\x01\x12\x0b\n\x07LEVEL_2\x10\x02\x12\x0b\n\x07LEVEL_3\x10\x03\"\x15\n\x13ProvisioningOptions\"\x15\n\x13ProvisioningRequest\"\x16\n\x14ProvisioningResponse\"i\n\x11RemoteAttestation\x12\x33\n\x0b\x43\x65rtificate\x18\x01 \x01(\x0b\x32\x1e.EncryptedClientIdentification\x12\x0c\n\x04Salt\x18\x02 \x01(\t\x12\x11\n\tSignature\x18\x03 \x01(\t\"\r\n\x0bSessionInit\"\x0e\n\x0cSessionState\"\x1d\n\x1bSignedCertificateStatusList\"\x86\x01\n\x17SignedDeviceCertificate\x12.\n\x12_DeviceCertificate\x18\x01 \x01(\x0b\x32\x12.DeviceCertificate\x12\x11\n\tSignature\x18\x02 \x01(\x0c\x12(\n\x06Signer\x18\x03 \x01(\x0b\x32\x18.SignedDeviceCertificate\"\x1b\n\x19SignedProvisioningMessage\"\x9b\x02\n\rSignedMessage\x12(\n\x04Type\x18\x01 \x01(\x0e\x32\x1a.SignedMessage.MessageType\x12\x0b\n\x03Msg\x18\x02 \x01(\x0c\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"}\n\x0bMessageType\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xc5\x02\n\x12WidevineCencHeader\x12\x30\n\talgorithm\x18\x01 \x01(\x0e\x32\x1d.WidevineCencHeader.Algorithm\x12\x0e\n\x06key_id\x18\x02 \x03(\x0c\x12\x10\n\x08provider\x18\x03 \x01(\t\x12\x12\n\ncontent_id\x18\x04 \x01(\x0c\x12\x1d\n\x15track_type_deprecated\x18\x05 \x01(\t\x12\x0e\n\x06policy\x18\x06 \x01(\t\x12\x1b\n\x13\x63rypto_period_index\x18\x07 \x01(\r\x12\x17\n\x0fgrouped_license\x18\x08 \x01(\x0c\x12\x19\n\x11protection_scheme\x18\t \x01(\r\x12\x1d\n\x15\x63rypto_period_seconds\x18\n \x01(\r\"(\n\tAlgorithm\x12\x0f\n\x0bUNENCRYPTED\x10\x00\x12\n\n\x06\x41\x45SCTR\x10\x01\"\xba\x02\n\x14SignedLicenseRequest\x12/\n\x04Type\x18\x01 \x01(\x0e\x32!.SignedLicenseRequest.MessageType\x12\x1c\n\x03Msg\x18\x02 \x01(\x0b\x32\x0f.LicenseRequest\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"}\n\x0bMessageType\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xc3\x02\n\x17SignedLicenseRequestRaw\x12\x32\n\x04Type\x18\x01 \x01(\x0e\x32$.SignedLicenseRequestRaw.MessageType\x12\x1f\n\x03Msg\x18\x02 \x01(\x0b\x32\x12.LicenseRequestRaw\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"}\n\x0bMessageType\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xa5\x02\n\rSignedLicense\x12(\n\x04Type\x18\x01 \x01(\x0e\x32\x1a.SignedLicense.MessageType\x12\x15\n\x03Msg\x18\x02 \x01(\x0b\x32\x08.License\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"}\n\x0bMessageType\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xcb\x02\n\x18SignedServiceCertificate\x12\x33\n\x04Type\x18\x01 \x01(\x0e\x32%.SignedServiceCertificate.MessageType\x12%\n\x03Msg\x18\x02 \x01(\x0b\x32\x18.SignedDeviceCertificate\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"}\n\x0bMessageType\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xb5\x01\n\nFileHashes\x12\x0e\n\x06signer\x18\x01 \x01(\x0c\x12)\n\nsignatures\x18\x02 \x03(\x0b\x32\x15.FileHashes.Signature\x1al\n\tSignature\x12\x10\n\x08\x66ilename\x18\x01 \x01(\t\x12\x14\n\x0ctest_signing\x18\x02 \x01(\x08\x12\x12\n\nSHA512Hash\x18\x03 \x01(\x0c\x12\x10\n\x08main_exe\x18\x04 \x01(\x08\x12\x11\n\tsignature\x18\x05 \x01(\x0c*1\n\x0bLicenseType\x12\x08\n\x04ZERO\x10\x00\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x01\x12\x0b\n\x07OFFLINE\x10\x02*\x1e\n\x0fProtocolVersion\x12\x0b\n\x07\x43URRENT\x10\x15') +) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +_LICENSETYPE = _descriptor.EnumDescriptor( + name='LicenseType', + full_name='LicenseType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='ZERO', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='DEFAULT', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='OFFLINE', index=2, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=8362, + serialized_end=8411, +) +_sym_db.RegisterEnumDescriptor(_LICENSETYPE) + +LicenseType = enum_type_wrapper.EnumTypeWrapper(_LICENSETYPE) +_PROTOCOLVERSION = _descriptor.EnumDescriptor( + name='ProtocolVersion', + full_name='ProtocolVersion', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='CURRENT', index=0, number=21, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=8413, + serialized_end=8443, +) +_sym_db.RegisterEnumDescriptor(_PROTOCOLVERSION) + +ProtocolVersion = enum_type_wrapper.EnumTypeWrapper(_PROTOCOLVERSION) +ZERO = 0 +DEFAULT = 1 +OFFLINE = 2 +CURRENT = 21 + + +_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION = _descriptor.EnumDescriptor( + name='HdcpVersion', + full_name='ClientIdentification.ClientCapabilities.HdcpVersion', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='HDCP_NONE', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='HDCP_V1', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='HDCP_V2', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='HDCP_V2_1', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='HDCP_V2_2', index=4, number=4, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=617, + serialized_end=701, +) +_sym_db.RegisterEnumDescriptor(_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION) + +_CLIENTIDENTIFICATION_TOKENTYPE = _descriptor.EnumDescriptor( + name='TokenType', + full_name='ClientIdentification.TokenType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='KEYBOX', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='DEVICE_CERTIFICATE', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='REMOTE_ATTESTATION_CERTIFICATE', index=2, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=703, + serialized_end=786, +) +_sym_db.RegisterEnumDescriptor(_CLIENTIDENTIFICATION_TOKENTYPE) + +_DEVICECERTIFICATE_CERTIFICATETYPE = _descriptor.EnumDescriptor( + name='CertificateType', + full_name='DeviceCertificate.CertificateType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='ROOT', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='INTERMEDIATE', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='USER_DEVICE', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE', index=3, number=3, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=997, + serialized_end=1072, +) +_sym_db.RegisterEnumDescriptor(_DEVICECERTIFICATE_CERTIFICATETYPE) + +_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS = _descriptor.EnumDescriptor( + name='CertificateStatus', + full_name='DeviceCertificateStatus.CertificateStatus', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='VALID', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='REVOKED', index=1, number=1, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=1228, + serialized_end=1271, +) +_sym_db.RegisterEnumDescriptor(_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS) + +_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS = _descriptor.EnumDescriptor( + name='CGMS', + full_name='License.KeyContainer.OutputProtection.CGMS', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='COPY_FREE', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='COPY_ONCE', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='COPY_NEVER', index=2, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CGMS_NONE', index=3, number=42, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=2949, + serialized_end=3016, +) +_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS) + +_LICENSE_KEYCONTAINER_KEYTYPE = _descriptor.EnumDescriptor( + name='KeyType', + full_name='License.KeyContainer.KeyType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='SIGNING', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CONTENT', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='KEY_CONTROL', index=2, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='OPERATOR_SESSION', index=3, number=4, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=3351, + serialized_end=3425, +) +_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_KEYTYPE) + +_LICENSE_KEYCONTAINER_SECURITYLEVEL = _descriptor.EnumDescriptor( + name='SecurityLevel', + full_name='License.KeyContainer.SecurityLevel', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='SW_SECURE_CRYPTO', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SW_SECURE_DECODE', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='HW_SECURE_CRYPTO', index=2, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='HW_SECURE_DECODE', index=3, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='HW_SECURE_ALL', index=4, number=5, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=3427, + serialized_end=3549, +) +_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_SECURITYLEVEL) + +_LICENSEERROR_ERROR = _descriptor.EnumDescriptor( + name='Error', + full_name='LicenseError.Error', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='INVALID_DEVICE_CERTIFICATE', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='REVOKED_DEVICE_CERTIFICATE', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_UNAVAILABLE', index=2, number=3, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=3608, + serialized_end=3704, +) +_sym_db.RegisterEnumDescriptor(_LICENSEERROR_ERROR) + +_LICENSEREQUEST_REQUESTTYPE = _descriptor.EnumDescriptor( + name='RequestType', + full_name='LicenseRequest.RequestType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='NEW', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='RENEWAL', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='RELEASE', index=2, number=3, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=4599, + serialized_end=4647, +) +_sym_db.RegisterEnumDescriptor(_LICENSEREQUEST_REQUESTTYPE) + +_LICENSEREQUESTRAW_REQUESTTYPE = _descriptor.EnumDescriptor( + name='RequestType', + full_name='LicenseRequestRaw.RequestType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='NEW', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='RENEWAL', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='RELEASE', index=2, number=3, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=4599, + serialized_end=4647, +) +_sym_db.RegisterEnumDescriptor(_LICENSEREQUESTRAW_REQUESTTYPE) + +_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL = _descriptor.EnumDescriptor( + name='WvSecurityLevel', + full_name='ProvisionedDeviceInfo.WvSecurityLevel', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='LEVEL_UNSPECIFIED', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LEVEL_1', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LEVEL_2', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LEVEL_3', index=3, number=3, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=5805, + serialized_end=5884, +) +_sym_db.RegisterEnumDescriptor(_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL) + +_SIGNEDMESSAGE_MESSAGETYPE = _descriptor.EnumDescriptor( + name='MessageType', + full_name='SignedMessage.MessageType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='LICENSE_REQUEST', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LICENSE', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ERROR_RESPONSE', index=2, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_CERTIFICATE', index=4, number=5, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=6450, + serialized_end=6575, +) +_sym_db.RegisterEnumDescriptor(_SIGNEDMESSAGE_MESSAGETYPE) + +_WIDEVINECENCHEADER_ALGORITHM = _descriptor.EnumDescriptor( + name='Algorithm', + full_name='WidevineCencHeader.Algorithm', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='UNENCRYPTED', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='AESCTR', index=1, number=1, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=6863, + serialized_end=6903, +) +_sym_db.RegisterEnumDescriptor(_WIDEVINECENCHEADER_ALGORITHM) + +_SIGNEDLICENSEREQUEST_MESSAGETYPE = _descriptor.EnumDescriptor( + name='MessageType', + full_name='SignedLicenseRequest.MessageType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='LICENSE_REQUEST', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LICENSE', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ERROR_RESPONSE', index=2, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_CERTIFICATE', index=4, number=5, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=6450, + serialized_end=6575, +) +_sym_db.RegisterEnumDescriptor(_SIGNEDLICENSEREQUEST_MESSAGETYPE) + +_SIGNEDLICENSEREQUESTRAW_MESSAGETYPE = _descriptor.EnumDescriptor( + name='MessageType', + full_name='SignedLicenseRequestRaw.MessageType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='LICENSE_REQUEST', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LICENSE', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ERROR_RESPONSE', index=2, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_CERTIFICATE', index=4, number=5, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=6450, + serialized_end=6575, +) +_sym_db.RegisterEnumDescriptor(_SIGNEDLICENSEREQUESTRAW_MESSAGETYPE) + +_SIGNEDLICENSE_MESSAGETYPE = _descriptor.EnumDescriptor( + name='MessageType', + full_name='SignedLicense.MessageType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='LICENSE_REQUEST', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LICENSE', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ERROR_RESPONSE', index=2, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_CERTIFICATE', index=4, number=5, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=6450, + serialized_end=6575, +) +_sym_db.RegisterEnumDescriptor(_SIGNEDLICENSE_MESSAGETYPE) + +_SIGNEDSERVICECERTIFICATE_MESSAGETYPE = _descriptor.EnumDescriptor( + name='MessageType', + full_name='SignedServiceCertificate.MessageType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='LICENSE_REQUEST', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LICENSE', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ERROR_RESPONSE', index=2, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_CERTIFICATE', index=4, number=5, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=6450, + serialized_end=6575, +) +_sym_db.RegisterEnumDescriptor(_SIGNEDSERVICECERTIFICATE_MESSAGETYPE) + + +_CLIENTIDENTIFICATION_NAMEVALUE = _descriptor.Descriptor( + name='NameValue', + full_name='ClientIdentification.NameValue', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Name', full_name='ClientIdentification.NameValue.Name', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Value', full_name='ClientIdentification.NameValue.Value', index=1, + number=2, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=366, + serialized_end=406, +) + +_CLIENTIDENTIFICATION_CLIENTCAPABILITIES = _descriptor.Descriptor( + name='ClientCapabilities', + full_name='ClientIdentification.ClientCapabilities', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='ClientToken', full_name='ClientIdentification.ClientCapabilities.ClientToken', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SessionToken', full_name='ClientIdentification.ClientCapabilities.SessionToken', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='VideoResolutionConstraints', full_name='ClientIdentification.ClientCapabilities.VideoResolutionConstraints', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='MaxHdcpVersion', full_name='ClientIdentification.ClientCapabilities.MaxHdcpVersion', index=3, + number=4, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='OemCryptoApiVersion', full_name='ClientIdentification.ClientCapabilities.OemCryptoApiVersion', index=4, + number=5, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=409, + serialized_end=701, +) + +_CLIENTIDENTIFICATION = _descriptor.Descriptor( + name='ClientIdentification', + full_name='ClientIdentification', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Type', full_name='ClientIdentification.Type', index=0, + number=1, type=14, cpp_type=8, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Token', full_name='ClientIdentification.Token', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ClientInfo', full_name='ClientIdentification.ClientInfo', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ProviderClientToken', full_name='ClientIdentification.ProviderClientToken', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='LicenseCounter', full_name='ClientIdentification.LicenseCounter', index=4, + number=5, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='_ClientCapabilities', full_name='ClientIdentification._ClientCapabilities', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='_FileHashes', full_name='ClientIdentification._FileHashes', index=6, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_CLIENTIDENTIFICATION_NAMEVALUE, _CLIENTIDENTIFICATION_CLIENTCAPABILITIES, ], + enum_types=[ + _CLIENTIDENTIFICATION_TOKENTYPE, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=43, + serialized_end=786, +) + + +_DEVICECERTIFICATE = _descriptor.Descriptor( + name='DeviceCertificate', + full_name='DeviceCertificate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Type', full_name='DeviceCertificate.Type', index=0, + number=1, type=14, cpp_type=8, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SerialNumber', full_name='DeviceCertificate.SerialNumber', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='CreationTimeSeconds', full_name='DeviceCertificate.CreationTimeSeconds', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='PublicKey', full_name='DeviceCertificate.PublicKey', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SystemId', full_name='DeviceCertificate.SystemId', index=4, + number=5, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='TestDeviceDeprecated', full_name='DeviceCertificate.TestDeviceDeprecated', index=5, + number=6, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ServiceId', full_name='DeviceCertificate.ServiceId', index=6, + number=7, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _DEVICECERTIFICATE_CERTIFICATETYPE, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=789, + serialized_end=1072, +) + + +_DEVICECERTIFICATESTATUS = _descriptor.Descriptor( + name='DeviceCertificateStatus', + full_name='DeviceCertificateStatus', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='SerialNumber', full_name='DeviceCertificateStatus.SerialNumber', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Status', full_name='DeviceCertificateStatus.Status', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='DeviceInfo', full_name='DeviceCertificateStatus.DeviceInfo', index=2, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _DEVICECERTIFICATESTATUS_CERTIFICATESTATUS, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1075, + serialized_end=1271, +) + + +_DEVICECERTIFICATESTATUSLIST = _descriptor.Descriptor( + name='DeviceCertificateStatusList', + full_name='DeviceCertificateStatusList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='CreationTimeSeconds', full_name='DeviceCertificateStatusList.CreationTimeSeconds', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='CertificateStatus', full_name='DeviceCertificateStatusList.CertificateStatus', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1273, + serialized_end=1384, +) + + +_ENCRYPTEDCLIENTIDENTIFICATION = _descriptor.Descriptor( + name='EncryptedClientIdentification', + full_name='EncryptedClientIdentification', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='ServiceId', full_name='EncryptedClientIdentification.ServiceId', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ServiceCertificateSerialNumber', full_name='EncryptedClientIdentification.ServiceCertificateSerialNumber', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='EncryptedClientId', full_name='EncryptedClientIdentification.EncryptedClientId', index=2, + number=3, type=12, cpp_type=9, label=2, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='EncryptedClientIdIv', full_name='EncryptedClientIdentification.EncryptedClientIdIv', index=3, + number=4, type=12, cpp_type=9, label=2, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='EncryptedPrivacyKey', full_name='EncryptedClientIdentification.EncryptedPrivacyKey', index=4, + number=5, type=12, cpp_type=9, label=2, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1387, + serialized_end=1562, +) + + +_LICENSEIDENTIFICATION = _descriptor.Descriptor( + name='LicenseIdentification', + full_name='LicenseIdentification', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='RequestId', full_name='LicenseIdentification.RequestId', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SessionId', full_name='LicenseIdentification.SessionId', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='PurchaseId', full_name='LicenseIdentification.PurchaseId', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Type', full_name='LicenseIdentification.Type', index=3, + number=4, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Version', full_name='LicenseIdentification.Version', index=4, + number=5, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ProviderSessionToken', full_name='LicenseIdentification.ProviderSessionToken', index=5, + number=6, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1565, + serialized_end=1721, +) + + +_LICENSE_POLICY = _descriptor.Descriptor( + name='Policy', + full_name='License.Policy', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='CanPlay', full_name='License.Policy.CanPlay', index=0, + number=1, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='CanPersist', full_name='License.Policy.CanPersist', index=1, + number=2, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='CanRenew', full_name='License.Policy.CanRenew', index=2, + number=3, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RentalDurationSeconds', full_name='License.Policy.RentalDurationSeconds', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='PlaybackDurationSeconds', full_name='License.Policy.PlaybackDurationSeconds', index=4, + number=5, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='LicenseDurationSeconds', full_name='License.Policy.LicenseDurationSeconds', index=5, + number=6, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RenewalRecoveryDurationSeconds', full_name='License.Policy.RenewalRecoveryDurationSeconds', index=6, + number=7, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RenewalServerUrl', full_name='License.Policy.RenewalServerUrl', index=7, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RenewalDelaySeconds', full_name='License.Policy.RenewalDelaySeconds', index=8, + number=9, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RenewalRetryIntervalSeconds', full_name='License.Policy.RenewalRetryIntervalSeconds', index=9, + number=10, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RenewWithUsage', full_name='License.Policy.RenewWithUsage', index=10, + number=11, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1958, + serialized_end=2273, +) + +_LICENSE_KEYCONTAINER_OUTPUTPROTECTION = _descriptor.Descriptor( + name='OutputProtection', + full_name='License.KeyContainer.OutputProtection', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Hdcp', full_name='License.KeyContainer.OutputProtection.Hdcp', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='CgmsFlags', full_name='License.KeyContainer.OutputProtection.CgmsFlags', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2797, + serialized_end=3016, +) + +_LICENSE_KEYCONTAINER_KEYCONTROL = _descriptor.Descriptor( + name='KeyControl', + full_name='License.KeyContainer.KeyControl', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='KeyControlBlock', full_name='License.KeyContainer.KeyControl.KeyControlBlock', index=0, + number=1, type=12, cpp_type=9, label=2, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Iv', full_name='License.KeyContainer.KeyControl.Iv', index=1, + number=2, type=12, cpp_type=9, label=2, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=3018, + serialized_end=3067, +) + +_LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS = _descriptor.Descriptor( + name='OperatorSessionKeyPermissions', + full_name='License.KeyContainer.OperatorSessionKeyPermissions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='AllowEncrypt', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowEncrypt', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='AllowDecrypt', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowDecrypt', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='AllowSign', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowSign', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='AllowSignatureVerify', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowSignatureVerify', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=3069, + serialized_end=3193, +) + +_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT = _descriptor.Descriptor( + name='VideoResolutionConstraint', + full_name='License.KeyContainer.VideoResolutionConstraint', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='MinResolutionPixels', full_name='License.KeyContainer.VideoResolutionConstraint.MinResolutionPixels', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='MaxResolutionPixels', full_name='License.KeyContainer.VideoResolutionConstraint.MaxResolutionPixels', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RequiredProtection', full_name='License.KeyContainer.VideoResolutionConstraint.RequiredProtection', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=3196, + serialized_end=3349, +) + +_LICENSE_KEYCONTAINER = _descriptor.Descriptor( + name='KeyContainer', + full_name='License.KeyContainer', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Id', full_name='License.KeyContainer.Id', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Iv', full_name='License.KeyContainer.Iv', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Key', full_name='License.KeyContainer.Key', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Type', full_name='License.KeyContainer.Type', index=3, + number=4, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Level', full_name='License.KeyContainer.Level', index=4, + number=5, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RequiredProtection', full_name='License.KeyContainer.RequiredProtection', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RequestedProtection', full_name='License.KeyContainer.RequestedProtection', index=6, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='_KeyControl', full_name='License.KeyContainer._KeyControl', index=7, + number=8, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='_OperatorSessionKeyPermissions', full_name='License.KeyContainer._OperatorSessionKeyPermissions', index=8, + number=9, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='VideoResolutionConstraints', full_name='License.KeyContainer.VideoResolutionConstraints', index=9, + number=10, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_LICENSE_KEYCONTAINER_OUTPUTPROTECTION, _LICENSE_KEYCONTAINER_KEYCONTROL, _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS, _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT, ], + enum_types=[ + _LICENSE_KEYCONTAINER_KEYTYPE, + _LICENSE_KEYCONTAINER_SECURITYLEVEL, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2276, + serialized_end=3549, +) + +_LICENSE = _descriptor.Descriptor( + name='License', + full_name='License', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Id', full_name='License.Id', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='_Policy', full_name='License._Policy', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Key', full_name='License.Key', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='LicenseStartTime', full_name='License.LicenseStartTime', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RemoteAttestationVerified', full_name='License.RemoteAttestationVerified', index=4, + number=5, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ProviderClientToken', full_name='License.ProviderClientToken', index=5, + number=6, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ProtectionScheme', full_name='License.ProtectionScheme', index=6, + number=7, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_LICENSE_POLICY, _LICENSE_KEYCONTAINER, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1724, + serialized_end=3549, +) + + +_LICENSEERROR = _descriptor.Descriptor( + name='LicenseError', + full_name='LicenseError', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='ErrorCode', full_name='LicenseError.ErrorCode', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _LICENSEERROR_ERROR, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=3552, + serialized_end=3704, +) + + +_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC = _descriptor.Descriptor( + name='CENC', + full_name='LicenseRequest.ContentIdentification.CENC', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Pssh', full_name='LicenseRequest.ContentIdentification.CENC.Pssh', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='LicenseType', full_name='LicenseRequest.ContentIdentification.CENC.LicenseType', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RequestId', full_name='LicenseRequest.ContentIdentification.CENC.RequestId', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=4268, + serialized_end=4363, +) + +_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM = _descriptor.Descriptor( + name='WebM', + full_name='LicenseRequest.ContentIdentification.WebM', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Header', full_name='LicenseRequest.ContentIdentification.WebM.Header', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='LicenseType', full_name='LicenseRequest.ContentIdentification.WebM.LicenseType', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RequestId', full_name='LicenseRequest.ContentIdentification.WebM.RequestId', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=4365, + serialized_end=4441, +) + +_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE = _descriptor.Descriptor( + name='ExistingLicense', + full_name='LicenseRequest.ContentIdentification.ExistingLicense', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='LicenseId', full_name='LicenseRequest.ContentIdentification.ExistingLicense.LicenseId', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SecondsSinceStarted', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SecondsSinceStarted', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SecondsSinceLastPlayed', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SecondsSinceLastPlayed', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SessionUsageTableEntry', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SessionUsageTableEntry', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=4444, + serialized_end=4597, +) + +_LICENSEREQUEST_CONTENTIDENTIFICATION = _descriptor.Descriptor( + name='ContentIdentification', + full_name='LicenseRequest.ContentIdentification', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='CencId', full_name='LicenseRequest.ContentIdentification.CencId', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='WebmId', full_name='LicenseRequest.ContentIdentification.WebmId', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='License', full_name='LicenseRequest.ContentIdentification.License', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC, _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM, _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=4051, + serialized_end=4597, +) + +_LICENSEREQUEST = _descriptor.Descriptor( + name='LicenseRequest', + full_name='LicenseRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='ClientId', full_name='LicenseRequest.ClientId', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ContentId', full_name='LicenseRequest.ContentId', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Type', full_name='LicenseRequest.Type', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RequestTime', full_name='LicenseRequest.RequestTime', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='KeyControlNonceDeprecated', full_name='LicenseRequest.KeyControlNonceDeprecated', index=4, + number=5, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ProtocolVersion', full_name='LicenseRequest.ProtocolVersion', index=5, + number=6, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=21, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='KeyControlNonce', full_name='LicenseRequest.KeyControlNonce', index=6, + number=7, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='EncryptedClientId', full_name='LicenseRequest.EncryptedClientId', index=7, + number=8, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_LICENSEREQUEST_CONTENTIDENTIFICATION, ], + enum_types=[ + _LICENSEREQUEST_REQUESTTYPE, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=3707, + serialized_end=4647, +) + + +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC = _descriptor.Descriptor( + name='CENC', + full_name='LicenseRequestRaw.ContentIdentification.CENC', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Pssh', full_name='LicenseRequestRaw.ContentIdentification.CENC.Pssh', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='LicenseType', full_name='LicenseRequestRaw.ContentIdentification.CENC.LicenseType', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RequestId', full_name='LicenseRequestRaw.ContentIdentification.CENC.RequestId', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5229, + serialized_end=5303, +) + +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM = _descriptor.Descriptor( + name='WebM', + full_name='LicenseRequestRaw.ContentIdentification.WebM', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Header', full_name='LicenseRequestRaw.ContentIdentification.WebM.Header', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='LicenseType', full_name='LicenseRequestRaw.ContentIdentification.WebM.LicenseType', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RequestId', full_name='LicenseRequestRaw.ContentIdentification.WebM.RequestId', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=4365, + serialized_end=4441, +) + +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE = _descriptor.Descriptor( + name='ExistingLicense', + full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='LicenseId', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.LicenseId', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SecondsSinceStarted', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.SecondsSinceStarted', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SecondsSinceLastPlayed', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.SecondsSinceLastPlayed', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SessionUsageTableEntry', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.SessionUsageTableEntry', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=4444, + serialized_end=4597, +) + +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION = _descriptor.Descriptor( + name='ContentIdentification', + full_name='LicenseRequestRaw.ContentIdentification', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='CencId', full_name='LicenseRequestRaw.ContentIdentification.CencId', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='WebmId', full_name='LicenseRequestRaw.ContentIdentification.WebmId', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='License', full_name='LicenseRequestRaw.ContentIdentification.License', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC, _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM, _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5003, + serialized_end=5537, +) + +_LICENSEREQUESTRAW = _descriptor.Descriptor( + name='LicenseRequestRaw', + full_name='LicenseRequestRaw', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='ClientId', full_name='LicenseRequestRaw.ClientId', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ContentId', full_name='LicenseRequestRaw.ContentId', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Type', full_name='LicenseRequestRaw.Type', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RequestTime', full_name='LicenseRequestRaw.RequestTime', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='KeyControlNonceDeprecated', full_name='LicenseRequestRaw.KeyControlNonceDeprecated', index=4, + number=5, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ProtocolVersion', full_name='LicenseRequestRaw.ProtocolVersion', index=5, + number=6, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=21, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='KeyControlNonce', full_name='LicenseRequestRaw.KeyControlNonce', index=6, + number=7, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='EncryptedClientId', full_name='LicenseRequestRaw.EncryptedClientId', index=7, + number=8, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_LICENSEREQUESTRAW_CONTENTIDENTIFICATION, ], + enum_types=[ + _LICENSEREQUESTRAW_REQUESTTYPE, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=4650, + serialized_end=5587, +) + + +_PROVISIONEDDEVICEINFO = _descriptor.Descriptor( + name='ProvisionedDeviceInfo', + full_name='ProvisionedDeviceInfo', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='SystemId', full_name='ProvisionedDeviceInfo.SystemId', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Soc', full_name='ProvisionedDeviceInfo.Soc', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Manufacturer', full_name='ProvisionedDeviceInfo.Manufacturer', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Model', full_name='ProvisionedDeviceInfo.Model', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='DeviceType', full_name='ProvisionedDeviceInfo.DeviceType', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ModelYear', full_name='ProvisionedDeviceInfo.ModelYear', index=5, + number=6, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SecurityLevel', full_name='ProvisionedDeviceInfo.SecurityLevel', index=6, + number=7, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='TestDevice', full_name='ProvisionedDeviceInfo.TestDevice', index=7, + number=8, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _PROVISIONEDDEVICEINFO_WVSECURITYLEVEL, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5590, + serialized_end=5884, +) + + +_PROVISIONINGOPTIONS = _descriptor.Descriptor( + name='ProvisioningOptions', + full_name='ProvisioningOptions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5886, + serialized_end=5907, +) + + +_PROVISIONINGREQUEST = _descriptor.Descriptor( + name='ProvisioningRequest', + full_name='ProvisioningRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5909, + serialized_end=5930, +) + + +_PROVISIONINGRESPONSE = _descriptor.Descriptor( + name='ProvisioningResponse', + full_name='ProvisioningResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5932, + serialized_end=5954, +) + + +_REMOTEATTESTATION = _descriptor.Descriptor( + name='RemoteAttestation', + full_name='RemoteAttestation', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Certificate', full_name='RemoteAttestation.Certificate', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Salt', full_name='RemoteAttestation.Salt', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Signature', full_name='RemoteAttestation.Signature', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5956, + serialized_end=6061, +) + + +_SESSIONINIT = _descriptor.Descriptor( + name='SessionInit', + full_name='SessionInit', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6063, + serialized_end=6076, +) + + +_SESSIONSTATE = _descriptor.Descriptor( + name='SessionState', + full_name='SessionState', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6078, + serialized_end=6092, +) + + +_SIGNEDCERTIFICATESTATUSLIST = _descriptor.Descriptor( + name='SignedCertificateStatusList', + full_name='SignedCertificateStatusList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6094, + serialized_end=6123, +) + + +_SIGNEDDEVICECERTIFICATE = _descriptor.Descriptor( + name='SignedDeviceCertificate', + full_name='SignedDeviceCertificate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='_DeviceCertificate', full_name='SignedDeviceCertificate._DeviceCertificate', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Signature', full_name='SignedDeviceCertificate.Signature', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Signer', full_name='SignedDeviceCertificate.Signer', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6126, + serialized_end=6260, +) + + +_SIGNEDPROVISIONINGMESSAGE = _descriptor.Descriptor( + name='SignedProvisioningMessage', + full_name='SignedProvisioningMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6262, + serialized_end=6289, +) + + +_SIGNEDMESSAGE = _descriptor.Descriptor( + name='SignedMessage', + full_name='SignedMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Type', full_name='SignedMessage.Type', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Msg', full_name='SignedMessage.Msg', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Signature', full_name='SignedMessage.Signature', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SessionKey', full_name='SignedMessage.SessionKey', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RemoteAttestation', full_name='SignedMessage.RemoteAttestation', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _SIGNEDMESSAGE_MESSAGETYPE, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6292, + serialized_end=6575, +) + + +_WIDEVINECENCHEADER = _descriptor.Descriptor( + name='WidevineCencHeader', + full_name='WidevineCencHeader', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='algorithm', full_name='WidevineCencHeader.algorithm', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='key_id', full_name='WidevineCencHeader.key_id', index=1, + number=2, type=12, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='provider', full_name='WidevineCencHeader.provider', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='content_id', full_name='WidevineCencHeader.content_id', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='track_type_deprecated', full_name='WidevineCencHeader.track_type_deprecated', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='policy', full_name='WidevineCencHeader.policy', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='crypto_period_index', full_name='WidevineCencHeader.crypto_period_index', index=6, + number=7, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='grouped_license', full_name='WidevineCencHeader.grouped_license', index=7, + number=8, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='protection_scheme', full_name='WidevineCencHeader.protection_scheme', index=8, + number=9, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='crypto_period_seconds', full_name='WidevineCencHeader.crypto_period_seconds', index=9, + number=10, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _WIDEVINECENCHEADER_ALGORITHM, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6578, + serialized_end=6903, +) + + +_SIGNEDLICENSEREQUEST = _descriptor.Descriptor( + name='SignedLicenseRequest', + full_name='SignedLicenseRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Type', full_name='SignedLicenseRequest.Type', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Msg', full_name='SignedLicenseRequest.Msg', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Signature', full_name='SignedLicenseRequest.Signature', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SessionKey', full_name='SignedLicenseRequest.SessionKey', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RemoteAttestation', full_name='SignedLicenseRequest.RemoteAttestation', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _SIGNEDLICENSEREQUEST_MESSAGETYPE, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6906, + serialized_end=7220, +) + + +_SIGNEDLICENSEREQUESTRAW = _descriptor.Descriptor( + name='SignedLicenseRequestRaw', + full_name='SignedLicenseRequestRaw', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Type', full_name='SignedLicenseRequestRaw.Type', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Msg', full_name='SignedLicenseRequestRaw.Msg', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Signature', full_name='SignedLicenseRequestRaw.Signature', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SessionKey', full_name='SignedLicenseRequestRaw.SessionKey', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RemoteAttestation', full_name='SignedLicenseRequestRaw.RemoteAttestation', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _SIGNEDLICENSEREQUESTRAW_MESSAGETYPE, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=7223, + serialized_end=7546, +) + + +_SIGNEDLICENSE = _descriptor.Descriptor( + name='SignedLicense', + full_name='SignedLicense', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Type', full_name='SignedLicense.Type', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Msg', full_name='SignedLicense.Msg', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Signature', full_name='SignedLicense.Signature', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SessionKey', full_name='SignedLicense.SessionKey', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RemoteAttestation', full_name='SignedLicense.RemoteAttestation', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _SIGNEDLICENSE_MESSAGETYPE, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=7549, + serialized_end=7842, +) + + +_SIGNEDSERVICECERTIFICATE = _descriptor.Descriptor( + name='SignedServiceCertificate', + full_name='SignedServiceCertificate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='Type', full_name='SignedServiceCertificate.Type', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Msg', full_name='SignedServiceCertificate.Msg', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='Signature', full_name='SignedServiceCertificate.Signature', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SessionKey', full_name='SignedServiceCertificate.SessionKey', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RemoteAttestation', full_name='SignedServiceCertificate.RemoteAttestation', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _SIGNEDSERVICECERTIFICATE_MESSAGETYPE, + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=7845, + serialized_end=8176, +) + + +_FILEHASHES_SIGNATURE = _descriptor.Descriptor( + name='Signature', + full_name='FileHashes.Signature', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='filename', full_name='FileHashes.Signature.filename', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='test_signing', full_name='FileHashes.Signature.test_signing', index=1, + number=2, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='SHA512Hash', full_name='FileHashes.Signature.SHA512Hash', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='main_exe', full_name='FileHashes.Signature.main_exe', index=3, + number=4, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='signature', full_name='FileHashes.Signature.signature', index=4, + number=5, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8252, + serialized_end=8360, +) + +_FILEHASHES = _descriptor.Descriptor( + name='FileHashes', + full_name='FileHashes', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='signer', full_name='FileHashes.signer', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='signatures', full_name='FileHashes.signatures', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_FILEHASHES_SIGNATURE, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=8179, + serialized_end=8360, +) + +_CLIENTIDENTIFICATION_NAMEVALUE.containing_type = _CLIENTIDENTIFICATION +_CLIENTIDENTIFICATION_CLIENTCAPABILITIES.fields_by_name['MaxHdcpVersion'].enum_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION +_CLIENTIDENTIFICATION_CLIENTCAPABILITIES.containing_type = _CLIENTIDENTIFICATION +_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION.containing_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES +_CLIENTIDENTIFICATION.fields_by_name['Type'].enum_type = _CLIENTIDENTIFICATION_TOKENTYPE +_CLIENTIDENTIFICATION.fields_by_name['Token'].message_type = _SIGNEDDEVICECERTIFICATE +_CLIENTIDENTIFICATION.fields_by_name['ClientInfo'].message_type = _CLIENTIDENTIFICATION_NAMEVALUE +_CLIENTIDENTIFICATION.fields_by_name['_ClientCapabilities'].message_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES +_CLIENTIDENTIFICATION.fields_by_name['_FileHashes'].message_type = _FILEHASHES +_CLIENTIDENTIFICATION_TOKENTYPE.containing_type = _CLIENTIDENTIFICATION +_DEVICECERTIFICATE.fields_by_name['Type'].enum_type = _DEVICECERTIFICATE_CERTIFICATETYPE +_DEVICECERTIFICATE_CERTIFICATETYPE.containing_type = _DEVICECERTIFICATE +_DEVICECERTIFICATESTATUS.fields_by_name['Status'].enum_type = _DEVICECERTIFICATESTATUS_CERTIFICATESTATUS +_DEVICECERTIFICATESTATUS.fields_by_name['DeviceInfo'].message_type = _PROVISIONEDDEVICEINFO +_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS.containing_type = _DEVICECERTIFICATESTATUS +_DEVICECERTIFICATESTATUSLIST.fields_by_name['CertificateStatus'].message_type = _DEVICECERTIFICATESTATUS +_LICENSEIDENTIFICATION.fields_by_name['Type'].enum_type = _LICENSETYPE +_LICENSE_POLICY.containing_type = _LICENSE +_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.fields_by_name['Hdcp'].enum_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION +_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.fields_by_name['CgmsFlags'].enum_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS +_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.containing_type = _LICENSE_KEYCONTAINER +_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS.containing_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION +_LICENSE_KEYCONTAINER_KEYCONTROL.containing_type = _LICENSE_KEYCONTAINER +_LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS.containing_type = _LICENSE_KEYCONTAINER +_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT.fields_by_name['RequiredProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION +_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT.containing_type = _LICENSE_KEYCONTAINER +_LICENSE_KEYCONTAINER.fields_by_name['Type'].enum_type = _LICENSE_KEYCONTAINER_KEYTYPE +_LICENSE_KEYCONTAINER.fields_by_name['Level'].enum_type = _LICENSE_KEYCONTAINER_SECURITYLEVEL +_LICENSE_KEYCONTAINER.fields_by_name['RequiredProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION +_LICENSE_KEYCONTAINER.fields_by_name['RequestedProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION +_LICENSE_KEYCONTAINER.fields_by_name['_KeyControl'].message_type = _LICENSE_KEYCONTAINER_KEYCONTROL +_LICENSE_KEYCONTAINER.fields_by_name['_OperatorSessionKeyPermissions'].message_type = _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS +_LICENSE_KEYCONTAINER.fields_by_name['VideoResolutionConstraints'].message_type = _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT +_LICENSE_KEYCONTAINER.containing_type = _LICENSE +_LICENSE_KEYCONTAINER_KEYTYPE.containing_type = _LICENSE_KEYCONTAINER +_LICENSE_KEYCONTAINER_SECURITYLEVEL.containing_type = _LICENSE_KEYCONTAINER +_LICENSE.fields_by_name['Id'].message_type = _LICENSEIDENTIFICATION +_LICENSE.fields_by_name['_Policy'].message_type = _LICENSE_POLICY +_LICENSE.fields_by_name['Key'].message_type = _LICENSE_KEYCONTAINER +_LICENSEERROR.fields_by_name['ErrorCode'].enum_type = _LICENSEERROR_ERROR +_LICENSEERROR_ERROR.containing_type = _LICENSEERROR +_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.fields_by_name['Pssh'].message_type = _WIDEVINECENCHEADER +_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.fields_by_name['LicenseType'].enum_type = _LICENSETYPE +_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION +_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM.fields_by_name['LicenseType'].enum_type = _LICENSETYPE +_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION +_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE.fields_by_name['LicenseId'].message_type = _LICENSEIDENTIFICATION +_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION +_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['CencId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_CENC +_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['WebmId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM +_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['License'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE +_LICENSEREQUEST_CONTENTIDENTIFICATION.containing_type = _LICENSEREQUEST +_LICENSEREQUEST.fields_by_name['ClientId'].message_type = _CLIENTIDENTIFICATION +_LICENSEREQUEST.fields_by_name['ContentId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION +_LICENSEREQUEST.fields_by_name['Type'].enum_type = _LICENSEREQUEST_REQUESTTYPE +_LICENSEREQUEST.fields_by_name['ProtocolVersion'].enum_type = _PROTOCOLVERSION +_LICENSEREQUEST.fields_by_name['EncryptedClientId'].message_type = _ENCRYPTEDCLIENTIDENTIFICATION +_LICENSEREQUEST_REQUESTTYPE.containing_type = _LICENSEREQUEST +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC.fields_by_name['LicenseType'].enum_type = _LICENSETYPE +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC.containing_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM.fields_by_name['LicenseType'].enum_type = _LICENSETYPE +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM.containing_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE.fields_by_name['LicenseId'].message_type = _LICENSEIDENTIFICATION +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE.containing_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.fields_by_name['CencId'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.fields_by_name['WebmId'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.fields_by_name['License'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE +_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.containing_type = _LICENSEREQUESTRAW +_LICENSEREQUESTRAW.fields_by_name['ClientId'].message_type = _CLIENTIDENTIFICATION +_LICENSEREQUESTRAW.fields_by_name['ContentId'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION +_LICENSEREQUESTRAW.fields_by_name['Type'].enum_type = _LICENSEREQUESTRAW_REQUESTTYPE +_LICENSEREQUESTRAW.fields_by_name['ProtocolVersion'].enum_type = _PROTOCOLVERSION +_LICENSEREQUESTRAW.fields_by_name['EncryptedClientId'].message_type = _ENCRYPTEDCLIENTIDENTIFICATION +_LICENSEREQUESTRAW_REQUESTTYPE.containing_type = _LICENSEREQUESTRAW +_PROVISIONEDDEVICEINFO.fields_by_name['SecurityLevel'].enum_type = _PROVISIONEDDEVICEINFO_WVSECURITYLEVEL +_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL.containing_type = _PROVISIONEDDEVICEINFO +_REMOTEATTESTATION.fields_by_name['Certificate'].message_type = _ENCRYPTEDCLIENTIDENTIFICATION +_SIGNEDDEVICECERTIFICATE.fields_by_name['_DeviceCertificate'].message_type = _DEVICECERTIFICATE +_SIGNEDDEVICECERTIFICATE.fields_by_name['Signer'].message_type = _SIGNEDDEVICECERTIFICATE +_SIGNEDMESSAGE.fields_by_name['Type'].enum_type = _SIGNEDMESSAGE_MESSAGETYPE +_SIGNEDMESSAGE.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION +_SIGNEDMESSAGE_MESSAGETYPE.containing_type = _SIGNEDMESSAGE +_WIDEVINECENCHEADER.fields_by_name['algorithm'].enum_type = _WIDEVINECENCHEADER_ALGORITHM +_WIDEVINECENCHEADER_ALGORITHM.containing_type = _WIDEVINECENCHEADER +_SIGNEDLICENSEREQUEST.fields_by_name['Type'].enum_type = _SIGNEDLICENSEREQUEST_MESSAGETYPE +_SIGNEDLICENSEREQUEST.fields_by_name['Msg'].message_type = _LICENSEREQUEST +_SIGNEDLICENSEREQUEST.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION +_SIGNEDLICENSEREQUEST_MESSAGETYPE.containing_type = _SIGNEDLICENSEREQUEST +_SIGNEDLICENSEREQUESTRAW.fields_by_name['Type'].enum_type = _SIGNEDLICENSEREQUESTRAW_MESSAGETYPE +_SIGNEDLICENSEREQUESTRAW.fields_by_name['Msg'].message_type = _LICENSEREQUESTRAW +_SIGNEDLICENSEREQUESTRAW.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION +_SIGNEDLICENSEREQUESTRAW_MESSAGETYPE.containing_type = _SIGNEDLICENSEREQUESTRAW +_SIGNEDLICENSE.fields_by_name['Type'].enum_type = _SIGNEDLICENSE_MESSAGETYPE +_SIGNEDLICENSE.fields_by_name['Msg'].message_type = _LICENSE +_SIGNEDLICENSE.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION +_SIGNEDLICENSE_MESSAGETYPE.containing_type = _SIGNEDLICENSE +_SIGNEDSERVICECERTIFICATE.fields_by_name['Type'].enum_type = _SIGNEDSERVICECERTIFICATE_MESSAGETYPE +_SIGNEDSERVICECERTIFICATE.fields_by_name['Msg'].message_type = _SIGNEDDEVICECERTIFICATE +_SIGNEDSERVICECERTIFICATE.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION +_SIGNEDSERVICECERTIFICATE_MESSAGETYPE.containing_type = _SIGNEDSERVICECERTIFICATE +_FILEHASHES_SIGNATURE.containing_type = _FILEHASHES +_FILEHASHES.fields_by_name['signatures'].message_type = _FILEHASHES_SIGNATURE +DESCRIPTOR.message_types_by_name['ClientIdentification'] = _CLIENTIDENTIFICATION +DESCRIPTOR.message_types_by_name['DeviceCertificate'] = _DEVICECERTIFICATE +DESCRIPTOR.message_types_by_name['DeviceCertificateStatus'] = _DEVICECERTIFICATESTATUS +DESCRIPTOR.message_types_by_name['DeviceCertificateStatusList'] = _DEVICECERTIFICATESTATUSLIST +DESCRIPTOR.message_types_by_name['EncryptedClientIdentification'] = _ENCRYPTEDCLIENTIDENTIFICATION +DESCRIPTOR.message_types_by_name['LicenseIdentification'] = _LICENSEIDENTIFICATION +DESCRIPTOR.message_types_by_name['License'] = _LICENSE +DESCRIPTOR.message_types_by_name['LicenseError'] = _LICENSEERROR +DESCRIPTOR.message_types_by_name['LicenseRequest'] = _LICENSEREQUEST +DESCRIPTOR.message_types_by_name['LicenseRequestRaw'] = _LICENSEREQUESTRAW +DESCRIPTOR.message_types_by_name['ProvisionedDeviceInfo'] = _PROVISIONEDDEVICEINFO +DESCRIPTOR.message_types_by_name['ProvisioningOptions'] = _PROVISIONINGOPTIONS +DESCRIPTOR.message_types_by_name['ProvisioningRequest'] = _PROVISIONINGREQUEST +DESCRIPTOR.message_types_by_name['ProvisioningResponse'] = _PROVISIONINGRESPONSE +DESCRIPTOR.message_types_by_name['RemoteAttestation'] = _REMOTEATTESTATION +DESCRIPTOR.message_types_by_name['SessionInit'] = _SESSIONINIT +DESCRIPTOR.message_types_by_name['SessionState'] = _SESSIONSTATE +DESCRIPTOR.message_types_by_name['SignedCertificateStatusList'] = _SIGNEDCERTIFICATESTATUSLIST +DESCRIPTOR.message_types_by_name['SignedDeviceCertificate'] = _SIGNEDDEVICECERTIFICATE +DESCRIPTOR.message_types_by_name['SignedProvisioningMessage'] = _SIGNEDPROVISIONINGMESSAGE +DESCRIPTOR.message_types_by_name['SignedMessage'] = _SIGNEDMESSAGE +DESCRIPTOR.message_types_by_name['WidevineCencHeader'] = _WIDEVINECENCHEADER +DESCRIPTOR.message_types_by_name['SignedLicenseRequest'] = _SIGNEDLICENSEREQUEST +DESCRIPTOR.message_types_by_name['SignedLicenseRequestRaw'] = _SIGNEDLICENSEREQUESTRAW +DESCRIPTOR.message_types_by_name['SignedLicense'] = _SIGNEDLICENSE +DESCRIPTOR.message_types_by_name['SignedServiceCertificate'] = _SIGNEDSERVICECERTIFICATE +DESCRIPTOR.message_types_by_name['FileHashes'] = _FILEHASHES +DESCRIPTOR.enum_types_by_name['LicenseType'] = _LICENSETYPE +DESCRIPTOR.enum_types_by_name['ProtocolVersion'] = _PROTOCOLVERSION + +ClientIdentification = _reflection.GeneratedProtocolMessageType('ClientIdentification', (_message.Message,), dict( + + NameValue = _reflection.GeneratedProtocolMessageType('NameValue', (_message.Message,), dict( + DESCRIPTOR = _CLIENTIDENTIFICATION_NAMEVALUE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:ClientIdentification.NameValue) + )) + , + + ClientCapabilities = _reflection.GeneratedProtocolMessageType('ClientCapabilities', (_message.Message,), dict( + DESCRIPTOR = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:ClientIdentification.ClientCapabilities) + )) + , + DESCRIPTOR = _CLIENTIDENTIFICATION, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:ClientIdentification) + )) +_sym_db.RegisterMessage(ClientIdentification) +_sym_db.RegisterMessage(ClientIdentification.NameValue) +_sym_db.RegisterMessage(ClientIdentification.ClientCapabilities) + +DeviceCertificate = _reflection.GeneratedProtocolMessageType('DeviceCertificate', (_message.Message,), dict( + DESCRIPTOR = _DEVICECERTIFICATE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:DeviceCertificate) + )) +_sym_db.RegisterMessage(DeviceCertificate) + +DeviceCertificateStatus = _reflection.GeneratedProtocolMessageType('DeviceCertificateStatus', (_message.Message,), dict( + DESCRIPTOR = _DEVICECERTIFICATESTATUS, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:DeviceCertificateStatus) + )) +_sym_db.RegisterMessage(DeviceCertificateStatus) + +DeviceCertificateStatusList = _reflection.GeneratedProtocolMessageType('DeviceCertificateStatusList', (_message.Message,), dict( + DESCRIPTOR = _DEVICECERTIFICATESTATUSLIST, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:DeviceCertificateStatusList) + )) +_sym_db.RegisterMessage(DeviceCertificateStatusList) + +EncryptedClientIdentification = _reflection.GeneratedProtocolMessageType('EncryptedClientIdentification', (_message.Message,), dict( + DESCRIPTOR = _ENCRYPTEDCLIENTIDENTIFICATION, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:EncryptedClientIdentification) + )) +_sym_db.RegisterMessage(EncryptedClientIdentification) + +LicenseIdentification = _reflection.GeneratedProtocolMessageType('LicenseIdentification', (_message.Message,), dict( + DESCRIPTOR = _LICENSEIDENTIFICATION, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseIdentification) + )) +_sym_db.RegisterMessage(LicenseIdentification) + +License = _reflection.GeneratedProtocolMessageType('License', (_message.Message,), dict( + + Policy = _reflection.GeneratedProtocolMessageType('Policy', (_message.Message,), dict( + DESCRIPTOR = _LICENSE_POLICY, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:License.Policy) + )) + , + + KeyContainer = _reflection.GeneratedProtocolMessageType('KeyContainer', (_message.Message,), dict( + + OutputProtection = _reflection.GeneratedProtocolMessageType('OutputProtection', (_message.Message,), dict( + DESCRIPTOR = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:License.KeyContainer.OutputProtection) + )) + , + + KeyControl = _reflection.GeneratedProtocolMessageType('KeyControl', (_message.Message,), dict( + DESCRIPTOR = _LICENSE_KEYCONTAINER_KEYCONTROL, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:License.KeyContainer.KeyControl) + )) + , + + OperatorSessionKeyPermissions = _reflection.GeneratedProtocolMessageType('OperatorSessionKeyPermissions', (_message.Message,), dict( + DESCRIPTOR = _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:License.KeyContainer.OperatorSessionKeyPermissions) + )) + , + + VideoResolutionConstraint = _reflection.GeneratedProtocolMessageType('VideoResolutionConstraint', (_message.Message,), dict( + DESCRIPTOR = _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:License.KeyContainer.VideoResolutionConstraint) + )) + , + DESCRIPTOR = _LICENSE_KEYCONTAINER, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:License.KeyContainer) + )) + , + DESCRIPTOR = _LICENSE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:License) + )) +_sym_db.RegisterMessage(License) +_sym_db.RegisterMessage(License.Policy) +_sym_db.RegisterMessage(License.KeyContainer) +_sym_db.RegisterMessage(License.KeyContainer.OutputProtection) +_sym_db.RegisterMessage(License.KeyContainer.KeyControl) +_sym_db.RegisterMessage(License.KeyContainer.OperatorSessionKeyPermissions) +_sym_db.RegisterMessage(License.KeyContainer.VideoResolutionConstraint) + +LicenseError = _reflection.GeneratedProtocolMessageType('LicenseError', (_message.Message,), dict( + DESCRIPTOR = _LICENSEERROR, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseError) + )) +_sym_db.RegisterMessage(LicenseError) + +LicenseRequest = _reflection.GeneratedProtocolMessageType('LicenseRequest', (_message.Message,), dict( + + ContentIdentification = _reflection.GeneratedProtocolMessageType('ContentIdentification', (_message.Message,), dict( + + CENC = _reflection.GeneratedProtocolMessageType('CENC', (_message.Message,), dict( + DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_CENC, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.CENC) + )) + , + + WebM = _reflection.GeneratedProtocolMessageType('WebM', (_message.Message,), dict( + DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.WebM) + )) + , + + ExistingLicense = _reflection.GeneratedProtocolMessageType('ExistingLicense', (_message.Message,), dict( + DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.ExistingLicense) + )) + , + DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification) + )) + , + DESCRIPTOR = _LICENSEREQUEST, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseRequest) + )) +_sym_db.RegisterMessage(LicenseRequest) +_sym_db.RegisterMessage(LicenseRequest.ContentIdentification) +_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.CENC) +_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.WebM) +_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.ExistingLicense) + +LicenseRequestRaw = _reflection.GeneratedProtocolMessageType('LicenseRequestRaw', (_message.Message,), dict( + + ContentIdentification = _reflection.GeneratedProtocolMessageType('ContentIdentification', (_message.Message,), dict( + + CENC = _reflection.GeneratedProtocolMessageType('CENC', (_message.Message,), dict( + DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification.CENC) + )) + , + + WebM = _reflection.GeneratedProtocolMessageType('WebM', (_message.Message,), dict( + DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification.WebM) + )) + , + + ExistingLicense = _reflection.GeneratedProtocolMessageType('ExistingLicense', (_message.Message,), dict( + DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification.ExistingLicense) + )) + , + DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification) + )) + , + DESCRIPTOR = _LICENSEREQUESTRAW, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:LicenseRequestRaw) + )) +_sym_db.RegisterMessage(LicenseRequestRaw) +_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification) +_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification.CENC) +_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification.WebM) +_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification.ExistingLicense) + +ProvisionedDeviceInfo = _reflection.GeneratedProtocolMessageType('ProvisionedDeviceInfo', (_message.Message,), dict( + DESCRIPTOR = _PROVISIONEDDEVICEINFO, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:ProvisionedDeviceInfo) + )) +_sym_db.RegisterMessage(ProvisionedDeviceInfo) + +ProvisioningOptions = _reflection.GeneratedProtocolMessageType('ProvisioningOptions', (_message.Message,), dict( + DESCRIPTOR = _PROVISIONINGOPTIONS, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:ProvisioningOptions) + )) +_sym_db.RegisterMessage(ProvisioningOptions) + +ProvisioningRequest = _reflection.GeneratedProtocolMessageType('ProvisioningRequest', (_message.Message,), dict( + DESCRIPTOR = _PROVISIONINGREQUEST, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:ProvisioningRequest) + )) +_sym_db.RegisterMessage(ProvisioningRequest) + +ProvisioningResponse = _reflection.GeneratedProtocolMessageType('ProvisioningResponse', (_message.Message,), dict( + DESCRIPTOR = _PROVISIONINGRESPONSE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:ProvisioningResponse) + )) +_sym_db.RegisterMessage(ProvisioningResponse) + +RemoteAttestation = _reflection.GeneratedProtocolMessageType('RemoteAttestation', (_message.Message,), dict( + DESCRIPTOR = _REMOTEATTESTATION, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:RemoteAttestation) + )) +_sym_db.RegisterMessage(RemoteAttestation) + +SessionInit = _reflection.GeneratedProtocolMessageType('SessionInit', (_message.Message,), dict( + DESCRIPTOR = _SESSIONINIT, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:SessionInit) + )) +_sym_db.RegisterMessage(SessionInit) + +SessionState = _reflection.GeneratedProtocolMessageType('SessionState', (_message.Message,), dict( + DESCRIPTOR = _SESSIONSTATE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:SessionState) + )) +_sym_db.RegisterMessage(SessionState) + +SignedCertificateStatusList = _reflection.GeneratedProtocolMessageType('SignedCertificateStatusList', (_message.Message,), dict( + DESCRIPTOR = _SIGNEDCERTIFICATESTATUSLIST, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:SignedCertificateStatusList) + )) +_sym_db.RegisterMessage(SignedCertificateStatusList) + +SignedDeviceCertificate = _reflection.GeneratedProtocolMessageType('SignedDeviceCertificate', (_message.Message,), dict( + DESCRIPTOR = _SIGNEDDEVICECERTIFICATE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:SignedDeviceCertificate) + )) +_sym_db.RegisterMessage(SignedDeviceCertificate) + +SignedProvisioningMessage = _reflection.GeneratedProtocolMessageType('SignedProvisioningMessage', (_message.Message,), dict( + DESCRIPTOR = _SIGNEDPROVISIONINGMESSAGE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:SignedProvisioningMessage) + )) +_sym_db.RegisterMessage(SignedProvisioningMessage) + +SignedMessage = _reflection.GeneratedProtocolMessageType('SignedMessage', (_message.Message,), dict( + DESCRIPTOR = _SIGNEDMESSAGE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:SignedMessage) + )) +_sym_db.RegisterMessage(SignedMessage) + +WidevineCencHeader = _reflection.GeneratedProtocolMessageType('WidevineCencHeader', (_message.Message,), dict( + DESCRIPTOR = _WIDEVINECENCHEADER, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:WidevineCencHeader) + )) +_sym_db.RegisterMessage(WidevineCencHeader) + +SignedLicenseRequest = _reflection.GeneratedProtocolMessageType('SignedLicenseRequest', (_message.Message,), dict( + DESCRIPTOR = _SIGNEDLICENSEREQUEST, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:SignedLicenseRequest) + )) +_sym_db.RegisterMessage(SignedLicenseRequest) + +SignedLicenseRequestRaw = _reflection.GeneratedProtocolMessageType('SignedLicenseRequestRaw', (_message.Message,), dict( + DESCRIPTOR = _SIGNEDLICENSEREQUESTRAW, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:SignedLicenseRequestRaw) + )) +_sym_db.RegisterMessage(SignedLicenseRequestRaw) + +SignedLicense = _reflection.GeneratedProtocolMessageType('SignedLicense', (_message.Message,), dict( + DESCRIPTOR = _SIGNEDLICENSE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:SignedLicense) + )) +_sym_db.RegisterMessage(SignedLicense) + +SignedServiceCertificate = _reflection.GeneratedProtocolMessageType('SignedServiceCertificate', (_message.Message,), dict( + DESCRIPTOR = _SIGNEDSERVICECERTIFICATE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:SignedServiceCertificate) + )) +_sym_db.RegisterMessage(SignedServiceCertificate) + +FileHashes = _reflection.GeneratedProtocolMessageType('FileHashes', (_message.Message,), dict( + + Signature = _reflection.GeneratedProtocolMessageType('Signature', (_message.Message,), dict( + DESCRIPTOR = _FILEHASHES_SIGNATURE, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:FileHashes.Signature) + )) + , + DESCRIPTOR = _FILEHASHES, + __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2' + # @@protoc_insertion_point(class_scope:FileHashes) + )) +_sym_db.RegisterMessage(FileHashes) +_sym_db.RegisterMessage(FileHashes.Signature) + + +# @@protoc_insertion_point(module_scope) diff --git a/README.md b/README.md new file mode 100644 index 0000000..2c0f706 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# Dumper + +Dumper is a Frida script to dump L3 CDMs from any Android device. + +## Dependencies + +Use pip to install the dependencies: + +`pip3 install -r requirements.txt` + +## Usage + +* Enable USB debugging +* Start frida-server on the device +* Execute dump_keys.py +* Start streaming some DRM-protected content + +## Temporary disabling L1 to use L3 instead +A few phone brands let us use the L1 keybox even after unlocking the bootloader (like Xiaomi). In this case, installation of a Magisk module called [liboemcrypto-disabler](https://github.com/umylive/liboemcrypto-disabler) is necessary. + +## Known issues +It seems like Google made some changes in their OEMCrypto library and it broke the script. Further investigation is needed to make it work on Android 11+, feel free to open PRs. + +## Credits +Thanks to the original author of the code. diff --git a/dump_keys.py b/dump_keys.py new file mode 100644 index 0000000..0747aad --- /dev/null +++ b/dump_keys.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 + +import time +import frida +import logging +from Helpers.Scanner import Scan + +logging.basicConfig( + format='%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(message)s', + datefmt='%Y-%m-%d %I:%M:%S %p', + level=logging.DEBUG, +) + +device = frida.get_usb_device() +scanner = Scan(device.name) +logging.info(f'Connected to {device.name}') +logging.info('scanning all processes for the following libraries') +for process in device.enumerate_processes(): + logging.debug(process) + if 'drm' in process.name: + libraries = scanner.find_widevine_process(device, process.name) + if libraries: + for library in libraries: + scanner.hook_to_process(device, process.name, library) +logging.info('Hooks completed') +while True: + time.sleep(1000) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3abb28b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +frida +protobuf +pycryptodome