diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/lib4.c | 28 | ||||
| -rw-r--r-- | lib/lib4.h | 8 |
2 files changed, 35 insertions, 1 deletions
@@ -20,3 +20,31 @@ int aes_ctr_edit(char *ciphertext, int ciphertext_length, int offset, char *newt aes_ctr(plaintext, ciphertext_length, ciphertext, key, nonce); return 0; } + +void sha1_hmac(unsigned int *mac, unsigned char *message, unsigned int msg_len, unsigned char *key, + unsigned int key_len) +{ + char *res = malloc(msg_len + key_len); + + memcpy(res, key, key_len); + memcpy(&res[key_len], message, msg_len); + + SHA1Context sh; + + SHA1Reset(&sh); + SHA1Input(&sh, res, (msg_len + key_len)); + SHA1Result(&sh); + + memcpy(mac, &(sh.Message_Digest), 20); +} + +int sha1_hmac_verify(unsigned int *mac, unsigned char *msg, unsigned int msg_len, + unsigned char *key, unsigned int key_len) +{ + unsigned int com_mac[5]; + + sha1_hmac(com_mac, msg, msg_len, key, key_len); + + return !memcmp(com_mac, mac, 20); + +} @@ -1,7 +1,13 @@ #ifndef __LIB_4__ #define __LIB_4__ +#include "sha1.h" +// sha1 constants -int aes_ctr_edit(char *ciphertext, int ciphertext_length, int offset, char *newtext); +int aes_ctr_edit(char *ciphertext, int ciphertext_length, int offset, char *newtext); +void sha1_hmac(unsigned int *mac, unsigned char *message, unsigned int msg_len, unsigned char *key, + unsigned int key_len); +int sha1_hmac_verify(unsigned int *mac, unsigned char *msg, unsigned int msg_len, + unsigned char *key, unsigned int key_len); #endif |
