summaryrefslogtreecommitdiff
path: root/lib/lib4.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lib4.c')
-rw-r--r--lib/lib4.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/lib4.c b/lib/lib4.c
index 475efe9..5b7ec7d 100644
--- a/lib/lib4.c
+++ b/lib/lib4.c
@@ -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);
+
+}