pub mod client;
pub mod server;
use rcgen::generate_simple_self_signed;
use rustls_pki_types::{CertificateDer, PrivateKeyDer, PrivatePkcs8KeyDer};
use sha2::{Digest, Sha256};
pub fn generate_identity() -> (
Vec<CertificateDer<'static>>,
PrivateKeyDer<'static>,
Vec<u8>,
) {
let subject_alt_names = vec!["localhost".to_string(), "enclave.local".to_string()];
let certified_key = generate_simple_self_signed(subject_alt_names).unwrap();
let cert_der = certified_key.cert.der().to_vec();
let rustls_cert = certified_key.cert.der().clone();
let rustls_key = PrivateKeyDer::Pkcs8(PrivatePkcs8KeyDer::from(
certified_key.key_pair.serialize_der(),
));
(vec![rustls_cert], rustls_key, cert_der)
}
#[derive(Debug, Clone, Default, PartialEq)]
pub struct AttestationParams {
pub user_data: Option<Vec<u8>>,
pub nonce: Option<Vec<u8>>,
pub public_key: Option<Vec<u8>>,
}
impl AttestationParams {
pub fn new() -> Self {
Self::default()
}
pub fn with_user_data(mut self, data: impl Into<Vec<u8>>) -> Self {
self.user_data = Some(data.into());
self
}
pub fn with_user_data_hash(mut self, data: &[u8]) -> Self {
let hash = Sha256::digest(data);
self.user_data = Some(hash.to_vec());
self
}
pub fn with_nonce(mut self, nonce: impl Into<Vec<u8>>) -> Self {
self.nonce = Some(nonce.into());
self
}
pub fn with_public_key(mut self, public_key: impl Into<Vec<u8>>) -> Self {
self.public_key = Some(public_key.into());
self
}
pub fn user_data(&self) -> Option<&[u8]> {
self.user_data.as_deref()
}
pub fn nonce(&self) -> Option<&[u8]> {
self.nonce.as_deref()
}
pub fn public_key(&self) -> Option<&[u8]> {
self.public_key.as_deref()
}
}