packages feed

hashes-0.2.0.0: cbits/keccak-example.c

#include <string.h>
#include "keccak.h"

/* *************************************************************************** */
/* Generic Tools */

#define CHECKED(f)             \
    if (! (f)) {               \
        ok = 0; goto finally; \
    }

/* *************************************************************************** */
/* Digests */

typedef unsigned char MD_VALUE[32];
typedef char MD_VALUE_HEX[32*2+1];

void digestToHex(char *result, const unsigned char *md_value) {
    int i;
    for (i = 0; i < 32; i++) {
        sprintf(&result[2*i], "%02x", (uint8_t) (md_value[i]));
    }
}

const char *msg = "testing";
const char *expected = "5f16f4c7f149ac4f9510d9cf8cf384038ad348b3bcdc01915f95de12df9d1b02";

/* *************************************************************************** */
/* Main */

int main()
{
    int ok = 1;
    MD_VALUE md_value;
    MD_VALUE_HEX result;
    KECCAK256_CTX *ctx = NULL;

    CHECKED(ctx = keccak256_newctx());
    CHECKED(keccak256_init(ctx));
    CHECKED(keccak256_update(ctx, msg, strlen(msg)));
    CHECKED(keccak256_final(ctx, md_value));
    digestToHex(result, md_value);
    printf("Keccak-256 digest: %s\n", result);
    printf("expected         : %s\n", expected);

finally:
    if (ctx) keccak256_freectx(ctx);
    return ! ok;
}