#include "lib4.h" #include "lib3.h" #include "lib2.h" #include "lib.h" /** * encrypt always with the same key, same nonce? * **/ int aes_ctr_edit(char *ciphertext, int ciphertext_length, int offset, char *newtext) { // do not allow greater ciphertexts if((strlen(newtext)+offset) > ciphertext_length) return 1; // insert newtext at offset and reencrpyt char *plaintext = malloc(ciphertext_length); aes_ctr(ciphertext, ciphertext_length, plaintext, key, nonce); memcpy(&plaintext[offset], newtext, strlen(newtext)); 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); }