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')
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))
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')
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))