|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
import tkinter as tk
|
|
|
|
from Interface import Interface
|
|
|
|
|
|
|
|
|
|
|
|
class InterfaceServeur(Interface):
|
|
|
|
def __init__(self):
|
|
|
|
Interface.__init__(self, "serveur")
|
|
|
|
self.n = 870567544966633301
|
|
|
|
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()
|
|
|
|
It.mainloop()
|