sign Subcommand
pub fn sign_data(
pkcs11: &Pkcs11,
slot: cryptoki::slot::Slot,
pin: &str,
label: &str,
data: &str,
) -> anyhow::Result<Vec<u8>> {
let session = pkcs11.open_rw_session(slot)?;
session.login(UserType::User, Some(&AuthPin::new(pin.into())))?;
let priv_key = find_key_by_label_and_class(
&session, label, ObjectClass::PRIVATE_KEY
)?;
let mut hasher = Sha256::new();
hasher.update(data.as_bytes());
let digest = hasher.finalize();
let signature = session.sign(&Mechanism::Ecdsa, priv_key, &digest)?;
println!("Signed {} bytes", data.len());
println!("Signature ({} bytes): {}", signature.len(), hex::encode(&signature));
Ok(signature)
}