|
|
@ -11,6 +11,42 @@ class InterfaceServeur(Interface): |
|
|
|
self.e = 42205 |
|
|
|
self.d = 769020235650503533 |
|
|
|
# à compléter |
|
|
|
self.cle_symetrique = None |
|
|
|
self.btn_hello = tk.Button("Serveur Hello", command=self.hello) |
|
|
|
self.btn_finished = tk.Button("Finished", command=self.finish) |
|
|
|
|
|
|
|
def hello(self): |
|
|
|
"""attend la réception du message HELLO depuis le client, puis envoie en |
|
|
|
clair sa clé publique""" |
|
|
|
msg_recu = self.receive() |
|
|
|
if msg_recu == "HELLO": |
|
|
|
self.entree.set(self.n) |
|
|
|
self.send() |
|
|
|
|
|
|
|
def finish(self): |
|
|
|
"""attend la réception de la clé symétrique, la déchiffre avec sa clé privée, la |
|
|
|
mémorise et envoie le message Finished chiffré avec cette clé""" |
|
|
|
msg_recu = self.receive() |
|
|
|
self.cle_symetrique = self.dechiffre_RSA(msg) |
|
|
|
self.send("Finished") |
|
|
|
|
|
|
|
def dechiffre_RSA(self, msg): |
|
|
|
"""déchiffre un message avec sa clé privée""" |
|
|
|
return self.puissance_mod_rapide(msg , self.d, self.n) |
|
|
|
|
|
|
|
def puissance_mod_rapide(self, a, b, n): |
|
|
|
"""renvoie a**b mod n""" |
|
|
|
if b == 1: |
|
|
|
return a |
|
|
|
elif b == 2: |
|
|
|
a2 = (a**2)%n |
|
|
|
elif b % 2 == 0: |
|
|
|
return self.puissance_mod_rapide(a2, b // 2, n) |
|
|
|
else: |
|
|
|
return (a * self.puissance_mod_rapide(a2, b // 2, n)) % n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
It = InterfaceServeur() |
|
|
|