Skip to content

Commit 62784aa

Browse files
committed
feat: allow using custom key-pairs
1 parent 830be9b commit 62784aa

1 file changed

Lines changed: 27 additions & 5 deletions

File tree

crates/attested-tls/src/lib.rs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,14 @@ impl AttestedCertificateResolver {
119119
/// certificates will be self signed
120120
pub async fn new(
121121
attestation_generator: AttestationGenerator,
122+
key_pair: &KeyPair,
122123
ca: Option<CaCert>,
123124
subject: String,
124125
subject_alt_names: Vec<String>,
125126
) -> Result<Self, AttestedTlsError> {
126127
Self::new_with_provider(
127128
attestation_generator,
129+
key_pair,
128130
ca,
129131
subject,
130132
subject_alt_names,
@@ -136,6 +138,7 @@ impl AttestedCertificateResolver {
136138
/// Also provide a crypto provider
137139
pub async fn new_with_provider(
138140
attestation_generator: AttestationGenerator,
141+
key_pair: &KeyPair,
139142
ca: Option<CaCert>,
140143
subject: String,
141144
subject_alt_names: Vec<String>,
@@ -144,8 +147,6 @@ impl AttestedCertificateResolver {
144147
debug_assert!(CERTIFICATE_RENEWAL_LEAD_TIME < CERTIFICATE_VALIDITY);
145148
let subject_alt_names = normalized_subject_alt_names(subject.as_str(), subject_alt_names);
146149

147-
// Generate keypair
148-
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256)?;
149150
let key_pair_der = key_pair.serialize_der();
150151
let key = Self::load_signing_key(&key_pair, provider)?;
151152

@@ -178,14 +179,14 @@ impl AttestedCertificateResolver {
178179
/// Create an attested certificate chain - either self-signed or with
179180
/// the provided CA
180181
async fn issue_ra_cert_chain(
181-
key: &KeyPair,
182+
key_pair: &KeyPair,
182183
ca: Option<&CaCert>,
183184
subject: &str,
184185
subject_alt_names: &[String],
185186
attestation_generator: &AttestationGenerator,
186187
) -> Result<Vec<CertificateDer<'static>>, AttestedTlsError> {
187188
tracing::debug!("Generating new remote-attested ceritifcate for {subject}");
188-
let pubkey = key.public_key_der();
189+
let pubkey = key_pair.public_key_der();
189190
let now = SystemTime::now();
190191
let not_after = now + CERTIFICATE_VALIDITY;
191192

@@ -199,7 +200,7 @@ impl AttestedCertificateResolver {
199200
.await?;
200201

201202
let cert_request = CertRequest::builder()
202-
.key(key)
203+
.key(key_pair)
203204
.subject(subject)
204205
.alt_names(subject_alt_names)
205206
.not_before(now)
@@ -840,8 +841,10 @@ mod tests {
840841
#[tokio::test(flavor = "multi_thread")]
841842
async fn certificate_resolver_creates_initial_certificate() {
842843
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
844+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
843845
let resolver = AttestedCertificateResolver::new_with_provider(
844846
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
847+
&key_pair,
845848
None,
846849
"foo".to_string(),
847850
vec![],
@@ -859,8 +862,10 @@ mod tests {
859862
async fn server_and_client_configs_complete_a_handshake() {
860863
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
861864
let server_name = "foo";
865+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
862866
let resolver = AttestedCertificateResolver::new_with_provider(
863867
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
868+
&key_pair,
864869
None,
865870
server_name.to_string(),
866871
vec![],
@@ -908,12 +913,14 @@ mod tests {
908913
#[tokio::test(flavor = "multi_thread")]
909914
async fn ca_signed_server_and_client_configs_complete_a_handshake() {
910915
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
916+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
911917
let server_name = "foo";
912918
let ca = test_ca();
913919
let ca_cert = CertificateDer::from_pem_slice(ca.pem_cert.as_bytes()).unwrap();
914920

915921
let resolver = AttestedCertificateResolver::new_with_provider(
916922
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
923+
&key_pair,
917924
Some(ca),
918925
server_name.to_string(),
919926
vec![],
@@ -969,8 +976,10 @@ mod tests {
969976
#[tokio::test(flavor = "multi_thread")]
970977
async fn certificate_is_renewed_before_expiry() {
971978
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
979+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
972980
let resolver = AttestedCertificateResolver::new_with_provider(
973981
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
982+
&key_pair,
974983
None,
975984
"foo".to_string(),
976985
vec![],
@@ -995,10 +1004,12 @@ mod tests {
9951004
#[tokio::test(flavor = "multi_thread")]
9961005
async fn server_and_client_configs_complete_a_mutual_auth_handshake() {
9971006
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1007+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
9981008
let server_name = "foo";
9991009

10001010
let server_resolver = AttestedCertificateResolver::new_with_provider(
10011011
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1012+
&key_pair,
10021013
None,
10031014
server_name.to_string(),
10041015
vec![],
@@ -1009,6 +1020,7 @@ mod tests {
10091020

10101021
let client_resolver = AttestedCertificateResolver::new_with_provider(
10111022
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1023+
&key_pair,
10121024
None,
10131025
"client".to_string(),
10141026
vec![],
@@ -1063,10 +1075,12 @@ mod tests {
10631075
#[tokio::test(flavor = "multi_thread")]
10641076
async fn alternate_san_completes_a_handshake() {
10651077
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1078+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
10661079
let subject = "foo";
10671080
let alternate_name = "bar";
10681081
let resolver = AttestedCertificateResolver::new_with_provider(
10691082
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1083+
&key_pair,
10701084
None,
10711085
subject.to_string(),
10721086
vec![alternate_name.to_string(), subject.to_string()],
@@ -1156,8 +1170,10 @@ mod tests {
11561170
#[tokio::test(flavor = "multi_thread")]
11571171
async fn self_signed_attested_certificate_with_wrong_name_is_rejected() {
11581172
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1173+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
11591174
let resolver = AttestedCertificateResolver::new_with_provider(
11601175
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1176+
&key_pair,
11611177
None,
11621178
"foo".to_string(),
11631179
vec![],
@@ -1189,8 +1205,10 @@ mod tests {
11891205
#[tokio::test(flavor = "multi_thread")]
11901206
async fn certificate_binding_changes_when_identity_changes() {
11911207
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1208+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
11921209
let resolver = AttestedCertificateResolver::new_with_provider(
11931210
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1211+
&key_pair,
11941212
None,
11951213
"foo".to_string(),
11961214
vec![],
@@ -1229,8 +1247,10 @@ mod tests {
12291247
#[tokio::test(flavor = "multi_thread")]
12301248
async fn attestation_rejection_returns_application_verification_failure() {
12311249
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1250+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
12321251
let resolver = AttestedCertificateResolver::new_with_provider(
12331252
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1253+
&key_pair,
12341254
None,
12351255
"foo".to_string(),
12361256
vec![],
@@ -1262,8 +1282,10 @@ mod tests {
12621282
#[tokio::test(flavor = "multi_thread")]
12631283
async fn verifier_reuses_trusted_certificate_cache() {
12641284
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1285+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
12651286
let resolver = AttestedCertificateResolver::new_with_provider(
12661287
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1288+
&key_pair,
12671289
None,
12681290
"foo".to_string(),
12691291
vec![],

0 commit comments

Comments
 (0)