ECCTK (Elliptic Curve Cryptographic ToolKit): mac_file.cpp

# mac_file.cpp

Voici un exemple de programme permettant d'effectuer le calcul du MAC d'un fichier. Ce code est générique et permet d'utiliser tous les algorithmes présent dans la librairie. Les éléments fixés ne le sont qu'à titre d'exemple.

    /* -----------------------------------------------------------------------
     *
     * Copyright (c) 2002-2005 Mr Ludovic FLAMENT <ludovic.flament@free.fr>, LIEVIN, FRANCE
     *
     * Termes :
     *
     * L'utilisation et/ou la redistribution de ce code (avec ou sans modification),
     * ainsi que de tous les composants du produit (librairies, documentation, exemples, ...)
     * est soumise aux termes de la licence qui vous est attribuée par son auteur.
     *
     * -----------------------------------------------------------------------
     */

    #include <stdlib.h>
    #include <stdio.h>

    #include <include/ecctk-prototype.h>
    #include <include/ecctk-hash.h>

    s2byte mac_file()
    {
        s2byte  ret     = -1;

        /* set MAC algorithm
         */
        s2byte  algo    = ECCTK_HASH_MAC_ALGO_RMD128;

        /* set name of file to MAC
         */
        s1byte  file[]  = "file_to_hash";

        /* create output stream with maximum size for the hash value
         */
        u1byte  hash[ECCTK_HASH_SIZE_SHA160];

        /* set the value of the key
         */
        u1byte  key[] = {0x34, 0x12, 0x45, 0xa3, 0x1b, 0x59, 0x4f, 0x9d, 0xfc, 0x45,
                         0xa3, 0x1b, 0x67, 0x35, 0x34, 0x12, 0xde, 0xa8, 0xf9, 0x5c};

        /* the size of hash value, only use to print the result
         */
        u2byte  hashsize,
                i;

        switch (algo)
        {
            case ECCTK_HASH_MAC_ALGO_RMD128:
                hashsize = ECCTK_HASH_SIZE_RMD128;
                ret = RIPEMD128_FileMAC(file, key, sizeof(key), hash, hashsize);
                break;
    #ifndef ECCTK_EVALUATION
            case ECCTK_HASH_MAC_ALGO_RMD160:
                hashsize = ECCTK_HASH_SIZE_RMD160;
                ret = RIPEMD160_FileMAC(file, key, sizeof(key), hash, hashsize);
                break;
    #endif
            default:
                fprintf(stderr, "Unknown MAC algorithm\n");
                return EXIT_FAILURE;
                break;
        }

        if (ret != ECCTK_HASH_NO_ERROR)
        {
            fprintf(stderr, "MAC %s failed (Error : %d)\n", file, ret);
            return EXIT_FAILURE;
        }

        printf("MAC (%s) = ", file);
        for (i = 0; i < hashsize; i++)
            printf("%02x", hash[i]);
        printf("\n");

        return EXIT_SUCCESS;
    }