@@ -20,7 +20,7 @@ pub async fn get_streams() -> Result<(TcpStream, TcpStream), tokio::io::Error> {
20
20
}
21
21
22
22
#[ test_log:: test( tokio:: test) ]
23
- async fn s2n_client ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
23
+ async fn s2n_mldsa_client ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
24
24
let cert_path = format ! ( "{TEST_PEMS_PATH}mldsa/ML-DSA-87.crt" ) ;
25
25
let key_path = format ! ( "{TEST_PEMS_PATH}mldsa/ML-DSA-87-seed.priv" ) ;
26
26
@@ -63,7 +63,7 @@ async fn s2n_client() -> Result<(), Box<dyn std::error::Error>> {
63
63
}
64
64
65
65
#[ test_log:: test( tokio:: test) ]
66
- async fn s2n_server ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
66
+ async fn s2n_mldsa_server ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
67
67
let cert_path = format ! ( "{TEST_PEMS_PATH}mldsa/ML-DSA-87.crt" ) ;
68
68
let key_path = format ! ( "{TEST_PEMS_PATH}mldsa/ML-DSA-87-seed.priv" ) ;
69
69
@@ -99,3 +99,77 @@ async fn s2n_server() -> Result<(), Box<dyn std::error::Error>> {
99
99
) ;
100
100
Ok ( ( ) )
101
101
}
102
+
103
+ #[ tokio:: test]
104
+ async fn s2n_mlkem_client ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
105
+ let cert_path = format ! ( "{TEST_PEMS_PATH}permutations/ec_ecdsa_p256_sha384/server-chain.pem" ) ;
106
+ let key_path = format ! ( "{TEST_PEMS_PATH}permutations/ec_ecdsa_p256_sha384/server-key.pem" ) ;
107
+
108
+ let ( server_stream, client_stream) = get_streams ( ) . await ?;
109
+
110
+ // Setup Openssl 3.5 server restricted to SecP384r1MLKEM1024
111
+ let mut server = {
112
+ let mut builder = SslContextBuilder :: new ( SslMethod :: tls ( ) ) ?;
113
+ builder. set_private_key_file ( key_path, SslFiletype :: PEM ) ?;
114
+ builder. set_certificate_chain_file ( cert_path. clone ( ) ) ?;
115
+ builder. set_groups_list ( "SecP384r1MLKEM1024" ) ?;
116
+ let context = builder. build ( ) ;
117
+ let ssl = Ssl :: new ( & context) ?;
118
+ SslStream :: new ( ssl, server_stream) ?
119
+ } ;
120
+
121
+ // Setup s2n-tls client with default_pq
122
+ let client = {
123
+ let mut config = Config :: builder ( ) ;
124
+ config. set_security_policy ( & DEFAULT_PQ ) ?;
125
+ config. trust_location ( Some ( Path :: new ( & cert_path) ) , None ) ?;
126
+ TlsConnector :: new ( config. build ( ) ?)
127
+ } ;
128
+
129
+ let server_pin = Pin :: new ( & mut server) ;
130
+ let ( _, client_result) = tokio:: join!(
131
+ server_pin. accept( ) ,
132
+ client. connect( "localhost" , client_stream) ,
133
+ ) ;
134
+
135
+ let client = client_result?;
136
+ let conn = client. as_ref ( ) ;
137
+ let kem_group = conn. kem_group_name ( ) . unwrap ( ) ;
138
+ assert_eq ! ( kem_group, "SecP384r1MLKEM1024" ) ;
139
+ Ok ( ( ) )
140
+ }
141
+
142
+ #[ tokio:: test]
143
+ async fn s2n_mlkem_server ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
144
+ let cert_path = format ! ( "{TEST_PEMS_PATH}permutations/ec_ecdsa_p256_sha384/server-chain.pem" ) ;
145
+ let key_path = format ! ( "{TEST_PEMS_PATH}permutations/ec_ecdsa_p256_sha384/server-key.pem" ) ;
146
+ let ( server_stream, client_stream) = get_streams ( ) . await ?;
147
+
148
+ // Setup Openssl 3.5 client restricted to SecP384r1MLKEM1024
149
+ let mut client = {
150
+ let mut builder = SslContextBuilder :: new ( SslMethod :: tls ( ) ) ?;
151
+ builder. set_ca_file ( Path :: new ( & cert_path) ) ?;
152
+ builder. set_groups_list ( "SecP384r1MLKEM1024" ) ?;
153
+ let context = builder. build ( ) ;
154
+ let ssl = Ssl :: new ( & context) ?;
155
+ SslStream :: new ( ssl, client_stream) ?
156
+ } ;
157
+
158
+ let server = {
159
+ let mut config = Config :: builder ( ) ;
160
+ config. set_security_policy ( & DEFAULT_PQ ) ?;
161
+ let cert = fs:: read ( & cert_path) ?;
162
+ let key = fs:: read ( & key_path) ?;
163
+ config. load_pem ( & cert, & key) ?;
164
+ TlsAcceptor :: new ( config. build ( ) ?)
165
+ } ;
166
+
167
+ let client_pin = Pin :: new ( & mut client) ;
168
+ let ( server_result, _) = tokio:: join!( server. accept( server_stream) , client_pin. connect( ) , ) ;
169
+
170
+ let server = server_result?;
171
+ let conn = server. as_ref ( ) ;
172
+ let kem_group = conn. kem_group_name ( ) . unwrap ( ) ;
173
+ assert_eq ! ( kem_group, "SecP384r1MLKEM1024" ) ;
174
+ Ok ( ( ) )
175
+ }
0 commit comments