33 |
33 |
34 #include <libidav/utils.h> |
34 #include <libidav/utils.h> |
35 #include "crypto.h" |
35 #include "crypto.h" |
36 |
36 |
37 AESDecrypter* aes_decrypter_new(DavKey *key, void *stream, dav_write_func write_func) { |
37 AESDecrypter* aes_decrypter_new(DavKey *key, void *stream, dav_write_func write_func) { |
38 AESDecrypter *dec = malloc(sizeof(AESDecrypter)); |
38 AESDecrypter *dec = calloc(1, sizeof(AESDecrypter)); |
39 SHA256_Init(&dec->sha256); |
39 SHA256_Init(&dec->sha256); |
40 dec->stream = stream; |
40 dec->stream = stream; |
41 dec->write = write_func; |
41 dec->write = write_func; |
42 dec->key = key; |
42 dec->key = key; |
43 dec->init = 0; |
43 dec->init = 0; |
94 SHA256_Update(&dec->sha256, out, wlen); |
94 SHA256_Update(&dec->sha256, out, wlen); |
95 free(out); |
95 free(out); |
96 return (s*n) / s; |
96 return (s*n) / s; |
97 } |
97 } |
98 |
98 |
99 void aes_decrypter_close(AESDecrypter *dec) { |
99 void aes_decrypter_shutdown(AESDecrypter *dec) { |
100 void *out = malloc(128); |
100 void *out = malloc(128); |
101 int len = 0; |
101 int len = 0; |
102 EVP_DecryptFinal_ex(&dec->ctx, out, &len); |
102 EVP_DecryptFinal_ex(&dec->ctx, out, &len); |
103 dec->write(out, 1, len, dec->stream); |
103 dec->write(out, 1, len, dec->stream); |
|
104 SHA256_Update(&dec->sha256, out, len); |
104 free(out); |
105 free(out); |
105 EVP_CIPHER_CTX_cleanup(&dec->ctx); |
106 EVP_CIPHER_CTX_cleanup(&dec->ctx); |
|
107 } |
|
108 |
|
109 void aes_decrypter_close(AESDecrypter *dec) { |
106 free(dec); |
110 free(dec); |
107 } |
111 } |
108 |
112 |
109 |
113 |
110 AESEncrypter* aes_encrypter_new(DavKey *key, void *stream, dav_read_func read_func) { |
114 AESEncrypter* aes_encrypter_new(DavKey *key, void *stream, dav_read_func read_func) { |