libidav/crypto.c

changeset 207
de23f8881e9f
parent 185
cd42cccee550
child 237
fd9135bc7580
--- a/libidav/crypto.c	Sun Mar 06 15:19:50 2016 +0100
+++ b/libidav/crypto.c	Mon Mar 14 11:54:55 2016 +0100
@@ -35,7 +35,7 @@
 #include "crypto.h"
 
 AESDecrypter* aes_decrypter_new(DavKey *key, void *stream, dav_write_func write_func) {
-    AESDecrypter *dec = malloc(sizeof(AESDecrypter));
+    AESDecrypter *dec = calloc(1, sizeof(AESDecrypter));
     SHA256_Init(&dec->sha256);
     dec->stream = stream;
     dec->write = write_func;
@@ -96,13 +96,17 @@
     return (s*n) / s;
 }
 
-void aes_decrypter_close(AESDecrypter *dec) {
+void aes_decrypter_shutdown(AESDecrypter *dec) {
     void *out = malloc(128);
     int len = 0;
     EVP_DecryptFinal_ex(&dec->ctx, out, &len);
     dec->write(out, 1, len, dec->stream);
+    SHA256_Update(&dec->sha256, out, len);
     free(out);
     EVP_CIPHER_CTX_cleanup(&dec->ctx);
+}
+
+void aes_decrypter_close(AESDecrypter *dec) {
     free(dec);
 }
 
@@ -290,6 +294,6 @@
 }
 
 
-void dav_get_hash(SHA256_CTX *sha256, char *buf) {
+void dav_get_hash(SHA256_CTX *sha256, unsigned char *buf) {
     SHA256_Final((unsigned char*)buf, sha256);
 }

mercurial