使用Rust openssl导出EC公钥
我刚从rust开始玩一个玩具加密库。我想生成一个椭圆曲线私钥+公钥对,并以der或pem格式打印它们。我发现使用私钥非常简单 使用openssl::ec::{EcKey,EcGroup}; 使用openssl::nid::nid; pub fn生成密钥对{ 让group=EcGroup::from_curve_nameNid::SECP256K1.unwrap; let key=EcKey::generate&group.unwrap; println!{:?},key.private_key_to_der.unwrap;//可以改用pem并以utf8字符串打印 } 但是,似乎没有任何方法像public_key to_der那样让EcKey导出公钥,即使调试打印也不起作用: let public=key.public\u key; 普林顿!{:?},公众; 给出了一个编译错误使用Rust openssl导出EC公钥,rust,openssl,Rust,Openssl,我刚从rust开始玩一个玩具加密库。我想生成一个椭圆曲线私钥+公钥对,并以der或pem格式打印它们。我发现使用私钥非常简单 使用openssl::ec::{EcKey,EcGroup}; 使用openssl::nid::nid; pub fn生成密钥对{ 让group=EcGroup::from_curve_nameNid::SECP256K1.unwrap; let key=EcKey::generate&group.unwrap; println!{:?},key.private_key_
openssl::ec::EcPointRef` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
好的,看起来我需要首先使用PKey::from_ec_key将其包装在PKey中
use openssl::ec::{EcKey,EcGroup, EcPoint};
use openssl::nid::Nid;
fn key_from_public_key() {
let group = EcGroup::from_curve_name(Nid::X9_62_PRIME256V1).unwrap();
let key = EcKey::generate(&group).unwrap();
let mut ctx = openssl::bn::BigNumContext::new().unwrap();
println!("private eckey = {:?}", key.private_key());
let bytes = key.public_key().to_bytes(&group,
openssl::ec::PointConversionForm::COMPRESSED, &mut ctx).unwrap();
println!("public key = {:?}", bytes);
drop(key);
let public_key = EcPoint::from_bytes(&group, &bytes, &mut ctx).unwrap();
let ec_key = EcKey::from_public_key(&group, &public_key).unwrap();
assert!(ec_key.check_key().is_ok());
}