mirror of
				https://github.com/devine-dl/pywidevine.git
				synced 2025-11-04 03:44:50 +00:00 
			
		
		
		
	Update license CLI command for Cdm changes
This commit is contained in:
		
							parent
							
								
									3536caf5f9
								
							
						
					
					
						commit
						c7ec596031
					
				@ -69,10 +69,14 @@ def license_(device: Path, pssh: str, server: str, type_: str, privacy: bool):
 | 
				
			|||||||
    log.debug(device)
 | 
					    log.debug(device)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # load cdm
 | 
					    # load cdm
 | 
				
			||||||
    cdm = Cdm(device, pssh)
 | 
					    cdm = Cdm(device)
 | 
				
			||||||
    log.info(f"[+] Loaded CDM with PSSH: {pssh}")
 | 
					    log.info(f"[+] Loaded CDM")
 | 
				
			||||||
    log.debug(cdm)
 | 
					    log.debug(cdm)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # open cdm session
 | 
				
			||||||
 | 
					    session_id = cdm.open()
 | 
				
			||||||
 | 
					    log.info(f"[+] Opened CDM Session: {session_id.hex()}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if privacy:
 | 
					    if privacy:
 | 
				
			||||||
        # get service cert for license server via cert challenge
 | 
					        # get service cert for license server via cert challenge
 | 
				
			||||||
        service_cert = requests.post(
 | 
					        service_cert = requests.post(
 | 
				
			||||||
@ -83,13 +87,13 @@ def license_(device: Path, pssh: str, server: str, type_: str, privacy: bool):
 | 
				
			|||||||
            log.error(f"[-] Failed to get Service Privacy Certificate: [{service_cert.status_code}] {service_cert.text}")
 | 
					            log.error(f"[-] Failed to get Service Privacy Certificate: [{service_cert.status_code}] {service_cert.text}")
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        service_cert = service_cert.content
 | 
					        service_cert = service_cert.content
 | 
				
			||||||
        cdm.set_service_certificate(service_cert)
 | 
					        provider_id = cdm.set_service_certificate(session_id, service_cert)
 | 
				
			||||||
        log.info("[+] Set Service Privacy Certificate")
 | 
					        log.info(f"[+] Set Service Privacy Certificate: {provider_id}")
 | 
				
			||||||
        log.debug(service_cert)
 | 
					        log.debug(service_cert)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # get license challenge
 | 
					    # get license challenge
 | 
				
			||||||
    license_type = LicenseType.Value(type_)
 | 
					    license_type = LicenseType.Value(type_)
 | 
				
			||||||
    challenge = cdm.get_license_challenge(license_type, privacy_mode=True)
 | 
					    challenge = cdm.get_license_challenge(session_id, pssh, license_type, privacy_mode=True)
 | 
				
			||||||
    log.info("[+] Created License Request Message (Challenge)")
 | 
					    log.info("[+] Created License Request Message (Challenge)")
 | 
				
			||||||
    log.debug(challenge)
 | 
					    log.debug(challenge)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -106,13 +110,18 @@ def license_(device: Path, pssh: str, server: str, type_: str, privacy: bool):
 | 
				
			|||||||
    log.debug(licence)
 | 
					    log.debug(licence)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # parse license challenge
 | 
					    # parse license challenge
 | 
				
			||||||
    keys = cdm.parse_license(licence)
 | 
					    cdm.parse_license(session_id, licence)
 | 
				
			||||||
    log.info("[+] License Parsed Successfully")
 | 
					    log.info("[+] License Parsed Successfully")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # print keys
 | 
					    # print keys
 | 
				
			||||||
    for key in keys:
 | 
					    # Note: This showcases how insecure a Python CDM implementation is
 | 
				
			||||||
 | 
					    #       The keys should not be given to the user, but we cannot prevent this
 | 
				
			||||||
 | 
					    for key in cdm._sessions[session_id].keys:
 | 
				
			||||||
        log.info(f"[{key.type}] {key.kid.hex}:{key.key.hex()}")
 | 
					        log.info(f"[{key.type}] {key.kid.hex}:{key.key.hex()}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # close session, disposes of session data
 | 
				
			||||||
 | 
					    cdm.close(session_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@main.command()
 | 
					@main.command()
 | 
				
			||||||
@click.argument("device", type=Path)
 | 
					@click.argument("device", type=Path)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user