/*************************************************************************************************************************************/ /* */ /* C H I F F R A G E C H A O T I Q U E I N V E R S I B L E D ' U N F I C H I E R : */ /* */ /* */ /* Author of '$xcg/chiffrage.11$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1993??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R F A C E ' listG ' : */ /* */ /* */ /* :Debut_listG: */ /* :Fin_listG: */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_MINI /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define TAUX_DE_CROISSANCE \ FLOT(TROIS) \ /* Taux de croissance. */ #define X0 \ FDU \ /* Valeur de la premiere iteration. */ #define N0 \ ZERO \ /* Numero de la premiere iteration... */ #define NOMBRE_D_ITERATIONS_AVEUGLES \ MILLION \ /* Nombre d'iterations inutiles faites avant le chiffrage... */ #define PERIODICITE_DE_LA_TRONCATURE \ VINGT \ /* Periodicite de la troncature des decimales... */ #define IMPORTANCE_DE_LA_TRONCATURE \ MILLION \ /* Importance de la troncature. L'operation de troncature permet d'eliminer le probleme */ \ /* de la dependance vis a vis du code genere et de la structure des machines... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #define DYNAMIQUE(x) \ SOUS(MUL2(SUCC(taux_de_croissance),EXP1(x)) \ ,MUL2(taux_de_croissance,EXP2(x)) \ ) \ /* Definition du systeme dynamique utilise... */ #define CODAGE(c,x) \ MODS(OUEX(c,INTE(MUL2(FLOT(MOCD),DYNAMIQUE(x)))),ZERO,MOCD) \ /* Definition du codage inversible utilise... */ #define SYSTEME_DYNAMIQUE \ Bblock \ INCR(numero_de_l_iteration,I); \ EGAL(xn,DYNAMIQUE(xn)); \ /* Iteration du systeme dynamique... */ \ Test(DIVISIBLE(SOUS(numero_de_l_iteration,N0),periodicite_de_la_troncature)) \ Bblock \ EGAL(xn,DIVI(fINTE(MUL2(FLOT(importance_de_la_troncature),xn)),FLOT(importance_de_la_troncature))); \ /* Periodiquement, les dernieres decimales ont eliminees afin d'eliminer le probleme de la */ \ /* vis a vis du code genere et de la structure des machines... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Definition du systeme dynamique de chiffrage... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H I F F R A G E C H A O T I Q U E I N V E R S I B L E D ' U N F I C H I E R : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Int,INIT(numero_du_caractere_courant,ZERO)); /* Numero du caractere courant. */ DEFV(Int,INIT(numero_de_l_iteration,N0)); /* Numero 'n' de l'iteration courante. */ DEFV(Int,INIT(nombre_d_iterations_aveugles,NOMBRE_D_ITERATIONS_AVEUGLES)); /* Nombre d'iterations inutilies faites avant le chiffrage... */ DEFV(Float,INIT(taux_de_croissance,TAUX_DE_CROISSANCE)); /* Taux de croissance. */ DEFV(Float,INIT(x0,X0)); /* Valeur de la premiere iteration. */ DEFV(Float,INIT(xn,FLOT__UNDEF)); /* Valeur de l'iteration courante. */ DEFV(Int,INIT(periodicite_de_la_troncature,PERIODICITE_DE_LA_TRONCATURE)); /* Periodicite de la troncature des decimales... */ DEFV(Int,INIT(importance_de_la_troncature,IMPORTANCE_DE_LA_TRONCATURE)); /* Importance de la troncature. L'operation de troncature permet d'eliminer le probleme */ /* de la dependance vis a vis du code genere et de la structure des machines... */ DEFV(Int,INIT(caractere_courant,UNDEF)); /* Caractere courant. ATTENTION, on utilise le type 'Int' et non pas 'Char' a cause de */ /* de l'usage qui sera fait ci-apres de 'GetcharQ(...)', et ce afin que le test de fin */ /* de fichier fonctionne correctement... */ /*..............................................................................................................................*/ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(GET_ARGUMENT_I("aveugle=",nombre_d_iterations_aveugles); GET_ARGUMENT_F("taux=""r=""R=",taux_de_croissance); GET_ARGUMENT_F("x0=""X0=",x0); GET_ARGUMENT_I("p=",periodicite_de_la_troncature); GET_ARGUMENT_I("t=",importance_de_la_troncature); ) ); EGAL(xn,x0); /* Initialisation du processus dynamique... */ Repe(nombre_d_iterations_aveugles) Bblock SYSTEME_DYNAMIQUE; /* Ces quelques iterations aveugles sont destinees a nous faire arriver dans le chaos... */ Eblock ERep Tant(GetcharQ(caractere_courant)) Bblock /* Le caractere courant de l'entree courante est recupere ; et on boucle */ /* sur cette recuperation tant que l'on n'est pas au bout du fichier. */ INCR(numero_du_caractere_courant,I); /* Numero du caractere courant. */ Test(IFNE(caractere_courant,CODAGE(CODAGE(caractere_courant,xn),xn))) Bblock PRINT_ERREUR("le codage n'est pas inversible"); Eblock ATes Bblock Eblock ETes CALS(Putchar(CODAGE(caractere_courant,xn))); /* Le caractere courant est code puis emis... */ SYSTEME_DYNAMIQUE; Eblock ETan RETU_Commande; Eblock ECommande