示例#1
0
文件: md.py 项目: Tubbz-alt/crysp-1
 def SEQ(self, M, bitlen=None):
     pad = Nullpadding(3072)
     B = [
         struct.unpack('>48Q', X) for X in pad.iterblocks(M, bitlen=bitlen)
     ]
     j = len(B)
     z = 0
     d, keylen, L, r = self.size, self.keylen, self.L, self.rounds
     V = Bits(d, 12) // Bits(keylen, 8) // Bits(0, 16) // Bits(
         z, 4) // Bits(L, 8) // Bits(r, 12) // Bits(0, 4)
     C = Poly(0, 64, dim=16)
     W = Poly(Q, 64, dim=89) // Poly(self.K, 64)
     W.dim = 89
     W[24] = V
     U = (self.L + 1) << 56
     for i in range(j):
         if i == (j - 1):
             V[20:36] = pad.padcnt
             V[36:40] = Bits(1, 4)
             W[24] = V
         W[23] = U + i
         W[25:41] = C
         W[41:89] = B[i]
         C = self.f(W)
     h = concat(list(C)[::-1])
     h.size = self.size
     return pack(h, '>L')
示例#2
0
 def initstate(self, salt=b'', pers=b'', keylen=0, **kargs):
     super(Blake2, self).initstate(0)
     self.padmethod = Nullpadding(self.blocksize)
     self.outlen = kargs.get('outlen', self.outlen)
     self.rounds = 12 if self.size > 256 else 10
     l = self.wsize // 4
     if salt is b'': salt = b'\0' * l
     if pers is b'': pers = b'\0' * l
     self.keylen = keylen
     assert 0 < self.outlen <= self.wsize
     assert self.keylen <= self.wsize
     self.treeinit(**kargs)
     self.paramblock(salt, pers)
示例#3
0
文件: md.py 项目: Tubbz-alt/crysp-1
 def PAR(self, l, M, bitlen=None):
     pad = Nullpadding(4096)
     B = [
         struct.unpack('>64Q', X) for X in pad.iterblocks(M, bitlen=bitlen)
     ]
     j = len(B)
     z = 1 if j == 1 else 0
     d, keylen, L, r = self.size, self.keylen, self.L, self.rounds
     V = Bits(d, 12) // Bits(keylen, 8) // Bits(0, 16) // Bits(
         z, 4) // Bits(L, 8) // Bits(r, 12) // Bits(0, 4)
     C = []
     W = Poly(Q, 64) // Poly(self.K, 64)
     W.dim = 89
     W[24] = V
     for i in range(j):
         if i == (j - 1):
             V[20:36] = pad.padcnt
             W[24] = V
         U = (l << 56) + i
         W[23] = U
         W[25:89] = B[i]
         C.append(self.f(W))
     Ml = concat(C)
     return b''.join((pack(c, '>L') for c in Ml))