--- 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); }