crypter_t api supports in-place encryption using NULL as output parameter

This commit is contained in:
Martin Willi
2008-04-30 14:02:25 +00:00
parent d691080cfc
commit f5475fa440
4 changed files with 57 additions and 17 deletions
@@ -116,13 +116,20 @@ static void crypt(private_openssl_crypter_t *this, chunk_t data,
chunk_t iv, chunk_t *dst, int enc)
{
int len;
u_char *out;
out = data.ptr;
if (dst)
{
*dst = chunk_alloc(data.len);
out = dst->ptr;
}
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx);
EVP_CipherInit_ex(&ctx, this->cipher, NULL, this->key.ptr, iv.ptr, enc);
EVP_CIPHER_CTX_set_padding(&ctx, 0); /* disable padding */
*dst = chunk_alloc(data.len);
EVP_CipherUpdate(&ctx, dst->ptr, &len, data.ptr, data.len);
EVP_CipherFinal_ex(&ctx, dst->ptr, &len); /* since padding is disabled this does nothing */
EVP_CipherUpdate(&ctx, out, &len, data.ptr, data.len);
EVP_CipherFinal_ex(&ctx, out, &len); /* since padding is disabled this does nothing */
EVP_CIPHER_CTX_cleanup(&ctx);
}