fn sign()

in src/vtok_p11/src/crypto/sign.rs [108:130]


    fn sign(mut self: Box<Self>, data: &[u8]) -> Result<Vec<u8>, Error> {
        self.enter_state(OpCtxState::SinglepartActive)?;
        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_DigestSign(
                self.evp_md_ctx.as_mut_ptr(),
                sig.as_mut_ptr(),
                &mut sig_len as *mut ffi::c_size_t,
                data.as_ptr(),
                data.len() as ffi::c_size_t,
            )
        };
        if rc != 1 {
            return Err(Error::DigestSign);
        }

        match self.algo {
            KeyAlgo::Ec => ecdsa_sig_der_to_ckrs(sig.as_slice()),
            KeyAlgo::Rsa => Ok(sig),
        }
    }