Diff for /rpl/src/instructions_d6.c between versions 1.41 and 1.45

version 1.41, 2013/02/25 11:24:02 version 1.45, 2013/02/27 14:12:57
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.12    RPL/2 (R) version 4.1.12
   Copyright (C) 1989-2012 Dr. BERTRAND Joël    Copyright (C) 1989-2013 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 607  instruction_digest(struct_processus *s_e Line 607  instruction_digest(struct_processus *s_e
 {  {
     EVP_MD_CTX                  contexte;      EVP_MD_CTX                  contexte;
   
     const EVP_MD *              (*EVP_sum)();      const EVP_MD                *EVP_sum;
       const EVP_CIPHER            *EVP_chiffrement;
   
     logical1                    somme_invalide;      logical1                    somme_invalide;
   
Line 625  instruction_digest(struct_processus *s_e Line 626  instruction_digest(struct_processus *s_e
     unsigned char               *fonction;      unsigned char               *fonction;
     unsigned char               somme[EVP_MAX_MD_SIZE];      unsigned char               somme[EVP_MAX_MD_SIZE];
     unsigned char               *tampon;      unsigned char               *tampon;
       unsigned char               *vecteur_initialisation;
   
     unsigned int                longueur_bloc;      unsigned int                longueur_bloc;
     unsigned int                longueur_somme;      unsigned int                longueur_somme;
     unsigned int                longueur_tampon;      unsigned int                longueur_tampon;
   
     unsigned long               longueur_clef;      unsigned long               longueur_clef;
       unsigned long               longueur_clef_attendue;
       unsigned long               longueur_clef_max;
       unsigned long               longueur_clef_min;
   
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
   
Line 664  instruction_digest(struct_processus *s_e Line 669  instruction_digest(struct_processus *s_e
             printf("  Algorithms:\n\n");              printf("  Algorithms:\n\n");
         }          }
   
   #       ifndef OPENSSL_NO_AES
           printf("    - AES-128-CBC\n");
           printf("    - AES-192-CBC\n");
           printf("    - AES-256-CBC\n");
   #       endif
   #       ifndef OPENSSL_NO_CAMELLIA
           printf("    - CAMELLIA-128-CBC\n");
           printf("    - CAMELLIA-192-CBC\n");
           printf("    - CAMELLIA-256-CBC\n");
   #       endif
   #       ifndef OPENSSL_NO_DES
           printf("    - DES-CBC\n");
           printf("    - DES-EDE-CBC\n");
           printf("    - DES-EDE3-CB\n");
           printf("    - DESX-CBC\n");
   #       endif
 #       ifndef OPENSSL_NO_SHA  #       ifndef OPENSSL_NO_SHA
         printf("    - DSS\n");          printf("    - DSS\n");
         printf("    - DSS1\n");          printf("    - DSS1\n");
         printf("    - ECDSA\n");          printf("    - ECDSA\n");
 #       endif  #       endif
   #       ifndef OPENSSL_NO_IDEA
           printf("    - IDEA-CBC\n");
   #       endif
 #       ifndef OPENSSL_NO_MD2  #       ifndef OPENSSL_NO_MD2
         printf("    - MD2\n");          printf("    - MD2\n");
 #       endif  #       endif
Line 681  instruction_digest(struct_processus *s_e Line 705  instruction_digest(struct_processus *s_e
 #       ifndef OPENSSL_NO_MDC2  #       ifndef OPENSSL_NO_MDC2
         printf("    - MDC2\n");          printf("    - MDC2\n");
 #       endif  #       endif
   #       ifndef OPENSSL_NO_RC2
           printf("    - RC2-CBC\n");
           printf("    - RC2-40-CBC\n");
           printf("    - RC2-64-CBC\n");
   #       endif
 #       ifndef OPENSSL_NO_RIPEMD  #       ifndef OPENSSL_NO_RIPEMD
         printf("    - RIPEMD160\n");          printf("    - RIPEMD160\n");
 #       endif  #       endif
Line 713  instruction_digest(struct_processus *s_e Line 742  instruction_digest(struct_processus *s_e
   
         printf("    \"text\" \"MD5\" DIGEST\n");          printf("    \"text\" \"MD5\" DIGEST\n");
         printf("    \"text\" { \"SHA384\" \"key\" } DIGEST\n");          printf("    \"text\" { \"SHA384\" \"key\" } DIGEST\n");
         printf("    \"text\" { \"AES-CBC\" \"key\" } DIGEST\n");          printf("    \"text\" { \"AES-128-CBC\" \"key\" } DIGEST\n");
         return;          return;
     }      }
     else if ((*s_etat_processus).test_instruction == 'Y')      else if ((*s_etat_processus).test_instruction == 'Y')
Line 792  instruction_digest(struct_processus *s_e Line 821  instruction_digest(struct_processus *s_e
                                 {                                  {
                                     case d_code_fin_chaine:                                      case d_code_fin_chaine:
                                     {                                      {
                                         EVP_sum = EVP_dss;                                          EVP_sum = EVP_dss();
                                         break;                                          break;
                                     }                                      }
   
Line 800  instruction_digest(struct_processus *s_e Line 829  instruction_digest(struct_processus *s_e
                                     {                                      {
                                         if (fonction[4] == d_code_fin_chaine)                                          if (fonction[4] == d_code_fin_chaine)
                                         {                                          {
                                             EVP_sum = EVP_dss1;                                              EVP_sum = EVP_dss1();
                                         }                                          }
                                         else                                          else
                                         {                                          {
Line 863  instruction_digest(struct_processus *s_e Line 892  instruction_digest(struct_processus *s_e
                                                 if (fonction[5] ==                                                  if (fonction[5] ==
                                                         d_code_fin_chaine)                                                          d_code_fin_chaine)
                                                 {                                                  {
                                                     EVP_sum = EVP_ecdsa;                                                      EVP_sum = EVP_ecdsa();
                                                 }                                                  }
                                                 else                                                  else
                                                 {                                                  {
Line 927  instruction_digest(struct_processus *s_e Line 956  instruction_digest(struct_processus *s_e
                             {                              {
                                 if (fonction[3] == d_code_fin_chaine)                                  if (fonction[3] == d_code_fin_chaine)
                                 {                                  {
                                     EVP_sum = EVP_md2;                                      EVP_sum = EVP_md2();
                                 }                                  }
                                 else                                  else
                                 {                                  {
Line 943  instruction_digest(struct_processus *s_e Line 972  instruction_digest(struct_processus *s_e
                             {                              {
                                 if (fonction[3] == d_code_fin_chaine)                                  if (fonction[3] == d_code_fin_chaine)
                                 {                                  {
                                     EVP_sum = EVP_md4;                                      EVP_sum = EVP_md4();
                                 }                                  }
                                 else                                  else
                                 {                                  {
Line 959  instruction_digest(struct_processus *s_e Line 988  instruction_digest(struct_processus *s_e
                             {                              {
                                 if (fonction[3] == d_code_fin_chaine)                                  if (fonction[3] == d_code_fin_chaine)
                                 {                                  {
                                     EVP_sum = EVP_md5;                                      EVP_sum = EVP_md5();
                                 }                                  }
                                 else                                  else
                                 {                                  {
Line 979  instruction_digest(struct_processus *s_e Line 1008  instruction_digest(struct_processus *s_e
                                     {                                      {
                                         if (fonction[4] == d_code_fin_chaine)                                          if (fonction[4] == d_code_fin_chaine)
                                         {                                          {
                                             EVP_sum = EVP_mdc2;                                              EVP_sum = EVP_mdc2();
                                         }                                          }
                                         else                                          else
                                         {                                          {
Line 1025  instruction_digest(struct_processus *s_e Line 1054  instruction_digest(struct_processus *s_e
             {              {
                 if (strcmp(fonction, "RIPEMD160") == 0)                  if (strcmp(fonction, "RIPEMD160") == 0)
                 {                  {
                     EVP_sum = EVP_ripemd160;                      EVP_sum = EVP_ripemd160();
                 }                  }
                 else                  else
                 {                  {
Line 1051  instruction_digest(struct_processus *s_e Line 1080  instruction_digest(struct_processus *s_e
                                 {                                  {
                                     case d_code_fin_chaine:                                      case d_code_fin_chaine:
                                     {                                      {
                                         EVP_sum = EVP_sha;                                          EVP_sum = EVP_sha();
                                         break;                                          break;
                                     }                                      }
   
Line 1059  instruction_digest(struct_processus *s_e Line 1088  instruction_digest(struct_processus *s_e
                                     {                                      {
                                         if (fonction[4] == d_code_fin_chaine)                                          if (fonction[4] == d_code_fin_chaine)
                                         {                                          {
                                             EVP_sum = EVP_sha1;                                              EVP_sum = EVP_sha1();
                                         }                                          }
                                         else                                          else
                                         {                                          {
Line 1084  instruction_digest(struct_processus *s_e Line 1113  instruction_digest(struct_processus *s_e
                                                             d_code_fin_chaine)                                                              d_code_fin_chaine)
                                                         {                                                          {
                                                             EVP_sum =                                                              EVP_sum =
                                                                     EVP_sha224;                                                                  EVP_sha224();
                                                         }                                                          }
                                                         else                                                          else
                                                         {                                                          {
                                                             somme_invalide =                                                              somme_invalide =
                                                                     d_vrai;                                                                  d_vrai;
                                                         }                                                          }
   
                                                         break;                                                          break;
Line 1115  instruction_digest(struct_processus *s_e Line 1144  instruction_digest(struct_processus *s_e
                                                             d_code_fin_chaine)                                                              d_code_fin_chaine)
                                                         {                                                          {
                                                             EVP_sum =                                                              EVP_sum =
                                                                     EVP_sha256;                                                                  EVP_sha256();
                                                         }                                                          }
                                                         else                                                          else
                                                         {                                                          {
                                                             somme_invalide =                                                              somme_invalide =
                                                                     d_vrai;                                                                  d_vrai;
                                                         }                                                          }
   
                                                         break;                                                          break;
Line 1162  instruction_digest(struct_processus *s_e Line 1191  instruction_digest(struct_processus *s_e
                                                             d_code_fin_chaine)                                                              d_code_fin_chaine)
                                                         {                                                          {
                                                             EVP_sum =                                                              EVP_sum =
                                                                     EVP_sha384;                                                                  EVP_sha384();
                                                         }                                                          }
                                                         else                                                          else
                                                         {                                                          {
                                                             somme_invalide =                                                              somme_invalide =
                                                                     d_vrai;                                                                  d_vrai;
                                                         }                                                          }
   
                                                         break;                                                          break;
Line 1207  instruction_digest(struct_processus *s_e Line 1236  instruction_digest(struct_processus *s_e
                                                             d_code_fin_chaine)                                                              d_code_fin_chaine)
                                                         {                                                          {
                                                             EVP_sum =                                                              EVP_sum =
                                                                     EVP_sha512;                                                                  EVP_sha512();
                                                         }                                                          }
                                                         else                                                          else
                                                         {                                                          {
                                                             somme_invalide =                                                              somme_invalide =
                                                                     d_vrai;                                                                  d_vrai;
                                                         }                                                          }
   
                                                         break;                                                          break;
Line 1275  instruction_digest(struct_processus *s_e Line 1304  instruction_digest(struct_processus *s_e
             {              {
                 if (strcmp(fonction, "WHIRLPOOL") == 0)                  if (strcmp(fonction, "WHIRLPOOL") == 0)
                 {                  {
                     EVP_sum = EVP_whirlpool;                      EVP_sum = EVP_whirlpool();
                 }                  }
                 else                  else
                 {                  {
Line 1305  instruction_digest(struct_processus *s_e Line 1334  instruction_digest(struct_processus *s_e
             return;              return;
         }          }
   
         if (EVP_DigestInit(&contexte, EVP_sum()) != 1)          if (EVP_DigestInit(&contexte, EVP_sum) != 1)
         {          {
             EVP_MD_CTX_cleanup(&contexte);              EVP_MD_CTX_cleanup(&contexte);
   
Line 1444  instruction_digest(struct_processus *s_e Line 1473  instruction_digest(struct_processus *s_e
                                 {                                  {
                                     case d_code_fin_chaine:                                      case d_code_fin_chaine:
                                     {                                      {
                                         EVP_sum = EVP_dss;                                          EVP_sum = EVP_dss();
                                         longueur_bloc = SHA_CBLOCK;  
                                         break;                                          break;
                                     }                                      }
   
Line 1453  instruction_digest(struct_processus *s_e Line 1481  instruction_digest(struct_processus *s_e
                                     {                                      {
                                         if (fonction[4] == d_code_fin_chaine)                                          if (fonction[4] == d_code_fin_chaine)
                                         {                                          {
                                             EVP_sum = EVP_dss1;                                              EVP_sum = EVP_dss1();
                                             longueur_bloc = SHA_CBLOCK;  
                                         }                                          }
                                         else                                          else
                                         {                                          {
Line 1517  instruction_digest(struct_processus *s_e Line 1544  instruction_digest(struct_processus *s_e
                                                 if (fonction[5] ==                                                  if (fonction[5] ==
                                                         d_code_fin_chaine)                                                          d_code_fin_chaine)
                                                 {                                                  {
                                                     EVP_sum = EVP_ecdsa;                                                      EVP_sum = EVP_ecdsa();
                                                     longueur_bloc = SHA_CBLOCK;  
                                                 }                                                  }
                                                 else                                                  else
                                                 {                                                  {
Line 1582  instruction_digest(struct_processus *s_e Line 1608  instruction_digest(struct_processus *s_e
                             {                              {
                                 if (fonction[3] == d_code_fin_chaine)                                  if (fonction[3] == d_code_fin_chaine)
                                 {                                  {
                                     EVP_sum = EVP_md2;                                      EVP_sum = EVP_md2();
                                     longueur_bloc = MD2_BLOCK;  
                                 }                                  }
                                 else                                  else
                                 {                                  {
Line 1599  instruction_digest(struct_processus *s_e Line 1624  instruction_digest(struct_processus *s_e
                             {                              {
                                 if (fonction[3] == d_code_fin_chaine)                                  if (fonction[3] == d_code_fin_chaine)
                                 {                                  {
                                     EVP_sum = EVP_md4;                                      EVP_sum = EVP_md4();
                                     longueur_bloc = MD4_CBLOCK;  
                                 }                                  }
                                 else                                  else
                                 {                                  {
Line 1616  instruction_digest(struct_processus *s_e Line 1640  instruction_digest(struct_processus *s_e
                             {                              {
                                 if (fonction[3] == d_code_fin_chaine)                                  if (fonction[3] == d_code_fin_chaine)
                                 {                                  {
                                     EVP_sum = EVP_md5;                                      EVP_sum = EVP_md5();
                                     longueur_bloc = MD5_CBLOCK;  
                                 }                                  }
                                 else                                  else
                                 {                                  {
Line 1637  instruction_digest(struct_processus *s_e Line 1660  instruction_digest(struct_processus *s_e
                                     {                                      {
                                         if (fonction[4] == d_code_fin_chaine)                                          if (fonction[4] == d_code_fin_chaine)
                                         {                                          {
                                             EVP_sum = EVP_mdc2;                                              EVP_sum = EVP_mdc2();
                                             longueur_bloc = MDC2_BLOCK;  
                                         }                                          }
                                         else                                          else
                                         {                                          {
Line 1684  instruction_digest(struct_processus *s_e Line 1706  instruction_digest(struct_processus *s_e
             {              {
                 if (strcmp(fonction, "RIPEMD160") == 0)                  if (strcmp(fonction, "RIPEMD160") == 0)
                 {                  {
                     EVP_sum = EVP_ripemd160;                      EVP_sum = EVP_ripemd160();
                     longueur_bloc = RIPEMD160_CBLOCK;  
                 }                  }
                 else                  else
                 {                  {
Line 1711  instruction_digest(struct_processus *s_e Line 1732  instruction_digest(struct_processus *s_e
                                 {                                  {
                                     case d_code_fin_chaine:                                      case d_code_fin_chaine:
                                     {                                      {
                                         EVP_sum = EVP_sha;                                          EVP_sum = EVP_sha();
                                         longueur_bloc = SHA_CBLOCK;  
                                         break;                                          break;
                                     }                                      }
   
Line 1720  instruction_digest(struct_processus *s_e Line 1740  instruction_digest(struct_processus *s_e
                                     {                                      {
                                         if (fonction[4] == d_code_fin_chaine)                                          if (fonction[4] == d_code_fin_chaine)
                                         {                                          {
                                             EVP_sum = EVP_sha1;                                              EVP_sum = EVP_sha1();
                                             longueur_bloc = SHA_CBLOCK;  
                                         }                                          }
                                         else                                          else
                                         {                                          {
Line 1746  instruction_digest(struct_processus *s_e Line 1765  instruction_digest(struct_processus *s_e
                                                             d_code_fin_chaine)                                                              d_code_fin_chaine)
                                                         {                                                          {
                                                             EVP_sum =                                                              EVP_sum =
                                                                 EVP_sha224;                                                                  EVP_sha224();
                                                             longueur_bloc =  
                                                                 SHA256_CBLOCK;  
                                                         }                                                          }
                                                         else                                                          else
                                                         {                                                          {
Line 1779  instruction_digest(struct_processus *s_e Line 1796  instruction_digest(struct_processus *s_e
                                                             d_code_fin_chaine)                                                              d_code_fin_chaine)
                                                         {                                                          {
                                                             EVP_sum =                                                              EVP_sum =
                                                                 EVP_sha256;                                                                  EVP_sha256();
                                                             longueur_bloc =  
                                                                 SHA256_CBLOCK;  
                                                         }                                                          }
                                                         else                                                          else
                                                         {                                                          {
Line 1828  instruction_digest(struct_processus *s_e Line 1843  instruction_digest(struct_processus *s_e
                                                             d_code_fin_chaine)                                                              d_code_fin_chaine)
                                                         {                                                          {
                                                             EVP_sum =                                                              EVP_sum =
                                                                 EVP_sha384;                                                                  EVP_sha384();
                                                             longueur_bloc =  
                                                                 SHA512_CBLOCK;  
                                                         }                                                          }
                                                         else                                                          else
                                                         {                                                          {
Line 1875  instruction_digest(struct_processus *s_e Line 1888  instruction_digest(struct_processus *s_e
                                                             d_code_fin_chaine)                                                              d_code_fin_chaine)
                                                         {                                                          {
                                                             EVP_sum =                                                              EVP_sum =
                                                                 EVP_sha512;                                                                  EVP_sha512();
                                                             longueur_bloc =  
                                                                 SHA512_CBLOCK;  
                                                         }                                                          }
                                                         else                                                          else
                                                         {                                                          {
Line 1945  instruction_digest(struct_processus *s_e Line 1956  instruction_digest(struct_processus *s_e
             {              {
                 if (strcmp(fonction, "WHIRLPOOL") == 0)                  if (strcmp(fonction, "WHIRLPOOL") == 0)
                 {                  {
                     EVP_sum = EVP_whirlpool;                      EVP_sum = EVP_whirlpool();
                     longueur_bloc = WHIRLPOOL_BBLOCK / 8;  
                 }                  }
                 else                  else
                 {                  {
Line 1964  instruction_digest(struct_processus *s_e Line 1974  instruction_digest(struct_processus *s_e
             }              }
         }          }
   
         free(fonction);  
   
         if (somme_invalide == d_vrai)          if (somme_invalide == d_vrai)
         {          {
             // Le chiffrement est de type CBC-MAC              // Le chiffrement est de type CBC-MAC
             BUG(1, uprintf("Oops!"));  
             exit(0);              if (strncmp(fonction, "AES", 3) == 0)
               {
   #               ifdef OPENSSL_NO_AES
   
                   free(fonction);
   
                   liberation(s_etat_processus, s_objet_argument_1);
                   liberation(s_etat_processus, s_objet_argument_2);
   
                   (*s_etat_processus).erreur_execution =
                           d_ex_chiffrement_indisponible;
                   return;
   
   #               else
   
                   if (strcmp(fonction, "AES-128-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_aes_128_cbc();
                   }
                   else if (strcmp(fonction, "AES-192-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_aes_192_cbc();
                   }
                   else if (strcmp(fonction, "AES-256-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_aes_256_cbc();
                   }
                   else
                   {
                       free(fonction);
   
                       liberation(s_etat_processus, s_objet_argument_1);
                       liberation(s_etat_processus, s_objet_argument_2);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_chiffrement_indisponible;
                       return;
                   }
   
                   longueur_clef_attendue = EVP_CIPHER_key_length(EVP_chiffrement);
                   longueur_somme = EVP_CIPHER_block_size(EVP_chiffrement);
   
   #               endif
               }
               else if (strncmp(fonction, "DES", 3) == 0)
               {
   #               ifdef OPENSSL_NO_DES
   
                   free(fonction);
   
                   liberation(s_etat_processus, s_objet_argument_1);
                   liberation(s_etat_processus, s_objet_argument_2);
   
                   (*s_etat_processus).erreur_execution =
                           d_ex_chiffrement_indisponible;
                   return;
   
   #               else
   
                   if (strcmp(fonction, "DES-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_des_cbc();
                   }
                   else if (strcmp(fonction, "DES-EDE-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_des_ede_cbc();
                   }
                   else if (strcmp(fonction, "DES-EDE3-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_des_ede3_cbc();
                   }
                   else if (strcmp(fonction, "DESX-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_desx_cbc();
                   }
                   else
                   {
                       free(fonction);
   
                       liberation(s_etat_processus, s_objet_argument_1);
                       liberation(s_etat_processus, s_objet_argument_2);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_chiffrement_indisponible;
                       return;
                   }
   
                   longueur_clef_attendue = EVP_CIPHER_key_length(EVP_chiffrement);
                   longueur_somme = EVP_CIPHER_block_size(EVP_chiffrement);
   
   #               endif
               }
               else if (strncmp(fonction, "CAMELLIA", 8) == 0)
               {
   #               ifdef OPENSSL_NO_CAMELLIA
   
                   free(fonction);
   
                   liberation(s_etat_processus, s_objet_argument_1);
                   liberation(s_etat_processus, s_objet_argument_2);
   
                   (*s_etat_processus).erreur_execution =
                           d_ex_chiffrement_indisponible;
                   return;
   
   #               else
   
                   if (strcmp(fonction, "CAMELLIA-128-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_camellia_128_cbc();
                   }
                   else if (strcmp(fonction, "CAMELLIA-192-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_camellia_192_cbc();
                   }
                   else if (strcmp(fonction, "CAMELLIA-256-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_camellia_256_cbc();
                   }
                   else
                   {
                       free(fonction);
   
                       liberation(s_etat_processus, s_objet_argument_1);
                       liberation(s_etat_processus, s_objet_argument_2);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_chiffrement_indisponible;
                       return;
                   }
   
                   longueur_clef_attendue = EVP_CIPHER_key_length(EVP_chiffrement);
                   longueur_somme = EVP_CIPHER_block_size(EVP_chiffrement);
   
   #               endif
               }
               else if (strncmp(fonction, "RC2", 3) == 0)
               {
   #               ifdef OPENSSL_NO_RC2
   
                   free(fonction);
   
                   liberation(s_etat_processus, s_objet_argument_1);
                   liberation(s_etat_processus, s_objet_argument_2);
   
                   (*s_etat_processus).erreur_execution =
                           d_ex_chiffrement_indisponible;
                   return;
   
   #               else
   
                   if (strcmp(fonction, "RC2-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_rc2_cbc();
                   }
                   else if (strcmp(fonction, "RC2-40-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_rc2_40_cbc();
                   }
                   else if (strcmp(fonction, "RC2-64-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_rc2_64_cbc();
                   }
                   else
                   {
                       free(fonction);
   
                       liberation(s_etat_processus, s_objet_argument_1);
                       liberation(s_etat_processus, s_objet_argument_2);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_chiffrement_indisponible;
                       return;
                   }
   
                   longueur_clef_attendue = 0;
                   longueur_clef_min = 1;
                   longueur_clef_max = 16;
                   longueur_somme = EVP_CIPHER_block_size(EVP_chiffrement);
   
   #               endif
               }
               else if (strncmp(fonction, "IDEA", 4) == 0)
               {
   #               ifdef OPENSSL_NO_IDEA
   
                   free(fonction);
   
                   liberation(s_etat_processus, s_objet_argument_1);
                   liberation(s_etat_processus, s_objet_argument_2);
   
                   (*s_etat_processus).erreur_execution =
                           d_ex_chiffrement_indisponible;
                   return;
   
   #               else
   
                   if (strcmp(fonction, "IDEA-CBC") == 0)
                   {
                       EVP_chiffrement = EVP_idea_cbc();
                   }
                   else
                   {
                       free(fonction);
   
                       liberation(s_etat_processus, s_objet_argument_1);
                       liberation(s_etat_processus, s_objet_argument_2);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_chiffrement_indisponible;
                       return;
                   }
   
                   longueur_clef_attendue = EVP_CIPHER_key_length(EVP_chiffrement);
                   longueur_somme = EVP_CIPHER_block_size(EVP_chiffrement);
   
   #               endif
               }
               else
               {
                   free(fonction);
   
                   liberation(s_etat_processus, s_objet_argument_1);
                   liberation(s_etat_processus, s_objet_argument_2);
   
                   (*s_etat_processus).erreur_execution =
                           d_ex_chiffrement_indisponible;
                   return;
               }
   
               if ((chaine = formateur_flux(s_etat_processus, (unsigned char *)
                       (*s_objet_argument_2).objet, &longueur_chaine)) == NULL)
               {
                   free(fonction);
   
                   liberation(s_etat_processus, s_objet_argument_1);
                   liberation(s_etat_processus, s_objet_argument_2);
   
                   return;
               }
   
               l_element_courant = (*s_objet_argument_1).objet;
               l_element_courant = (*l_element_courant).suivant;
   
               if ((clef = formateur_flux(s_etat_processus, (unsigned char *)
                       (*(*l_element_courant).donnee).objet, &longueur_clef))
                       == NULL)
               {
                   free(fonction);
                   free(chaine);
   
                   liberation(s_etat_processus, s_objet_argument_1);
                   liberation(s_etat_processus, s_objet_argument_2);
                   return;
               }
   
               if (longueur_clef_attendue != 0)
               {
                   if (longueur_clef != longueur_clef_attendue)
                   {
                       free(fonction);
                       free(chaine);
                       free(clef);
   
                       liberation(s_etat_processus, s_objet_argument_1);
                       liberation(s_etat_processus, s_objet_argument_2);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_longueur_clef_chiffrement;
                       return;
                   }
               }
               else
               {
                   if ((longueur_clef < longueur_clef_min) &&
                           (longueur_clef > longueur_clef_max))
                   {
                       free(fonction);
                       free(chaine);
                       free(clef);
   
                       liberation(s_etat_processus, s_objet_argument_1);
                       liberation(s_etat_processus, s_objet_argument_2);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_longueur_clef_chiffrement;
                       return;
                   }
               }
   
               if ((vecteur_initialisation = malloc(longueur_clef *
                       sizeof(unsigned char))) == NULL)
               {
                   (*s_etat_processus).erreur_systeme =
                           d_es_allocation_memoire;
                   return;
               }
   
               memset(vecteur_initialisation, 0, longueur_clef);
   
               if ((tampon = chiffrement(EVP_chiffrement, d_vrai,
                       chaine, longueur_chaine, clef, longueur_clef,
                       vecteur_initialisation, &longueur_tampon)) == NULL)
               {
                   free(fonction);
                   free(vecteur_initialisation);
                   free(chaine);
                   free(clef);
   
                   (*s_etat_processus).erreur_execution =
                           d_ex_chiffrement;
                   return;
               }
   
               free(vecteur_initialisation);
               free(chaine);
               free(clef);
   
               if ((s_objet_resultat = allocation(s_etat_processus, CHN))
                       == NULL)
               {
                   (*s_etat_processus).erreur_systeme =
                           d_es_allocation_memoire;
                   return;
               }
   
               if (((*s_objet_resultat).objet = analyse_flux(s_etat_processus,
                       &(tampon[longueur_tampon - longueur_somme]),
                       longueur_somme)) == NULL)
               {
                   free(tampon);
                   free(fonction);
   
                   liberation(s_etat_processus, s_objet_argument_1);
                   liberation(s_etat_processus, s_objet_argument_2);
                   return;
               }
   
               free(tampon);
               free(fonction);
         }          }
         else          else
         {          {
Line 1978  instruction_digest(struct_processus *s_e Line 2325  instruction_digest(struct_processus *s_e
             // Le second élément de la chaîne contient la clef utilisée pour              // Le second élément de la chaîne contient la clef utilisée pour
             // la signature.              // la signature.
   
               free(fonction);
   
             l_element_courant = (*s_objet_argument_1).objet;              l_element_courant = (*s_objet_argument_1).objet;
             l_element_courant = (*l_element_courant).suivant;              l_element_courant = (*l_element_courant).suivant;
   
               longueur_bloc = EVP_MD_block_size(EVP_sum);
   
             if ((clef = formateur_flux(s_etat_processus, (unsigned char *)              if ((clef = formateur_flux(s_etat_processus, (unsigned char *)
                     (*(*l_element_courant).donnee).objet, &longueur_clef))                      (*(*l_element_courant).donnee).objet, &longueur_clef))
                     == NULL)                      == NULL)
Line 2053  instruction_digest(struct_processus *s_e Line 2404  instruction_digest(struct_processus *s_e
             memcpy(tampon + longueur_bloc, chaine, longueur_chaine);              memcpy(tampon + longueur_bloc, chaine, longueur_chaine);
             longueur_tampon = longueur_bloc + longueur_chaine;              longueur_tampon = longueur_bloc + longueur_chaine;
   
             if (EVP_DigestInit(&contexte, EVP_sum()) != 1)              if (EVP_DigestInit(&contexte, EVP_sum) != 1)
             {              {
                 free(tampon);                  free(tampon);
                 free(clef);                  free(clef);
Line 2115  instruction_digest(struct_processus *s_e Line 2466  instruction_digest(struct_processus *s_e
             memcpy(tampon + longueur_bloc, somme, longueur_somme);              memcpy(tampon + longueur_bloc, somme, longueur_somme);
             longueur_tampon = longueur_bloc + longueur_somme;              longueur_tampon = longueur_bloc + longueur_somme;
   
             if (EVP_DigestInit(&contexte, EVP_sum()) != 1)              if (EVP_DigestInit(&contexte, EVP_sum) != 1)
             {              {
                 free(tampon);                  free(tampon);
                 free(clef);                  free(clef);

Removed from v.1.41  
changed lines
  Added in v.1.45


CVSweb interface <joel.bertrand@systella.fr>