Annotation of rpl/src/instructions_c8.c, revision 1.2

1.1       bertrand    1: /*
                      2: ================================================================================
                      3:   RPL/2 (R) version 4.1.12
1.2     ! bertrand    4:   Copyright (C) 1989-2013 Dr. BERTRAND Joël
1.1       bertrand    5: 
                      6:   This file is part of RPL/2.
                      7: 
                      8:   RPL/2 is free software; you can redistribute it and/or modify it
                      9:   under the terms of the CeCILL V2 License as published by the french
                     10:   CEA, CNRS and INRIA.
                     11:  
                     12:   RPL/2 is distributed in the hope that it will be useful, but WITHOUT
                     13:   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
                     14:   FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
                     15:   for more details.
                     16:  
                     17:   You should have received a copy of the CeCILL License
                     18:   along with RPL/2. If not, write to info@cecill.info.
                     19: ================================================================================
                     20: */
                     21: 
                     22: 
                     23: #include "rpl-conv.h"
                     24: 
                     25: 
                     26: /*
                     27: ================================================================================
                     28:   Fonction 'cipher'
                     29: ================================================================================
                     30:   Entrées :
                     31: --------------------------------------------------------------------------------
                     32:   Sorties :
                     33: --------------------------------------------------------------------------------
                     34:   Effets de bord : néant
                     35: ================================================================================
                     36: */
                     37: 
                     38: void
                     39: instruction_cipher(struct_processus *s_etat_processus)
                     40: {
                     41:    const EVP_CIPHER                *EVP_chiffrement;
                     42:    const EVP_MD                    *EVP_sum;
                     43: 
                     44:    integer8                        nombre_cycles;
                     45: 
                     46:    logical1                        somme_invalide;
                     47:    logical1                        generation_clef;
                     48: 
                     49:    logical8                        sel;
                     50: 
                     51:    struct_liste_chainee            *l_element_courant;
                     52: 
                     53:    struct_objet                    *s_objet_argument_1;
                     54:    struct_objet                    *s_objet_argument_2;
                     55:    struct_objet                    *s_objet_resultat_1;
                     56:    struct_objet                    *s_objet_resultat_2;
                     57: 
                     58:    unsigned char                   *chiffrement;
                     59:    unsigned char                   *clef;
                     60:    unsigned char                   *controle;
                     61:    unsigned char                   *direction;
                     62:    unsigned char                   *fonction;
                     63:    unsigned char                   *instruction;
                     64:    unsigned char                   *iv;
                     65:    unsigned char                   *tampon;
                     66: 
                     67:    if ((*s_etat_processus).affichage_arguments == 'Y')
                     68:    {
                     69:        printf("\n  CIPHER ");
                     70: 
                     71:        if ((*s_etat_processus).langue == 'F')
                     72:        {
                     73:            printf("(opérations de chiffrement)\n\n");
                     74:        }
                     75:        else
                     76:        {
                     77:            printf("(cryptographic operations)\n\n");
                     78:        }
                     79: 
                     80:        printf("    2: %s \"password\"\n", d_CHN);
                     81:        printf("    1: %s { \"KEY\" \"cipher type\" \"digest type\" "
                     82:                "salt nround }\n", d_LST);
                     83:        printf("->  1: %s { \"generated key\" \"iv\" }\n\n", d_LST);
                     84: 
                     85:        printf("    2: %s \"text\"\n", d_CHN);
                     86:        printf("    1: %s { \"cipher type\" \"direction\" \"key\" \"iv\" }\n",
                     87:                d_LST);
                     88:        printf("->  2: %s \"encrypted or decrypted text\"\n", d_CHN);
                     89:        printf("    1: %s { \"cipher type\" \"direction\" \"key\" "
                     90:                "\"updated iv\" }\n\n", d_LST);
                     91: 
                     92:        if ((*s_etat_processus).langue == 'F')
                     93:        {
                     94:            printf("  Algorithmes de signature :\n\n");
                     95:        }
                     96:        else
                     97:        {
                     98:            printf("  Digest algorithms:\n\n");
                     99:        }
                    100: 
                    101: #      ifndef OPENSSL_NO_SHA
                    102:        printf("    - DSS\n");
                    103:        printf("    - DSS1\n");
                    104:        printf("    - ECDSA\n");
                    105: #      endif
                    106: #      ifndef OPENSSL_NO_MD2
                    107:        printf("    - MD2\n");
                    108: #      endif
                    109: #      ifndef OPENSSL_NO_MD4
                    110:        printf("    - MD4\n");
                    111: #      endif
                    112: #      ifndef OPENSSL_NO_MD5
                    113:        printf("    - MD5\n");
                    114: #      endif
                    115: #      ifndef OPENSSL_NO_MDC2
                    116:        printf("    - MDC2\n");
                    117: #      endif
                    118: #      ifndef OPENSSL_NO_RIPEMD
                    119:        printf("    - RIPEMD160\n");
                    120: #      endif
                    121: #      ifndef OPENSSL_NO_SHA
                    122:        printf("    - SHA\n");
                    123:        printf("    - SHA1\n");
                    124: #      endif
                    125: #      ifndef OPENSSL_NO_SHA256
                    126:        printf("    - SHA224\n");
                    127:        printf("    - SHA256\n");
                    128: #      endif
                    129: #      ifndef OPENSSL_NO_SHA512
                    130:        printf("    - SHA384\n");
                    131:        printf("    - SHA512\n");
                    132: #      endif
                    133: #      ifndef OPENSSL_NO_WHIRLPOOL
                    134:        printf("    - WHIRLPOOL\n");
                    135: #      endif
                    136: 
                    137:        printf("\n");
                    138: 
                    139:        if ((*s_etat_processus).langue == 'F')
                    140:        {
                    141:            printf("  Utilisation :\n\n");
                    142:        }
                    143:        else
                    144:        {
                    145:            printf("  Usage:\n\n");
                    146:        }
                    147: 
                    148:        printf("    \"password\" { \"key\" \"SHA1\" # 0h 3 } CIPHER\n");
                    149:        printf("    \"text\" { \"AES-128-CBC\" \"DECRYPT\" \"key\" "
                    150:                "\"iv\" } CIPHER\n");
                    151:        printf("    \"text\" { \"AES-128-EBC\" \"ENCRYPT\" \"key\" "
                    152:                "\"iv\" } CIPHER\n");
                    153:        return;
                    154:    }
                    155:    else if ((*s_etat_processus).test_instruction == 'Y')
                    156:    {
                    157:        (*s_etat_processus).nombre_arguments = -1;
                    158:        return;
                    159:    }
                    160: 
                    161:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    162:    {
                    163:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
                    164:        {
                    165:            return;
                    166:        }
                    167:    }
                    168: 
                    169:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    170:            &s_objet_argument_1) == d_erreur)
                    171:    {
                    172:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    173:        return;
                    174:    }
                    175: 
                    176:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    177:            &s_objet_argument_2) == d_erreur)
                    178:    {
                    179:        liberation(s_etat_processus, s_objet_argument_1);
                    180: 
                    181:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    182:        return;
                    183:    }
                    184: 
                    185:    if (((*s_objet_argument_1).type == LST) &&
                    186:            ((*s_objet_argument_2).type == CHN))
                    187:    {
                    188:        l_element_courant = (*s_objet_argument_1).objet;
                    189: 
                    190:        if (l_element_courant == NULL)
                    191:        {
                    192:            liberation(s_etat_processus, s_objet_argument_1);
                    193:            liberation(s_etat_processus, s_objet_argument_2);
                    194: 
                    195:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide; 
                    196:            return;
                    197:        }
                    198: 
                    199:        if ((*(*l_element_courant).donnee).type != CHN)
                    200:        {
                    201:            liberation(s_etat_processus, s_objet_argument_1);
                    202:            liberation(s_etat_processus, s_objet_argument_2);
                    203: 
                    204:            (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                    205:            return;
                    206:        }
                    207: 
                    208:        if ((instruction = conversion_majuscule((unsigned char *)
                    209:                (*(*l_element_courant).donnee).objet)) == NULL)
                    210:        {
                    211:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    212:            return;
                    213:        }
                    214: 
                    215:        if (strcmp(instruction, "KEY") == 0)
                    216:        {
                    217:            // Dérivation d'une clef
                    218: 
                    219:            free(instruction);
                    220: 
                    221:            l_element_courant = (*l_element_courant).suivant;
                    222: 
                    223:            if (l_element_courant == NULL)
                    224:            {
                    225:                liberation(s_etat_processus, s_objet_argument_1);
                    226:                liberation(s_etat_processus, s_objet_argument_2);
                    227: 
                    228:                (*s_etat_processus).erreur_execution = d_ex_manque_argument; 
                    229:                return;
                    230:            }
                    231: 
                    232:            // On attend l'algorithme de chiffrement.
                    233: 
                    234:            if ((*(*l_element_courant).donnee).type != CHN)
                    235:            {
                    236:                liberation(s_etat_processus, s_objet_argument_1);
                    237:                liberation(s_etat_processus, s_objet_argument_2);
                    238: 
                    239:                (*s_etat_processus).erreur_execution =
                    240:                        d_ex_erreur_type_argument;
                    241:                return;
                    242:            }
                    243: 
                    244:            chiffrement = (unsigned char *) (*(*l_element_courant)
                    245:                    .donnee).objet;
                    246: 
                    247:            if ((l_element_courant = (*l_element_courant).suivant) == NULL)
                    248:            {
                    249:                liberation(s_etat_processus, s_objet_argument_1);
                    250:                liberation(s_etat_processus, s_objet_argument_2);
                    251: 
                    252:                (*s_etat_processus).erreur_execution = d_ex_manque_argument; 
                    253:                return;
                    254:            }   
                    255: 
                    256:            // On attend la somme de contrôle.
                    257: 
                    258:            if ((*(*l_element_courant).donnee).type != CHN)
                    259:            {
                    260:                liberation(s_etat_processus, s_objet_argument_1);
                    261:                liberation(s_etat_processus, s_objet_argument_2);
                    262: 
                    263:                (*s_etat_processus).erreur_execution =
                    264:                        d_ex_erreur_type_argument;
                    265:                return;
                    266:            }
                    267: 
                    268:            controle = (unsigned char *) (*(*l_element_courant).donnee).objet;
                    269: 
                    270:            if ((l_element_courant = (*l_element_courant).suivant) == NULL)
                    271:            {
                    272:                liberation(s_etat_processus, s_objet_argument_1);
                    273:                liberation(s_etat_processus, s_objet_argument_2);
                    274: 
                    275:                (*s_etat_processus).erreur_execution = d_ex_manque_argument; 
                    276:                return;
                    277:            }   
                    278: 
                    279: 
                    280:            // On attend le sel, donc un entier binaire de 64 bits.
                    281: 
                    282:            if ((*(*l_element_courant).donnee).type != BIN)
                    283:            {
                    284:                liberation(s_etat_processus, s_objet_argument_1);
                    285:                liberation(s_etat_processus, s_objet_argument_2);
                    286: 
                    287:                (*s_etat_processus).erreur_execution =
                    288:                        d_ex_erreur_type_argument;
                    289:                return;
                    290:            }
                    291: 
                    292:            sel = (*((logical8 *) (*(*l_element_courant).donnee).objet));
                    293: 
                    294:            if ((l_element_courant = (*l_element_courant).suivant) == NULL)
                    295:            {
                    296:                liberation(s_etat_processus, s_objet_argument_1);
                    297:                liberation(s_etat_processus, s_objet_argument_2);
                    298: 
                    299:                (*s_etat_processus).erreur_execution = d_ex_manque_argument; 
                    300:                return;
                    301:            }   
                    302: 
                    303:            // On attend le nombre de cycles.
                    304: 
                    305:            if ((*(*l_element_courant).donnee).type != INT)
                    306:            {
                    307:                liberation(s_etat_processus, s_objet_argument_1);
                    308:                liberation(s_etat_processus, s_objet_argument_2);
                    309: 
                    310:                (*s_etat_processus).erreur_execution =
                    311:                        d_ex_erreur_type_argument;
                    312:                return;
                    313:            }
                    314: 
                    315:            nombre_cycles = (*((integer8 *) (*(*l_element_courant)
                    316:                    .donnee).objet));
                    317: 
                    318:            // On a dû atteindre la fin de la liste.
                    319: 
                    320:            if ((*l_element_courant).suivant != NULL)
                    321:            {
                    322:                liberation(s_etat_processus, s_objet_argument_1);
                    323:                liberation(s_etat_processus, s_objet_argument_2);
                    324: 
                    325:                (*s_etat_processus).erreur_execution = d_ex_argument_invalide; 
                    326:                return;
                    327:            }
                    328: 
                    329:            // Test de la validité de la somme de contrôle.
                    330: 
                    331:            if ((fonction = conversion_majuscule(controle)) == NULL)
                    332:            {
                    333:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    334:                return;
                    335:            }
                    336: 
                    337:            somme_invalide = d_faux;
                    338: 
                    339:            switch(fonction[0])
                    340:            {
                    341:                case 'D':
                    342:                {
                    343:                    switch(fonction[1])
                    344:                    {
                    345:                        case 'S': // ds
                    346:                        {
                    347:                            switch(fonction[2])
                    348:                            {
                    349: #                              ifndef OPENSSL_NO_SHA
                    350:                                case 'S': // dss
                    351:                                {
                    352:                                    switch(fonction[3])
                    353:                                    {
                    354:                                        case d_code_fin_chaine:
                    355:                                        {
                    356:                                            EVP_sum = EVP_dss();
                    357:                                            break;
                    358:                                        }
                    359: 
                    360:                                        case '1': // dss1
                    361:                                        {
                    362:                                            if (fonction[4] ==
                    363:                                                    d_code_fin_chaine)
                    364:                                            {
                    365:                                                EVP_sum = EVP_dss1();
                    366:                                            }
                    367:                                            else
                    368:                                            {
                    369:                                                somme_invalide = d_vrai;
                    370:                                            }
                    371: 
                    372:                                            break;
                    373:                                        }
                    374: 
                    375:                                        default:
                    376:                                        {
                    377:                                            somme_invalide = d_vrai;
                    378:                                            break;
                    379:                                        }
                    380:                                    }
                    381: 
                    382:                                    break;
                    383:                                }
                    384: #                              endif
                    385: 
                    386:                                default:
                    387:                                {
                    388:                                    somme_invalide = d_vrai;
                    389:                                    break;
                    390:                                }
                    391:                            }
                    392: 
                    393:                            break;
                    394:                        }
                    395: 
                    396:                        default:
                    397:                        {
                    398:                            somme_invalide = d_vrai;
                    399:                            break;
                    400:                        }
                    401:                    }
                    402: 
                    403:                    break;
                    404:                }
                    405: 
                    406:                case 'E':
                    407:                {
                    408:                    switch(fonction[1])
                    409:                    {
                    410:                        case 'C': // ec
                    411:                        {
                    412:                            switch(fonction[2])
                    413:                            {
                    414:                                case 'D': // ecd
                    415:                                {
                    416:                                    switch(fonction[3])
                    417:                                    {
                    418:                                        case 'S': // ecds
                    419:                                        {
                    420:                                            switch(fonction[4])
                    421:                                            {
                    422: #                                              ifndef OPENSSL_NO_SHA
                    423:                                                case 'A': // ecdsa
                    424:                                                {
                    425:                                                    if (fonction[5] ==
                    426:                                                            d_code_fin_chaine)
                    427:                                                    {
                    428:                                                        EVP_sum = EVP_ecdsa();
                    429:                                                    }
                    430:                                                    else
                    431:                                                    {
                    432:                                                        somme_invalide = d_vrai;
                    433:                                                    }
                    434: 
                    435:                                                    break;
                    436:                                                }
                    437: #                                              endif
                    438: 
                    439:                                                default:
                    440:                                                {
                    441:                                                    somme_invalide = d_vrai;
                    442:                                                    break;
                    443:                                                }
                    444:                                            }
                    445: 
                    446:                                            break;
                    447:                                        }
                    448: 
                    449:                                        default:
                    450:                                        {
                    451:                                            somme_invalide = d_vrai;
                    452:                                            break;
                    453:                                        }
                    454:                                    }
                    455: 
                    456:                                    break;
                    457:                                }
                    458: 
                    459:                                default:
                    460:                                {
                    461:                                    somme_invalide = d_vrai;
                    462:                                    break;
                    463:                                }
                    464:                            }
                    465: 
                    466:                            break;
                    467:                        }
                    468: 
                    469:                        default:
                    470:                        {
                    471:                            somme_invalide = d_vrai;
                    472:                            break;
                    473:                        }
                    474:                    }
                    475: 
                    476:                    break;
                    477:                }
                    478: 
                    479:                case 'M':
                    480:                {
                    481:                    switch(fonction[1])
                    482:                    {
                    483:                        case 'D': // md
                    484:                        {
                    485:                            switch(fonction[2])
                    486:                            {
                    487: #                              ifndef OPENSSL_NO_MD2
                    488:                                case '2': // md2
                    489:                                {
                    490:                                    if (fonction[3] == d_code_fin_chaine)
                    491:                                    {
                    492:                                        EVP_sum = EVP_md2();
                    493:                                    }
                    494:                                    else
                    495:                                    {
                    496:                                        somme_invalide = d_vrai;
                    497:                                    }
                    498: 
                    499:                                    break;
                    500:                                }
                    501: #                              endif
                    502: 
                    503: #                              ifndef OPENSSL_NO_MD4
                    504:                                case '4': // md4
                    505:                                {
                    506:                                    if (fonction[3] == d_code_fin_chaine)
                    507:                                    {
                    508:                                        EVP_sum = EVP_md4();
                    509:                                    }
                    510:                                    else
                    511:                                    {
                    512:                                        somme_invalide = d_vrai;
                    513:                                    }
                    514: 
                    515:                                    break;
                    516:                                }
                    517: #                              endif
                    518: 
                    519: #                              ifndef OPENSSL_NO_MD5
                    520:                                case '5': // md5
                    521:                                {
                    522:                                    if (fonction[3] == d_code_fin_chaine)
                    523:                                    {
                    524:                                        EVP_sum = EVP_md5();
                    525:                                    }
                    526:                                    else
                    527:                                    {
                    528:                                        somme_invalide = d_vrai;
                    529:                                    }
                    530: 
                    531:                                    break;
                    532:                                }
                    533: #                              endif
                    534: 
                    535:                                case 'C': // mdc
                    536:                                {
                    537:                                    switch(fonction[3])
                    538:                                    {
                    539: #                                      ifndef OPENSSL_NO_MDC2
                    540:                                        case '2': // mdc2
                    541:                                        {
                    542:                                            if (fonction[4] ==
                    543:                                                    d_code_fin_chaine)
                    544:                                            {
                    545:                                                EVP_sum = EVP_mdc2();
                    546:                                            }
                    547:                                            else
                    548:                                            {
                    549:                                                somme_invalide = d_vrai;
                    550:                                            }
                    551: 
                    552:                                            break;
                    553:                                        }
                    554: #                                      endif
                    555: 
                    556:                                        default:
                    557:                                        {
                    558:                                            somme_invalide = d_vrai;
                    559:                                            break;
                    560:                                        }
                    561:                                    }
                    562: 
                    563:                                    break;
                    564:                                }
                    565: 
                    566:                                default:
                    567:                                {
                    568:                                    somme_invalide = d_vrai;
                    569:                                    break;
                    570:                                }
                    571:                            }
                    572: 
                    573:                            break;
                    574:                        }
                    575: 
                    576:                        default:
                    577:                        {
                    578:                            somme_invalide = d_vrai;
                    579:                            break;
                    580:                        }
                    581:                    }
                    582: 
                    583:                    break;
                    584:                }
                    585: 
                    586: #              ifndef OPENSSL_NO_RIPEMD
                    587:                case 'R':
                    588:                {
                    589:                    if (strcmp(fonction, "RIPEMD160") == 0)
                    590:                    {
                    591:                        EVP_sum = EVP_ripemd160();
                    592:                    }
                    593:                    else
                    594:                    {
                    595:                        somme_invalide = d_vrai;
                    596:                    }
                    597: 
                    598:                    break;
                    599:                }
                    600: #              endif
                    601: 
                    602:                case 'S':
                    603:                {
                    604:                    switch(fonction[1])
                    605:                    {
                    606:                        case 'H': // sh
                    607:                        {
                    608:                            switch(fonction[2])
                    609:                            {
                    610: #                              ifndef OPENSSL_NO_SHA
                    611:                                case 'A':
                    612:                                {
                    613:                                    switch(fonction[3])
                    614:                                    {
                    615:                                        case d_code_fin_chaine:
                    616:                                        {
                    617:                                            EVP_sum = EVP_sha();
                    618:                                            break;
                    619:                                        }
                    620: 
                    621:                                        case '1': // sha1
                    622:                                        {
                    623:                                            if (fonction[4] ==
                    624:                                                    d_code_fin_chaine)
                    625:                                            {
                    626:                                                EVP_sum = EVP_sha1();
                    627:                                            }
                    628:                                            else
                    629:                                            {
                    630:                                                somme_invalide = d_vrai;
                    631:                                            }
                    632: 
                    633:                                            break;
                    634:                                        }
                    635: 
                    636: #                                      ifndef OPENSSL_NO_SHA256
                    637:                                        case '2': // sha2
                    638:                                        {
                    639:                                            switch(fonction[4])
                    640:                                            {
                    641:                                                case '2': // sha22
                    642:                                                {
                    643:                                                    switch(fonction[5])
                    644:                                                    {
                    645:                                                        case '4': // sha224
                    646:                                                        {
                    647:                                                            if (fonction[6] ==
                    648:                                                            d_code_fin_chaine)
                    649:                                                            {
                    650:                                                                EVP_sum =
                    651:                                                                EVP_sha224();
                    652:                                                            }
                    653:                                                            else
                    654:                                                            {
                    655:                                                                somme_invalide =
                    656:                                                                        d_vrai;
                    657:                                                            }
                    658: 
                    659:                                                            break;
                    660:                                                        }
                    661: 
                    662:                                                        default:
                    663:                                                        {
                    664:                                                            somme_invalide =
                    665:                                                                    d_vrai;
                    666:                                                            break;
                    667:                                                        }
                    668:                                                    }
                    669: 
                    670:                                                    break;
                    671:                                                }
                    672: 
                    673:                                                case '5':
                    674:                                                {
                    675:                                                    switch(fonction[5])
                    676:                                                    {
                    677:                                                        case '6': // sha256
                    678:                                                        {
                    679:                                                            if (fonction[6] ==
                    680:                                                            d_code_fin_chaine)
                    681:                                                            {
                    682:                                                                EVP_sum =
                    683:                                                                EVP_sha256();
                    684:                                                            }
                    685:                                                            else
                    686:                                                            {
                    687:                                                                somme_invalide =
                    688:                                                                        d_vrai;
                    689:                                                            }
                    690: 
                    691:                                                            break;
                    692:                                                        }
                    693: 
                    694:                                                        default:
                    695:                                                        {
                    696:                                                            somme_invalide =
                    697:                                                                    d_vrai;
                    698:                                                            break;
                    699:                                                        }
                    700:                                                    }
                    701: 
                    702:                                                    break;
                    703:                                                }
                    704: 
                    705:                                                default:
                    706:                                                {
                    707:                                                    somme_invalide = d_vrai;
                    708:                                                    break;
                    709:                                                }
                    710:                                            }
                    711: 
                    712:                                            break;
                    713:                                        }
                    714: #                                      endif
                    715: 
                    716: #                                      ifndef OPENSSL_NO_SHA512
                    717:                                        case '3': // sha3
                    718:                                        {
                    719:                                            switch(fonction[4])
                    720:                                            {
                    721:                                                case '8': // sha38
                    722:                                                {
                    723:                                                    switch(fonction[5])
                    724:                                                    {
                    725:                                                        case '4': // sha384
                    726:                                                        {
                    727:                                                            if (fonction[6] ==
                    728:                                                            d_code_fin_chaine)
                    729:                                                            {
                    730:                                                                EVP_sum =
                    731:                                                                EVP_sha384();
                    732:                                                            }
                    733:                                                            else
                    734:                                                            {
                    735:                                                                somme_invalide =
                    736:                                                                        d_vrai;
                    737:                                                            }
                    738: 
                    739:                                                            break;
                    740:                                                        }
                    741: 
                    742:                                                        default:
                    743:                                                        {
                    744:                                                            somme_invalide =
                    745:                                                                    d_vrai;
                    746:                                                            break;
                    747:                                                        }
                    748:                                                    }
                    749: 
                    750:                                                    break;
                    751:                                                }
                    752: 
                    753:                                                default:
                    754:                                                {
                    755:                                                    somme_invalide = d_vrai;
                    756:                                                    break;
                    757:                                                }
                    758:                                            }
                    759: 
                    760:                                            break;
                    761:                                        }
                    762: 
                    763:                                        case '5': // sha5
                    764:                                        {
                    765:                                            switch(fonction[4])
                    766:                                            {
                    767:                                                case '1': // sha51
                    768:                                                {
                    769:                                                    switch(fonction[5])
                    770:                                                    {
                    771:                                                        case '2': // sha512
                    772:                                                        {
                    773:                                                            if (fonction[6] ==
                    774:                                                            d_code_fin_chaine)
                    775:                                                            {
                    776:                                                                EVP_sum =
                    777:                                                                EVP_sha512();
                    778:                                                            }
                    779:                                                            else
                    780:                                                            {
                    781:                                                                somme_invalide =
                    782:                                                                        d_vrai;
                    783:                                                            }
                    784: 
                    785:                                                            break;
                    786:                                                        }
                    787: 
                    788:                                                        default:
                    789:                                                        {
                    790:                                                            somme_invalide =
                    791:                                                                    d_vrai;
                    792:                                                            break;
                    793:                                                        }
                    794:                                                    }
                    795: 
                    796:                                                    break;
                    797:                                                }
                    798: 
                    799:                                                default:
                    800:                                                {
                    801:                                                    somme_invalide = d_vrai;
                    802:                                                    break;
                    803:                                                }
                    804:                                            }
                    805: 
                    806:                                            break;
                    807:                                        }
                    808: #                                      endif
                    809: 
                    810:                                        default:
                    811:                                        {
                    812:                                            somme_invalide = d_vrai;
                    813:                                            break;
                    814:                                        }
                    815:                                    }
                    816: 
                    817:                                    break;
                    818:                                }
                    819: #                              endif
                    820: 
                    821:                                default:
                    822:                                {
                    823:                                    somme_invalide = d_vrai;
                    824:                                    break;
                    825:                                }
                    826:                            }
                    827: 
                    828:                            break;
                    829:                        }
                    830: 
                    831:                        default:
                    832:                        {
                    833:                            somme_invalide = d_vrai;
                    834:                            break;
                    835:                        }
                    836:                    }
                    837: 
                    838:                    break;
                    839:                }
                    840: 
                    841: #              ifndef OPENSSL_NO_WHIRLPOOL
                    842:                case 'W':
                    843:                {
                    844:                    if (strcmp(fonction, "WHIRLPOOL") == 0)
                    845:                    {
                    846:                        EVP_sum = EVP_whirlpool();
                    847:                    }
                    848:                    else
                    849:                    {
                    850:                        somme_invalide = d_vrai;
                    851:                    }
                    852: 
                    853:                    break;
                    854:                }
                    855: #              endif
                    856: 
                    857:                default:
                    858:                {
                    859:                    somme_invalide = d_vrai;
                    860:                    break;
                    861:                }
                    862:            }
                    863: 
                    864:            free(fonction);
                    865: 
                    866:            if (somme_invalide == d_vrai)
                    867:            {
                    868:                liberation(s_etat_processus, s_objet_argument_1);
                    869:                liberation(s_etat_processus, s_objet_argument_2);
                    870: 
                    871:                (*s_etat_processus).erreur_execution =
                    872:                        d_ex_chiffrement_indisponible;
                    873:                return;
                    874:            }
                    875: 
                    876:            generation_clef = d_vrai;
                    877:        }
                    878:        else
                    879:        {
                    880:            // Chiffrement ou déchiffrement d'un message
                    881: 
                    882:            chiffrement = fonction;
                    883: 
                    884:            l_element_courant = (*l_element_courant).suivant;
                    885: 
                    886:            if (l_element_courant == NULL)
                    887:            {
                    888:                liberation(s_etat_processus, s_objet_argument_1);
                    889:                liberation(s_etat_processus, s_objet_argument_2);
                    890: 
                    891:                (*s_etat_processus).erreur_execution = d_ex_manque_argument; 
                    892:                return;
                    893:            }
                    894: 
                    895:            // On attend la direction.
                    896: 
                    897:            if ((*(*l_element_courant).donnee).type != CHN)
                    898:            {
                    899:                liberation(s_etat_processus, s_objet_argument_1);
                    900:                liberation(s_etat_processus, s_objet_argument_2);
                    901: 
                    902:                (*s_etat_processus).erreur_execution =
                    903:                        d_ex_erreur_type_argument;
                    904:                return;
                    905:            }
                    906: 
                    907:            direction = (unsigned char *) (*(*l_element_courant)
                    908:                    .donnee).objet;
                    909: 
                    910:            // On attend la clef.
                    911: 
                    912:            if ((l_element_courant = (*l_element_courant).suivant) == NULL)
                    913:            {
                    914:                liberation(s_etat_processus, s_objet_argument_1);
                    915:                liberation(s_etat_processus, s_objet_argument_2);
                    916: 
                    917:                (*s_etat_processus).erreur_execution =
                    918:                        d_ex_manque_argument;
                    919:                return;
                    920:            }
                    921: 
                    922:            clef = (unsigned char *) (*(*l_element_courant).donnee).objet;
                    923: 
                    924:            // On attend le vecteur d'initialisation.
                    925: 
                    926:            if ((l_element_courant = (*l_element_courant).suivant) == NULL)
                    927:            {
                    928:                liberation(s_etat_processus, s_objet_argument_1);
                    929:                liberation(s_etat_processus, s_objet_argument_2);
                    930: 
                    931:                (*s_etat_processus).erreur_execution =
                    932:                        d_ex_manque_argument;
                    933:                return;
                    934:            }
                    935: 
                    936:            iv = (unsigned char *) (*(*l_element_courant).donnee).objet;
                    937: 
                    938:            if ((*l_element_courant).suivant != NULL)
                    939:            {
                    940:                liberation(s_etat_processus, s_objet_argument_1);
                    941:                liberation(s_etat_processus, s_objet_argument_2);
                    942: 
                    943:                (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
                    944:                return;
                    945:            }
                    946:        }
                    947:    }
                    948:    else
                    949:    {
                    950:        liberation(s_etat_processus, s_objet_argument_1);
                    951:        liberation(s_etat_processus, s_objet_argument_2);
                    952: 
                    953:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                    954:        return;
                    955:    }
                    956: 
                    957:    if ((tampon = conversion_majuscule(chiffrement)) == NULL)
                    958:    {
                    959:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    960:        return;
                    961:    }
                    962: 
                    963:    if (strncmp(tampon, "AES", 3) == 0)
                    964:    {
                    965:    }
                    966: 
                    967:    free(tampon);
                    968: 
                    969:    if (generation_clef == d_vrai)
                    970:    {
                    971:    }
                    972:    else
                    973:    {
                    974:    }
                    975: 
                    976:    liberation(s_etat_processus, s_objet_argument_1);
                    977:    liberation(s_etat_processus, s_objet_argument_2);
                    978:    return;
                    979: }
                    980: 
                    981: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>