1use esteid_cryptoki::IdCard;
2use tokenkey::{EcCurve, Hash, KeyAlgorithm, SignScheme};
3
4use crate::error::Result;
5
6pub fn sign(card: &IdCard, hash: Hash, data: &[u8], pin2: &str) -> Result<Vec<u8>> {
12 let key = card.open_signing(pin2)?;
13 Ok(key.sign(SignScheme::Ecdsa(hash), data)?)
14}
15
16pub fn recommended_hash(card: &IdCard) -> Result<Hash> {
18 let KeyAlgorithm::Ec(curve) = card.sign.algorithm()?;
19 Ok(match curve {
20 EcCurve::P256 => Hash::Sha256,
21 EcCurve::P384 => Hash::Sha384,
22 EcCurve::P521 => Hash::Sha512,
23 })
24}