Example #1
0
 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 = []
Example #2
0
_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.
Example #3
0
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.
        """
Example #4
0
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)
Example #5
0
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."""
Example #6
0
#!/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)]