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.

54 lines
1.7 KiB

# -*- 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()