Bien que la gestion d’un Réflecteur va ressembler indubitablement à celle d’un Rotor, elle demeure plus simple car il n’y a qu’un seul sens de « traversée. Sur la chiffreuse que l’on va simuler, c’est à dire celle modèle M3 qui était utilisée dans la Kriegsmarine, on disposait de deux Réflecteurs B et C qui pouvaient prendre place à gauche du Brouilleur. La Fig.42 précise les transpositions qu’ils effectuaient ce que devra simuler notre programme.
Inutile de créer un autre démonstrateur pour tester ces deux réflecteurs, car ils sont déjà intégrés dans P04_Les_cinq_Rotors.ino présente l’ossature pour assurer cette tâche. Il suffit de rajouter les deux commandes ‘B‘ et ‘C‘ pour choisir ces éléments. Les sens déjà initialisés seront ignorés pour ces éléments puisqu’une seule permutation sera opérée dans le Réflecteur.
MANIPULATIONS :
01) Pour la forme « repartir à zéro » avec un RESET.
02) Dans la fenêtre de saisie frapper ‘6‘ pour imposer le Réflecteur B.
03) Frapper un ‘i’ pour Initialiser la machine dans cette configuration de test.
04) Frapper alors un « & » pour passer en mode CRYPTAGE.
05) Proposer les 26 lettres possibles en validant pour chacune. Comparer les résultats obtenus avec ceux du tableau « haut » de la Fig.42 le chiffrement étant en bleu.
06) Frapper alors un « & » pour revenir au mode COMMANDE.
07) Enfin proposer ‘7‘ pour vérifier le Réflecteur C suivi de ‘i‘ pour le configurer.
08) Retourner en CRYPTAGE avec ‘&‘. et proposer à nouveau 26 lettres en validant pour chacune.
09) Comparer les résultats obtenus avec ceux du tableau « bas » de la Fig.42 chiffrement en bleu.
11) Un dernier « & » pour laisser le démonstrateur en mode COMMANDE.
Initialiser la chiffreuse Énigma.
Passage obligé avant de pouvoir « câbler virtuellement la codeuse » il nous faut impérativement disposer du tableau des Fiches croisées, du coup on va devoir mettre en place toutes les variables décrivant la structure de la machine. (Variables précisant les rotors installés et leur indexations internes …) C’est P05_Initialiser_la_chiffreuse_Enigma.ino qui va mettre en place les séquences et les données afférentes à la nouvelle fonction. Comme ce démonstrateur ne contiendra plus que du code « définitif », il servira de noyau de base pour les développements futurs. On se contentera étape par étape de le reprendre pour ajouter pas à pas les nouvelles fonctionnalités. Testons l’initialisation qui se contente ici de conditionner les trois Rotors et les deux Réflecteurs.
MANIPULATIONS :
01) Faire un RESET et téléverser P05_Initialiser_la_chiffreuse_Enigma.ino
02) Cliquer sur « Loupe » pour activer le Moniteur à 57600 baud.
03) Dans la fenêtre de saisie frapper ‘I’ pour Initialiser la machine. Le programme affiche le mode
« >>> INITIALISATION <<< » et demande le numéro du Rotor de droite.
04) Répondre avec le chiffre ‘4‘ par exemple. (On a sélectionné le Rotor IV.) Le programme enchaîne automatiquement la saisie pour le Rotor du centre.
05) Proposer le chiffre ‘2‘ par exemple. P05 demande de saisir le Rotor de gauche.
06) Frapper alors un « 9 » pour générer volontairement une erreur. Tant que la réponse ne sera pas correcte c’est à dire un chiffre compris entre 1 et 5 le programme insistera lourdement.
07) Tester avec « 3ABCD » pour voir la réaction du programme. (P05 persiste)
08) Tester avec « 333 » pour titiller l’analyseur syntaxique. Le programme se contente de signaler l’erreur. Toutefois, comme tous les caractères sont des chiffres valides, la réponse est prise en compte. (Pour ne pas pénaliser l’opérateur si le clavier est passé inopinément en répétition.)
09) Proposer « 12 » pour l’indexation interne du Rotor placé à droite sur la machine.
10) Puis « 26 » pour celui situé au centre sur la machine.
11) Tester « 46 » , ‘0‘, ‘a‘, « 27 » pour constater qu’il faut impérativement donner des valeurs comprises entre 1 et 26 pour franchir cette étape.
12) Enfin « 00008 » est accepté et montre que les zéros en tête sont ignorés.
13) Frapper ‘b‘ pour orienter le Rotor placé à droite.
14) Frapper ‘x‘ pour orienter le Rotor placé au centre.
15) Tenter ‘5‘, ‘&’, ‘*‘ pour constater que dans cette phase tout caractère autre qu’une lettre sera ignoré et déclenchera un message d’alerte typé accompagné d’un BIP sonore.
16) Tester ‘é‘ : Les accentués sont acceptés et transformés en caractères simples. À ce stade le programme enchaîne automatiquement sur la saisie pour le choix du Réflecteur.
17) Tenter ‘a‘, ‘&‘, ‘*‘ ,’5‘, ‘d‘, ‘f » : Tout caractère autre que ‘b‘ ou ‘c‘ sera refusé.
18) Vérifier avec « bc » : Il y a un message d’alerte, mais le premier caractère étant valide, il est correctement pris en compte et l’on revient au mode COMMANDE.
19) Enfin proposer ‘c‘ pour faire afficher la configuration actuelle. On remarque que la présentation de la configuration est formatée et que le numéro des rotors est indiqué en chiffres romains.
Encore un petit bilan sur l’évolution du programme.
Avec l’implantation de la fonction INITIALISATION nous avons amorcé une fonction particulièrement gourmande en octets. Rien d’étrange à cela, car elle enchaîne pas mal de saisies différentes qu’il faut accompagner avec des textes d’invite sans compter les nombreux tests à effectuer dans l’analyseur syntaxique pour détecter les erreurs de logique dans les manipulations. Ces derniers sont forcément gros consommateurs d’énergie. Même remarque pour l’affichage formaté de l’initialisation de la machine. Actuellement, cette fonction consomme environ 1454 octets de programme soit 5% de l’espace disponible. Ça n’a rien d’anormal et il ne faut pas s’en inquiéter même si les dialogues ont augmenté la place prise dans la mémoire dynamique de 6% environ. Nous savons que les textes des dialogues de l’interface Homme/Machine impactent directement les ressources de l’ATmega328. C’est la raison pour laquelle il importe de les réduire au maximum tout en conservant la convivialité d’exploitation … un compromis délicat à satisfaire !
Changement de stratégie, simplification du menu de base.
Initialiser la machine « en cascade » s’avère bien plus agréable à l’usage que d’avoir à spécifier à chaque élément à conditionner son type. C’est donc après diverses tentatives la ligne de conduite qui a été adoptée. Les manipulations sont donc plus conviviales ce qui améliore la qualité opérationnelle de notre chiffreuse virtuelle. Du coup, le sous-menu vert de la Fig.30 en page 18 ne se justifie plus ce qui permet une simplification du programme et un gain de place important dans la mémoire dynamique. (Le nouveau menu est montré en Fig.45) La contrepartie, c’est qu’il faut remplacer un
certain nombre de textes dans l’EEPROM. Pour ne pas perturber le didacticiel, c’est dans une deuxième version de l’outil nommé P00B_Initialiser_EEPROM.ino que sont logés les « textes définitifs ». Avant de procéder à ce travail assez rébarbatif, dans un démonstrateur provisoire ont été écrite un certain nombre de procédures futures. Ainsi on va placer dans l’EEPROM des textes « définitifs » et optimisés. Par ailleurs l’implantation de la sauvegarde de la CONFIGURATION en mémoire EEPROM est maintenant stabilisée à celle de la Fig.46 où l’on voit qu’il ne reste plus que deux octets non utilisés dans la zone jaune. En 5 sera placé B ou C du Réflecteur. En 1 sont indiqués les Rotors utilisés avec en 2 leur indexation interne et en 3 leur Orientation initiale. C’est en 4 que se loge le GROUPE d’identification du message transmis par l’opérateur radio. Enfin c’est en 6 que l’on préserve la combinatoire des dix Fiches croisées noté 5 sur la Fig.2 donnée en page 2.
La suite est ici.