Beispiel #1
0
def do(solver_t, ws, steps, w_min, w_max, search_t, diag, var_t, var_d):

    if solver_t == 'boolector':
        import src.solver.boolector as solver
    elif solver_t == 'cryptominisat':
        import src.solver.cryptominisat as solver
    elif solver_t == 'stp':
        import src.solver.stp as solver
    else:
        print 'Unknown solver!'
        return

    w = w_min

    solutions = []

    print 'DFS: {} {} {} {}'.format(solver_t, search_t, ws, steps)
    while w <= w_max:
        print '{}'.format(w),
        sys.stdout.flush()

        norx = NORX(ws, steps, w, search_t, diag)

        if var_t in norx.set_variables.keys():
            norx.set_variables[var_t](var_d)

        # setup search problem for solver
        sp = setup.do(stdin=norx(), flags=setup.TFLAGS[solver_t])

        # solve
        output = solver.do(stdin=sp)

        if solver.SIGNAL in output:
            w += 1
        else:
            print "Differential found. Weight: {}".format(w),
            v = []
            if solver_t in ['boolector', 'stp']:
                differential = solver.parse(output)
                print differential
                print output
                x = norx.extract_input(differential)
                z = norx.extract_output(differential)
                v = [str(w)] + [x[key] for key in sorted(x.keys())] + [
                    str(w)
                ] + [z[key] for key in sorted(z.keys())]
            else:
                v = [str(w), output]
            solutions.append(v)
            break

    print ''

    return solutions
Beispiel #2
0
def do( solver_t, ws, steps, w_min, w_max, search_t, diag, var_t, var_d ):

    if solver_t == 'boolector':
        import src.solver.boolector as solver
    elif solver_t == 'cryptominisat':
        import src.solver.cryptominisat as solver
    elif solver_t == 'stp':
        import src.solver.stp as solver
    else:
        print 'Unknown solver!'
        return

    w = w_min

    solutions = []

    print 'DFS: {} {} {} {}'.format( solver_t, search_t, ws, steps )
    while w <= w_max:
        print '{}'.format(w),
        sys.stdout.flush()

        norx = NORX( ws, steps, w, search_t, diag )

        if var_t in norx.set_variables.keys():
            norx.set_variables[var_t]( var_d )

        # setup search problem for solver
        sp = setup.do( stdin = norx(), flags = setup.TFLAGS[solver_t] )

        # solve
        output = solver.do( stdin = sp )

        if solver.SIGNAL in output:
            w += 1
        else:
            print "Differential found. Weight: {}".format( w ),
            v = []
            if solver_t in ['boolector','stp']:
                differential = solver.parse( output )
                print differential
                print output
                x = norx.extract_input( differential )
                z = norx.extract_output( differential )
                v = [ str(w) ] + [ x[key] for key in sorted( x.keys() ) ] + [ str(w) ] + [ z[key] for key in sorted( z.keys() ) ]
            else:
                v = [ str(w), output ]
            solutions.append(v)
            break

    print ''

    return solutions
Beispiel #3
0
Datei: enum.py Projekt: norx/node
def do(solver_t, ws, steps, weight, enum_max, search_t, diag):

    if solver_t == "boolector":
        import src.solver.boolector as solver
    elif solver_t == "stp":
        import src.solver.stp as solver
    else:
        print "Unknown solver!"
        return

    norx = NORX(ws, steps, weight, search_t, diag)
    i = 1

    solutions = []

    print "ENUM: {} {} {} {} {} {}".format(solver_t, search_t, ws, steps, weight, enum_max)
    while i != enum_max:
        print "{}".format(i),
        sys.stdout.flush()

        # setup search problem for solver
        sp = setup.do(stdin=norx(), flags=setup.TFLAGS[solver_t])

        # solve
        output = solver.do(stdin=sp)

        if solver.SIGNAL in output:
            print "Done."
            break
        else:
            differential = solver.parse(output)
            x = norx.extract_input(differential)
            z = norx.extract_output(differential)
            norx.exclude(x, z)
            v = (
                [str(weight)]
                + [x[key] for key in sorted(x.keys())]
                + [str(weight)]
                + [z[key] for key in sorted(z.keys())]
            )
            solutions.append(v)
            i += 1

    return solutions
Beispiel #4
0
def do(solver_t, ws, steps, weight, enum_max, search_t, diag):

    if solver_t == 'boolector':
        import src.solver.boolector as solver
    elif solver_t == 'stp':
        import src.solver.stp as solver
    else:
        print 'Unknown solver!'
        return

    norx = NORX(ws, steps, weight, search_t, diag)
    i = 1

    solutions = []

    print 'ENUM: {} {} {} {} {} {}'.format(solver_t, search_t, ws, steps,
                                           weight, enum_max)
    while i != enum_max:
        print '{}'.format(i),
        sys.stdout.flush()

        # setup search problem for solver
        sp = setup.do(stdin=norx(), flags=setup.TFLAGS[solver_t])

        # solve
        output = solver.do(stdin=sp)

        if solver.SIGNAL in output:
            print "Done."
            break
        else:
            differential = solver.parse(output)
            x = norx.extract_input(differential)
            z = norx.extract_output(differential)
            norx.exclude(x, z)
            v = [str(weight)] + [x[key] for key in sorted(x.keys())] + [
                str(weight)
            ] + [z[key] for key in sorted(z.keys())]
            solutions.append(v)
            i += 1

    return solutions