-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_analyzers.py
More file actions
108 lines (82 loc) · 4.97 KB
/
test_analyzers.py
File metadata and controls
108 lines (82 loc) · 4.97 KB
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
108
from unittest import TestCase, main
import os
import sys
import hashlib
from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from src.analyzers.aes_cbc_analyzer import Aes_Cbc_Analyzer
from src.analyzers.chacha20_analyzer import ChaCha20_Analyzer
class AesCbcAnalyzerTester(TestCase):
"""
Cette classe est principalement destinée à recueillir toutes les fonctions de test des analyseurs d'algorithme
de chiffrement.
"""
def setUp(self):
self.chemin_fichier_chiffre = "data/mission1.enc"
self.chemin_fichier_chiffre_invalide = "tests/fichiers_pour_tests/mission1_invalide.enc"
self.wordlist = "keys/wordlist.txt"
self.analyser = Aes_Cbc_Analyzer()
def test_aes_cbc_identifier_algo(self):
self.assertAlmostEqual(self.analyser.identifier_algo(self.chemin_fichier_chiffre), 1.0, delta=0.1)
self.assertAlmostEqual(self.analyser.identifier_algo(self.chemin_fichier_chiffre_invalide), 0)
def test_aes_cbc_filtrage_dict(self):
self.assertIsInstance(self.analyser.filtrer_dictionnaire_par_indices(self.wordlist), list)
self.assertEqual(self.analyser.filtrer_dictionnaire_par_indices(self.wordlist), ["paris2024"])
self.assertEqual(self.analyser.filtrer_dictionnaire_par_indices("chemin_dohi.txt"), [])
def test_generation_cles_candidate(self):
self.assertIsInstance(self.analyser.generer_cles_candidates(self.wordlist), list)
def test_exception_dechiffrer(self):
cles_candidates = self.analyser.generer_cles_candidates(self.wordlist)
if not cles_candidates:
self.fail("La liste des clés candidates ne devrait pas être vide.")
premiere_cle = cles_candidates[0]
with self.assertRaises(FileNotFoundError):
self.analyser.dechiffrer("no_file_dohi.txt", premiere_cle)
class ChaCha20AnalyzerTester(TestCase):
def setUp(self):
# Chemins pour ChaCha20_Analyzer
self.wordlist = "keys/wordlist.txt"
self.analyser_chacha = ChaCha20_Analyzer()
# Données de test pour ChaCha20
self.cle_test_chacha = hashlib.sha256(b"cle_test").digest()
self.nonce_test_chacha = b"\x00" * 12
self.texte_clair_test_chacha = b"Bonjour le monde, ceci est un test de chiffrement ChaCha20"
self.chemin_fichier_chacha_valide = "tests/fichiers_pour_tests/mission_chacha20_temp.enc"
self.chemin_fichier_chacha_invalide = "tests/fichiers_pour_tests/chacha20_invalide.enc"
# Générer un fichier chiffré valide pour les tests de ChaCha20
aead = ChaCha20Poly1305(self.cle_test_chacha)
texte_chiffre_test = aead.encrypt(self.nonce_test_chacha, self.texte_clair_test_chacha, None)
with open(self.chemin_fichier_chacha_valide, "wb") as f:
f.write(self.nonce_test_chacha)
f.write(texte_chiffre_test)
def tearDown(self):
if os.path.exists(self.chemin_fichier_chacha_valide):
os.remove(self.chemin_fichier_chacha_valide)
# Ajout des tests pour ChaCha20_Analyzer
def test_chacha20_identifier_algo(self):
self.assertAlmostEqual(self.analyser_chacha.identifier_algo(self.chemin_fichier_chacha_valide), 0.8, 1)
self.assertAlmostEqual(self.analyser_chacha.identifier_algo(self.chemin_fichier_chacha_invalide), 0.0, 1)
def test_chacha20_generer_cles_candidates(self):
# Comme la fonction filtrer_dictionnaire_par_indices retourne toujours une liste vide,
# generer_cles_candidates doit également retourner une liste vide.
self.assertEqual(self.analyser_chacha.generer_cles_candidates(self.wordlist), [])
def test_chacha20_dechiffrer(self):
# Test de déchiffrement avec une clé et un nonce valides
resultat_dechiffrement = self.analyser_chacha.dechiffrer(self.chemin_fichier_chacha_valide, self.cle_test_chacha)
self.assertEqual(resultat_dechiffrement, self.texte_clair_test_chacha)
# Test de déchiffrement avec une clé incorrecte
cle_incorrecte = hashlib.sha256(b"mauvaise_cle").digest()
resultat_incorrect = self.analyser_chacha.dechiffrer(self.chemin_fichier_chacha_valide, cle_incorrecte)
self.assertNotEqual(resultat_incorrect, self.texte_clair_test_chacha)
def test_chacha20_dechiffrer_mauvaise_cle(self):
# Test de l'exception pour une clé de taille incorrecte
cle_mauvaise_taille = b"a" * 16 # La bonne taille est 32
with self.assertRaises(ValueError):
self.analyser_chacha.dechiffrer(self.chemin_fichier_chacha_valide, cle_mauvaise_taille)
def test_chacha20_dechiffrer_fichier_non_existant(self):
# Test de l'exception si le fichier n'existe pas
cle_valide = self.cle_test_chacha
with self.assertRaises(FileNotFoundError):
self.analyser_chacha.dechiffrer("chemin_invalide.enc", cle_valide)
if __name__ == '__main__':
main()