Skip to content

Commit

Permalink
Expose Cipher::cipher_final_unchecked
Browse files Browse the repository at this point in the history
This mirrors the `Cipher::cipher_update_unchecked` API call for clients
that want to manually track the state of internal OpenSSL cipher buffer
size.
  • Loading branch information
wiktor-k committed Dec 20, 2022
1 parent 71013f7 commit 45e5dce
Showing 1 changed file with 27 additions and 7 deletions.
34 changes: 27 additions & 7 deletions openssl/src/cipher_ctx.rs
Expand Up @@ -607,14 +607,34 @@ impl CipherCtxRef {
assert!(output.len() >= block_size);
}

unsafe { self.cipher_final_unchecked(output) }
}

/// Finalizes the encryption or decryption process.
///
/// Any remaining data will be written to the output buffer.
///
/// Returns the number of bytes written to `output`.
///
/// This function is the same as [`Self::cipher_final`] but with
/// the output buffer size check removed.
///
/// SAFETY: The caller is expected to provide `output` buffer
/// large enough to contain correct number of bytes. For streaming
/// ciphers the output buffer can be empty, for block ciphers the
/// output buffer should be at least as big as the block.
#[corresponds(EVP_CipherFinal)]
pub unsafe fn cipher_final_unchecked(
&mut self,
output: &mut [u8],
) -> Result<usize, ErrorStack> {
let mut outl = 0;
unsafe {
cvt(ffi::EVP_CipherFinal(
self.as_ptr(),
output.as_mut_ptr(),
&mut outl,
))?;
}

cvt(ffi::EVP_CipherFinal(
self.as_ptr(),
output.as_mut_ptr(),
&mut outl,
))?;

Ok(outl as usize)
}
Expand Down

0 comments on commit 45e5dce

Please sign in to comment.