1+ import base64
12from unittest import TestCase , main
23import os
34import sys
45import hashlib
56from cryptography .hazmat .primitives .ciphers .aead import ChaCha20Poly1305
67from cryptography .hazmat .primitives .ciphers .aead import AESGCM
8+ from cryptography .fernet import Fernet
79from pathlib import Path
810sys .path .append (os .path .join (os .path .dirname (__file__ ), '..' ))
911
1012from src .analyzers .aes_cbc_analyzer import Aes_Cbc_Analyzer
1113from src .analyzers .chacha20_analyzer import ChaCha20_Analyzer
1214from src .analyzers .aes_gcm_analyzer import Aes_Gcm_Analyzer
15+ from src .analyzers .fernet_analyzer import FernetAnalyzer
16+
1317
1418
1519class AesCbcAnalyzerTester (TestCase ):
@@ -146,7 +150,50 @@ def test_aes_gcm_dechiffrer(self):
146150 resultat = self ._analyzer .dechiffrer (self ._fichier_test , cle_test )
147151 self .assertIsInstance (resultat , bytes )
148152
149-
153+ class FernetTester (TestCase ) :
154+ _wordlist = "keys/wordlist.txt"
155+ _analyzer = FernetAnalyzer ()
156+ _fichier_test = Path ('tests/fichiers_pour_tests' ) / 'fernet_invalide.enc'
157+ _texte_test = b"Test effectue pour Fernet, encore. Nous en sommes a la.fin"
158+ _key = os .urandom (32 )
150159
160+ def setUp (self ):
161+ """
162+ Crée un fichier pour les tests relatifs à Fernet
163+ """
164+ try :
165+ with open (self ._fichier_test , 'wb' ) as f :
166+ texte_chiffre = Fernet (base64 .urlsafe_b64encode (self ._key )).encrypt (self ._texte_test )
167+ f .write (texte_chiffre )
168+ f .close ()
169+ except FileNotFoundError :
170+ raise
171+
172+ def test_fernet_gk (self ):
173+ resultat = self ._analyzer .generer_cles_candidates (self ._wordlist )
174+ self .assertIsInstance (resultat , list )
175+ # Vérifier que tous les éléments sont des bytes
176+ for cle in resultat :
177+ self .assertIsInstance (cle , bytes )
178+
179+ def test_fernet_id_algo (self ):
180+ #Vérifier que seul le fichier mission 5 a plus de 0.8 de score pour l'identification de Fernet
181+ for i in range (5 ) :
182+ if i + 1 != 5 and self ._analyzer .identifier_algo (f"mission{ i + 1 } .enc" ) >= 0.8 :
183+ raise Exception ('Non correspondance entre probabilité et algorithme.' )
184+
185+ def test_dechiffrer (self ) :
186+ #Vérifie que le déchiffrement de fernet est opérationnel
187+ resultat = self ._analyzer .dechiffrer
188+ self .assertEqual (resultat (self ._fichier_test , self ._key ), self ._texte_test )
189+
190+ #Vérifie le cas de clé non correspondante
191+ with self .assertRaises (ValueError ) :
192+ self .assertIsInstance (resultat (self ._fichier_test , os .urandom (16 )), ValueError )
193+
194+ #Vérifie le cas de fichier non trouvé
195+ with self .assertRaises (FileNotFoundError ):
196+ self .assertIsInstance (resultat ('dohi.txt' , os .urandom (32 )), FileNotFoundError )
197+
151198if __name__ == '__main__' :
152- main ()
199+ main ()
0 commit comments