00001 #ifndef CRYPTO__HMAC__H__ 00002 #define CRYPTO__HMAC__H__ 00003 00004 typedef void (*hmac_init_fn)(void*); 00005 typedef void (*hmac_update_fn)(void*, const unsigned char*, unsigned long); 00006 typedef void (*hmac_finalize_fn)(void*, unsigned char*); 00007 typedef void (*hmac_extract_fn)(const void*, void*); 00008 typedef void (*hmac_inject_fn)(void*, const void*); 00009 00010 struct hmac_control_block 00011 { 00012 unsigned state_size; 00013 unsigned block_size; 00014 unsigned digest_size; 00015 unsigned midstate_size; 00016 hmac_init_fn init; 00017 hmac_update_fn update; 00018 hmac_finalize_fn finalize; 00019 hmac_extract_fn extract; 00020 hmac_inject_fn inject; 00021 }; 00022 00023 extern const struct hmac_control_block hmac_md5; 00024 extern const struct hmac_control_block hmac_sha1; 00025 extern const struct hmac_control_block hmac_sha256; 00026 extern const struct hmac_control_block hmac_sha384; 00027 extern const struct hmac_control_block hmac_sha512; 00028 00029 struct str; 00030 extern void hmac_prepare(const struct hmac_control_block* hcb, 00031 void* midstate, 00032 const struct str* secret); 00033 extern void hmac_finish(const struct hmac_control_block* hcb, 00034 const void* midstate, 00035 const struct str* nonce, 00036 void* outout); 00037 extern void hmac(const struct hmac_control_block* hcb, 00038 const struct str* secret, 00039 const struct str* nonce, 00040 void* output); 00041 00042 #endif