Mercurial > urweb
view src/c/mhash.c @ 1104:72670131dace
Basis.serialize; separate file for mhash; run transactional finishers in reverse order; set needs_sig properly
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Thu, 31 Dec 2009 11:41:57 -0500 |
parents | |
children | 6249df767d4c |
line wrap: on
line source
#include <mhash.h> #define KEYSIZE 16 #define PASSSIZE 4 #define HASH_ALGORITHM MHASH_SHA256 #define HASH_BLOCKSIZE 32 #define KEYGEN_ALGORITHM KEYGEN_MCRYPT int uw_hash_blocksize = HASH_BLOCKSIZE; static int password[PASSSIZE]; static unsigned char private_key[KEYSIZE]; void uw_init_crypto() { KEYGEN kg = {{HASH_ALGORITHM, HASH_ALGORITHM}}; int i; assert(mhash_get_block_size(HASH_ALGORITHM) == HASH_BLOCKSIZE); for (i = 0; i < PASSSIZE; ++i) password[i] = rand(); if (mhash_keygen_ext(KEYGEN_ALGORITHM, kg, private_key, sizeof(private_key), (unsigned char*)password, sizeof(password)) < 0) { fprintf(stderr, "Key generation failed\n"); exit(1); } } void uw_sign(const char *in, char *out) { MHASH td; td = mhash_hmac_init(HASH_ALGORITHM, private_key, sizeof(private_key), mhash_get_hash_pblock(HASH_ALGORITHM)); mhash(td, in, strlen(in)); if (mhash_hmac_deinit(td, out) < 0) fprintf(stderr, "Signing failed\n"); }