in src/vtok_p11/src/crypto/sign.rs [86:106]
fn finalize(mut self: Box<Self>) -> Result<Vec<u8>, Error> {
self.enter_state(OpCtxState::MultipartReady)?;
let mut sig = vec![0u8; self.sig_len];
let mut sig_len: ffi::c_size_t = self.sig_len as ffi::c_size_t;
let rc = unsafe {
ffi::EVP_DigestSignFinal(
self.evp_md_ctx.as_mut_ptr(),
sig.as_mut_ptr(),
&mut sig_len as *mut ffi::c_size_t,
)
};
if rc != 1 {
return Err(Error::DigestSignFinal);
}
match self.algo {
KeyAlgo::Ec => ecdsa_sig_der_to_ckrs(sig.as_slice()),
KeyAlgo::Rsa => Ok(sig),
}
}