@@ -3207,15 +3207,26 @@ mod tests {
3207
3207
}
3208
3208
3209
3209
#[ tokio:: test]
3210
- async fn test_two_devices_roundtrip_quinn_raw ( ) -> Result < ( ) > {
3210
+ async fn test_two_devices_roundtrip_quinn_raw_x509 ( ) -> Result < ( ) > {
3211
+ test_two_devices_roundtrip_quinn_raw ( tls:: Authentication :: X509 ) . await
3212
+ }
3213
+
3214
+ #[ tokio:: test]
3215
+ async fn test_two_devices_roundtrip_quinn_raw_public_key ( ) -> Result < ( ) > {
3216
+ test_two_devices_roundtrip_quinn_raw ( tls:: Authentication :: RawPublicKey ) . await
3217
+ }
3218
+
3219
+ async fn test_two_devices_roundtrip_quinn_raw ( tls_auth : tls:: Authentication ) -> Result < ( ) > {
3211
3220
let _guard = iroh_test:: logging:: setup ( ) ;
3212
3221
3213
- let make_conn = |addr : SocketAddr | -> anyhow:: Result < quinn:: Endpoint > {
3222
+ let make_conn = |addr : SocketAddr ,
3223
+ tls_auth : tls:: Authentication |
3224
+ -> anyhow:: Result < quinn:: Endpoint > {
3214
3225
let key = SecretKey :: generate ( ) ;
3215
3226
let conn = std:: net:: UdpSocket :: bind ( addr) ?;
3216
3227
3217
3228
let quic_server_config =
3218
- tls :: Authentication :: X509 . make_server_config ( & key, vec ! [ ALPN . to_vec( ) ] , false ) ?;
3229
+ tls_auth . make_server_config ( & key, vec ! [ ALPN . to_vec( ) ] , false ) ?;
3219
3230
let mut server_config = quinn:: ServerConfig :: with_crypto ( Arc :: new ( quic_server_config) ) ;
3220
3231
let mut transport_config = quinn:: TransportConfig :: default ( ) ;
3221
3232
transport_config. keep_alive_interval ( Some ( Duration :: from_secs ( 5 ) ) ) ;
@@ -3228,12 +3239,8 @@ mod tests {
3228
3239
Arc :: new ( quinn:: TokioRuntime ) ,
3229
3240
) ?;
3230
3241
3231
- let quic_client_config = tls:: Authentication :: X509 . make_client_config (
3232
- & key,
3233
- None ,
3234
- vec ! [ ALPN . to_vec( ) ] ,
3235
- false ,
3236
- ) ?;
3242
+ let quic_client_config =
3243
+ tls_auth. make_client_config ( & key, None , vec ! [ ALPN . to_vec( ) ] , false ) ?;
3237
3244
let mut client_config = quinn:: ClientConfig :: new ( Arc :: new ( quic_client_config) ) ;
3238
3245
let mut transport_config = quinn:: TransportConfig :: default ( ) ;
3239
3246
transport_config. max_idle_timeout ( Some ( Duration :: from_secs ( 10 ) . try_into ( ) . unwrap ( ) ) ) ;
@@ -3243,8 +3250,8 @@ mod tests {
3243
3250
Ok ( quic_ep)
3244
3251
} ;
3245
3252
3246
- let m1 = make_conn ( "127.0.0.1:0" . parse ( ) . unwrap ( ) ) ?;
3247
- let m2 = make_conn ( "127.0.0.1:0" . parse ( ) . unwrap ( ) ) ?;
3253
+ let m1 = make_conn ( "127.0.0.1:0" . parse ( ) . unwrap ( ) , tls_auth ) ?;
3254
+ let m2 = make_conn ( "127.0.0.1:0" . parse ( ) . unwrap ( ) , tls_auth ) ?;
3248
3255
3249
3256
// msg from a -> b
3250
3257
macro_rules! roundtrip {
@@ -3362,14 +3369,18 @@ mod tests {
3362
3369
3363
3370
#[ tokio:: test]
3364
3371
async fn test_two_devices_roundtrip_quinn_rebinding_conn ( ) -> Result < ( ) > {
3372
+ let tls_auth = tls:: Authentication :: X509 ;
3365
3373
let _guard = iroh_test:: logging:: setup ( ) ;
3366
3374
3367
- fn make_conn ( addr : SocketAddr ) -> anyhow:: Result < quinn:: Endpoint > {
3375
+ fn make_conn (
3376
+ addr : SocketAddr ,
3377
+ tls_auth : tls:: Authentication ,
3378
+ ) -> anyhow:: Result < quinn:: Endpoint > {
3368
3379
let key = SecretKey :: generate ( ) ;
3369
3380
let conn = UdpConn :: bind ( addr) ?;
3370
3381
3371
3382
let quic_server_config =
3372
- tls :: Authentication :: X509 . make_server_config ( & key, vec ! [ ALPN . to_vec( ) ] , false ) ?;
3383
+ tls_auth . make_server_config ( & key, vec ! [ ALPN . to_vec( ) ] , false ) ?;
3373
3384
let mut server_config = quinn:: ServerConfig :: with_crypto ( Arc :: new ( quic_server_config) ) ;
3374
3385
let mut transport_config = quinn:: TransportConfig :: default ( ) ;
3375
3386
transport_config. keep_alive_interval ( Some ( Duration :: from_secs ( 5 ) ) ) ;
@@ -3382,12 +3393,8 @@ mod tests {
3382
3393
Arc :: new ( quinn:: TokioRuntime ) ,
3383
3394
) ?;
3384
3395
3385
- let quic_client_config = tls:: Authentication :: X509 . make_client_config (
3386
- & key,
3387
- None ,
3388
- vec ! [ ALPN . to_vec( ) ] ,
3389
- false ,
3390
- ) ?;
3396
+ let quic_client_config =
3397
+ tls_auth. make_client_config ( & key, None , vec ! [ ALPN . to_vec( ) ] , false ) ?;
3391
3398
let mut client_config = quinn:: ClientConfig :: new ( Arc :: new ( quic_client_config) ) ;
3392
3399
let mut transport_config = quinn:: TransportConfig :: default ( ) ;
3393
3400
transport_config. max_idle_timeout ( Some ( Duration :: from_secs ( 10 ) . try_into ( ) . unwrap ( ) ) ) ;
@@ -3397,8 +3404,8 @@ mod tests {
3397
3404
Ok ( quic_ep)
3398
3405
}
3399
3406
3400
- let m1 = make_conn ( "127.0.0.1:7770" . parse ( ) . unwrap ( ) ) ?;
3401
- let m2 = make_conn ( "127.0.0.1:7771" . parse ( ) . unwrap ( ) ) ?;
3407
+ let m1 = make_conn ( "127.0.0.1:7770" . parse ( ) . unwrap ( ) , tls_auth ) ?;
3408
+ let m2 = make_conn ( "127.0.0.1:7771" . parse ( ) . unwrap ( ) , tls_auth ) ?;
3402
3409
3403
3410
// msg from a -> b
3404
3411
macro_rules! roundtrip {
@@ -3611,7 +3618,10 @@ mod tests {
3611
3618
///
3612
3619
/// Use [`magicsock_connect`] to establish connections.
3613
3620
#[ instrument( name = "ep" , skip_all, fields( me = secret_key. public( ) . fmt_short( ) ) ) ]
3614
- async fn magicsock_ep ( secret_key : SecretKey ) -> anyhow:: Result < ( quinn:: Endpoint , Handle ) > {
3621
+ async fn magicsock_ep (
3622
+ secret_key : SecretKey ,
3623
+ tls_auth : tls:: Authentication ,
3624
+ ) -> anyhow:: Result < ( quinn:: Endpoint , Handle ) > {
3615
3625
let opts = Options {
3616
3626
addr_v4 : None ,
3617
3627
addr_v6 : None ,
@@ -3625,6 +3635,7 @@ mod tests {
3625
3635
} ;
3626
3636
let msock = MagicSock :: spawn ( opts) . await ?;
3627
3637
let server_config = crate :: endpoint:: make_server_config (
3638
+ tls_auth,
3628
3639
& secret_key,
3629
3640
vec ! [ ALPN . to_vec( ) ] ,
3630
3641
Arc :: new ( quinn:: TransportConfig :: default ( ) ) ,
@@ -3650,17 +3661,19 @@ mod tests {
3650
3661
ep_secret_key : SecretKey ,
3651
3662
addr : QuicMappedAddr ,
3652
3663
node_id : NodeId ,
3664
+ tls_auth : tls:: Authentication ,
3653
3665
) -> Result < quinn:: Connection > {
3654
3666
// Endpoint::connect sets this, do the same to have similar behaviour.
3655
3667
let mut transport_config = quinn:: TransportConfig :: default ( ) ;
3656
3668
transport_config. keep_alive_interval ( Some ( Duration :: from_secs ( 1 ) ) ) ;
3657
3669
3658
- magicsock_connet_with_transport_config (
3670
+ magicsock_connect_with_transport_config (
3659
3671
ep,
3660
3672
ep_secret_key,
3661
3673
addr,
3662
3674
node_id,
3663
3675
Arc :: new ( transport_config) ,
3676
+ tls_auth,
3664
3677
)
3665
3678
. await
3666
3679
}
@@ -3671,20 +3684,17 @@ mod tests {
3671
3684
///
3672
3685
/// Uses [`ALPN`], `node_id`, must match `addr`.
3673
3686
#[ instrument( name = "connect" , skip_all, fields( me = ep_secret_key. public( ) . fmt_short( ) ) ) ]
3674
- async fn magicsock_connet_with_transport_config (
3687
+ async fn magicsock_connect_with_transport_config (
3675
3688
ep : & quinn:: Endpoint ,
3676
3689
ep_secret_key : SecretKey ,
3677
3690
addr : QuicMappedAddr ,
3678
3691
node_id : NodeId ,
3679
3692
transport_config : Arc < quinn:: TransportConfig > ,
3693
+ tls_auth : tls:: Authentication ,
3680
3694
) -> Result < quinn:: Connection > {
3681
3695
let alpns = vec ! [ ALPN . to_vec( ) ] ;
3682
- let quic_client_config = tls:: Authentication :: X509 . make_client_config (
3683
- & ep_secret_key,
3684
- Some ( node_id) ,
3685
- alpns,
3686
- true ,
3687
- ) ?;
3696
+ let quic_client_config =
3697
+ tls_auth. make_client_config ( & ep_secret_key, Some ( node_id) , alpns, true ) ?;
3688
3698
let mut client_config = quinn:: ClientConfig :: new ( Arc :: new ( quic_client_config) ) ;
3689
3699
client_config. transport_config ( transport_config) ;
3690
3700
let connect = ep. connect_with ( client_config, addr. 0 , "localhost" ) ?;
@@ -3697,14 +3707,15 @@ mod tests {
3697
3707
// Regression test: if there is no send_addr we should keep being able to use the
3698
3708
// Endpoint.
3699
3709
let _guard = iroh_test:: logging:: setup ( ) ;
3710
+ let tls_auth = tls:: Authentication :: X509 ;
3700
3711
3701
3712
let secret_key_1 = SecretKey :: from_bytes ( & [ 1u8 ; 32 ] ) ;
3702
3713
let secret_key_2 = SecretKey :: from_bytes ( & [ 2u8 ; 32 ] ) ;
3703
3714
let node_id_2 = secret_key_2. public ( ) ;
3704
3715
let secret_key_missing_node = SecretKey :: from_bytes ( & [ 255u8 ; 32 ] ) ;
3705
3716
let node_id_missing_node = secret_key_missing_node. public ( ) ;
3706
3717
3707
- let ( ep_1, msock_1) = magicsock_ep ( secret_key_1. clone ( ) ) . await . unwrap ( ) ;
3718
+ let ( ep_1, msock_1) = magicsock_ep ( secret_key_1. clone ( ) , tls_auth ) . await . unwrap ( ) ;
3708
3719
3709
3720
// Generate an address not present in the NodeMap.
3710
3721
let bad_addr = QuicMappedAddr :: generate ( ) ;
@@ -3715,13 +3726,19 @@ mod tests {
3715
3726
// this speeds up the test.
3716
3727
let res = tokio:: time:: timeout (
3717
3728
Duration :: from_millis ( 500 ) ,
3718
- magicsock_connect ( & ep_1, secret_key_1. clone ( ) , bad_addr, node_id_missing_node) ,
3729
+ magicsock_connect (
3730
+ & ep_1,
3731
+ secret_key_1. clone ( ) ,
3732
+ bad_addr,
3733
+ node_id_missing_node,
3734
+ tls_auth,
3735
+ ) ,
3719
3736
)
3720
3737
. await ;
3721
3738
assert ! ( res. is_err( ) , "expecting timeout" ) ;
3722
3739
3723
3740
// Now check we can still create another connection with this endpoint.
3724
- let ( ep_2, msock_2) = magicsock_ep ( secret_key_2. clone ( ) ) . await . unwrap ( ) ;
3741
+ let ( ep_2, msock_2) = magicsock_ep ( secret_key_2. clone ( ) , tls_auth ) . await . unwrap ( ) ;
3725
3742
3726
3743
// This needs an accept task
3727
3744
let accept_task = tokio:: spawn ( {
@@ -3769,7 +3786,7 @@ mod tests {
3769
3786
let addr = msock_1. get_mapping_addr ( node_id_2) . unwrap ( ) ;
3770
3787
let res = tokio:: time:: timeout (
3771
3788
Duration :: from_secs ( 10 ) ,
3772
- magicsock_connect ( & ep_1, secret_key_1. clone ( ) , addr, node_id_2) ,
3789
+ magicsock_connect ( & ep_1, secret_key_1. clone ( ) , addr, node_id_2, tls_auth ) ,
3773
3790
)
3774
3791
. await
3775
3792
. expect ( "timeout while connecting" ) ;
@@ -3786,13 +3803,14 @@ mod tests {
3786
3803
// This specifically tests the `if udp_addr.is_none() && relay_url.is_none()`
3787
3804
// behaviour of MagicSock::try_send.
3788
3805
let _logging_guard = iroh_test:: logging:: setup ( ) ;
3806
+ let tls_auth = tls:: Authentication :: X509 ;
3789
3807
3790
3808
let secret_key_1 = SecretKey :: from_bytes ( & [ 1u8 ; 32 ] ) ;
3791
3809
let secret_key_2 = SecretKey :: from_bytes ( & [ 2u8 ; 32 ] ) ;
3792
3810
let node_id_2 = secret_key_2. public ( ) ;
3793
3811
3794
- let ( ep_1, msock_1) = magicsock_ep ( secret_key_1. clone ( ) ) . await . unwrap ( ) ;
3795
- let ( ep_2, msock_2) = magicsock_ep ( secret_key_2. clone ( ) ) . await . unwrap ( ) ;
3812
+ let ( ep_1, msock_1) = magicsock_ep ( secret_key_1. clone ( ) , tls_auth ) . await . unwrap ( ) ;
3813
+ let ( ep_2, msock_2) = magicsock_ep ( secret_key_2. clone ( ) , tls_auth ) . await . unwrap ( ) ;
3796
3814
3797
3815
// We need a task to accept the connection.
3798
3816
let accept_task = tokio:: spawn ( {
@@ -3838,12 +3856,13 @@ mod tests {
3838
3856
// little slower though.
3839
3857
let mut transport_config = quinn:: TransportConfig :: default ( ) ;
3840
3858
transport_config. max_idle_timeout ( Some ( Duration :: from_millis ( 200 ) . try_into ( ) . unwrap ( ) ) ) ;
3841
- let res = magicsock_connet_with_transport_config (
3859
+ let res = magicsock_connect_with_transport_config (
3842
3860
& ep_1,
3843
3861
secret_key_1. clone ( ) ,
3844
3862
addr_2,
3845
3863
node_id_2,
3846
3864
Arc :: new ( transport_config) ,
3865
+ tls_auth,
3847
3866
)
3848
3867
. await ;
3849
3868
assert ! ( res. is_err( ) , "expected timeout" ) ;
@@ -3873,7 +3892,7 @@ mod tests {
3873
3892
// We can now connect
3874
3893
tokio:: time:: timeout ( Duration :: from_secs ( 10 ) , async move {
3875
3894
info ! ( "establishing new connection" ) ;
3876
- let conn = magicsock_connect ( & ep_1, secret_key_1. clone ( ) , addr_2, node_id_2)
3895
+ let conn = magicsock_connect ( & ep_1, secret_key_1. clone ( ) , addr_2, node_id_2, tls_auth )
3877
3896
. await
3878
3897
. unwrap ( ) ;
3879
3898
info ! ( "have connection" ) ;
0 commit comments