| #ifndef HMAC_H | 
 | #define HMAC_H | 
 |  | 
 | typedef struct Hash_param { | 
 |     void *hash_state; | 
 |     int (*init)(void *hash_state); | 
 |     int (*process)(void *hash_state, const unsigned char *in, unsigned int inlen); | 
 |     int (*done)(void *hash_state, unsigned char *out); | 
 |     unsigned int hashsize; | 
 |     unsigned int blocksize; | 
 | } hash_param; | 
 |  | 
 | typedef struct Hmac_state { | 
 |     hash_param     *hash; | 
 |     unsigned char  *key; | 
 | } hmac_state; | 
 |  | 
 | int hmac_init(hmac_state *hmac, hash_param *hash, const unsigned char *key, | 
 |               unsigned long keylen); | 
 | int hmac_process(hmac_state *hmac, const unsigned char *in, | 
 |                  unsigned long inlen); | 
 | int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen); | 
 |  | 
 | #endif /* HMAC_H */ |