libidav/crypto.c

changeset 207
de23f8881e9f
parent 185
cd42cccee550
child 237
fd9135bc7580
equal deleted inserted replaced
206:527d0fde484e 207:de23f8881e9f
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) {
288 *length = outlen + f; 292 *length = outlen + f;
289 return (char*)out; 293 return (char*)out;
290 } 294 }
291 295
292 296
293 void dav_get_hash(SHA256_CTX *sha256, char *buf) { 297 void dav_get_hash(SHA256_CTX *sha256, unsigned char *buf) {
294 SHA256_Final((unsigned char*)buf, sha256); 298 SHA256_Final((unsigned char*)buf, sha256);
295 } 299 }

mercurial