feat: update piv-ecdh
This commit is contained in:
@@ -27,6 +27,7 @@ impl Command for CommandImpl {
|
|||||||
.arg(Arg::with_name("epk").long("epk").takes_value(true).help("E-Public key"))
|
.arg(Arg::with_name("epk").long("epk").takes_value(true).help("E-Public key"))
|
||||||
.arg(Arg::with_name("public-key").long("public-key").takes_value(true).help("Public key"))
|
.arg(Arg::with_name("public-key").long("public-key").takes_value(true).help("Public key"))
|
||||||
.arg(Arg::with_name("public-key-file").long("public-key-file").takes_value(true).help("Public key"))
|
.arg(Arg::with_name("public-key-file").long("public-key-file").takes_value(true).help("Public key"))
|
||||||
|
.arg(Arg::with_name("public-key-point-hex").long("public-key-point-hex").takes_value(true).help("Public key point hex"))
|
||||||
.arg(Arg::with_name("json").long("json").help("JSON output"))
|
.arg(Arg::with_name("json").long("json").help("JSON output"))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,18 +45,29 @@ impl Command for CommandImpl {
|
|||||||
|
|
||||||
let mut json = BTreeMap::<&'_ str, String>::new();
|
let mut json = BTreeMap::<&'_ str, String>::new();
|
||||||
if public {
|
if public {
|
||||||
let public_key_pem = sub_arg_matches.value_of("public-key").map(ToString::to_string)
|
let public_key_pem_opt = sub_arg_matches.value_of("public-key").map(ToString::to_string)
|
||||||
.unwrap_or_else(|| match sub_arg_matches.value_of("public-key-file") {
|
.or_else(|| match sub_arg_matches.value_of("public-key-file") {
|
||||||
None => failure_and_exit!("--public-key or --public-key-file must require one"),
|
None => None,
|
||||||
Some(file) => match fs::read_to_string(file) {
|
Some(file) => match fs::read_to_string(file) {
|
||||||
Err(e) => failure_and_exit!("Read from file: {}, failed: {}", file, e),
|
Err(e) => failure_and_exit!("Read from file: {}, failed: {}", file, e),
|
||||||
Ok(key) => key,
|
Ok(key) => Some(key),
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
debugging!("Public key: {}", &public_key_pem);
|
if let Some(public_key_pem) = &public_key_pem_opt {
|
||||||
|
debugging!("Public key: {}", public_key_pem);
|
||||||
|
}
|
||||||
|
|
||||||
let public_key = opt_result!(public_key_pem.parse::<PublicKey>(), "Parse public key failed: {}");
|
let public_key;
|
||||||
|
if let Some(public_key_pem) = public_key_pem_opt {
|
||||||
|
public_key = opt_result!(public_key_pem.parse::<PublicKey>(), "Parse public key failed: {}");
|
||||||
|
} else {
|
||||||
|
let public_key_point_hex = sub_arg_matches.value_of("public-key-point-hex").unwrap_or_else(||
|
||||||
|
failure_and_exit!("--public-key, --public-key-file or --public-key-point-hex must require one"));
|
||||||
|
let public_key_point_bytes = opt_result!(hex::decode(public_key_point_hex), "Parse public key point hex failed: {}");
|
||||||
|
let encoded_point = opt_result!(EncodedPoint::from_bytes(&public_key_point_bytes), "Parse public key point failed: {}");
|
||||||
|
public_key = PublicKey::from_encoded_point(&encoded_point).unwrap();
|
||||||
|
};
|
||||||
|
|
||||||
let esk = EphemeralSecret::random(&mut OsRng);
|
let esk = EphemeralSecret::random(&mut OsRng);
|
||||||
let epk = esk.public_key();
|
let epk = esk.public_key();
|
||||||
|
|||||||
Reference in New Issue
Block a user