示例#1
0
def random_involution(n):
    print 'WARNING: too low number of fixed points! not a uniform distribution'
    pairs = range(2**n)
    shuffle(pairs)
    s = [0] * 2**n
    while pairs:
        if len(pairs) == 1 or randint(1, len(pairs)) == 1:
            a = b = pairs.pop()
        else:
            a, b = pairs.pop(), pairs.pop()
        s[a] = b
        s[b] = a
    return s
示例#2
0
 def ddt_max_estimation(self, iter=100, limit=None):
     mx = 0
     for i in xrange(iter):
         dx = randint(1, self.insize - 1)
         cnt = 0
         dys = Counter()
         for x in xrange(self.insize):
             dy = self[x] ^ self[x ^ dx]
             dys[dy] += 1
             if limit is not None and dys[dy] > limit:
                 return dys[dy]
             mx = max(mx, dys[dy])
     return mx
示例#3
0
def random_sbox_of_degree(m, n, d, h**o=False, force_all_maxterms=False):
    anfs = [list() for i in xrange(n)]
    for out_bit in xrange(n):
        mindeg = 1 if h**o else 0
        for deg in xrange(mindeg, d + 1):
            for mask in hamming_masks(m, deg):
                if randint(0, 1) == 1 or (force_all_maxterms and deg == d):
                    anfs[out_bit].append(mask)
    res = []
    for x in xrange(2**m):
        y = 0
        for e, anf in enumerate(anfs):
            e = n - 1 - e
            val = 0
            for mask in anf:
                val ^= ((mask & x) == mask)
            val &= 1
            y |= val << e
        res.append(y)
    return res
示例#4
0
def random_affine(*args):
    lin = random_linear(*args)
    xor = randint(0, max(lin))
    return [y ^ xor for y in lin]
示例#5
0
def random_affine_permutation(n):
    xor = randint(0, 2**n-1)
    return [y ^ xor for y in from_matrix(random_invertible_matrix(n))]
示例#6
0
def random_Boolean_function_of_degree(m, d):
    anf = [randint(0, 1) if hw(x) <= d else 0 for x in xrange(2**m)]
    return gen.SBox2(anf, n=1).mobius()
示例#7
0
def random_function(m, n=None, h**o=False):
    n = n or m
    res = [randint(0, 2**n - 1) for i in xrange(2**m)]
    if h**o:
        res[0] = 0
    return res
示例#8
0
 def randomize_xor(self):
     a = randint(0, self.insize - 1)
     b = randint(0, self.outsize - 1)
     return self.xor(a, b)