[
  {
    "path": ".gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\npip-wheel-metadata/\nshare/python-wheels/\n*.egg-info/\n.installed.cfg\n*.egg\nMANIFEST\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.nox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n*.py,cover\n.hypothesis/\n.pytest_cache/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\ndb.sqlite3\ndb.sqlite3-journal\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# IPython\nprofile_default/\nipython_config.py\n\n# pyenv\n.python-version\n\n# pipenv\n#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.\n#   However, in case of collaboration, if having platform-specific dependencies or dependencies\n#   having no cross-platform support, pipenv may install dependencies that don't work, or not\n#   install all needed dependencies.\n#Pipfile.lock\n\n# PEP 582; used by e.g. github.com/David-OConnor/pyflow\n__pypackages__/\n\n# Celery stuff\ncelerybeat-schedule\ncelerybeat.pid\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n.dmypy.json\ndmypy.json\n\n# Pyre type checker\n.pyre/\n\n# dumper\nlicense_request.bin\nkey_dumps\n"
  },
  {
    "path": "Helpers/Device.py",
    "content": "import os\nimport logging\nimport base64\nimport frida\nfrom Crypto.PublicKey import RSA\nfrom Helpers.wv_proto2_pb2 import SignedLicenseRequest\n\n\nclass Device:\n    def __init__(self, dynamic_function_name, cdm_version, module_names):\n        self.logger = logging.getLogger(__name__)\n        self.saved_keys = {}\n        self.widevine_libraries = module_names\n        self.usb_device = frida.get_usb_device()\n        self.name = self.usb_device.name\n\n        with open('./Helpers/script.js', 'r', encoding=\"utf_8\") as script:\n            self.frida_script = script.read()\n        self.frida_script = self.frida_script.replace(r'${DYNAMIC_FUNCTION_NAME}', dynamic_function_name)\n        self.frida_script = self.frida_script.replace(r'${CDM_VERSION}', cdm_version)\n\n    def export_key(self, key, client_id):\n        save_dir = os.path.join(\n            'key_dumps',\n            f'{self.name}',\n            'private_keys',\n            f'{client_id.Token._DeviceCertificate.SystemId}',\n            f'{str(key.n)[:10]}'\n        )\n\n        if not os.path.exists(save_dir):\n            os.makedirs(save_dir)\n\n        with open(os.path.join(save_dir, 'client_id.bin'), 'wb+') as writer:\n            writer.write(client_id.SerializeToString())\n\n        with open(os.path.join(save_dir, 'private_key.pem'), 'wb+') as writer:\n            writer.write(key.exportKey('PEM'))\n        self.logger.info('Key pairs saved at %s', save_dir)\n\n    def on_message(self, msg, data):\n        if 'payload' in msg:\n            if msg['payload'] == 'private_key':\n                key = RSA.import_key(data)\n                if key.n not in self.saved_keys:\n                    self.logger.debug(\n                        'Retrieved key: \\n\\n%s\\n',\n                        key.export_key().decode(\"utf-8\")\n                    )\n                self.saved_keys[key.n] = key\n            elif msg['payload'] == 'device_info':\n                self.license_request_message(data)\n            elif msg['payload'] == 'message_info':\n                self.logger.info(data.decode())\n\n    def license_request_message(self, data):\n        self.logger.debug(\n            'Retrieved build info: \\n\\n%s\\n',\n            base64.b64encode(data).decode('utf-8')\n        )\n        root = SignedLicenseRequest()\n        root.ParseFromString(data)\n        public_key = root.Msg.ClientId.Token._DeviceCertificate.PublicKey\n        key = RSA.importKey(public_key)\n        cur = self.saved_keys.get(key.n)\n\n        if cur is not None:\n            self.export_key(cur, root.Msg.ClientId)\n\n    def find_widevine_process(self, process_name):\n        process = self.usb_device.attach(process_name)\n        script = process.create_script(self.frida_script)\n        script.load()\n        loaded_modules = []\n        try:\n            for lib in self.widevine_libraries:\n                try:\n                    loaded_modules.append(script.exports.getmodulebyname(lib))\n                except frida.core.RPCException as e:\n                    # Hide the cases where the module cannot be found\n                    continue\n                except Exception as e:\n                    raise(e)\n        finally:\n            process.detach()\n            return loaded_modules\n\n    def hook_to_process(self, process, library):\n        session = self.usb_device.attach(process)\n        script = session.create_script(self.frida_script)\n        script.on('message', self.on_message)\n        script.load()\n        script.exports.hooklibfunctions(library)\n        return session\n"
  },
  {
    "path": "Helpers/script.js",
    "content": "const DYNAMIC_FUNCTION_NAME = '${DYNAMIC_FUNCTION_NAME}';\r\nconst CDM_VERSION = '${CDM_VERSION}';\r\n\r\n// These strings are function names that have been succesfully dumped.\r\nconst KNOWN_DYNAMIC_FUNCTION_NAMES = [\r\n    'rnmsglvj',\r\n    'polorucp',\r\n    'kqzqahjq',\r\n    'pldrclfq',\r\n    'kgaitijd',\r\n    'dnvffnze',\r\n    'cwkfcplc',\r\n    'crhqcdet'\r\n];\r\n\r\n// The TextEncoder/Decoder API isn't supported so it has to be polyfilled.\r\n// Taken from https://gist.github.com/Yaffle/5458286#file-textencodertextdecoder-js\r\nfunction TextEncoder() {\r\n}\r\n\r\nTextEncoder.prototype.encode = function (string) {\r\n    var octets = [];\r\n    var length = string.length;\r\n    var i = 0;\r\n    while (i < length) {\r\n        var codePoint = string.codePointAt(i);\r\n        var c = 0;\r\n        var bits = 0;\r\n        if (codePoint <= 0x0000007F) {\r\n            c = 0;\r\n            bits = 0x00;\r\n        } else if (codePoint <= 0x000007FF) {\r\n            c = 6;\r\n            bits = 0xC0;\r\n        } else if (codePoint <= 0x0000FFFF) {\r\n            c = 12;\r\n            bits = 0xE0;\r\n        } else if (codePoint <= 0x001FFFFF) {\r\n            c = 18;\r\n            bits = 0xF0;\r\n        }\r\n        octets.push(bits | (codePoint >> c));\r\n        c -= 6;\r\n        while (c >= 0) {\r\n            octets.push(0x80 | ((codePoint >> c) & 0x3F));\r\n            c -= 6;\r\n        }\r\n        i += codePoint >= 0x10000 ? 2 : 1;\r\n    }\r\n    return octets;\r\n}\r\n\r\nfunction getPrivateKey(address) {\r\n    Interceptor.attach(ptr(address), {\r\n        onEnter: function (args) {\r\n            if (!args[6].isNull()) {\r\n                const size = args[6].toInt32();\r\n                if (size >= 1000 && size <= 2000 && !args[5].isNull()) {\r\n                    const buf = args[5].readByteArray(size);\r\n                    const bytes = new Uint8Array(buf);\r\n                    // The first two bytes of the DER encoding are 0x30 and 0x82 (MII).\r\n                    if (bytes[0] === 0x30 && bytes[1] === 0x82) {\r\n                        try {\r\n                            const binaryString = a2bs(bytes)\r\n                            const keyLength = getKeyLength(binaryString);\r\n                            const key = bytes.slice(0, keyLength);\r\n                            send('private_key', key);\r\n                        } catch (error) {\r\n                            console.log(error)\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    });\r\n}\r\n\r\n// nop privacy mode.\r\n// PrivacyMode encrypts the payload with the public key returned by the license server which we don't want.\r\nfunction disablePrivacyMode(address) {\r\n    Interceptor.attach(address, {\r\n        onLeave: function (retval) {\r\n            retval.replace(ptr(0));\r\n        }\r\n    });\r\n}\r\n\r\nfunction prepareKeyRequest(address) {\r\n    Interceptor.attach(ptr(address), {\r\n        onEnter: function (args) {\r\n            switch (CDM_VERSION) {\r\n                case '14.0.0':\r\n                case '15.0.0':\r\n                case '16.0.0':\r\n                    this.ret = args[4];\r\n                    break;\r\n                case '16.1.0':\r\n                case '17.0.0':\r\n                    this.ret = args[5];\r\n                    break;\r\n                default:\r\n                    const message = 'Defaulting to args[4] for PrepareKeyRequest.'\r\n                    send('message_info', new TextEncoder().encode(message));\r\n                    this.ret = args[4];\r\n                    break;\r\n            }\r\n        },\r\n        onLeave: function () {\r\n            if (this.ret) {\r\n                const size = Memory.readU32(ptr(this.ret).add(Process.pointerSize))\r\n                const arr = Memory.readByteArray(this.ret.add(Process.pointerSize * 2).readPointer(), size)\r\n                send('device_info', arr);\r\n            }\r\n        }\r\n    });\r\n}\r\n\r\nfunction hookLibFunctions(lib) {\r\n    const name = lib['name'];\r\n    const baseAddr = lib['base'];\r\n    let message = 'Hooking ' + name + ' at ' + baseAddr;\r\n    let hookedProvidedModule = false;\r\n    let funcNames = [];\r\n\r\n    send('message_info', new TextEncoder().encode(message));\r\n\r\n    Module.enumerateExportsSync(name).forEach(function (module) {\r\n        try {\r\n            let hookedModule;\r\n            if (module.name.includes('UsePrivacyMode')) {\r\n                disablePrivacyMode(module.address);\r\n                hookedModule = module.name;\r\n            } else if (module.name.includes('PrepareKeyRequest')) {\r\n                prepareKeyRequest(module.address);\r\n                hookedModule = module.name;\r\n            } else if (DYNAMIC_FUNCTION_NAME !== '' && module.name.includes(DYNAMIC_FUNCTION_NAME)) {\r\n                getPrivateKey(module.address);\r\n                hookedModule = module.name;\r\n                hookedProvidedModule = true;\r\n            } else if (DYNAMIC_FUNCTION_NAME === '' && module.name.match(/^[a-z]+$/)) {\r\n                getPrivateKey(module.address);\r\n                hookedModule = module.name;\r\n                funcNames.push(hookedModule);\r\n            }\r\n\r\n            if (hookedModule) {\r\n                const message = 'Hooked ' + hookedModule + ' at ' + module.address;\r\n                send('message_info', new TextEncoder().encode(message));\r\n            }\r\n        } catch (e) {\r\n            console.log(\"Error: \" + e + \" at F: \" + module.name);\r\n        }\r\n    });\r\n\r\n    if (DYNAMIC_FUNCTION_NAME !== '' && !hookedProvidedModule) {\r\n        const message = \"Unable to find '\" + DYNAMIC_FUNCTION_NAME + \"'\";\r\n        send('message_info', new TextEncoder().encode(message));\r\n    }\r\n\r\n    if (DYNAMIC_FUNCTION_NAME === '') {\r\n        const possibleFuncNames = KNOWN_DYNAMIC_FUNCTION_NAMES.filter(x => funcNames.includes(x));\r\n        if (possibleFuncNames.length) {\r\n            message = \"Your function name is most likely: \" + \"'\" + possibleFuncNames.join('\\', \\'') + \"'\";\r\n            send('message_info', new TextEncoder().encode(message));\r\n        }\r\n    }\r\n}\r\n\r\nfunction getModuleByName(lib) {\r\n    return Process.getModuleByName(lib);\r\n}\r\n\r\nfunction a2bs(bytes) {\r\n    let b = '';\r\n    for (let i = 0; i < bytes.byteLength; i++)\r\n        b += String.fromCharCode(bytes[i]);\r\n    return b\r\n}\r\n\r\nfunction getKeyLength(key) {\r\n    let pos = 1 // Skip the tag\r\n    let buf = key.charCodeAt(pos++);\r\n    let len = buf & 0x7F; // Short tag length\r\n\r\n    buf = 0;\r\n    for (let i = 0; i < len; ++i)\r\n        buf = (buf * 256) + key.charCodeAt(pos++);\r\n    return pos + Math.abs(buf);\r\n}\r\n\r\nrpc.exports.hooklibfunctions = hookLibFunctions;\r\nrpc.exports.getmodulebyname = getModuleByName;\r\n"
  },
  {
    "path": "Helpers/wv_proto2_pb2.py",
    "content": "# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: pywidevine/cdm/formats/wv_proto2.proto\n\nimport sys\n_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\nfrom google.protobuf import descriptor_pb2\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor.FileDescriptor(\n  name='pywidevine/cdm/formats/wv_proto2.proto',\n  package='',\n  syntax='proto2',\n  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')\n)\n_sym_db.RegisterFileDescriptor(DESCRIPTOR)\n\n_LICENSETYPE = _descriptor.EnumDescriptor(\n  name='LicenseType',\n  full_name='LicenseType',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='ZERO', index=0, number=0,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='DEFAULT', index=1, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='OFFLINE', index=2, number=2,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=8362,\n  serialized_end=8411,\n)\n_sym_db.RegisterEnumDescriptor(_LICENSETYPE)\n\nLicenseType = enum_type_wrapper.EnumTypeWrapper(_LICENSETYPE)\n_PROTOCOLVERSION = _descriptor.EnumDescriptor(\n  name='ProtocolVersion',\n  full_name='ProtocolVersion',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='CURRENT', index=0, number=21,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=8413,\n  serialized_end=8443,\n)\n_sym_db.RegisterEnumDescriptor(_PROTOCOLVERSION)\n\nProtocolVersion = enum_type_wrapper.EnumTypeWrapper(_PROTOCOLVERSION)\nZERO = 0\nDEFAULT = 1\nOFFLINE = 2\nCURRENT = 21\n\n\n_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION = _descriptor.EnumDescriptor(\n  name='HdcpVersion',\n  full_name='ClientIdentification.ClientCapabilities.HdcpVersion',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='HDCP_NONE', index=0, number=0,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='HDCP_V1', index=1, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='HDCP_V2', index=2, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='HDCP_V2_1', index=3, number=3,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='HDCP_V2_2', index=4, number=4,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=617,\n  serialized_end=701,\n)\n_sym_db.RegisterEnumDescriptor(_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION)\n\n_CLIENTIDENTIFICATION_TOKENTYPE = _descriptor.EnumDescriptor(\n  name='TokenType',\n  full_name='ClientIdentification.TokenType',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='KEYBOX', index=0, number=0,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='DEVICE_CERTIFICATE', index=1, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='REMOTE_ATTESTATION_CERTIFICATE', index=2, number=2,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=703,\n  serialized_end=786,\n)\n_sym_db.RegisterEnumDescriptor(_CLIENTIDENTIFICATION_TOKENTYPE)\n\n_DEVICECERTIFICATE_CERTIFICATETYPE = _descriptor.EnumDescriptor(\n  name='CertificateType',\n  full_name='DeviceCertificate.CertificateType',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='ROOT', index=0, number=0,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='INTERMEDIATE', index=1, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='USER_DEVICE', index=2, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE', index=3, number=3,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=997,\n  serialized_end=1072,\n)\n_sym_db.RegisterEnumDescriptor(_DEVICECERTIFICATE_CERTIFICATETYPE)\n\n_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS = _descriptor.EnumDescriptor(\n  name='CertificateStatus',\n  full_name='DeviceCertificateStatus.CertificateStatus',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='VALID', index=0, number=0,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='REVOKED', index=1, number=1,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=1228,\n  serialized_end=1271,\n)\n_sym_db.RegisterEnumDescriptor(_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS)\n\n_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS = _descriptor.EnumDescriptor(\n  name='CGMS',\n  full_name='License.KeyContainer.OutputProtection.CGMS',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='COPY_FREE', index=0, number=0,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='COPY_ONCE', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='COPY_NEVER', index=2, number=3,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='CGMS_NONE', index=3, number=42,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=2949,\n  serialized_end=3016,\n)\n_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS)\n\n_LICENSE_KEYCONTAINER_KEYTYPE = _descriptor.EnumDescriptor(\n  name='KeyType',\n  full_name='License.KeyContainer.KeyType',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='SIGNING', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='CONTENT', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='KEY_CONTROL', index=2, number=3,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='OPERATOR_SESSION', index=3, number=4,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=3351,\n  serialized_end=3425,\n)\n_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_KEYTYPE)\n\n_LICENSE_KEYCONTAINER_SECURITYLEVEL = _descriptor.EnumDescriptor(\n  name='SecurityLevel',\n  full_name='License.KeyContainer.SecurityLevel',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='SW_SECURE_CRYPTO', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SW_SECURE_DECODE', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='HW_SECURE_CRYPTO', index=2, number=3,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='HW_SECURE_DECODE', index=3, number=4,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='HW_SECURE_ALL', index=4, number=5,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=3427,\n  serialized_end=3549,\n)\n_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_SECURITYLEVEL)\n\n_LICENSEERROR_ERROR = _descriptor.EnumDescriptor(\n  name='Error',\n  full_name='LicenseError.Error',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='INVALID_DEVICE_CERTIFICATE', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='REVOKED_DEVICE_CERTIFICATE', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE_UNAVAILABLE', index=2, number=3,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=3608,\n  serialized_end=3704,\n)\n_sym_db.RegisterEnumDescriptor(_LICENSEERROR_ERROR)\n\n_LICENSEREQUEST_REQUESTTYPE = _descriptor.EnumDescriptor(\n  name='RequestType',\n  full_name='LicenseRequest.RequestType',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='NEW', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='RENEWAL', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='RELEASE', index=2, number=3,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=4599,\n  serialized_end=4647,\n)\n_sym_db.RegisterEnumDescriptor(_LICENSEREQUEST_REQUESTTYPE)\n\n_LICENSEREQUESTRAW_REQUESTTYPE = _descriptor.EnumDescriptor(\n  name='RequestType',\n  full_name='LicenseRequestRaw.RequestType',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='NEW', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='RENEWAL', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='RELEASE', index=2, number=3,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=4599,\n  serialized_end=4647,\n)\n_sym_db.RegisterEnumDescriptor(_LICENSEREQUESTRAW_REQUESTTYPE)\n\n_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL = _descriptor.EnumDescriptor(\n  name='WvSecurityLevel',\n  full_name='ProvisionedDeviceInfo.WvSecurityLevel',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='LEVEL_UNSPECIFIED', index=0, number=0,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='LEVEL_1', index=1, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='LEVEL_2', index=2, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='LEVEL_3', index=3, number=3,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=5805,\n  serialized_end=5884,\n)\n_sym_db.RegisterEnumDescriptor(_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL)\n\n_SIGNEDMESSAGE_MESSAGETYPE = _descriptor.EnumDescriptor(\n  name='MessageType',\n  full_name='SignedMessage.MessageType',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='LICENSE_REQUEST', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='LICENSE', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='ERROR_RESPONSE', index=2, number=3,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE_CERTIFICATE', index=4, number=5,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=6450,\n  serialized_end=6575,\n)\n_sym_db.RegisterEnumDescriptor(_SIGNEDMESSAGE_MESSAGETYPE)\n\n_WIDEVINECENCHEADER_ALGORITHM = _descriptor.EnumDescriptor(\n  name='Algorithm',\n  full_name='WidevineCencHeader.Algorithm',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='UNENCRYPTED', index=0, number=0,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='AESCTR', index=1, number=1,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=6863,\n  serialized_end=6903,\n)\n_sym_db.RegisterEnumDescriptor(_WIDEVINECENCHEADER_ALGORITHM)\n\n_SIGNEDLICENSEREQUEST_MESSAGETYPE = _descriptor.EnumDescriptor(\n  name='MessageType',\n  full_name='SignedLicenseRequest.MessageType',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='LICENSE_REQUEST', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='LICENSE', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='ERROR_RESPONSE', index=2, number=3,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE_CERTIFICATE', index=4, number=5,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=6450,\n  serialized_end=6575,\n)\n_sym_db.RegisterEnumDescriptor(_SIGNEDLICENSEREQUEST_MESSAGETYPE)\n\n_SIGNEDLICENSEREQUESTRAW_MESSAGETYPE = _descriptor.EnumDescriptor(\n  name='MessageType',\n  full_name='SignedLicenseRequestRaw.MessageType',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='LICENSE_REQUEST', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='LICENSE', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='ERROR_RESPONSE', index=2, number=3,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE_CERTIFICATE', index=4, number=5,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=6450,\n  serialized_end=6575,\n)\n_sym_db.RegisterEnumDescriptor(_SIGNEDLICENSEREQUESTRAW_MESSAGETYPE)\n\n_SIGNEDLICENSE_MESSAGETYPE = _descriptor.EnumDescriptor(\n  name='MessageType',\n  full_name='SignedLicense.MessageType',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='LICENSE_REQUEST', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='LICENSE', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='ERROR_RESPONSE', index=2, number=3,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE_CERTIFICATE', index=4, number=5,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=6450,\n  serialized_end=6575,\n)\n_sym_db.RegisterEnumDescriptor(_SIGNEDLICENSE_MESSAGETYPE)\n\n_SIGNEDSERVICECERTIFICATE_MESSAGETYPE = _descriptor.EnumDescriptor(\n  name='MessageType',\n  full_name='SignedServiceCertificate.MessageType',\n  filename=None,\n  file=DESCRIPTOR,\n  values=[\n    _descriptor.EnumValueDescriptor(\n      name='LICENSE_REQUEST', index=0, number=1,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='LICENSE', index=1, number=2,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='ERROR_RESPONSE', index=2, number=3,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4,\n      options=None,\n      type=None),\n    _descriptor.EnumValueDescriptor(\n      name='SERVICE_CERTIFICATE', index=4, number=5,\n      options=None,\n      type=None),\n  ],\n  containing_type=None,\n  options=None,\n  serialized_start=6450,\n  serialized_end=6575,\n)\n_sym_db.RegisterEnumDescriptor(_SIGNEDSERVICECERTIFICATE_MESSAGETYPE)\n\n\n_CLIENTIDENTIFICATION_NAMEVALUE = _descriptor.Descriptor(\n  name='NameValue',\n  full_name='ClientIdentification.NameValue',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Name', full_name='ClientIdentification.NameValue.Name', index=0,\n      number=1, type=9, cpp_type=9, label=2,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Value', full_name='ClientIdentification.NameValue.Value', index=1,\n      number=2, type=9, cpp_type=9, label=2,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=366,\n  serialized_end=406,\n)\n\n_CLIENTIDENTIFICATION_CLIENTCAPABILITIES = _descriptor.Descriptor(\n  name='ClientCapabilities',\n  full_name='ClientIdentification.ClientCapabilities',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='ClientToken', full_name='ClientIdentification.ClientCapabilities.ClientToken', index=0,\n      number=1, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SessionToken', full_name='ClientIdentification.ClientCapabilities.SessionToken', index=1,\n      number=2, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='VideoResolutionConstraints', full_name='ClientIdentification.ClientCapabilities.VideoResolutionConstraints', index=2,\n      number=3, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='MaxHdcpVersion', full_name='ClientIdentification.ClientCapabilities.MaxHdcpVersion', index=3,\n      number=4, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='OemCryptoApiVersion', full_name='ClientIdentification.ClientCapabilities.OemCryptoApiVersion', index=4,\n      number=5, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=409,\n  serialized_end=701,\n)\n\n_CLIENTIDENTIFICATION = _descriptor.Descriptor(\n  name='ClientIdentification',\n  full_name='ClientIdentification',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Type', full_name='ClientIdentification.Type', index=0,\n      number=1, type=14, cpp_type=8, label=2,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Token', full_name='ClientIdentification.Token', index=1,\n      number=2, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ClientInfo', full_name='ClientIdentification.ClientInfo', index=2,\n      number=3, type=11, cpp_type=10, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ProviderClientToken', full_name='ClientIdentification.ProviderClientToken', index=3,\n      number=4, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='LicenseCounter', full_name='ClientIdentification.LicenseCounter', index=4,\n      number=5, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='_ClientCapabilities', full_name='ClientIdentification._ClientCapabilities', index=5,\n      number=6, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='_FileHashes', full_name='ClientIdentification._FileHashes', index=6,\n      number=7, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[_CLIENTIDENTIFICATION_NAMEVALUE, _CLIENTIDENTIFICATION_CLIENTCAPABILITIES, ],\n  enum_types=[\n    _CLIENTIDENTIFICATION_TOKENTYPE,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=43,\n  serialized_end=786,\n)\n\n\n_DEVICECERTIFICATE = _descriptor.Descriptor(\n  name='DeviceCertificate',\n  full_name='DeviceCertificate',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Type', full_name='DeviceCertificate.Type', index=0,\n      number=1, type=14, cpp_type=8, label=2,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SerialNumber', full_name='DeviceCertificate.SerialNumber', index=1,\n      number=2, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='CreationTimeSeconds', full_name='DeviceCertificate.CreationTimeSeconds', index=2,\n      number=3, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='PublicKey', full_name='DeviceCertificate.PublicKey', index=3,\n      number=4, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SystemId', full_name='DeviceCertificate.SystemId', index=4,\n      number=5, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='TestDeviceDeprecated', full_name='DeviceCertificate.TestDeviceDeprecated', index=5,\n      number=6, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ServiceId', full_name='DeviceCertificate.ServiceId', index=6,\n      number=7, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _DEVICECERTIFICATE_CERTIFICATETYPE,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=789,\n  serialized_end=1072,\n)\n\n\n_DEVICECERTIFICATESTATUS = _descriptor.Descriptor(\n  name='DeviceCertificateStatus',\n  full_name='DeviceCertificateStatus',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='SerialNumber', full_name='DeviceCertificateStatus.SerialNumber', index=0,\n      number=1, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Status', full_name='DeviceCertificateStatus.Status', index=1,\n      number=2, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='DeviceInfo', full_name='DeviceCertificateStatus.DeviceInfo', index=2,\n      number=4, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _DEVICECERTIFICATESTATUS_CERTIFICATESTATUS,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=1075,\n  serialized_end=1271,\n)\n\n\n_DEVICECERTIFICATESTATUSLIST = _descriptor.Descriptor(\n  name='DeviceCertificateStatusList',\n  full_name='DeviceCertificateStatusList',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='CreationTimeSeconds', full_name='DeviceCertificateStatusList.CreationTimeSeconds', index=0,\n      number=1, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='CertificateStatus', full_name='DeviceCertificateStatusList.CertificateStatus', index=1,\n      number=2, type=11, cpp_type=10, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=1273,\n  serialized_end=1384,\n)\n\n\n_ENCRYPTEDCLIENTIDENTIFICATION = _descriptor.Descriptor(\n  name='EncryptedClientIdentification',\n  full_name='EncryptedClientIdentification',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='ServiceId', full_name='EncryptedClientIdentification.ServiceId', index=0,\n      number=1, type=9, cpp_type=9, label=2,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ServiceCertificateSerialNumber', full_name='EncryptedClientIdentification.ServiceCertificateSerialNumber', index=1,\n      number=2, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='EncryptedClientId', full_name='EncryptedClientIdentification.EncryptedClientId', index=2,\n      number=3, type=12, cpp_type=9, label=2,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='EncryptedClientIdIv', full_name='EncryptedClientIdentification.EncryptedClientIdIv', index=3,\n      number=4, type=12, cpp_type=9, label=2,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='EncryptedPrivacyKey', full_name='EncryptedClientIdentification.EncryptedPrivacyKey', index=4,\n      number=5, type=12, cpp_type=9, label=2,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=1387,\n  serialized_end=1562,\n)\n\n\n_LICENSEIDENTIFICATION = _descriptor.Descriptor(\n  name='LicenseIdentification',\n  full_name='LicenseIdentification',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='RequestId', full_name='LicenseIdentification.RequestId', index=0,\n      number=1, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SessionId', full_name='LicenseIdentification.SessionId', index=1,\n      number=2, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='PurchaseId', full_name='LicenseIdentification.PurchaseId', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Type', full_name='LicenseIdentification.Type', index=3,\n      number=4, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Version', full_name='LicenseIdentification.Version', index=4,\n      number=5, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ProviderSessionToken', full_name='LicenseIdentification.ProviderSessionToken', index=5,\n      number=6, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=1565,\n  serialized_end=1721,\n)\n\n\n_LICENSE_POLICY = _descriptor.Descriptor(\n  name='Policy',\n  full_name='License.Policy',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='CanPlay', full_name='License.Policy.CanPlay', index=0,\n      number=1, type=8, cpp_type=7, label=1,\n      has_default_value=False, default_value=False,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='CanPersist', full_name='License.Policy.CanPersist', index=1,\n      number=2, type=8, cpp_type=7, label=1,\n      has_default_value=False, default_value=False,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='CanRenew', full_name='License.Policy.CanRenew', index=2,\n      number=3, type=8, cpp_type=7, label=1,\n      has_default_value=False, default_value=False,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RentalDurationSeconds', full_name='License.Policy.RentalDurationSeconds', index=3,\n      number=4, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='PlaybackDurationSeconds', full_name='License.Policy.PlaybackDurationSeconds', index=4,\n      number=5, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='LicenseDurationSeconds', full_name='License.Policy.LicenseDurationSeconds', index=5,\n      number=6, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RenewalRecoveryDurationSeconds', full_name='License.Policy.RenewalRecoveryDurationSeconds', index=6,\n      number=7, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RenewalServerUrl', full_name='License.Policy.RenewalServerUrl', index=7,\n      number=8, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RenewalDelaySeconds', full_name='License.Policy.RenewalDelaySeconds', index=8,\n      number=9, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RenewalRetryIntervalSeconds', full_name='License.Policy.RenewalRetryIntervalSeconds', index=9,\n      number=10, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RenewWithUsage', full_name='License.Policy.RenewWithUsage', index=10,\n      number=11, type=8, cpp_type=7, label=1,\n      has_default_value=False, default_value=False,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=1958,\n  serialized_end=2273,\n)\n\n_LICENSE_KEYCONTAINER_OUTPUTPROTECTION = _descriptor.Descriptor(\n  name='OutputProtection',\n  full_name='License.KeyContainer.OutputProtection',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Hdcp', full_name='License.KeyContainer.OutputProtection.Hdcp', index=0,\n      number=1, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='CgmsFlags', full_name='License.KeyContainer.OutputProtection.CgmsFlags', index=1,\n      number=2, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=2797,\n  serialized_end=3016,\n)\n\n_LICENSE_KEYCONTAINER_KEYCONTROL = _descriptor.Descriptor(\n  name='KeyControl',\n  full_name='License.KeyContainer.KeyControl',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='KeyControlBlock', full_name='License.KeyContainer.KeyControl.KeyControlBlock', index=0,\n      number=1, type=12, cpp_type=9, label=2,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Iv', full_name='License.KeyContainer.KeyControl.Iv', index=1,\n      number=2, type=12, cpp_type=9, label=2,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=3018,\n  serialized_end=3067,\n)\n\n_LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS = _descriptor.Descriptor(\n  name='OperatorSessionKeyPermissions',\n  full_name='License.KeyContainer.OperatorSessionKeyPermissions',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='AllowEncrypt', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowEncrypt', index=0,\n      number=1, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='AllowDecrypt', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowDecrypt', index=1,\n      number=2, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='AllowSign', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowSign', index=2,\n      number=3, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='AllowSignatureVerify', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowSignatureVerify', index=3,\n      number=4, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=3069,\n  serialized_end=3193,\n)\n\n_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT = _descriptor.Descriptor(\n  name='VideoResolutionConstraint',\n  full_name='License.KeyContainer.VideoResolutionConstraint',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='MinResolutionPixels', full_name='License.KeyContainer.VideoResolutionConstraint.MinResolutionPixels', index=0,\n      number=1, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='MaxResolutionPixels', full_name='License.KeyContainer.VideoResolutionConstraint.MaxResolutionPixels', index=1,\n      number=2, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RequiredProtection', full_name='License.KeyContainer.VideoResolutionConstraint.RequiredProtection', index=2,\n      number=3, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=3196,\n  serialized_end=3349,\n)\n\n_LICENSE_KEYCONTAINER = _descriptor.Descriptor(\n  name='KeyContainer',\n  full_name='License.KeyContainer',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Id', full_name='License.KeyContainer.Id', index=0,\n      number=1, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Iv', full_name='License.KeyContainer.Iv', index=1,\n      number=2, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Key', full_name='License.KeyContainer.Key', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Type', full_name='License.KeyContainer.Type', index=3,\n      number=4, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Level', full_name='License.KeyContainer.Level', index=4,\n      number=5, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RequiredProtection', full_name='License.KeyContainer.RequiredProtection', index=5,\n      number=6, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RequestedProtection', full_name='License.KeyContainer.RequestedProtection', index=6,\n      number=7, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='_KeyControl', full_name='License.KeyContainer._KeyControl', index=7,\n      number=8, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='_OperatorSessionKeyPermissions', full_name='License.KeyContainer._OperatorSessionKeyPermissions', index=8,\n      number=9, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='VideoResolutionConstraints', full_name='License.KeyContainer.VideoResolutionConstraints', index=9,\n      number=10, type=11, cpp_type=10, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[_LICENSE_KEYCONTAINER_OUTPUTPROTECTION, _LICENSE_KEYCONTAINER_KEYCONTROL, _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS, _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT, ],\n  enum_types=[\n    _LICENSE_KEYCONTAINER_KEYTYPE,\n    _LICENSE_KEYCONTAINER_SECURITYLEVEL,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=2276,\n  serialized_end=3549,\n)\n\n_LICENSE = _descriptor.Descriptor(\n  name='License',\n  full_name='License',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Id', full_name='License.Id', index=0,\n      number=1, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='_Policy', full_name='License._Policy', index=1,\n      number=2, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Key', full_name='License.Key', index=2,\n      number=3, type=11, cpp_type=10, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='LicenseStartTime', full_name='License.LicenseStartTime', index=3,\n      number=4, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RemoteAttestationVerified', full_name='License.RemoteAttestationVerified', index=4,\n      number=5, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ProviderClientToken', full_name='License.ProviderClientToken', index=5,\n      number=6, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ProtectionScheme', full_name='License.ProtectionScheme', index=6,\n      number=7, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[_LICENSE_POLICY, _LICENSE_KEYCONTAINER, ],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=1724,\n  serialized_end=3549,\n)\n\n\n_LICENSEERROR = _descriptor.Descriptor(\n  name='LicenseError',\n  full_name='LicenseError',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='ErrorCode', full_name='LicenseError.ErrorCode', index=0,\n      number=1, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _LICENSEERROR_ERROR,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=3552,\n  serialized_end=3704,\n)\n\n\n_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC = _descriptor.Descriptor(\n  name='CENC',\n  full_name='LicenseRequest.ContentIdentification.CENC',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Pssh', full_name='LicenseRequest.ContentIdentification.CENC.Pssh', index=0,\n      number=1, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='LicenseType', full_name='LicenseRequest.ContentIdentification.CENC.LicenseType', index=1,\n      number=2, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RequestId', full_name='LicenseRequest.ContentIdentification.CENC.RequestId', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=4268,\n  serialized_end=4363,\n)\n\n_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM = _descriptor.Descriptor(\n  name='WebM',\n  full_name='LicenseRequest.ContentIdentification.WebM',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Header', full_name='LicenseRequest.ContentIdentification.WebM.Header', index=0,\n      number=1, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='LicenseType', full_name='LicenseRequest.ContentIdentification.WebM.LicenseType', index=1,\n      number=2, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RequestId', full_name='LicenseRequest.ContentIdentification.WebM.RequestId', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=4365,\n  serialized_end=4441,\n)\n\n_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE = _descriptor.Descriptor(\n  name='ExistingLicense',\n  full_name='LicenseRequest.ContentIdentification.ExistingLicense',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='LicenseId', full_name='LicenseRequest.ContentIdentification.ExistingLicense.LicenseId', index=0,\n      number=1, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SecondsSinceStarted', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SecondsSinceStarted', index=1,\n      number=2, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SecondsSinceLastPlayed', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SecondsSinceLastPlayed', index=2,\n      number=3, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SessionUsageTableEntry', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SessionUsageTableEntry', index=3,\n      number=4, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=4444,\n  serialized_end=4597,\n)\n\n_LICENSEREQUEST_CONTENTIDENTIFICATION = _descriptor.Descriptor(\n  name='ContentIdentification',\n  full_name='LicenseRequest.ContentIdentification',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='CencId', full_name='LicenseRequest.ContentIdentification.CencId', index=0,\n      number=1, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='WebmId', full_name='LicenseRequest.ContentIdentification.WebmId', index=1,\n      number=2, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='License', full_name='LicenseRequest.ContentIdentification.License', index=2,\n      number=3, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC, _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM, _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE, ],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=4051,\n  serialized_end=4597,\n)\n\n_LICENSEREQUEST = _descriptor.Descriptor(\n  name='LicenseRequest',\n  full_name='LicenseRequest',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='ClientId', full_name='LicenseRequest.ClientId', index=0,\n      number=1, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ContentId', full_name='LicenseRequest.ContentId', index=1,\n      number=2, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Type', full_name='LicenseRequest.Type', index=2,\n      number=3, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RequestTime', full_name='LicenseRequest.RequestTime', index=3,\n      number=4, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='KeyControlNonceDeprecated', full_name='LicenseRequest.KeyControlNonceDeprecated', index=4,\n      number=5, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ProtocolVersion', full_name='LicenseRequest.ProtocolVersion', index=5,\n      number=6, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=21,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='KeyControlNonce', full_name='LicenseRequest.KeyControlNonce', index=6,\n      number=7, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='EncryptedClientId', full_name='LicenseRequest.EncryptedClientId', index=7,\n      number=8, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[_LICENSEREQUEST_CONTENTIDENTIFICATION, ],\n  enum_types=[\n    _LICENSEREQUEST_REQUESTTYPE,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=3707,\n  serialized_end=4647,\n)\n\n\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC = _descriptor.Descriptor(\n  name='CENC',\n  full_name='LicenseRequestRaw.ContentIdentification.CENC',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Pssh', full_name='LicenseRequestRaw.ContentIdentification.CENC.Pssh', index=0,\n      number=1, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='LicenseType', full_name='LicenseRequestRaw.ContentIdentification.CENC.LicenseType', index=1,\n      number=2, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RequestId', full_name='LicenseRequestRaw.ContentIdentification.CENC.RequestId', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=5229,\n  serialized_end=5303,\n)\n\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM = _descriptor.Descriptor(\n  name='WebM',\n  full_name='LicenseRequestRaw.ContentIdentification.WebM',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Header', full_name='LicenseRequestRaw.ContentIdentification.WebM.Header', index=0,\n      number=1, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='LicenseType', full_name='LicenseRequestRaw.ContentIdentification.WebM.LicenseType', index=1,\n      number=2, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RequestId', full_name='LicenseRequestRaw.ContentIdentification.WebM.RequestId', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=4365,\n  serialized_end=4441,\n)\n\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE = _descriptor.Descriptor(\n  name='ExistingLicense',\n  full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='LicenseId', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.LicenseId', index=0,\n      number=1, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SecondsSinceStarted', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.SecondsSinceStarted', index=1,\n      number=2, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SecondsSinceLastPlayed', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.SecondsSinceLastPlayed', index=2,\n      number=3, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SessionUsageTableEntry', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.SessionUsageTableEntry', index=3,\n      number=4, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=4444,\n  serialized_end=4597,\n)\n\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION = _descriptor.Descriptor(\n  name='ContentIdentification',\n  full_name='LicenseRequestRaw.ContentIdentification',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='CencId', full_name='LicenseRequestRaw.ContentIdentification.CencId', index=0,\n      number=1, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='WebmId', full_name='LicenseRequestRaw.ContentIdentification.WebmId', index=1,\n      number=2, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='License', full_name='LicenseRequestRaw.ContentIdentification.License', index=2,\n      number=3, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC, _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM, _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE, ],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=5003,\n  serialized_end=5537,\n)\n\n_LICENSEREQUESTRAW = _descriptor.Descriptor(\n  name='LicenseRequestRaw',\n  full_name='LicenseRequestRaw',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='ClientId', full_name='LicenseRequestRaw.ClientId', index=0,\n      number=1, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ContentId', full_name='LicenseRequestRaw.ContentId', index=1,\n      number=2, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Type', full_name='LicenseRequestRaw.Type', index=2,\n      number=3, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RequestTime', full_name='LicenseRequestRaw.RequestTime', index=3,\n      number=4, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='KeyControlNonceDeprecated', full_name='LicenseRequestRaw.KeyControlNonceDeprecated', index=4,\n      number=5, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ProtocolVersion', full_name='LicenseRequestRaw.ProtocolVersion', index=5,\n      number=6, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=21,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='KeyControlNonce', full_name='LicenseRequestRaw.KeyControlNonce', index=6,\n      number=7, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='EncryptedClientId', full_name='LicenseRequestRaw.EncryptedClientId', index=7,\n      number=8, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[_LICENSEREQUESTRAW_CONTENTIDENTIFICATION, ],\n  enum_types=[\n    _LICENSEREQUESTRAW_REQUESTTYPE,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=4650,\n  serialized_end=5587,\n)\n\n\n_PROVISIONEDDEVICEINFO = _descriptor.Descriptor(\n  name='ProvisionedDeviceInfo',\n  full_name='ProvisionedDeviceInfo',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='SystemId', full_name='ProvisionedDeviceInfo.SystemId', index=0,\n      number=1, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Soc', full_name='ProvisionedDeviceInfo.Soc', index=1,\n      number=2, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Manufacturer', full_name='ProvisionedDeviceInfo.Manufacturer', index=2,\n      number=3, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Model', full_name='ProvisionedDeviceInfo.Model', index=3,\n      number=4, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='DeviceType', full_name='ProvisionedDeviceInfo.DeviceType', index=4,\n      number=5, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='ModelYear', full_name='ProvisionedDeviceInfo.ModelYear', index=5,\n      number=6, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SecurityLevel', full_name='ProvisionedDeviceInfo.SecurityLevel', index=6,\n      number=7, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='TestDevice', full_name='ProvisionedDeviceInfo.TestDevice', index=7,\n      number=8, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _PROVISIONEDDEVICEINFO_WVSECURITYLEVEL,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=5590,\n  serialized_end=5884,\n)\n\n\n_PROVISIONINGOPTIONS = _descriptor.Descriptor(\n  name='ProvisioningOptions',\n  full_name='ProvisioningOptions',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=5886,\n  serialized_end=5907,\n)\n\n\n_PROVISIONINGREQUEST = _descriptor.Descriptor(\n  name='ProvisioningRequest',\n  full_name='ProvisioningRequest',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=5909,\n  serialized_end=5930,\n)\n\n\n_PROVISIONINGRESPONSE = _descriptor.Descriptor(\n  name='ProvisioningResponse',\n  full_name='ProvisioningResponse',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=5932,\n  serialized_end=5954,\n)\n\n\n_REMOTEATTESTATION = _descriptor.Descriptor(\n  name='RemoteAttestation',\n  full_name='RemoteAttestation',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Certificate', full_name='RemoteAttestation.Certificate', index=0,\n      number=1, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Salt', full_name='RemoteAttestation.Salt', index=1,\n      number=2, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Signature', full_name='RemoteAttestation.Signature', index=2,\n      number=3, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=5956,\n  serialized_end=6061,\n)\n\n\n_SESSIONINIT = _descriptor.Descriptor(\n  name='SessionInit',\n  full_name='SessionInit',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=6063,\n  serialized_end=6076,\n)\n\n\n_SESSIONSTATE = _descriptor.Descriptor(\n  name='SessionState',\n  full_name='SessionState',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=6078,\n  serialized_end=6092,\n)\n\n\n_SIGNEDCERTIFICATESTATUSLIST = _descriptor.Descriptor(\n  name='SignedCertificateStatusList',\n  full_name='SignedCertificateStatusList',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=6094,\n  serialized_end=6123,\n)\n\n\n_SIGNEDDEVICECERTIFICATE = _descriptor.Descriptor(\n  name='SignedDeviceCertificate',\n  full_name='SignedDeviceCertificate',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='_DeviceCertificate', full_name='SignedDeviceCertificate._DeviceCertificate', index=0,\n      number=1, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Signature', full_name='SignedDeviceCertificate.Signature', index=1,\n      number=2, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Signer', full_name='SignedDeviceCertificate.Signer', index=2,\n      number=3, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=6126,\n  serialized_end=6260,\n)\n\n\n_SIGNEDPROVISIONINGMESSAGE = _descriptor.Descriptor(\n  name='SignedProvisioningMessage',\n  full_name='SignedProvisioningMessage',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=6262,\n  serialized_end=6289,\n)\n\n\n_SIGNEDMESSAGE = _descriptor.Descriptor(\n  name='SignedMessage',\n  full_name='SignedMessage',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Type', full_name='SignedMessage.Type', index=0,\n      number=1, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Msg', full_name='SignedMessage.Msg', index=1,\n      number=2, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Signature', full_name='SignedMessage.Signature', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SessionKey', full_name='SignedMessage.SessionKey', index=3,\n      number=4, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RemoteAttestation', full_name='SignedMessage.RemoteAttestation', index=4,\n      number=5, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _SIGNEDMESSAGE_MESSAGETYPE,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=6292,\n  serialized_end=6575,\n)\n\n\n_WIDEVINECENCHEADER = _descriptor.Descriptor(\n  name='WidevineCencHeader',\n  full_name='WidevineCencHeader',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='algorithm', full_name='WidevineCencHeader.algorithm', index=0,\n      number=1, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='key_id', full_name='WidevineCencHeader.key_id', index=1,\n      number=2, type=12, cpp_type=9, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='provider', full_name='WidevineCencHeader.provider', index=2,\n      number=3, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='content_id', full_name='WidevineCencHeader.content_id', index=3,\n      number=4, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='track_type_deprecated', full_name='WidevineCencHeader.track_type_deprecated', index=4,\n      number=5, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='policy', full_name='WidevineCencHeader.policy', index=5,\n      number=6, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='crypto_period_index', full_name='WidevineCencHeader.crypto_period_index', index=6,\n      number=7, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='grouped_license', full_name='WidevineCencHeader.grouped_license', index=7,\n      number=8, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='protection_scheme', full_name='WidevineCencHeader.protection_scheme', index=8,\n      number=9, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='crypto_period_seconds', full_name='WidevineCencHeader.crypto_period_seconds', index=9,\n      number=10, type=13, cpp_type=3, label=1,\n      has_default_value=False, default_value=0,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _WIDEVINECENCHEADER_ALGORITHM,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=6578,\n  serialized_end=6903,\n)\n\n\n_SIGNEDLICENSEREQUEST = _descriptor.Descriptor(\n  name='SignedLicenseRequest',\n  full_name='SignedLicenseRequest',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Type', full_name='SignedLicenseRequest.Type', index=0,\n      number=1, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Msg', full_name='SignedLicenseRequest.Msg', index=1,\n      number=2, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Signature', full_name='SignedLicenseRequest.Signature', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SessionKey', full_name='SignedLicenseRequest.SessionKey', index=3,\n      number=4, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RemoteAttestation', full_name='SignedLicenseRequest.RemoteAttestation', index=4,\n      number=5, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _SIGNEDLICENSEREQUEST_MESSAGETYPE,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=6906,\n  serialized_end=7220,\n)\n\n\n_SIGNEDLICENSEREQUESTRAW = _descriptor.Descriptor(\n  name='SignedLicenseRequestRaw',\n  full_name='SignedLicenseRequestRaw',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Type', full_name='SignedLicenseRequestRaw.Type', index=0,\n      number=1, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Msg', full_name='SignedLicenseRequestRaw.Msg', index=1,\n      number=2, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Signature', full_name='SignedLicenseRequestRaw.Signature', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SessionKey', full_name='SignedLicenseRequestRaw.SessionKey', index=3,\n      number=4, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RemoteAttestation', full_name='SignedLicenseRequestRaw.RemoteAttestation', index=4,\n      number=5, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _SIGNEDLICENSEREQUESTRAW_MESSAGETYPE,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=7223,\n  serialized_end=7546,\n)\n\n\n_SIGNEDLICENSE = _descriptor.Descriptor(\n  name='SignedLicense',\n  full_name='SignedLicense',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Type', full_name='SignedLicense.Type', index=0,\n      number=1, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Msg', full_name='SignedLicense.Msg', index=1,\n      number=2, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Signature', full_name='SignedLicense.Signature', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SessionKey', full_name='SignedLicense.SessionKey', index=3,\n      number=4, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RemoteAttestation', full_name='SignedLicense.RemoteAttestation', index=4,\n      number=5, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _SIGNEDLICENSE_MESSAGETYPE,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=7549,\n  serialized_end=7842,\n)\n\n\n_SIGNEDSERVICECERTIFICATE = _descriptor.Descriptor(\n  name='SignedServiceCertificate',\n  full_name='SignedServiceCertificate',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Type', full_name='SignedServiceCertificate.Type', index=0,\n      number=1, type=14, cpp_type=8, label=1,\n      has_default_value=False, default_value=1,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Msg', full_name='SignedServiceCertificate.Msg', index=1,\n      number=2, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='Signature', full_name='SignedServiceCertificate.Signature', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SessionKey', full_name='SignedServiceCertificate.SessionKey', index=3,\n      number=4, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='RemoteAttestation', full_name='SignedServiceCertificate.RemoteAttestation', index=4,\n      number=5, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n    _SIGNEDSERVICECERTIFICATE_MESSAGETYPE,\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=7845,\n  serialized_end=8176,\n)\n\n\n_FILEHASHES_SIGNATURE = _descriptor.Descriptor(\n  name='Signature',\n  full_name='FileHashes.Signature',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='filename', full_name='FileHashes.Signature.filename', index=0,\n      number=1, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\").decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='test_signing', full_name='FileHashes.Signature.test_signing', index=1,\n      number=2, type=8, cpp_type=7, label=1,\n      has_default_value=False, default_value=False,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='SHA512Hash', full_name='FileHashes.Signature.SHA512Hash', index=2,\n      number=3, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='main_exe', full_name='FileHashes.Signature.main_exe', index=3,\n      number=4, type=8, cpp_type=7, label=1,\n      has_default_value=False, default_value=False,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='signature', full_name='FileHashes.Signature.signature', index=4,\n      number=5, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=8252,\n  serialized_end=8360,\n)\n\n_FILEHASHES = _descriptor.Descriptor(\n  name='FileHashes',\n  full_name='FileHashes',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='signer', full_name='FileHashes.signer', index=0,\n      number=1, type=12, cpp_type=9, label=1,\n      has_default_value=False, default_value=_b(\"\"),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n    _descriptor.FieldDescriptor(\n      name='signatures', full_name='FileHashes.signatures', index=1,\n      number=2, type=11, cpp_type=10, label=3,\n      has_default_value=False, default_value=[],\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      options=None),\n  ],\n  extensions=[\n  ],\n  nested_types=[_FILEHASHES_SIGNATURE, ],\n  enum_types=[\n  ],\n  options=None,\n  is_extendable=False,\n  syntax='proto2',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=8179,\n  serialized_end=8360,\n)\n\n_CLIENTIDENTIFICATION_NAMEVALUE.containing_type = _CLIENTIDENTIFICATION\n_CLIENTIDENTIFICATION_CLIENTCAPABILITIES.fields_by_name['MaxHdcpVersion'].enum_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION\n_CLIENTIDENTIFICATION_CLIENTCAPABILITIES.containing_type = _CLIENTIDENTIFICATION\n_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION.containing_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES\n_CLIENTIDENTIFICATION.fields_by_name['Type'].enum_type = _CLIENTIDENTIFICATION_TOKENTYPE\n_CLIENTIDENTIFICATION.fields_by_name['Token'].message_type = _SIGNEDDEVICECERTIFICATE\n_CLIENTIDENTIFICATION.fields_by_name['ClientInfo'].message_type = _CLIENTIDENTIFICATION_NAMEVALUE\n_CLIENTIDENTIFICATION.fields_by_name['_ClientCapabilities'].message_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES\n_CLIENTIDENTIFICATION.fields_by_name['_FileHashes'].message_type = _FILEHASHES\n_CLIENTIDENTIFICATION_TOKENTYPE.containing_type = _CLIENTIDENTIFICATION\n_DEVICECERTIFICATE.fields_by_name['Type'].enum_type = _DEVICECERTIFICATE_CERTIFICATETYPE\n_DEVICECERTIFICATE_CERTIFICATETYPE.containing_type = _DEVICECERTIFICATE\n_DEVICECERTIFICATESTATUS.fields_by_name['Status'].enum_type = _DEVICECERTIFICATESTATUS_CERTIFICATESTATUS\n_DEVICECERTIFICATESTATUS.fields_by_name['DeviceInfo'].message_type = _PROVISIONEDDEVICEINFO\n_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS.containing_type = _DEVICECERTIFICATESTATUS\n_DEVICECERTIFICATESTATUSLIST.fields_by_name['CertificateStatus'].message_type = _DEVICECERTIFICATESTATUS\n_LICENSEIDENTIFICATION.fields_by_name['Type'].enum_type = _LICENSETYPE\n_LICENSE_POLICY.containing_type = _LICENSE\n_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.fields_by_name['Hdcp'].enum_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION\n_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.fields_by_name['CgmsFlags'].enum_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS\n_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.containing_type = _LICENSE_KEYCONTAINER\n_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS.containing_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION\n_LICENSE_KEYCONTAINER_KEYCONTROL.containing_type = _LICENSE_KEYCONTAINER\n_LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS.containing_type = _LICENSE_KEYCONTAINER\n_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT.fields_by_name['RequiredProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION\n_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT.containing_type = _LICENSE_KEYCONTAINER\n_LICENSE_KEYCONTAINER.fields_by_name['Type'].enum_type = _LICENSE_KEYCONTAINER_KEYTYPE\n_LICENSE_KEYCONTAINER.fields_by_name['Level'].enum_type = _LICENSE_KEYCONTAINER_SECURITYLEVEL\n_LICENSE_KEYCONTAINER.fields_by_name['RequiredProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION\n_LICENSE_KEYCONTAINER.fields_by_name['RequestedProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION\n_LICENSE_KEYCONTAINER.fields_by_name['_KeyControl'].message_type = _LICENSE_KEYCONTAINER_KEYCONTROL\n_LICENSE_KEYCONTAINER.fields_by_name['_OperatorSessionKeyPermissions'].message_type = _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS\n_LICENSE_KEYCONTAINER.fields_by_name['VideoResolutionConstraints'].message_type = _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT\n_LICENSE_KEYCONTAINER.containing_type = _LICENSE\n_LICENSE_KEYCONTAINER_KEYTYPE.containing_type = _LICENSE_KEYCONTAINER\n_LICENSE_KEYCONTAINER_SECURITYLEVEL.containing_type = _LICENSE_KEYCONTAINER\n_LICENSE.fields_by_name['Id'].message_type = _LICENSEIDENTIFICATION\n_LICENSE.fields_by_name['_Policy'].message_type = _LICENSE_POLICY\n_LICENSE.fields_by_name['Key'].message_type = _LICENSE_KEYCONTAINER\n_LICENSEERROR.fields_by_name['ErrorCode'].enum_type = _LICENSEERROR_ERROR\n_LICENSEERROR_ERROR.containing_type = _LICENSEERROR\n_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.fields_by_name['Pssh'].message_type = _WIDEVINECENCHEADER\n_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.fields_by_name['LicenseType'].enum_type = _LICENSETYPE\n_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION\n_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM.fields_by_name['LicenseType'].enum_type = _LICENSETYPE\n_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION\n_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE.fields_by_name['LicenseId'].message_type = _LICENSEIDENTIFICATION\n_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION\n_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['CencId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_CENC\n_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['WebmId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM\n_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['License'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE\n_LICENSEREQUEST_CONTENTIDENTIFICATION.containing_type = _LICENSEREQUEST\n_LICENSEREQUEST.fields_by_name['ClientId'].message_type = _CLIENTIDENTIFICATION\n_LICENSEREQUEST.fields_by_name['ContentId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION\n_LICENSEREQUEST.fields_by_name['Type'].enum_type = _LICENSEREQUEST_REQUESTTYPE\n_LICENSEREQUEST.fields_by_name['ProtocolVersion'].enum_type = _PROTOCOLVERSION\n_LICENSEREQUEST.fields_by_name['EncryptedClientId'].message_type = _ENCRYPTEDCLIENTIDENTIFICATION\n_LICENSEREQUEST_REQUESTTYPE.containing_type = _LICENSEREQUEST\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC.fields_by_name['LicenseType'].enum_type = _LICENSETYPE\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC.containing_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM.fields_by_name['LicenseType'].enum_type = _LICENSETYPE\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM.containing_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE.fields_by_name['LicenseId'].message_type = _LICENSEIDENTIFICATION\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE.containing_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.fields_by_name['CencId'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.fields_by_name['WebmId'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.fields_by_name['License'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE\n_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.containing_type = _LICENSEREQUESTRAW\n_LICENSEREQUESTRAW.fields_by_name['ClientId'].message_type = _CLIENTIDENTIFICATION\n_LICENSEREQUESTRAW.fields_by_name['ContentId'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION\n_LICENSEREQUESTRAW.fields_by_name['Type'].enum_type = _LICENSEREQUESTRAW_REQUESTTYPE\n_LICENSEREQUESTRAW.fields_by_name['ProtocolVersion'].enum_type = _PROTOCOLVERSION\n_LICENSEREQUESTRAW.fields_by_name['EncryptedClientId'].message_type = _ENCRYPTEDCLIENTIDENTIFICATION\n_LICENSEREQUESTRAW_REQUESTTYPE.containing_type = _LICENSEREQUESTRAW\n_PROVISIONEDDEVICEINFO.fields_by_name['SecurityLevel'].enum_type = _PROVISIONEDDEVICEINFO_WVSECURITYLEVEL\n_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL.containing_type = _PROVISIONEDDEVICEINFO\n_REMOTEATTESTATION.fields_by_name['Certificate'].message_type = _ENCRYPTEDCLIENTIDENTIFICATION\n_SIGNEDDEVICECERTIFICATE.fields_by_name['_DeviceCertificate'].message_type = _DEVICECERTIFICATE\n_SIGNEDDEVICECERTIFICATE.fields_by_name['Signer'].message_type = _SIGNEDDEVICECERTIFICATE\n_SIGNEDMESSAGE.fields_by_name['Type'].enum_type = _SIGNEDMESSAGE_MESSAGETYPE\n_SIGNEDMESSAGE.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION\n_SIGNEDMESSAGE_MESSAGETYPE.containing_type = _SIGNEDMESSAGE\n_WIDEVINECENCHEADER.fields_by_name['algorithm'].enum_type = _WIDEVINECENCHEADER_ALGORITHM\n_WIDEVINECENCHEADER_ALGORITHM.containing_type = _WIDEVINECENCHEADER\n_SIGNEDLICENSEREQUEST.fields_by_name['Type'].enum_type = _SIGNEDLICENSEREQUEST_MESSAGETYPE\n_SIGNEDLICENSEREQUEST.fields_by_name['Msg'].message_type = _LICENSEREQUEST\n_SIGNEDLICENSEREQUEST.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION\n_SIGNEDLICENSEREQUEST_MESSAGETYPE.containing_type = _SIGNEDLICENSEREQUEST\n_SIGNEDLICENSEREQUESTRAW.fields_by_name['Type'].enum_type = _SIGNEDLICENSEREQUESTRAW_MESSAGETYPE\n_SIGNEDLICENSEREQUESTRAW.fields_by_name['Msg'].message_type = _LICENSEREQUESTRAW\n_SIGNEDLICENSEREQUESTRAW.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION\n_SIGNEDLICENSEREQUESTRAW_MESSAGETYPE.containing_type = _SIGNEDLICENSEREQUESTRAW\n_SIGNEDLICENSE.fields_by_name['Type'].enum_type = _SIGNEDLICENSE_MESSAGETYPE\n_SIGNEDLICENSE.fields_by_name['Msg'].message_type = _LICENSE\n_SIGNEDLICENSE.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION\n_SIGNEDLICENSE_MESSAGETYPE.containing_type = _SIGNEDLICENSE\n_SIGNEDSERVICECERTIFICATE.fields_by_name['Type'].enum_type = _SIGNEDSERVICECERTIFICATE_MESSAGETYPE\n_SIGNEDSERVICECERTIFICATE.fields_by_name['Msg'].message_type = _SIGNEDDEVICECERTIFICATE\n_SIGNEDSERVICECERTIFICATE.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION\n_SIGNEDSERVICECERTIFICATE_MESSAGETYPE.containing_type = _SIGNEDSERVICECERTIFICATE\n_FILEHASHES_SIGNATURE.containing_type = _FILEHASHES\n_FILEHASHES.fields_by_name['signatures'].message_type = _FILEHASHES_SIGNATURE\nDESCRIPTOR.message_types_by_name['ClientIdentification'] = _CLIENTIDENTIFICATION\nDESCRIPTOR.message_types_by_name['DeviceCertificate'] = _DEVICECERTIFICATE\nDESCRIPTOR.message_types_by_name['DeviceCertificateStatus'] = _DEVICECERTIFICATESTATUS\nDESCRIPTOR.message_types_by_name['DeviceCertificateStatusList'] = _DEVICECERTIFICATESTATUSLIST\nDESCRIPTOR.message_types_by_name['EncryptedClientIdentification'] = _ENCRYPTEDCLIENTIDENTIFICATION\nDESCRIPTOR.message_types_by_name['LicenseIdentification'] = _LICENSEIDENTIFICATION\nDESCRIPTOR.message_types_by_name['License'] = _LICENSE\nDESCRIPTOR.message_types_by_name['LicenseError'] = _LICENSEERROR\nDESCRIPTOR.message_types_by_name['LicenseRequest'] = _LICENSEREQUEST\nDESCRIPTOR.message_types_by_name['LicenseRequestRaw'] = _LICENSEREQUESTRAW\nDESCRIPTOR.message_types_by_name['ProvisionedDeviceInfo'] = _PROVISIONEDDEVICEINFO\nDESCRIPTOR.message_types_by_name['ProvisioningOptions'] = _PROVISIONINGOPTIONS\nDESCRIPTOR.message_types_by_name['ProvisioningRequest'] = _PROVISIONINGREQUEST\nDESCRIPTOR.message_types_by_name['ProvisioningResponse'] = _PROVISIONINGRESPONSE\nDESCRIPTOR.message_types_by_name['RemoteAttestation'] = _REMOTEATTESTATION\nDESCRIPTOR.message_types_by_name['SessionInit'] = _SESSIONINIT\nDESCRIPTOR.message_types_by_name['SessionState'] = _SESSIONSTATE\nDESCRIPTOR.message_types_by_name['SignedCertificateStatusList'] = _SIGNEDCERTIFICATESTATUSLIST\nDESCRIPTOR.message_types_by_name['SignedDeviceCertificate'] = _SIGNEDDEVICECERTIFICATE\nDESCRIPTOR.message_types_by_name['SignedProvisioningMessage'] = _SIGNEDPROVISIONINGMESSAGE\nDESCRIPTOR.message_types_by_name['SignedMessage'] = _SIGNEDMESSAGE\nDESCRIPTOR.message_types_by_name['WidevineCencHeader'] = _WIDEVINECENCHEADER\nDESCRIPTOR.message_types_by_name['SignedLicenseRequest'] = _SIGNEDLICENSEREQUEST\nDESCRIPTOR.message_types_by_name['SignedLicenseRequestRaw'] = _SIGNEDLICENSEREQUESTRAW\nDESCRIPTOR.message_types_by_name['SignedLicense'] = _SIGNEDLICENSE\nDESCRIPTOR.message_types_by_name['SignedServiceCertificate'] = _SIGNEDSERVICECERTIFICATE\nDESCRIPTOR.message_types_by_name['FileHashes'] = _FILEHASHES\nDESCRIPTOR.enum_types_by_name['LicenseType'] = _LICENSETYPE\nDESCRIPTOR.enum_types_by_name['ProtocolVersion'] = _PROTOCOLVERSION\n\nClientIdentification = _reflection.GeneratedProtocolMessageType('ClientIdentification', (_message.Message,), dict(\n\n  NameValue = _reflection.GeneratedProtocolMessageType('NameValue', (_message.Message,), dict(\n    DESCRIPTOR = _CLIENTIDENTIFICATION_NAMEVALUE,\n    __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n    # @@protoc_insertion_point(class_scope:ClientIdentification.NameValue)\n    ))\n  ,\n\n  ClientCapabilities = _reflection.GeneratedProtocolMessageType('ClientCapabilities', (_message.Message,), dict(\n    DESCRIPTOR = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES,\n    __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n    # @@protoc_insertion_point(class_scope:ClientIdentification.ClientCapabilities)\n    ))\n  ,\n  DESCRIPTOR = _CLIENTIDENTIFICATION,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:ClientIdentification)\n  ))\n_sym_db.RegisterMessage(ClientIdentification)\n_sym_db.RegisterMessage(ClientIdentification.NameValue)\n_sym_db.RegisterMessage(ClientIdentification.ClientCapabilities)\n\nDeviceCertificate = _reflection.GeneratedProtocolMessageType('DeviceCertificate', (_message.Message,), dict(\n  DESCRIPTOR = _DEVICECERTIFICATE,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:DeviceCertificate)\n  ))\n_sym_db.RegisterMessage(DeviceCertificate)\n\nDeviceCertificateStatus = _reflection.GeneratedProtocolMessageType('DeviceCertificateStatus', (_message.Message,), dict(\n  DESCRIPTOR = _DEVICECERTIFICATESTATUS,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:DeviceCertificateStatus)\n  ))\n_sym_db.RegisterMessage(DeviceCertificateStatus)\n\nDeviceCertificateStatusList = _reflection.GeneratedProtocolMessageType('DeviceCertificateStatusList', (_message.Message,), dict(\n  DESCRIPTOR = _DEVICECERTIFICATESTATUSLIST,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:DeviceCertificateStatusList)\n  ))\n_sym_db.RegisterMessage(DeviceCertificateStatusList)\n\nEncryptedClientIdentification = _reflection.GeneratedProtocolMessageType('EncryptedClientIdentification', (_message.Message,), dict(\n  DESCRIPTOR = _ENCRYPTEDCLIENTIDENTIFICATION,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:EncryptedClientIdentification)\n  ))\n_sym_db.RegisterMessage(EncryptedClientIdentification)\n\nLicenseIdentification = _reflection.GeneratedProtocolMessageType('LicenseIdentification', (_message.Message,), dict(\n  DESCRIPTOR = _LICENSEIDENTIFICATION,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:LicenseIdentification)\n  ))\n_sym_db.RegisterMessage(LicenseIdentification)\n\nLicense = _reflection.GeneratedProtocolMessageType('License', (_message.Message,), dict(\n\n  Policy = _reflection.GeneratedProtocolMessageType('Policy', (_message.Message,), dict(\n    DESCRIPTOR = _LICENSE_POLICY,\n    __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n    # @@protoc_insertion_point(class_scope:License.Policy)\n    ))\n  ,\n\n  KeyContainer = _reflection.GeneratedProtocolMessageType('KeyContainer', (_message.Message,), dict(\n\n    OutputProtection = _reflection.GeneratedProtocolMessageType('OutputProtection', (_message.Message,), dict(\n      DESCRIPTOR = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION,\n      __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n      # @@protoc_insertion_point(class_scope:License.KeyContainer.OutputProtection)\n      ))\n    ,\n\n    KeyControl = _reflection.GeneratedProtocolMessageType('KeyControl', (_message.Message,), dict(\n      DESCRIPTOR = _LICENSE_KEYCONTAINER_KEYCONTROL,\n      __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n      # @@protoc_insertion_point(class_scope:License.KeyContainer.KeyControl)\n      ))\n    ,\n\n    OperatorSessionKeyPermissions = _reflection.GeneratedProtocolMessageType('OperatorSessionKeyPermissions', (_message.Message,), dict(\n      DESCRIPTOR = _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS,\n      __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n      # @@protoc_insertion_point(class_scope:License.KeyContainer.OperatorSessionKeyPermissions)\n      ))\n    ,\n\n    VideoResolutionConstraint = _reflection.GeneratedProtocolMessageType('VideoResolutionConstraint', (_message.Message,), dict(\n      DESCRIPTOR = _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT,\n      __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n      # @@protoc_insertion_point(class_scope:License.KeyContainer.VideoResolutionConstraint)\n      ))\n    ,\n    DESCRIPTOR = _LICENSE_KEYCONTAINER,\n    __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n    # @@protoc_insertion_point(class_scope:License.KeyContainer)\n    ))\n  ,\n  DESCRIPTOR = _LICENSE,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:License)\n  ))\n_sym_db.RegisterMessage(License)\n_sym_db.RegisterMessage(License.Policy)\n_sym_db.RegisterMessage(License.KeyContainer)\n_sym_db.RegisterMessage(License.KeyContainer.OutputProtection)\n_sym_db.RegisterMessage(License.KeyContainer.KeyControl)\n_sym_db.RegisterMessage(License.KeyContainer.OperatorSessionKeyPermissions)\n_sym_db.RegisterMessage(License.KeyContainer.VideoResolutionConstraint)\n\nLicenseError = _reflection.GeneratedProtocolMessageType('LicenseError', (_message.Message,), dict(\n  DESCRIPTOR = _LICENSEERROR,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:LicenseError)\n  ))\n_sym_db.RegisterMessage(LicenseError)\n\nLicenseRequest = _reflection.GeneratedProtocolMessageType('LicenseRequest', (_message.Message,), dict(\n\n  ContentIdentification = _reflection.GeneratedProtocolMessageType('ContentIdentification', (_message.Message,), dict(\n\n    CENC = _reflection.GeneratedProtocolMessageType('CENC', (_message.Message,), dict(\n      DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_CENC,\n      __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n      # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.CENC)\n      ))\n    ,\n\n    WebM = _reflection.GeneratedProtocolMessageType('WebM', (_message.Message,), dict(\n      DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM,\n      __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n      # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.WebM)\n      ))\n    ,\n\n    ExistingLicense = _reflection.GeneratedProtocolMessageType('ExistingLicense', (_message.Message,), dict(\n      DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE,\n      __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n      # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.ExistingLicense)\n      ))\n    ,\n    DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION,\n    __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n    # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification)\n    ))\n  ,\n  DESCRIPTOR = _LICENSEREQUEST,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:LicenseRequest)\n  ))\n_sym_db.RegisterMessage(LicenseRequest)\n_sym_db.RegisterMessage(LicenseRequest.ContentIdentification)\n_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.CENC)\n_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.WebM)\n_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.ExistingLicense)\n\nLicenseRequestRaw = _reflection.GeneratedProtocolMessageType('LicenseRequestRaw', (_message.Message,), dict(\n\n  ContentIdentification = _reflection.GeneratedProtocolMessageType('ContentIdentification', (_message.Message,), dict(\n\n    CENC = _reflection.GeneratedProtocolMessageType('CENC', (_message.Message,), dict(\n      DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC,\n      __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n      # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification.CENC)\n      ))\n    ,\n\n    WebM = _reflection.GeneratedProtocolMessageType('WebM', (_message.Message,), dict(\n      DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM,\n      __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n      # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification.WebM)\n      ))\n    ,\n\n    ExistingLicense = _reflection.GeneratedProtocolMessageType('ExistingLicense', (_message.Message,), dict(\n      DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE,\n      __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n      # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification.ExistingLicense)\n      ))\n    ,\n    DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION,\n    __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n    # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification)\n    ))\n  ,\n  DESCRIPTOR = _LICENSEREQUESTRAW,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:LicenseRequestRaw)\n  ))\n_sym_db.RegisterMessage(LicenseRequestRaw)\n_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification)\n_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification.CENC)\n_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification.WebM)\n_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification.ExistingLicense)\n\nProvisionedDeviceInfo = _reflection.GeneratedProtocolMessageType('ProvisionedDeviceInfo', (_message.Message,), dict(\n  DESCRIPTOR = _PROVISIONEDDEVICEINFO,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:ProvisionedDeviceInfo)\n  ))\n_sym_db.RegisterMessage(ProvisionedDeviceInfo)\n\nProvisioningOptions = _reflection.GeneratedProtocolMessageType('ProvisioningOptions', (_message.Message,), dict(\n  DESCRIPTOR = _PROVISIONINGOPTIONS,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:ProvisioningOptions)\n  ))\n_sym_db.RegisterMessage(ProvisioningOptions)\n\nProvisioningRequest = _reflection.GeneratedProtocolMessageType('ProvisioningRequest', (_message.Message,), dict(\n  DESCRIPTOR = _PROVISIONINGREQUEST,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:ProvisioningRequest)\n  ))\n_sym_db.RegisterMessage(ProvisioningRequest)\n\nProvisioningResponse = _reflection.GeneratedProtocolMessageType('ProvisioningResponse', (_message.Message,), dict(\n  DESCRIPTOR = _PROVISIONINGRESPONSE,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:ProvisioningResponse)\n  ))\n_sym_db.RegisterMessage(ProvisioningResponse)\n\nRemoteAttestation = _reflection.GeneratedProtocolMessageType('RemoteAttestation', (_message.Message,), dict(\n  DESCRIPTOR = _REMOTEATTESTATION,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:RemoteAttestation)\n  ))\n_sym_db.RegisterMessage(RemoteAttestation)\n\nSessionInit = _reflection.GeneratedProtocolMessageType('SessionInit', (_message.Message,), dict(\n  DESCRIPTOR = _SESSIONINIT,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:SessionInit)\n  ))\n_sym_db.RegisterMessage(SessionInit)\n\nSessionState = _reflection.GeneratedProtocolMessageType('SessionState', (_message.Message,), dict(\n  DESCRIPTOR = _SESSIONSTATE,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:SessionState)\n  ))\n_sym_db.RegisterMessage(SessionState)\n\nSignedCertificateStatusList = _reflection.GeneratedProtocolMessageType('SignedCertificateStatusList', (_message.Message,), dict(\n  DESCRIPTOR = _SIGNEDCERTIFICATESTATUSLIST,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:SignedCertificateStatusList)\n  ))\n_sym_db.RegisterMessage(SignedCertificateStatusList)\n\nSignedDeviceCertificate = _reflection.GeneratedProtocolMessageType('SignedDeviceCertificate', (_message.Message,), dict(\n  DESCRIPTOR = _SIGNEDDEVICECERTIFICATE,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:SignedDeviceCertificate)\n  ))\n_sym_db.RegisterMessage(SignedDeviceCertificate)\n\nSignedProvisioningMessage = _reflection.GeneratedProtocolMessageType('SignedProvisioningMessage', (_message.Message,), dict(\n  DESCRIPTOR = _SIGNEDPROVISIONINGMESSAGE,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:SignedProvisioningMessage)\n  ))\n_sym_db.RegisterMessage(SignedProvisioningMessage)\n\nSignedMessage = _reflection.GeneratedProtocolMessageType('SignedMessage', (_message.Message,), dict(\n  DESCRIPTOR = _SIGNEDMESSAGE,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:SignedMessage)\n  ))\n_sym_db.RegisterMessage(SignedMessage)\n\nWidevineCencHeader = _reflection.GeneratedProtocolMessageType('WidevineCencHeader', (_message.Message,), dict(\n  DESCRIPTOR = _WIDEVINECENCHEADER,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:WidevineCencHeader)\n  ))\n_sym_db.RegisterMessage(WidevineCencHeader)\n\nSignedLicenseRequest = _reflection.GeneratedProtocolMessageType('SignedLicenseRequest', (_message.Message,), dict(\n  DESCRIPTOR = _SIGNEDLICENSEREQUEST,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:SignedLicenseRequest)\n  ))\n_sym_db.RegisterMessage(SignedLicenseRequest)\n\nSignedLicenseRequestRaw = _reflection.GeneratedProtocolMessageType('SignedLicenseRequestRaw', (_message.Message,), dict(\n  DESCRIPTOR = _SIGNEDLICENSEREQUESTRAW,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:SignedLicenseRequestRaw)\n  ))\n_sym_db.RegisterMessage(SignedLicenseRequestRaw)\n\nSignedLicense = _reflection.GeneratedProtocolMessageType('SignedLicense', (_message.Message,), dict(\n  DESCRIPTOR = _SIGNEDLICENSE,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:SignedLicense)\n  ))\n_sym_db.RegisterMessage(SignedLicense)\n\nSignedServiceCertificate = _reflection.GeneratedProtocolMessageType('SignedServiceCertificate', (_message.Message,), dict(\n  DESCRIPTOR = _SIGNEDSERVICECERTIFICATE,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:SignedServiceCertificate)\n  ))\n_sym_db.RegisterMessage(SignedServiceCertificate)\n\nFileHashes = _reflection.GeneratedProtocolMessageType('FileHashes', (_message.Message,), dict(\n\n  Signature = _reflection.GeneratedProtocolMessageType('Signature', (_message.Message,), dict(\n    DESCRIPTOR = _FILEHASHES_SIGNATURE,\n    __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n    # @@protoc_insertion_point(class_scope:FileHashes.Signature)\n    ))\n  ,\n  DESCRIPTOR = _FILEHASHES,\n  __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'\n  # @@protoc_insertion_point(class_scope:FileHashes)\n  ))\n_sym_db.RegisterMessage(FileHashes)\n_sym_db.RegisterMessage(FileHashes.Signature)\n\n\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "README.md",
    "content": "# Dumper\n\nDumper is a Frida script to dump L3 CDMs from any Android device.\n\n## ** IMPORTANT **\nThe function parameters can differ between CDM versions. The default is [4] but you may have to change this for your specific version in the [script.js](./Helpers/script.js).\n\n## Prerequisites\n- Rooted Android device\n- [Installed Frida server on the Android device]((https://frida.re/docs/android/))\n- Installed [platform-tools ADB/Fastboot](https://developer.android.com/studio/releases/platform-tools) on the PC\n- Installed [Python 3](https://www.python.org/downloads/) on the PC\n- `CDM_VERSION` retrieved from the [DRM Info app](https://play.google.com/store/apps/details?id=com.androidfung.drminfo).\n\n## Requirements:\nUse pip to install the dependencies:\n\n`pip3 install -r requirements.txt`\n\n## Usage:\n\n* Enable USB debugging on the Android device and connect it to the PC\n* [Start frida-server on the Android device](https://frida.re/docs/android/)\n* Execute dump_keys.py on the PC\n* Start streaming some DRM-protected content on the Android device e.g. [Bitmovin](https://bitmovin.com/demos/drm)\n\nThe script will hook every function in your widevine 'libwvhidl.so'/'libwvaidl.so' modules by default, effectively brute forcing the private key function name.\n```\npython3 dump_keys.py\n```\n\nYou can pass the function name to hook using the `--function-name` argument. You can use [this post](https://forum.videohelp.com/threads/404219-How-To-Dump-L3-CDM-From-Android-Device-s-(ONLY-Talk-About-Dumping-L3-CDMS)/page6#post2646150) to retrive it by yourself.\n```\npython3 dump_keys.py --function-name 'polorucp'\n```\n\nThe script defaults to `args[4]` if no `--cdm-version` is provided. This will only have an effect if your version is `16.1.0` or `17.0.0`.\n\n```\npython3 dump_keys.py --cdm-version '16.1.0'\n```\n\nYou can pass the `.so` -module name using the `--module-name` argument. By default it looks in the `libwvhidl.so` and `libwvaidl.so` files. It can have multiple values. Its name can change depending on the version and SoC including but not limited to: `libwvaidl.so`, `libwvhidl.so`, `libwvdrmengine.so`, `libwvm.so`, `libdrmwvmplugin.so` [source](https://arxiv.org/abs/2204.09298). You can find your module name in the /vendor/lib64/ or /vendor/lib/ directories using an ADB shell.\n\n```\npython3 dump_keys.py --module-name 'libwvhidl.so' --module-name 'libwvaidl.so'\n```\n\n\n## Options:\n```\n    -h, --help                      Print this help text and exit.\n    --cdm-version                   The CDM version of the device e.g. '16.1.0'.\n    --function-name                 The name of the function to hook to retrieve the private key.\n    --module-name                   The name of the widevine `.so` modules.\n```\n\n## Scenario:\n1. You've got the function name\n2. You've got the private key\n3. Client ID extracted\n4. Script closed\n\nThe following files will be created after a successful dump:\n- `client_id.bin` - Device identification\n- `private_key.pem` - RSA private key\n\n## Known Working Versions:\n* Android 9\n    * CDM 14.0.0\n* Android 10\n    * CDM 15.0.0\n* Android 11\n    * CDM 16.0.0\n* Android 12\n    * CDM 16.1.0\n* Android 13\n    * CDM 17.0.0\n\n## Temporary disabling L1 to use L3 instead\nA 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.\n\n## Credits\nThanks to the original author of the code.\n"
  },
  {
    "path": "dump_keys.py",
    "content": "#!/usr/bin/env python3\r\n\r\nimport argparse\r\nimport time\r\nimport logging\r\nfrom Helpers.Device import Device\r\n\r\nlogging.basicConfig(\r\n    format='%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(message)s',\r\n    datefmt='%Y-%m-%d %I:%M:%S %p',\r\n    level=logging.DEBUG,\r\n)\r\n\r\ndef main():\r\n    parser = argparse.ArgumentParser(description='Android Widevine L3 dumper.')\r\n    parser.add_argument('--cdm-version', help='The CDM version of the device e.g. \\'14.0.0\\'', default='14.0.0')\r\n    parser.add_argument('--function-name', help='The name of the function to hook to retrieve the private key.', default='')\r\n    parser.add_argument('--module-name', \r\n        nargs='+',\r\n        type=str,\r\n        help='The names of the widevine `.so` modules',\r\n        default=[\"libwvaidl.so\", \"libwvhidl.so\"]\r\n    )\r\n    args = parser.parse_args()\r\n\r\n    dynamic_function_name = args.function_name\r\n    cdm_version = args.cdm_version\r\n    module_names = args.module_name\r\n\r\n    logger = logging.getLogger(\"main\")\r\n    device = Device(dynamic_function_name, cdm_version, module_names)\r\n    logger.info('Connected to %s', device.name)\r\n    logger.info('Scanning all processes')\r\n\r\n    for process in device.usb_device.enumerate_processes():\r\n        if 'drm' in process.name:\r\n            for library in device.find_widevine_process(process.name):\r\n                device.hook_to_process(process.name, library)\r\n    logger.info('Functions hooked, now open the DRM stream test on Bitmovin from your Android device! https://bitmovin.com/demos/drm')\r\n\r\n\r\nif __name__ == '__main__':\r\n    main()\r\n    while True:\r\n        time.sleep(1000)\r\n"
  },
  {
    "path": "requirements.txt",
    "content": "frida\nprotobuf == 3.19.3\npycryptodome\n"
  }
]