|
4 | 4 | import sys |
5 | 5 | import hashlib |
6 | 6 | from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 |
| 7 | +from Crypto.Cipher import Blowfish |
| 8 | +from struct import pack |
| 9 | + |
7 | 10 | from cryptography.hazmat.primitives.ciphers.aead import AESGCM |
8 | 11 | from cryptography.fernet import Fernet |
9 | 12 | from pathlib import Path |
10 | 13 | sys.path.append(os.path.join(os.path.dirname(__file__), '..')) |
11 | 14 |
|
12 | 15 | from src.analyzers.aes_cbc_analyzer import Aes_Cbc_Analyzer |
13 | 16 | from src.analyzers.chacha20_analyzer import ChaCha20_Analyzer |
| 17 | +from src.analyzers.blowfish_analyzer import Blowfish_Analyzer |
14 | 18 | from src.analyzers.aes_gcm_analyzer import Aes_Gcm_Analyzer |
15 | 19 | from src.analyzers.fernet_analyzer import FernetAnalyzer |
16 | 20 |
|
@@ -116,6 +120,51 @@ def test_chacha20_dechiffrer_fichier_non_existant(self): |
116 | 120 | cle_valide = self.cle_test_chacha |
117 | 121 | with self.assertRaises(FileNotFoundError): |
118 | 122 | self.analyser_chacha.dechiffrer("chemin_invalide.enc", cle_valide) |
| 123 | + |
| 124 | + |
| 125 | +class BlowfishAnalyzerTester(TestCase): |
| 126 | + |
| 127 | + """ |
| 128 | + Cette classe contient les différents tests éffectués sur les méthodes en rapport avec l'analyzer Blowfish |
| 129 | + """ |
| 130 | + |
| 131 | + def setUp(self): |
| 132 | + # Initialisation de la classe Blowfish_Analyzer pour les tests des méthodes de cette dernière |
| 133 | + self.analyzer = Blowfish_Analyzer() |
| 134 | + # Fichier invalide pour les tests d'exceptions et de résultat d'erreur |
| 135 | + self.fichier_crypte_invalide = "tests/fichiers_pour_tests/mission3_invalide.enc" |
| 136 | + self.fichier_crypte_valide = "tests/fichiers_pour_tests/mission3_valide.enc" |
| 137 | + self.fichier_dictionnaire = "./keys/wordlist.txt" |
| 138 | + self.key = b'This is 2 blowfish algorithm key' |
| 139 | + self.mot_a_trouver = b'zertyuiopqsdfghjklmwxcvbn,;&1234567890iubdo,cap!=)"_' |
| 140 | + |
| 141 | + # def test_identifier_algo(self): |
| 142 | + # self.assertAlmostEqual(self.analyzer.identifier_algo(self.fichier_crypte_invalide), 0.0) |
| 143 | + # self.assertAlmostEqual(self.analyzer.identifier_algo(self.fichier_crypte_valide), 0.7) |
| 144 | + |
| 145 | + def test_generer_cles_candidates(self): |
| 146 | + # Dans ce cas, on a un dictionnaire qui contient des valeurs qui ne cadrent pas |
| 147 | + # avec notre fichier de test, donc la génération renverra une liste vide |
| 148 | + self.assertNotEqual(self.analyzer.generer_cles_candidates(self.fichier_dictionnaire), []) |
| 149 | + |
| 150 | + def test_dechiffrer_taille_cle_invalide(self): |
| 151 | + # On tente de lever l'exception ValueError en renseignant une clé ne respectant |
| 152 | + # l'intervalle pour la taille requise |
| 153 | + invalide_key = b'\x00' |
| 154 | + with self.assertRaises(ValueError): |
| 155 | + self.analyzer.dechiffrer(self.fichier_crypte_valide, invalide_key) |
| 156 | + |
| 157 | + def test_dechiffrer_fichier_introuvable(self): |
| 158 | + # Vérification de l'exception FileNotFoundError |
| 159 | + with self.assertRaises(FileNotFoundError): |
| 160 | + self.analyzer.dechiffrer('dohi.txt', self.key) |
| 161 | + |
| 162 | + def test_dechiffrer_fichier(self): |
| 163 | + # Déchiffrement du fichier valide en utilisant la bonne clé |
| 164 | + self.assertEqual(self.analyzer.dechiffrer(self.fichier_crypte_valide, self.key), self.mot_a_trouver) |
| 165 | + |
| 166 | + # Cas où la valeur de sortie ne correspond à celle attendue |
| 167 | + self.assertNotEqual(self.analyzer.dechiffrer(self.fichier_crypte_valide, self.key), b'Dohi 1 fois') |
119 | 168 |
|
120 | 169 | class AesGcmTester(TestCase) : |
121 | 170 | _wordlist = "keys/wordlist.txt" |
|
0 commit comments