49 return dec; |
49 return dec; |
50 } |
50 } |
51 |
51 |
52 size_t aes_write(const void *buf, size_t s, size_t n, AESDecrypter *dec) { |
52 size_t aes_write(const void *buf, size_t s, size_t n, AESDecrypter *dec) { |
53 int len = s*n; |
53 int len = s*n; |
54 int outlen = len + AES_BLOCK_SIZE; |
54 int outlen = len + 16; |
55 unsigned char *out = malloc(outlen); |
55 unsigned char *out = malloc(outlen); |
56 EVP_DecryptUpdate(&dec->ctx, out, &len, buf, len); |
56 EVP_DecryptUpdate(&dec->ctx, out, &len, buf, len); |
57 dec->write(out, 1, len, dec->stream); |
57 dec->write(out, 1, len, dec->stream); |
58 free(out); |
58 free(out); |
59 return (s*n) / s; |
59 return (s*n) / s; |
115 size_t in_len = enc->read(in, 1, len, enc->stream); |
115 size_t in_len = enc->read(in, 1, len, enc->stream); |
116 |
116 |
117 void *out = NULL; |
117 void *out = NULL; |
118 int outlen = 0; |
118 int outlen = 0; |
119 if(in_len != 0) { |
119 if(in_len != 0) { |
120 outlen = len + AES_BLOCK_SIZE; |
120 outlen = len + 16; |
121 out = malloc(outlen); |
121 out = malloc(outlen); |
122 EVP_EncryptUpdate(&enc->ctx, out, &outlen, in, in_len); |
122 EVP_EncryptUpdate(&enc->ctx, out, &outlen, in, in_len); |
123 //out = (char*)aes_encrypt(enc->ctx, (unsigned char*)in, (int*)&in_len); |
123 //out = (char*)aes_encrypt(enc->ctx, (unsigned char*)in, (int*)&in_len); |
124 } else { |
124 } else { |
125 out = malloc(AES_BLOCK_SIZE); |
125 out = malloc(16); |
126 EVP_EncryptFinal_ex(&enc->ctx, out, &outlen); |
126 EVP_EncryptFinal_ex(&enc->ctx, out, &outlen); |
127 enc->end = 1; |
127 enc->end = 1; |
128 } |
128 } |
129 enc->tmp = out; |
129 enc->tmp = out; |
130 enc->tmplen = outlen; |
130 enc->tmplen = outlen; |