Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import RSA
from Certificat import Certificat
import datetime
from Errors import *
from GlobalVariables import *
count_certificat = 0
def creation_cles():
print("Création des clés")
cles = RSA.RSA_cles()
print("Clés reçues : " + str(cles))
return cles
# Classe permettant de regler la difficulte d'une AC racine
class Racine:
def __init__(self, info):
self.__info = info
def get_ID(self):
return self.__info
def get_date_fin_validite(self):
return datetime.datetime.now() + + datetime.timedelta(minutes=10)
def get_prestataire(self):
return self
def get_liste_revocation(self):
empty_dict ={}
return empty_dict
class AutoriteCertification:
def __init__(self, identite):
if identite not in AC_dict:
AC_dict[identite] = self
else:
print("Erreur, prestataire déjà existant")
raise PrestataireExistingError("Prestataire déjà existant")
self.__identite = identite
self.__cles, self.__certificat_racine = self.creation_certificat_racine()
self.__cle_publique = self.__cles["cle_publique"]
self.__cle_privee = self.__cles["cle_privee"]
self.__liste_revocation = {}
def creation_certificat_racine(self):
print("Creation certificat racine")
cles = creation_cles()
privee = cles["cle_privee"]
publique = cles["cle_publique"]
certificat = Certificat(self.__identite, privee, publique, self.__identite, self, validite=validite_certificat_AC)
certificat_dict[self.__identite] = certificat
return cles, certificat
def demande_certificat(self, identite, new_client=True, AH = False):
print("Verification de l'identité de " + identite)
# si un client non existant desire "changer" son certificat --> Erreur
if not new_client and identite not in client_dict:
print("Erreur, client non existant")
raise ClientNotExistingError("Client non existant")
# si un client existant desire creer son premier certificat --> Erreur
if new_client and identite in client_dict:
print("Erreur, client déjà existant")
raise ClientExistingError("Client déjà existant")
cles = creation_cles()
publique = cles["cle_publique"]
global count_certificat
if AH:
certificat = Certificat(count_certificat, self.__cle_privee, publique, identite, self, validite=validite_certificat_AH)
else:
certificat = Certificat(count_certificat, self.__cle_privee, publique, identite, self)
certificat_dict[count_certificat] = certificat
client_dict[identite] = cles, certificat
count_certificat = count_certificat + 1
return cles, certificat, count_certificat-1
def revocation_certificat(self, ID_certificat):
if int(ID_certificat) in self.__liste_revocation:
raise CertificateRevokedError("Certificat déjà révoqué")
timing = datetime.datetime.now()
self.__liste_revocation[int(ID_certificat)] = timing
def oublier_certificat(self, ID_certificat):
certificat = certificat_dict[int(ID_certificat)]
del certificat_dict[int(ID_certificat)]
if certificat.get_date_fin_validite() > datetime.datetime.now():
raise CertificateError("Attention suppression d'un certificat non expiré")
def get_certificat_racine(self):
try:
return self.__certificat_racine
except AttributeError:
return Racine("Je suis racine")
def get_cle_publique(self):
return self.__cle_publique
def get_liste_revocation(self):
return self.__liste_revocation