|
2 | 2 | // SPDX-License-Identifier: Apache-2.0 |
3 | 3 |
|
4 | 4 | use crate::{certificate, client, server}; |
| 5 | +use aws_lc_rs::{ |
| 6 | + digest::{self, Digest}, |
| 7 | + signature::{EcdsaKeyPair, ECDSA_P256_SHA256_ASN1_SIGNING}, |
| 8 | +}; |
5 | 9 | use core::{ |
6 | 10 | sync::atomic::{AtomicBool, AtomicU8, Ordering}, |
7 | 11 | task::Poll, |
8 | 12 | }; |
9 | | -use openssl::{ec::EcKey, ecdsa::EcdsaSig}; |
10 | 13 | use pin_project::pin_project; |
11 | 14 | use s2n_quic_core::{ |
12 | 15 | crypto::tls::{ |
13 | 16 | self, |
14 | 17 | testing::{ |
15 | | - certificates::{CERT_PEM, KEY_PEM, UNTRUSTED_CERT_PEM, UNTRUSTED_KEY_PEM}, |
| 18 | + certificates::{CERT_PEM, KEY_DER, KEY_PEM, UNTRUSTED_CERT_PEM, UNTRUSTED_KEY_PEM}, |
16 | 19 | server_params, |
17 | 20 | }, |
18 | 21 | ConnectionInfo, Endpoint, |
@@ -146,12 +149,15 @@ impl ConnectionFuture for MyPrivateKeyFuture { |
146 | 149 | let mut in_buf = vec![0; in_buf_size]; |
147 | 150 | op.input(&mut in_buf)?; |
148 | 151 |
|
149 | | - let key = EcKey::private_key_from_pem(KEY_PEM.as_bytes()) |
150 | | - .expect("Failed to create EcKey from pem"); |
151 | | - let sig = EcdsaSig::sign(&in_buf, &key).expect("Failed to sign input"); |
152 | | - let out = sig.to_der().expect("Failed to convert signature to der"); |
| 152 | + let key = EcdsaKeyPair::from_pkcs8(&ECDSA_P256_SHA256_ASN1_SIGNING, KEY_DER) |
| 153 | + .expect("Failed to create EcdsaKeyPair from pkcs8"); |
| 154 | + // s2n-tls hands us the already-computed digest, so import it and sign it |
| 155 | + // directly rather than re-hashing the input. |
| 156 | + let digest = |
| 157 | + Digest::import_less_safe(&in_buf, &digest::SHA256).expect("Failed to import digest"); |
| 158 | + let sig = key.sign_digest(&digest).expect("Failed to sign input"); |
153 | 159 |
|
154 | | - op.set_output(conn, &out)?; |
| 160 | + op.set_output(conn, sig.as_ref())?; |
155 | 161 | Poll::Ready(Ok(())) |
156 | 162 | } |
157 | 163 | } |
|
0 commit comments