feat: v1.13.1

This commit is contained in:
2025-05-08 22:29:19 +08:00
parent a1ae0ff4dc
commit 0b9ec436ba
7 changed files with 12 additions and 10 deletions

2
Cargo.lock generated
View File

@@ -508,7 +508,7 @@ dependencies = [
[[package]]
name = "card-cli"
version = "1.13.0"
version = "1.13.1"
dependencies = [
"aes-gcm-stream",
"authenticator 0.3.1",

View File

@@ -1,6 +1,6 @@
[package]
name = "card-cli"
version = "1.13.0"
version = "1.13.1"
authors = ["Hatter Jiang <jht5945@gmail.com>"]
edition = "2018"

View File

@@ -55,8 +55,9 @@ fn fetch_public_key(parameter: &str, serial_opt: &Option<&str>) -> XResult<Vec<u
if key.usage != KeyUsage::Singing {
simple_error!("Not singing key")
} else {
let private_key = cmd_hmac_decrypt::try_decrypt(&key.private_key)?;
let (_, public_key_der, _) =
seutil::recover_secure_enclave_p256_public_key(&key.private_key, true)?;
seutil::recover_secure_enclave_p256_public_key(&private_key, true)?;
Ok(public_key_der)
}
}

View File

@@ -65,7 +65,8 @@ pub fn sign(alg: &str, message: &[u8], key_uri: KeyUri, sub_arg_matches: &ArgMat
if key.usage != KeyUsage::Singing {
return simple_error!("Not singing key");
}
seutil::secure_enclave_p256_sign(&key.private_key, message)
let private_key = cmd_hmac_decrypt::try_decrypt(&key.private_key)?;
seutil::secure_enclave_p256_sign(&private_key, message)
}
KeyUri::YubikeyPivKey(key) => {
let mut yk = yubikeyutil::open_yubikey_with_args(sub_arg_matches)?;

View File

@@ -35,7 +35,6 @@ impl Command for CommandImpl {
let key = sub_arg_matches.value_of("key").unwrap();
let epk = sub_arg_matches.value_of("epk").unwrap();
let key = cmd_hmac_decrypt::try_decrypt(key)?;
let key_uri = parse_key_uri(&key)?;
let se_key_uri = key_uri.as_secure_enclave_key()?;
debugging!("Secure enclave key URI: {:?}", se_key_uri);
@@ -59,8 +58,9 @@ impl Command for CommandImpl {
opt_result!(hex::decode(epk), "Decode public key from hex failed: {}")
};
let private_key = cmd_hmac_decrypt::try_decrypt(&se_key_uri.private_key)?;
let dh = seutil::secure_enclave_p256_dh(
&se_key_uri.private_key,
&private_key,
&ephemeral_public_key_der_bytes,
)?;
let dh_hex = hex::encode(&dh);

View File

@@ -45,12 +45,12 @@ impl Command for CommandImpl {
Some(input) => input.as_bytes().to_vec(),
};
let key = cmd_hmac_decrypt::try_decrypt(key)?;
let key_uri = parse_key_uri(&key)?;
let se_key_uri = key_uri.as_secure_enclave_key()?;
debugging!("Secure enclave key URI: {:?}", se_key_uri);
let signature = seutil::secure_enclave_p256_sign(&se_key_uri.private_key, &input_bytes)?;
let private_key = cmd_hmac_decrypt::try_decrypt(&se_key_uri.private_key)?;
let signature = seutil::secure_enclave_p256_sign(&private_key, &input_bytes)?;
if json_output {
let mut json = BTreeMap::<&'_ str, String>::new();

View File

@@ -60,6 +60,8 @@ impl Command for CommandImpl {
let (public_key_point, public_key_der, private_key) =
seutil::generate_secure_enclave_p256_keypair(sign, require_bio)?;
let private_key = cmd_hmac_encrypt::do_encrypt(&private_key, &mut None, sub_arg_matches)?;
let key_uri = format!(
"key://{}:se/p256:{}:{}",
host,
@@ -67,8 +69,6 @@ impl Command for CommandImpl {
private_key,
);
let key_uri = cmd_hmac_encrypt::do_encrypt(&key_uri, &mut None, sub_arg_matches)?;
print_se_key(json_output, &public_key_point, &public_key_der, &key_uri);
Ok(None)
}