Skip to content
Extraits de code Groupes Projets
AutoriteCertification.py 3,71 ko
Newer Older
  • Learn to ignore specific revisions
  • 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