Example #1
0
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)
Example #2
0
    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)