feat: v0.2.0-rc, add macro ecc_private_key_convert

This commit is contained in:
2024-03-30 18:34:14 +08:00
parent bb0b526c68
commit f565d01c27
3 changed files with 24 additions and 34 deletions

View File

@@ -1,6 +1,9 @@
use std::fs;
use rcgen::{BasicConstraints, Certificate, CertificateParams, DistinguishedName, DnType, IsCa, KeyPair, PKCS_ECDSA_P256_SHA256};
use rcgen::{
BasicConstraints, Certificate, CertificateParams,
DistinguishedName, DnType, IsCa, KeyPair, PKCS_ECDSA_P256_SHA256,
};
fn main() {
let key_pair = KeyPair::generate(&PKCS_ECDSA_P256_SHA256).expect("Generate key pair failed");

View File

@@ -20,13 +20,13 @@ pub struct ProxyApp {
tls: bool,
lookup_dns: bool,
host_configs: Vec<HostConfig>,
tokio_async_resolver: TokioAsyncResolver,
dns_resolver: TokioAsyncResolver,
dns_resolver_cache_map: RwLock<HashMap<String, String>>,
}
impl ProxyApp {
pub fn new(tls: bool, lookup_dns: bool, host_configs: Vec<HostConfig>) -> Self {
let tokio_async_resolver = TokioAsyncResolver::tokio(
let dns_resolver = TokioAsyncResolver::tokio(
ResolverConfig::default(),
ResolverOpts::default(),
);
@@ -34,7 +34,7 @@ impl ProxyApp {
tls,
lookup_dns,
host_configs,
tokio_async_resolver,
dns_resolver,
dns_resolver_cache_map: Default::default(),
}
}
@@ -47,12 +47,11 @@ impl ProxyApp {
return Some(ipv4_address.to_string());
}
}
let ips = self.tokio_async_resolver.ipv4_lookup(hostname).await;
let ips = self.dns_resolver.ipv4_lookup(hostname).await;
log::debug!("DNS lookup {} --> {:#?}", hostname, ips);
match ips {
Ok(ips) => {
let records = ips.as_lookup().records();
for record in records {
for record in ips.as_lookup().records() {
if let Some(RData::A(a)) = record.data() {
let ipv4_address = a.0.to_string();
{

View File

@@ -36,35 +36,23 @@ pub fn issue_certificate(intermediate_certificate: &Certificate, domain: &str) -
})
}
macro_rules! ecc_private_key_convert {
($base_crate:ident, $pem:expr) => {{
use $base_crate::{pkcs8::{DecodePrivateKey, EncodePrivateKey, LineEnding}, SecretKey};
let secret_key = SecretKey::from_pkcs8_pem($pem);
if let Ok(secret_key) = secret_key {
if let Ok(pem) = secret_key.to_pkcs8_pem(LineEnding::CR) {
return pem.to_string();
}
}
}};
}
fn parse_pkcs8(pem: &str) -> String {
// KeyPair only support PKCS#8 private key with public key, though public key is optional
{
use p256::{pkcs8::{DecodePrivateKey, EncodePrivateKey, LineEnding}, SecretKey};
let secret_key = SecretKey::from_pkcs8_pem(pem);
if let Ok(secret_key) = secret_key {
if let Ok(pem) = secret_key.to_pkcs8_pem(LineEnding::CR) {
return pem.to_string();
}
}
}
{
use p384::{pkcs8::{DecodePrivateKey, EncodePrivateKey, LineEnding}, SecretKey};
let secret_key = SecretKey::from_pkcs8_pem(pem);
if let Ok(secret_key) = secret_key {
if let Ok(pem) = secret_key.to_pkcs8_pem(LineEnding::CR) {
return pem.to_string();
}
}
}
{
use p521::{pkcs8::{DecodePrivateKey, EncodePrivateKey, LineEnding}, SecretKey};
let secret_key = SecretKey::from_pkcs8_pem(pem);
if let Ok(secret_key) = secret_key {
if let Ok(pem) = secret_key.to_pkcs8_pem(LineEnding::CR) {
return pem.to_string();
}
}
}
ecc_private_key_convert!(p256, pem);
ecc_private_key_convert!(p384, pem);
ecc_private_key_convert!(p521, pem);
pem.to_string()
}