11from unittest import TestCase , main
2+ import os
23import sys
3- sys .path .append ('.' )
4- sys .path .append ('..' )
4+ import hashlib
5+ from cryptography .hazmat .primitives .ciphers import Cipher , algorithms
6+
7+ sys .path .append (os .path .join (os .path .dirname (__file__ ), '..' ))
8+ sys .path .append (os .path .join (os .path .dirname (__file__ ), '..' , '..' ))
9+
510from src .analyzers .aes_cbc_analyzer import Aes_Cbc_Analyzer
11+ from src .analyzers .chacha20_analyzer import ChaCha20_Analyzer
612
7- class AnalyzersTester (TestCase ):
813
14+ class AesCbcAnalyzerTester (TestCase ):
915 """
10- Cette classe est principalement destinée à recueillir toutes les fonctions de test des analyseurs d'algorithme
11- de chiffrement.
16+ Cette classe est principalement destinée à recueillir toutes les fonctions de test des analyseurs d'algorithme
17+ de chiffrement.
1218 """
1319
1420 def setUp (self ):
@@ -40,6 +46,61 @@ def test_exception_dechiffrer(self):
4046
4147 with self .assertRaises (FileNotFoundError ):
4248 self .analyser .dechiffrer ("no_file_dohi.txt" , premiere_cle )
49+
50+ class ChaCha20AnalyzerTester (TestCase ):
51+
52+ def setUp (self ):
53+ # Chemins pour ChaCha20_Analyzer
54+ self .wordlist = "keys/wordlist.txt"
55+ self .analyser_chacha = ChaCha20_Analyzer ()
56+
57+ # Données de test pour ChaCha20
58+ self .cle_test_chacha = hashlib .sha256 (b"cle_test" ).digest ()
59+ self .nonce_test_chacha = b"\x00 " * 12
60+ self .texte_clair_test_chacha = b"Bonjour le monde, ceci est un test de chiffrement ChaCha20"
61+ self .chemin_fichier_chacha_valide = "tests/fichiers_pour_tests/chacha20_valide.enc"
62+ self .chemin_fichier_chacha_invalide = "tests/fichiers_pour_tests/chacha20_invalide.enc"
4363
64+ # Générer un fichier chiffré valide pour les tests de ChaCha20
65+ cipher_chacha = Cipher (algorithms .ChaCha20 (self .cle_test_chacha , self .nonce_test_chacha ), mode = None )
66+ encryptor = cipher_chacha .encryptor ()
67+ texte_chiffre_test = encryptor .update (self .texte_clair_test_chacha )
68+ with open (self .chemin_fichier_chacha_valide , "wb" ) as f :
69+ f .write (self .nonce_test_chacha )
70+ f .write (texte_chiffre_test )
71+
72+ # Ajout des tests pour ChaCha20_Analyzer
73+ def test_chacha20_identifier_algo (self ):
74+ self .assertAlmostEqual (self .analyser_chacha .identifier_algo (self .chemin_fichier_chacha_valide ), 1.0 , 1 )
75+ self .assertAlmostEqual (self .analyser_chacha .identifier_algo (self .chemin_fichier_chacha_invalide ), 0.0 , 1 )
76+
77+ def test_chacha20_generer_cles_candidates (self ):
78+ # Comme la fonction filtrer_dictionnaire_par_indices retourne toujours une liste vide,
79+ # generer_cles_candidates doit également retourner une liste vide.
80+ self .assertEqual (self .analyser_chacha .generer_cles_candidates (self .wordlist ), [])
81+
82+ def test_chacha20_dechiffrer (self ):
83+ # Test de déchiffrement avec une clé et un nonce valides
84+ resultat_dechiffrement = self .analyser_chacha .dechiffrer (self .chemin_fichier_chacha_valide , self .cle_test_chacha )
85+ self .assertEqual (resultat_dechiffrement , self .texte_clair_test_chacha )
86+
87+ # Test de déchiffrement avec une clé incorrecte
88+ cle_incorrecte = hashlib .sha256 (b"mauvaise_cle" ).digest ()
89+ resultat_incorrect = self .analyser_chacha .dechiffrer (self .chemin_fichier_chacha_valide , cle_incorrecte )
90+ self .assertNotEqual (resultat_incorrect , self .texte_clair_test_chacha )
91+
92+ def test_chacha20_dechiffrer_mauvaise_cle (self ):
93+ # Test de l'exception pour une clé de taille incorrecte
94+ cle_mauvaise_taille = b"a" * 16 # La bonne taille est 32
95+ with self .assertRaises (ValueError ):
96+ self .analyser_chacha .dechiffrer (self .chemin_fichier_chacha_valide , cle_mauvaise_taille )
97+
98+ def test_chacha20_dechiffrer_fichier_non_existant (self ):
99+ # Test de l'exception si le fichier n'existe pas
100+ cle_valide = self .cle_test_chacha
101+ with self .assertRaises (FileNotFoundError ):
102+ self .analyser_chacha .dechiffrer ("chemin_invalide.enc" , cle_valide )
103+
104+
44105if __name__ == '__main__' :
45106 main ()
0 commit comments