|
@ -1,7 +1,7 @@ |
|
|
# -*- coding: utf-8 -*- |
|
|
# -*- coding: utf-8 -*- |
|
|
|
|
|
|
|
|
import tkinter as tk |
|
|
import tkinter as tk |
|
|
from Interface import Interface |
|
|
from Interface import Interface, puissance_mod_rapide |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class InterfaceServeur(Interface): |
|
|
class InterfaceServeur(Interface): |
|
@ -11,40 +11,34 @@ class InterfaceServeur(Interface): |
|
|
self.e = 42205 |
|
|
self.e = 42205 |
|
|
self.d = 769020235650503533 |
|
|
self.d = 769020235650503533 |
|
|
# à compléter |
|
|
# à compléter |
|
|
self.btn_hello = tk.Button("Serveur Hello", command=self.hello) |
|
|
self.waitForHelloButton = tk.Button(self, text="Serveur Hello", command=self.hello) |
|
|
self.btn_finished = tk.Button("Finished", command=self.finish) |
|
|
self.waitForHelloButton.pack() |
|
|
|
|
|
self.finishedButton = tk.Button(self, text="Finished", command=self.finish) |
|
|
|
|
|
self.finishedButton.pack() |
|
|
|
|
|
|
|
|
def hello(self): |
|
|
def hello(self): |
|
|
"""attend la réception du message HELLO depuis le client, puis envoie en |
|
|
"""attend la réception du message HELLO depuis le client, puis envoie en |
|
|
clair sa clé publique""" |
|
|
clair sa clé publique""" |
|
|
msg_recu = self.receive() |
|
|
self.receive() |
|
|
if msg_recu == "HELLO": |
|
|
if self.message.get() == "HELLO": |
|
|
self.entree.set(self.n) |
|
|
self.entree.set(self.e) |
|
|
self.send() |
|
|
self.send() |
|
|
|
|
|
else: |
|
|
|
|
|
print("HELLO n'a pas été reçu.") |
|
|
|
|
|
|
|
|
def finish(self): |
|
|
def finish(self): |
|
|
"""attend la réception de la clé symétrique, la déchiffre avec sa clé privée, la |
|
|
"""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é""" |
|
|
mémorise et envoie le message Finished chiffré avec cette clé""" |
|
|
msg_recu = self.receive() |
|
|
self.receive() |
|
|
self.set_cleSymetrique(self.dechiffre_RSA(msg)) |
|
|
cleSym = int(self.message.get()) |
|
|
self.send("Finished") |
|
|
cleSym_dechiffree = self.dechiffre_RSA(cleSym).to_bytes(7, "big") |
|
|
|
|
|
self.set_cleSymetrique(cleSym_dechiffree) |
|
|
|
|
|
self.entree.set("Finished") |
|
|
|
|
|
self.send() |
|
|
|
|
|
|
|
|
def dechiffre_RSA(self, msg): |
|
|
def dechiffre_RSA(self, msg): |
|
|
"""déchiffre un message avec sa clé privée""" |
|
|
"""déchiffre un message avec sa clé privée""" |
|
|
return self.puissance_mod_rapide(msg , self.d, self.n) |
|
|
return 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|