From f8fac2f8f1a1112463b8f110c2f83b43312d4056 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 24 May 2015 12:09:38 +0200 Subject: [PATCH] +shell fini (encode/decode/send/write/read/init/config) +a faire:factoriser encode=decode [stable~70] --- enigmail/bucket-file | 3 +- enigmail/enigmail.sh | 3 + enigmail/source/interface.py | 123 ++++++++++++++++++++++------------- 3 files changed, 83 insertions(+), 46 deletions(-) diff --git a/enigmail/bucket-file b/enigmail/bucket-file index 719a1e4..c7ea974 100644 --- a/enigmail/bucket-file +++ b/enigmail/bucket-file @@ -21,4 +21,5 @@ http://www.leboncoin.fr Mobile.leboncoin.fr, découvrez notre nouveau site mobile en vous connectant depuis votre téléphone portable. http://mobile.leboncoin.fr -M \ No newline at end of file + +? \ No newline at end of file diff --git a/enigmail/enigmail.sh b/enigmail/enigmail.sh index 1d7a6a9..6995b28 100644 --- a/enigmail/enigmail.sh +++ b/enigmail/enigmail.sh @@ -14,6 +14,9 @@ then # si 1 paramètre 'write') nano "$path/bucket-file";; # ouvre en modification le bucket file # ouvre en lecture le bucket file 'read') echo "\n======================================="; cat "$path/bucket-file"; echo "\n=======================================";; + 'encode') python "$path/source/interface.py" encode;; + 'decode') python "$path/source/interface.py" decode;; + 'send') python "$path/source/interface.py" send;; *) echo "Erreur"; esac; else diff --git a/enigmail/source/interface.py b/enigmail/source/interface.py index b1c9559..01df6f5 100644 --- a/enigmail/source/interface.py +++ b/enigmail/source/interface.py @@ -2,16 +2,35 @@ from enigmail import * import getpass, sys, os -path = os.path.abspath( os.path.dirname(sys.argv[0]) ); -# paramètres utilisateurs -conf = getConf(path); -if( conf == False ): # si manque des paramètres - print "parametres manquants"; + + + + + + + +# on teste l'existence du paramètre passé à l'appel (encode/decode/send) +if( len(sys.argv) == 2 and sys.argv[1] == 'encode' or sys.argv[1] == 'decode' or sys.argv[1] == 'send' ): + arg = sys.argv[1]; +else: + print("Erreur"); raise SystemExit(0); + + + + + + + +path = os.path.abspath( os.path.dirname(sys.argv[0]) ); +# OUVERTURE ET LECTURE DU FICHIER +inFile = open(path + '/../bucket-file', 'r'); +m = inFile.read().decode('utf-8'); +inFile.close(); # DEFINITION DE L'ALPHABET SIGMA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; # maj SIGMA += 'abcdefghijklmnopqrstuvwxyz'; # min @@ -23,56 +42,70 @@ SIGMA = SIGMA.decode('utf-8'); SIGMA = list(SIGMA); -# CHOIX DE LA CLE -userkey = int( raw_input('Cle (hex ou int): '), 0); - -# CALCUL de LEVEL en fonction de la clé (LEVEL = nombre de rotors) -LEVEL = calcLevel(userkey, SIGMA); -# DECOMPOSITION DE LA CLE PRIMAIRE EN CLES SECONDAIRES -KEY = decomposeKey(userkey, len(SIGMA), LEVEL); -# CREATION DES ROTORS EN FONCTION DES CLES SECONDAIRES -ROTOR = []; -ROTOR.append( [] ); -# on cree les rotors grace a SIGMA et aux cles recuperees -for i in range(0, LEVEL): - ROTOR.append( shuffle( SIGMA, KEY[i]) ); # on creer le rotor et le melange suivant la cle - ROTOR[0].append( ROTOR[i+1][0] ); # on enregistre la l&ettre en premiere position dans la premiere entree du rotor -# AFFICHAGE DES ROTORS -# printRotors(ROTOR); - -# OUVERTURE ET LECTURE DU FICHIER -inFile = open(path + '/../bucket-file', 'r'); -m = inFile.read().decode('utf-8'); -inFile.close(); - -# CHOIX DU TYPE (ENCODE+MAIL / ENCODE / DECODE) -type = ''; -while( type != 'M' and type != 'C' and type != 'D' ): - type = ( raw_input('[M] Crypter et envoyer par mail\n[C] Crypter\n[D] Décrypter\n> ') ).upper(); - print; -# VARIABLE DU HASH -M = ''; -if( type == 'M' or type == 'C' ): + + + + + + + +if( arg == 'encode'): + # CHOIX DE LA CLE + userkey = int( raw_input('Cle (hex ou int): '), 0); + + # CALCUL de LEVEL en fonction de la clé (LEVEL = nombre de rotors) + LEVEL = calcLevel(userkey, SIGMA); + # DECOMPOSITION DE LA CLE PRIMAIRE EN CLES SECONDAIRES + KEY = decomposeKey(userkey, len(SIGMA), LEVEL); + # CREATION DES ROTORS EN FONCTION DES CLES SECONDAIRES + ROTOR = []; + ROTOR.append( [] ); + # on cree les rotors grace a SIGMA et aux cles recuperees + for i in range(0, LEVEL): + ROTOR.append( shuffle( SIGMA, KEY[i]) ); # on creer le rotor et le melange suivant la cle + ROTOR[0].append( ROTOR[i+1][0] ); # on enregistre la l&ettre en premiere position dans la premiere entree du rotor M = encodeStr(m, SIGMA, ROTOR); # ENCODAGE DU MESSAGE -else: + # ECRITURE FICHIER + outFile = open(path + '/../bucket-file', 'w'); + outFile.write( M.encode('utf-8') ); + outFile.close(); + +elif( arg == 'decode' ): + # CHOIX DE LA CLE + userkey = int( raw_input('Cle (hex ou int): '), 0); + + # CALCUL de LEVEL en fonction de la clé (LEVEL = nombre de rotors) + LEVEL = calcLevel(userkey, SIGMA); + # DECOMPOSITION DE LA CLE PRIMAIRE EN CLES SECONDAIRES + KEY = decomposeKey(userkey, len(SIGMA), LEVEL); + # CREATION DES ROTORS EN FONCTION DES CLES SECONDAIRES + ROTOR = []; + ROTOR.append( [] ); + # on cree les rotors grace a SIGMA et aux cles recuperees + for i in range(0, LEVEL): + ROTOR.append( shuffle( SIGMA, KEY[i]) ); # on creer le rotor et le melange suivant la cle + ROTOR[0].append( ROTOR[i+1][0] ); # on enregistre la l&ettre en premiere position dans la premiere entree du rotor M = decodeStr(m, SIGMA, ROTOR); # DECODAGE DU MESSAGE + # ECRITURE FICHIER + outFile = open(path + '/../bucket-file', 'w'); + outFile.write( M.encode('utf-8') ); + outFile.close(); +elif( arg == 'send' ): + # paramètres utilisateurs + conf = getConf(path); + + if( conf == False ): # si manque des paramètres + print "parametres manquants"; + raise SystemExit(0); -# ENVOI DU MAIL -if( type == 'M' ): To = str( raw_input('Destinataire : ') ); Subj = str( raw_input('Objet : ') ); Pass = str( getpass.getpass('Mot de passe : ') ); print '...'; - sendMail(conf, Pass, To, Subj, M); - -# ECRITURE FICHIER -else: - outFile = open(path + '/../bucket-file', 'w'); - outFile.write( M.encode('utf-8') ); - outFile.close(); + sendMail(conf, Pass, To, Subj, m);