Page MenuHomec4science

ex2.py
No OneTemporary

File Metadata

Created
Mon, Feb 24, 04:04
import websockets
import asyncio
import random
import binascii
import hashlib
mymail="dennis.gankin@epfl.ch"
N="EEAF0AB9ADB38DD69C33F80AFA8FC5E86072618775FF3C0B9EA2314C9C256576D674DF7496EA81D3383B4813D692C6E0E0D5D8E250B98BE48E495C1D6089DAD15DC7D7B46154D6B6CE8EF4AD69B15D4982559B297BCF1885C529F566660E57EC68EDBC3C05726CC02FD4CBF4976EAA9AFD5138FE8376435B9FC61D2FC0EB06E3"
g = 2
#password
p="KgAYCxtTXQIPCksITigQHQcCDhcH"
N_int= int(N,16)
def enc(i):
buff=i.to_bytes((i.bit_length()+7)//8,'big')
return binascii.hexlify(buff).decode()
def encb(i):
return i.to_bytes((i.bit_length()+7)//8,'big')
def dec(rec):
buff=binascii.unhexlify(rec)
return int.from_bytes(buff,'big')
async def hello():
async with websockets.connect("ws://com402.epfl.ch/hw2/ws") as websocket:
mymail_enc=mymail.encode()
await websocket.send(mymail_enc)
print("> {}".format(mymail))
salt_enc = await websocket.recv()
print("< {}".format(salt_enc))
salt=dec(salt_enc)
#create random
a= random.randrange(2**32)
A=pow(g,a,N_int)
#send A
A_enc= enc(A)
await websocket.send(A_enc)
print("> {}".format(A))
#receive B
B_enc = await websocket.recv()
print("< {}".format(B_enc))
B= dec(B_enc)
#compute u
u=hashlib.sha256(encb(A)+encb(B)).hexdigest()
#compute x
x=hashlib.sha256(encb(salt)+hashlib.sha256((mymail+":"+p).encode()).digest()).hexdigest()
#compute S
S_base = B-pow(g,dec(x),N_int)
S_pow=a+dec(u)*dec(x)
S=pow(S_base,S_pow,N_int)
#send H(ABS)
S_enc=hashlib.sha256(encb(A)+encb(B)+encb(S)).hexdigest()
await websocket.send(S_enc)
print("> {}".format(S_enc))
#receive token
token_enc = await websocket.recv()
print("< {}".format(token_enc))
print (token_enc)
def main():
asyncio.get_event_loop().run_until_complete(hello())
if __name__ == '__main__':
main()

Event Timeline