def main(config): logo() parser = argparse.ArgumentParser(description='Sequential SAT attack implementation with pySMT') parser.add_argument("-p", action="store", default=0, type=int, help="print info=1 and debug=2, default warning=0") parser.add_argument("-b", action="store", required=True, type=str, help="original benchmark path") parser.add_argument("-o", action="store", required=True, type=str, help="obfuscated benchmark path") parser.add_argument("-t", action="store", default=7200, type=int, help="timeout in seconds, default=7200") parser.add_argument("-s", action="store", required=False, type=str, help="solver: btor, msat, z3, yices, picosat, cvc4") args = parser.parse_args() if args.p == 0: logging.getLogger().setLevel(level=logging.WARNING) elif args.p == 1: logging.getLogger().setLevel(level=logging.INFO) elif args.p == 2: logging.getLogger().setLevel(level=logging.DEBUG) if args.s: config.solver = args.s timeout = args.t start = time.time() attacker = PyAttack(args, config) p = multiprocessing.Process(target=attacker.perform) p.start() p.join(timeout) if p.is_alive(): logging.critical("timeout reached!") p.terminate() p.join() end = time.time() execution_time(end - start)
bench_address = circuit.folder_path output_folder = bench_address[0: bench_address.rfind("/", 0, bench_address.rfind("/"))] + "/{}/".format(args.m) obf_file_name = circuit.name + "_" + str(args.k) + ".v" verilog_text = circuit2verilog(circuit, circuit.name + "_obf") key_list = key_list[::-1] key_list = "// key=" + key_list with open(output_folder + obf_file_name, 'w') as f: f.write(key_list.rstrip('\r\n') + '\n\n') f.write(verilog_text) return if __name__ == "__main__": logo() parser = argparse.ArgumentParser(description='Random obfuscation') parser.add_argument("-p", action="store", default=0, type=int, help="print wire details") parser.add_argument("-b", action="store", required=True, type=str, help="original benchmark path") parser.add_argument("-m", action="store", required=False, type=str, help="obfuscation method") parser.add_argument("-k", action="store", required=True, type=int, help="number of key bits") parser.add_argument("-c", action="store_true", default=False, required=False, help="correct gate types before obfuscation") args = parser.parse_args() if args.p == 0: logging.getLogger().setLevel(level=logging.WARNING) elif args.p == 1: logging.getLogger().setLevel(level=logging.INFO) elif args.p == 2: logging.getLogger().setLevel(level=logging.DEBUG)