trifid/trifid-pki/src/test.rs

74 lines
3.1 KiB
Rust
Raw Normal View History

2023-02-27 02:58:45 +00:00
#![allow(clippy::unwrap_used)]
#![allow(clippy::expect_used)]
2023-02-27 15:04:10 +00:00
use std::fs;
2023-02-27 02:58:45 +00:00
use crate::netmask;
use std::net::Ipv4Addr;
2023-02-27 15:04:10 +00:00
use std::ops::Add;
use std::time::{Duration, SystemTime, SystemTimeError, UNIX_EPOCH};
2023-02-27 02:58:45 +00:00
use ipnet::Ipv4Net;
use crate::cert::{deserialize_nebula_certificate, NebulaCertificate, NebulaCertificateDetails};
use std::str::FromStr;
2023-02-27 15:04:10 +00:00
/// This is a cert that we (e3team) actually use in production, and it's a known-good certificate.
pub const KNOWN_GOOD_CERT: &[u8; 258] = b"-----BEGIN NEBULA CERTIFICATE-----\nCkkKF2UzdGVhbSBJbnRlcm5hbCBOZXR3b3JrKJWev5wGMJWFxKsGOiCvpwoHyKY5\n8Q5+2XxDjtoCf/zlNY/EUdB8bwXQSwEo50ABEkB0Dx76lkMqc3IyH5+ml2dKjTyv\nB4Jiw6x3abf5YZcf8rDuVEgQpvFdJmo3xJyIb3C9vKZ6kXsUxjw6s1JdWgkA\n-----END NEBULA CERTIFICATE-----";
2023-02-27 02:58:45 +00:00
#[test]
fn certificate_serialization() {
2023-02-27 15:04:10 +00:00
let before = round_systime_to_secs(SystemTime::now() - Duration::from_secs(60)).unwrap();
let after = round_systime_to_secs(SystemTime::now() + Duration::from_secs(60)).unwrap();
2023-02-27 02:58:45 +00:00
let pub_key = b"1234567890abcedfghij1234567890ab";
let cert = NebulaCertificate {
details: NebulaCertificateDetails {
name: "testing".to_string(),
ips: vec![
netmask!("10.1.1.1", "255.255.255.0"),
netmask!("10.1.1.2", "255.255.0.0"),
2023-02-27 15:04:10 +00:00
netmask!("10.1.1.3", "255.0.0.0")
2023-02-27 02:58:45 +00:00
],
subnets: vec![
2023-02-27 15:04:10 +00:00
netmask!("9.1.1.1", "255.255.255.128"),
2023-02-27 02:58:45 +00:00
netmask!("9.1.1.2", "255.255.255.0"),
netmask!("9.1.1.3", "255.255.0.0")
],
groups: vec!["test-group1".to_string(), "test-group2".to_string(), "test-group3".to_string()],
not_before: before,
not_after: after,
public_key: *pub_key,
is_ca: false,
2023-02-27 15:04:10 +00:00
issuer: "1234567890abcedfabcd1234567890ab".to_string(),
2023-02-27 02:58:45 +00:00
},
2023-02-27 02:59:46 +00:00
signature: b"1234567890abcedfghij1234567890ab".to_vec(),
2023-02-27 02:58:45 +00:00
};
let bytes = cert.serialize().unwrap();
2023-02-27 15:04:10 +00:00
fs::write("bad.hex.crt", hex::encode(bytes.clone())).unwrap();
2023-02-27 02:58:45 +00:00
let deserialized = deserialize_nebula_certificate(&bytes).unwrap();
/*
assert.Equal(t, nc.Details.Name, nc2.Details.Name)
assert.Equal(t, nc.Details.NotBefore, nc2.Details.NotBefore)
assert.Equal(t, nc.Details.NotAfter, nc2.Details.NotAfter)
assert.Equal(t, nc.Details.PublicKey, nc2.Details.PublicKey)
assert.Equal(t, nc.Details.IsCA, nc2.Details.IsCA)
*/
assert_eq!(cert.signature, deserialized.signature);
assert_eq!(cert.details.name, deserialized.details.name);
2023-02-27 15:04:10 +00:00
assert_eq!(cert.details.not_before, deserialized.details.not_before);
assert_eq!(cert.details.not_after, deserialized.details.not_after);
assert_eq!(cert.details.public_key, deserialized.details.public_key);
2023-02-27 02:58:45 +00:00
}
#[macro_export]
macro_rules! netmask {
($ip:expr,$mask:expr) => {
Ipv4Net::with_netmask(Ipv4Addr::from_str($ip).unwrap(), Ipv4Addr::from_str($mask).unwrap()).unwrap()
};
2023-02-27 15:04:10 +00:00
}
fn round_systime_to_secs(time: SystemTime) -> Result<SystemTime, SystemTimeError> {
let secs = time.duration_since(UNIX_EPOCH)?.as_secs();
Ok(SystemTime::UNIX_EPOCH.add(Duration::from_secs(secs)))
2023-02-27 02:58:45 +00:00
}