diff options
Diffstat (limited to 'lib/lib4.c')
| -rw-r--r-- | lib/lib4.c | 28 |
1 files changed, 28 insertions, 0 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); + +} |
