def gfunc(w, keyyielder): g1 = c.getbyteAt(w, 1) g2 = c.getbyteAt(w, 0) g3 = c.fvalue(g2 ^ keyyielder()) ^ g1 g4 = c.fvalue(g3 ^ keyyielder()) ^ g2 g5 = c.fvalue(g4 ^ keyyielder()) ^ g3 g6 = c.fvalue(g5 ^ keyyielder()) ^ g4 return c.concat(g5, g6)
def generateSubkeys(k): arr = [] for rnd in range(c.numround): for x in range(12): k = c.rol(k, c.keylen * 8) arr.append(c.getbyteAt(k, ((4 * rnd) + (x % 4)) % c.keylen)) return arr
def generateSubkeys(k): arr = [0 for x in range(12 * c.numround)] i = 0 for rnd in range(c.numround - 1, -1, -1): for x in range(11, -1, -1): arr[i * 12 + x] = c.getbyteAt(k, ((4 * rnd) + (x % 4)) % c.keylen) k = c.ror(k, c.keylen * 8) i += 1 return arr
def __encrypt__(p, k, keyyielder): w = c.whitening(p, k) arr = [ c.getbyteAt(w, 3, 2), c.getbyteAt(w, 2, 2), c.getbyteAt(w, 1, 2), c.getbyteAt(w, 0, 2) ] for rnd in range(c.numround): arr = roundfunc(arr, keyyielder) y = c.concat(c.concat(arr[2], arr[3], 2), c.concat(arr[0], arr[1], 2), 4) ci = c.whitening(y, k) return [ c.getbyteAt(ci, 3, 2), c.getbyteAt(ci, 2, 2), c.getbyteAt(ci, 1, 2), c.getbyteAt(ci, 0, 2) ]