@@ -1430,6 +1430,65 @@ fn custom_tlvs_to_blinded_path() {
1430
1430
) ;
1431
1431
}
1432
1432
1433
+ #[ test]
1434
+ fn fails_receive_tlvs_authentication ( ) {
1435
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
1436
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
1437
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
1438
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
1439
+ let chan_upd = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 1_000_000 , 0 ) . 0 . contents ;
1440
+
1441
+ let amt_msat = 5000 ;
1442
+ let ( _, payment_hash, payment_secret) = get_payment_preimage_hash ( & nodes[ 1 ] , Some ( amt_msat) , None ) ;
1443
+ let payee_tlvs = UnauthenticatedReceiveTlvs {
1444
+ payment_secret,
1445
+ payment_constraints : PaymentConstraints {
1446
+ max_cltv_expiry : u32:: max_value ( ) ,
1447
+ htlc_minimum_msat : chan_upd. htlc_minimum_msat ,
1448
+ } ,
1449
+ payment_context : PaymentContext :: Bolt12Refund ( Bolt12RefundContext { } ) ,
1450
+ } ;
1451
+ let nonce = Nonce ( [ 42u8 ; 16 ] ) ;
1452
+ let expanded_key = chanmon_cfgs[ 1 ] . keys_manager . get_inbound_payment_key ( ) ;
1453
+ let mut payee_tlvs = payee_tlvs. authenticate ( nonce, & expanded_key) ;
1454
+ // Swap in a different nonce to force authentication to fail.
1455
+ payee_tlvs. authentication . 1 = Nonce ( [ 0u8 ; 16 ] ) ;
1456
+
1457
+ let mut secp_ctx = Secp256k1 :: new ( ) ;
1458
+ let blinded_path = BlindedPaymentPath :: new (
1459
+ & [ ] , nodes[ 1 ] . node . get_our_node_id ( ) , payee_tlvs, u64:: MAX , TEST_FINAL_CLTV as u16 ,
1460
+ & chanmon_cfgs[ 1 ] . keys_manager , & secp_ctx
1461
+ ) . unwrap ( ) ;
1462
+
1463
+ let route_params = RouteParameters :: from_payment_params_and_value (
1464
+ PaymentParameters :: blinded ( vec ! [ blinded_path] ) ,
1465
+ amt_msat,
1466
+ ) ;
1467
+
1468
+ nodes[ 0 ] . node . send_payment ( payment_hash, RecipientOnionFields :: spontaneous_empty ( ) , PaymentId ( payment_hash. 0 ) , route_params, Retry :: Attempts ( 0 ) ) . unwrap ( ) ;
1469
+ check_added_monitors ( & nodes[ 0 ] , 1 ) ;
1470
+
1471
+ let mut events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
1472
+ assert_eq ! ( events. len( ) , 1 ) ;
1473
+ let ev = remove_first_msg_event_to_node ( & nodes[ 1 ] . node . get_our_node_id ( ) , & mut events) ;
1474
+ let mut payment_event = SendEvent :: from_event ( ev) ;
1475
+
1476
+ nodes[ 1 ] . node . handle_update_add_htlc ( nodes[ 0 ] . node . get_our_node_id ( ) , & payment_event. msgs [ 0 ] ) ;
1477
+ check_added_monitors ! ( nodes[ 1 ] , 0 ) ;
1478
+ do_commitment_signed_dance ( & nodes[ 1 ] , & nodes[ 0 ] , & payment_event. commitment_msg , true , true ) ;
1479
+ nodes[ 1 ] . node . process_pending_htlc_forwards ( ) ;
1480
+
1481
+ let mut update_fail = get_htlc_update_msgs ! ( nodes[ 1 ] , nodes[ 0 ] . node. get_our_node_id( ) ) ;
1482
+ assert ! ( update_fail. update_fail_htlcs. len( ) == 1 ) ;
1483
+ let fail_msg = & update_fail. update_fail_htlcs [ 0 ] ;
1484
+ nodes[ 0 ] . node . handle_update_fail_htlc ( nodes[ 1 ] . node . get_our_node_id ( ) , fail_msg) ;
1485
+ commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , update_fail. commitment_signed, false ) ;
1486
+ expect_payment_failed_conditions (
1487
+ & nodes[ 0 ] , payment_hash, true ,
1488
+ PaymentFailedConditions :: new ( ) . expected_htlc_error_data ( 0x4000 | 22 , & [ ] ) ,
1489
+ ) ;
1490
+ }
1491
+
1433
1492
fn secret_from_hex ( hex : & str ) -> SecretKey {
1434
1493
SecretKey :: from_slice ( & <Vec < u8 > >:: from_hex ( hex) . unwrap ( ) ) . unwrap ( )
1435
1494
}
0 commit comments