Пример #1
0
 def decode(self, data):
     packet = struct.unpack('<b32s20s20sbb', data)
     self.command = packet[0]
     self.srp_A = bin_to_int(packet[1])
     self.srp_M1 = bin_to_int(packet[2])
     
     #self.srp_A = int(binascii.hexlify(packet[1]), 16)
     #self.srp_M1 = int(binascii.hexlify(packet[2]), 16)
     
     
     self.crc = packet[3]
     self.number_of_keys = packet[4]
Пример #2
0
 def calcSaltVerify(self):
     self.s = binascii.unhexlify("%x" % 80214272189838780128605308367486581597145816548177813688284808124909330286083)[::-1]
     
     #self.s = os.urandom(64)
     sha = hashlib.sha1()
     sha.update(self.s) # reverse salt
     sha.update(self.passwordHash)
     x = bin_to_int(sha.digest())
     self.v = pow(self.g, x, self.N)
Пример #3
0
 def calcM2(self):
     sha = hashlib.sha1()
     sha.update(int_to_bin(self.A))
     sha.update(int_to_bin(self.B))
     
     u = bin_to_int(sha.digest())
     self.S = pow(self.A * pow(self.v, u, self.N), self.b, self.N)
     
     t = int_to_bin(self.S)
     t1 = list()
     for i in range(0, 32, 2):
         t1.append(t[i])
     sha = hashlib.sha1()
     sha.update("".join(t1))
     
     vK = list(range(0, 40))
     
     # fill even vK entries [0], [2] etc.
     for i in range(0, 20):
         vK[i * 2] = sha.digest()[i]
         
     for i in range(0, 16):
         t1[i] = t[i * 2 + 1]
         
     sha = hashlib.sha1()
     sha.update("".join(t1))
     
     # fill uneven vK entries [1], [3] etc.
     for i in range(0, 20):
         vK[i * 2 + 1] = sha.digest()[i]
         
     self.K = bin_to_int("".join(vK))
     
     sha = hashlib.sha1()
     sha.update(int_to_bin(self.N))
     N_sha = sha.digest()
     sha = hashlib.sha1()
     sha.update(int_to_bin(self.g))
     g_sha = sha.digest()
     
     hash = list()
     for i in range(0, 20):
         hash.append(int_to_bin(bin_to_int(N_sha[i]) ^ bin_to_int(g_sha[i])))
         
     t3 = "".join(hash)
     
     sha = hashlib.sha1()
     sha.update(self.username)
     t4 = sha.digest()
     
     # calculated M1
     sha = hashlib.sha1()
     sha.update(t3)
     sha.update(t4)
     sha.update(self.s)
     sha.update(int_to_bin(self.A))
     sha.update(int_to_bin(self.B))
     sha.update(int_to_bin(self.K))
     M = sha.digest()
     
     if bin_to_int(M) == self.M1:
         print "Password correct"
     
     # calculate M2
     sha = hashlib.sha1()
     sha.update(int_to_bin(self.A))
     sha.update(M)
     sha.update(int_to_bin(self.K))
     self.M2 = sha.digest()