Skip to content

Commit e968549

Browse files
committed
feat: allow using custom key-pairs
1 parent 488792d commit e968549

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>,
@@ -145,8 +148,6 @@ impl AttestedCertificateResolver {
145148
let subject_alt_names =
146149
normalized_subject_alt_names(subject.as_str(), subject_alt_names);
147150

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

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

@@ -200,7 +201,7 @@ impl AttestedCertificateResolver {
200201
.await?;
201202

202203
let cert_request = CertRequest::builder()
203-
.key(key)
204+
.key(key_pair)
204205
.subject(subject)
205206
.alt_names(subject_alt_names)
206207
.not_before(now)
@@ -842,8 +843,10 @@ mod tests {
842843
#[tokio::test(flavor = "multi_thread")]
843844
async fn certificate_resolver_creates_initial_certificate() {
844845
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
846+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
845847
let resolver = AttestedCertificateResolver::new_with_provider(
846848
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
849+
&key_pair,
847850
None,
848851
"foo".to_string(),
849852
vec![],
@@ -861,8 +864,10 @@ mod tests {
861864
async fn server_and_client_configs_complete_a_handshake() {
862865
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
863866
let server_name = "foo";
867+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
864868
let resolver = AttestedCertificateResolver::new_with_provider(
865869
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
870+
&key_pair,
866871
None,
867872
server_name.to_string(),
868873
vec![],
@@ -910,12 +915,14 @@ mod tests {
910915
#[tokio::test(flavor = "multi_thread")]
911916
async fn ca_signed_server_and_client_configs_complete_a_handshake() {
912917
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
918+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
913919
let server_name = "foo";
914920
let ca = test_ca();
915921
let ca_cert = CertificateDer::from_pem_slice(ca.pem_cert.as_bytes()).unwrap();
916922

917923
let resolver = AttestedCertificateResolver::new_with_provider(
918924
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
925+
&key_pair,
919926
Some(ca),
920927
server_name.to_string(),
921928
vec![],
@@ -971,8 +978,10 @@ mod tests {
971978
#[tokio::test(flavor = "multi_thread")]
972979
async fn certificate_is_renewed_before_expiry() {
973980
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
981+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
974982
let resolver = AttestedCertificateResolver::new_with_provider(
975983
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
984+
&key_pair,
976985
None,
977986
"foo".to_string(),
978987
vec![],
@@ -997,10 +1006,12 @@ mod tests {
9971006
#[tokio::test(flavor = "multi_thread")]
9981007
async fn server_and_client_configs_complete_a_mutual_auth_handshake() {
9991008
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1009+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
10001010
let server_name = "foo";
10011011

10021012
let server_resolver = AttestedCertificateResolver::new_with_provider(
10031013
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1014+
&key_pair,
10041015
None,
10051016
server_name.to_string(),
10061017
vec![],
@@ -1011,6 +1022,7 @@ mod tests {
10111022

10121023
let client_resolver = AttestedCertificateResolver::new_with_provider(
10131024
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1025+
&key_pair,
10141026
None,
10151027
"client".to_string(),
10161028
vec![],
@@ -1065,10 +1077,12 @@ mod tests {
10651077
#[tokio::test(flavor = "multi_thread")]
10661078
async fn alternate_san_completes_a_handshake() {
10671079
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1080+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
10681081
let subject = "foo";
10691082
let alternate_name = "bar";
10701083
let resolver = AttestedCertificateResolver::new_with_provider(
10711084
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1085+
&key_pair,
10721086
None,
10731087
subject.to_string(),
10741088
vec![alternate_name.to_string(), subject.to_string()],
@@ -1158,8 +1172,10 @@ mod tests {
11581172
#[tokio::test(flavor = "multi_thread")]
11591173
async fn self_signed_attested_certificate_with_wrong_name_is_rejected() {
11601174
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1175+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
11611176
let resolver = AttestedCertificateResolver::new_with_provider(
11621177
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1178+
&key_pair,
11631179
None,
11641180
"foo".to_string(),
11651181
vec![],
@@ -1191,8 +1207,10 @@ mod tests {
11911207
#[tokio::test(flavor = "multi_thread")]
11921208
async fn certificate_binding_changes_when_identity_changes() {
11931209
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1210+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
11941211
let resolver = AttestedCertificateResolver::new_with_provider(
11951212
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1213+
&key_pair,
11961214
None,
11971215
"foo".to_string(),
11981216
vec![],
@@ -1231,8 +1249,10 @@ mod tests {
12311249
#[tokio::test(flavor = "multi_thread")]
12321250
async fn attestation_rejection_returns_application_verification_failure() {
12331251
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1252+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
12341253
let resolver = AttestedCertificateResolver::new_with_provider(
12351254
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1255+
&key_pair,
12361256
None,
12371257
"foo".to_string(),
12381258
vec![],
@@ -1264,8 +1284,10 @@ mod tests {
12641284
#[tokio::test(flavor = "multi_thread")]
12651285
async fn verifier_reuses_trusted_certificate_cache() {
12661286
let provider: Arc<CryptoProvider> = aws_lc_rs::default_provider().into();
1287+
let key_pair = KeyPair::generate_for(&PKCS_ECDSA_P256_SHA256).unwrap();
12671288
let resolver = AttestedCertificateResolver::new_with_provider(
12681289
AttestationGenerator::new(AttestationType::DcapTdx, None).unwrap(),
1290+
&key_pair,
12691291
None,
12701292
"foo".to_string(),
12711293
vec![],

0 commit comments

Comments
 (0)