pub use asx_rs::as4::mock_endpoint::{MockAs4Endpoint, MockReceivedMessage};
pub use asx_rs::fixtures::{
EcCurve, generate_self_signed_ec_keypair, generate_self_signed_rsa_keypair,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BdewCertPurpose {
Signing,
Encryption,
}
#[derive(Debug, Clone)]
pub struct BdewKeypair {
pub cert_pem: Vec<u8>,
pub key_pem: Vec<u8>,
}
impl BdewKeypair {
pub fn cert_pem_str(&self) -> &str {
std::str::from_utf8(&self.cert_pem).expect("cert PEM is UTF-8")
}
pub fn key_pem_str(&self) -> &str {
std::str::from_utf8(&self.key_pem).expect("key PEM is UTF-8")
}
}
pub fn generate_self_signed_bdew_keypair(
subject_cn: &str,
_purpose: BdewCertPurpose,
) -> BdewKeypair {
let (cert_pem, key_pem) = generate_self_signed_ec_keypair(subject_cn, EcCurve::BrainpoolP256r1);
BdewKeypair { cert_pem, key_pem }
}
#[derive(Debug, Clone)]
pub struct BdewTestPki {
pub tls: BdewKeypair,
pub signing: BdewKeypair,
pub encryption: BdewKeypair,
}
impl BdewTestPki {
pub fn generate(subject_cn: &str) -> Self {
Self {
tls: generate_self_signed_bdew_keypair(subject_cn, BdewCertPurpose::Signing),
signing: generate_self_signed_bdew_keypair(subject_cn, BdewCertPurpose::Signing),
encryption: generate_self_signed_bdew_keypair(subject_cn, BdewCertPurpose::Encryption),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn generates_bdew_keypair() {
let kp = generate_self_signed_bdew_keypair("Test NB", BdewCertPurpose::Signing);
assert!(kp.cert_pem_str().starts_with("-----BEGIN CERTIFICATE-----"));
assert!(!kp.key_pem.is_empty());
}
#[test]
fn test_pki_three_distinct_keypairs() {
let pki = BdewTestPki::generate("Test NB 9900357000004");
assert!(!pki.signing.cert_pem.is_empty());
assert!(!pki.encryption.cert_pem.is_empty());
assert_ne!(pki.signing.cert_pem, pki.encryption.cert_pem);
}
}