def test_parse(data_dir, dc_file_name, class_name): """Verifies the parse mechanisms on DC files.""" with use_working_directory(data_dir): with open(dc_file_name, "rb") as f: dc_file = f.read() dc = DebugCredential.parse(dc_file) assert dc.__class__.__name__ == class_name
def auth(pass_obj: dict, beacon: int, certificate: str, key: str, no_exit: bool) -> None: """Perform the Debug Authentication.""" try: logger.info("Starting Debug Authentication") with _open_debugmbox(pass_obj) as mail_box: with open(certificate, "rb") as f: debug_cred_data = f.read() debug_cred = DebugCredential.parse(debug_cred_data) dac_rsp_len = 30 if debug_cred.HASH_LENGTH == 48 and debug_cred.socc == 4 else 26 dac_data = dm_commands.DebugAuthenticationStart( dm=mail_box, resplen=dac_rsp_len).run() # convert List[int] to bytes dac_data_bytes = struct.pack(f"<{len(dac_data)}I", *dac_data) dac = DebugAuthenticationChallenge.parse(dac_data_bytes) logger.debug(f"DAC: \n{dac.info()}") dar = DebugAuthenticateResponse.create( version=pass_obj["protocol"], socc=dac.socc, dc=debug_cred, auth_beacon=beacon, dac=dac, dck=key, ) logger.debug(f"DAR:\n{dar.info()}") dar_data = dar.export() # convert bytes to List[int] dar_data_words = list( struct.unpack(f"<{len(dar_data) // 4}I", dar_data)) dar_response = dm_commands.DebugAuthenticationResponse( dm=mail_box, paramlen=len(dar_data_words)).run(dar_data_words) logger.debug(f"DAR response: {dar_response}") if not no_exit: exit_response = dm_commands.ExitDebugMailbox(dm=mail_box).run() logger.debug(f"Exit response: {exit_response}") # Re-open debug probe mail_box.debug_probe.close() mail_box.debug_probe.open() # Do test of access to AHB bus ahb_access_granted = test_ahb_access(mail_box.debug_probe) res_str = ((colorama.Fore.GREEN + "successfully") if ahb_access_granted else (colorama.Fore.RED + "without AHB access")) logger.info( f"Debug Authentication ends {res_str}{colorama.Fore.RESET}." ) if not ahb_access_granted: click.get_current_context().exit(1) else: logger.info( "Debug Authentication ends without exit and without test of AHB access." ) except SPSDKError as e: logger.error(f"Start Debug Mailbox failed!\n{e}") click.get_current_context().exit(1)