def __init__(self, *args, **kwargs): # z3.set_param(auto_config=False) # http://stackoverflow.com/questions/18770582/z3-offering-random-solutions-in-solving # z3.set_param('smt.phase_selection',0) # z3.set_param('smt.random_seed',0) import os z3.init(os.getenv('Z3_LIBRARY_PATH', '.')) self.context_obj = z3.Context(*args, **kwargs) self.interpretation_map = {} self.solvers = []
_z3_paths.extend(sys.path) _z3_paths.append("/usr/lib") _z3_paths.append("/usr/local/lib") _z3_paths.append("/opt/python/lib") _z3_paths.append(os.path.join(sys.prefix, "lib")) try: z3.z3core.lib() except: for z3_path in _z3_paths: if not '.so' in z3_path and \ not '.dll' in z3_path and \ not '.dylib' in z3_path: z3_path = os.path.join(z3_path, z3_library_file) if os.path.exists(z3_path): z3.init(z3_path) break else: raise ClaripyZ3Error("Unable to find %s", z3_library_file) supports_fp = hasattr(z3, 'fpEQ') # # Utility functions # def condom(f): def z3_condom(*args, **kwargs): """ The Z3 condom intercepts Z3Exceptions and throws a ClaripyZ3Error instead.
if "VIRTUAL_ENV" in os.environ: virtual_env = os.environ["VIRTUAL_ENV"] _z3_paths.append(os.path.join(os.environ["VIRTUAL_ENV"], "lib")) _z3_paths.extend(sys.path) _z3_paths.append("/usr/lib") _z3_paths.append("/usr/local/lib") _z3_paths.append("/opt/python/lib") _z3_paths.append(os.path.join(sys.prefix, "lib")) for z3_path in _z3_paths: if not '.so' in z3_path and \ not '.dll' in z3_path and \ not '.dylib' in z3_path: z3_path = os.path.join(z3_path, z3_library_file) if os.path.exists(z3_path): z3.init(z3_path) break else: raise ClaripyZ3Error("Unable to find %s", z3_library_file) supports_fp = hasattr(z3, 'fpEQ') from ..backend import Backend #pylint:disable=unidiomatic-typecheck def condom(f): def z3_condom(*args, **kwargs): """ The Z3 condom intercepts Z3Exceptions and throws a ClaripyZ3Error instead. """
import z3, doctest import sys, re if re.compile("64 bit").search(sys.version): z3.init("..\\x64\\external_64\\z3.dll") else: z3.init("..\\external\\z3.dll") doctest.testmod(z3)
import z3 import itypes if False: # A hook swhich spawns an ipdb debugger if an uncaught exception is thrown from IPython.core import ultratb sys.excepthook = ultratb.FormattedTB(mode='Verbose', color_scheme='Linux', call_pdb=1) # Stupid z3 thing. Z3 requires z3.init to be called with it's library path. # If it hasn't, it'll throw some exceptions. Z3_LIBRARY_PATH = os.environ.get('Z3_LIBRARY_PATH') if Z3_LIBRARY_PATH: z3.init(Z3_LIBRARY_PATH) sys.setrecursionlimit(9999) def nop(*args, **kwargs): pass setattr(z3.AstRef, '__del__', nop) # Patch z3 objects with some useful methods def _is_poison(self): """A z3 term is poison if it's name starts with poison, or any of its subterms are poison."""
#!/usr/bin/env python import struct import itertools import z3 z3.init('/usr/lib64/python2.7/site-packages/z3/') fn2_groupA = [ 6, 0, 2, 13, 1, 4, 14, 7 ] fn2_groupB = [ 3, 5, 9, 10, 8, 15, 12, 11 ] class CPS2SBox(object): def __init__(self, name, *args, **kwargs): self._name = name self._sboxes = args def inputs(self, sbox_index): for i in self._sboxes[sbox_index]['in']: yield i def outputs(self, sbox_index): for o in self._sboxes[sbox_index]['out']: yield o def sbox(self, sbox_index): return self._sboxes[sbox_index]['sbox'] def to_z3(self, sbox_index): name = "{}_{}".format(self._name, sbox_index) lut = z3.Array(name, z3.BitVecSort(6), z3.BitVecSort(2)) constraints = [lut[i] == self.sbox(sbox_index)[i] for i in range(2**6)]