示例#1
0
 def do_round(self, v, k):
     nv = 0
     op = self.op_params[k]
     for i in range(0x20):
         b = v >> op.perm[i] & 1
         nv = nv | (b << i)
     nv = nv ^ op.xorv
     nv = rotlu32(nv, op.shiftv)
     nv = modu32(nv + op.addv)
     return nv
示例#2
0
 def itsf(self, vals):
     res = []
     for i in range(len(vals)):
         v = vals[i]
         for j in range(0x80):
             v = self.do_iround(v, i)
         v = modu32(v - self.op_params[i].add0)
         res.append(v)
     res[0] ^= res[2]
     res[1] ^= res[3]
     return res
示例#3
0
 def tsf(self, vals, nr=0x80):
     vals[0] ^= vals[2]
     vals[1] ^= vals[3]
     res = []
     for i in range(len(vals)):
         v = vals[i]
         v = modu32(v + self.op_params[i].add0)
         for j in range(nr):
             v = self.do_round(v, i)
         res.append(v)
     return res
示例#4
0
    def do_iround(self, v, k):
        op = self.op_params[k]

        v = modu32(v - op.addv)
        v = rotlu32(v, -op.shiftv)
        v = v ^ op.xorv
        nv = 0
        for i in range(0x20):
            b = v >> i & 1
            nv = nv | (b << op.perm[i])
        return nv
示例#5
0
 def find_s3(self, tb):
     need = modu32(-rotlu32(W1_CMP, -0x11) + (0xb00bface ^ tb[0] ^ tb[1]))
     need = need ^ 0xdeadbeef ^ tb[2]
     return need
示例#6
0
 def checksum(self, tb):
     v = (0xb00bface ^ tb[0] ^ tb[1]) - (0xdeadbeef ^ tb[2] ^ tb[3])
     v = rotlu32(modu32(v), 0x11)
     return v