You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.2 KiB
59 lines
2.2 KiB
# -*- coding: utf-8 -*-
|
|
|
|
import tkinter as tk
|
|
from random import SystemRandom
|
|
from Interface import Interface, puissance_mod_rapide
|
|
|
|
|
|
class InterfaceClient(Interface):
|
|
def __init__(self):
|
|
Interface.__init__(self, "client")
|
|
# à compléter
|
|
self.sendHelloButton = tk.Button(self, text="Hello", command=self.hello)
|
|
self.sendHelloButton.pack()
|
|
self.keyExchangeButton = tk.Button(self, text="KeyExchange", command=self.keyExchange, state="disabled")
|
|
self.keyExchangeButton.pack()
|
|
|
|
def hello(self):
|
|
"""envoie en clair le message HELLO"""
|
|
self.entree.set("HELLO")
|
|
self.send()
|
|
self.sendHelloButton['state'] = "disabled"
|
|
self.keyExchangeButton['state'] = "normal"
|
|
|
|
def keyExchange(self):
|
|
"""attend la clé publique du serveur
|
|
choisit une clé symétrique aléatoire de 7 caractères
|
|
la transmet en la chiffrant avec la clé publique du serveur
|
|
attend le message Finished du serveur chiffré avec cette clé"""
|
|
self.receive()
|
|
clePubliqueServeur = tuple(map(int, self.message.get().split(";")))
|
|
print(clePubliqueServeur)
|
|
#
|
|
cleSymetriqueClair = symKeyGen()
|
|
#
|
|
cleSymetriqueClair_bytes = int.from_bytes(cleSymetriqueClair, "big")
|
|
cleSymetrique_chifree = self.chiffre_RSA(cleSymetriqueClair_bytes, clePubliqueServeur)
|
|
self.entree.set(str(cleSymetrique_chifree))
|
|
self.send()
|
|
#
|
|
self.set_cleSymetrique(cleSymetriqueClair)
|
|
self.receive()
|
|
if self.message.get() == "Finished":
|
|
print("Connection sécurisée établie ☺")
|
|
self.keyExchangeButton['state'] = "disabled"
|
|
self.sendButton['state'] = "normal"
|
|
self.recvButton['state'] = "normal"
|
|
|
|
def chiffre_RSA(self, msg, cle):
|
|
"""chiffre un message avec une clé publique"""
|
|
return puissance_mod_rapide(msg, cle[0], cle[1])
|
|
|
|
|
|
def symKeyGen():
|
|
"""renvoie une clé symétrique aléatoire de 7 caractères"""
|
|
return bytes([SystemRandom().randint(0, 255) for _ in range(7)])
|
|
|
|
|
|
It = InterfaceClient()
|
|
It.mainloop()
|
|
|