@@ -18,7 +18,7 @@ use crate::routing::gossip::NetworkUpdate;
18
18
use crate :: routing:: router:: { BlindedTail , Path , RouteHop , RouteParameters , TrampolineHop } ;
19
19
use crate :: sign:: NodeSigner ;
20
20
use crate :: types:: features:: { ChannelFeatures , NodeFeatures } ;
21
- use crate :: types:: payment:: { PaymentHash , PaymentPreimage , PaymentSecret } ;
21
+ use crate :: types:: payment:: { PaymentHash , PaymentPreimage } ;
22
22
use crate :: util:: errors:: { self , APIError } ;
23
23
use crate :: util:: logger:: Logger ;
24
24
use crate :: util:: ser:: { LengthCalculatingWriter , Readable , ReadableArgs , Writeable , Writer } ;
@@ -1479,7 +1479,6 @@ pub fn create_payment_onion<T: secp256k1::Signing>(
1479
1479
prng_seed,
1480
1480
None ,
1481
1481
None ,
1482
- None ,
1483
1482
)
1484
1483
}
1485
1484
@@ -1489,8 +1488,8 @@ pub(crate) fn create_payment_onion_internal<T: secp256k1::Signing>(
1489
1488
secp_ctx : & Secp256k1 < T > , path : & Path , session_priv : & SecretKey , total_msat : u64 ,
1490
1489
recipient_onion : & RecipientOnionFields , cur_block_height : u32 , payment_hash : & PaymentHash ,
1491
1490
keysend_preimage : & Option < PaymentPreimage > , invoice_request : Option < & InvoiceRequest > ,
1492
- prng_seed : [ u8 ; 32 ] , secondary_payment_secret : Option < PaymentSecret > ,
1493
- secondary_session_priv : Option < SecretKey > , secondary_prng_seed : Option < [ u8 ; 32 ] > ,
1491
+ prng_seed : [ u8 ; 32 ] , secondary_session_priv : Option < SecretKey > ,
1492
+ secondary_prng_seed : Option < [ u8 ; 32 ] > ,
1494
1493
) -> Result < ( msgs:: OnionPacket , u64 , u32 ) , APIError > {
1495
1494
let mut outer_total_msat = total_msat;
1496
1495
let mut outer_starting_htlc_offset = cur_block_height;
@@ -1527,54 +1526,23 @@ pub(crate) fn create_payment_onion_internal<T: secp256k1::Signing>(
1527
1526
} ) ?;
1528
1527
1529
1528
trampoline_packet_option = Some ( trampoline_packet) ;
1529
+
1530
+ outer_session_priv_override = Some ( secondary_session_priv. unwrap_or_else ( || {
1531
+ let session_priv_hash = Sha256 :: hash ( & session_priv. secret_bytes ( ) ) . to_byte_array ( ) ;
1532
+ SecretKey :: from_slice ( & session_priv_hash[ ..] ) . expect ( "You broke SHA-256!" )
1533
+ } ) ) ;
1530
1534
}
1531
1535
1532
- let ( mut onion_payloads, htlc_msat, htlc_cltv) = build_onion_payloads (
1536
+ let ( onion_payloads, htlc_msat, htlc_cltv) = build_onion_payloads (
1533
1537
& path,
1534
1538
outer_total_msat,
1535
1539
recipient_onion,
1536
1540
outer_starting_htlc_offset,
1537
1541
keysend_preimage,
1538
1542
invoice_request,
1543
+ trampoline_packet_option,
1539
1544
) ?;
1540
1545
1541
- if !path. trampoline_hops . is_empty ( ) {
1542
- let last_payload = onion_payloads. pop ( ) . ok_or ( APIError :: InvalidRoute {
1543
- err : "Non-Trampoline path needs at least one hop" . to_owned ( ) ,
1544
- } ) ?;
1545
-
1546
- match last_payload {
1547
- OutboundOnionPayload :: Receive { payment_data, .. } => {
1548
- let fee_delta = path. hops . last ( ) . map_or ( 0 , |h| h. fee_msat ) ;
1549
- let cltv_delta = path. hops . last ( ) . map_or ( 0 , |h| h. cltv_expiry_delta ) ;
1550
- let multipath_trampoline_data = payment_data. map ( |d| {
1551
- let trampoline_payment_secret = secondary_payment_secret. unwrap_or_else ( || {
1552
- PaymentSecret ( Sha256 :: hash ( & d. payment_secret . 0 ) . to_byte_array ( ) )
1553
- } ) ;
1554
- let total_msat = fee_delta;
1555
- FinalOnionHopData { payment_secret : trampoline_payment_secret, total_msat }
1556
- } ) ;
1557
- onion_payloads. push ( OutboundOnionPayload :: TrampolineEntrypoint {
1558
- amt_to_forward : fee_delta,
1559
- outgoing_cltv_value : outer_starting_htlc_offset + cltv_delta,
1560
- multipath_trampoline_data,
1561
- trampoline_packet : trampoline_packet_option. unwrap ( ) ,
1562
- } ) ;
1563
- } ,
1564
- _ => {
1565
- return Err ( APIError :: InvalidRoute {
1566
- err : "Last non-Trampoline hop must be of type OutboundOnionPayload::Receive"
1567
- . to_owned ( ) ,
1568
- } ) ;
1569
- } ,
1570
- } ;
1571
-
1572
- outer_session_priv_override = Some ( secondary_session_priv. unwrap_or_else ( || {
1573
- let session_priv_hash = Sha256 :: hash ( & session_priv. secret_bytes ( ) ) . to_byte_array ( ) ;
1574
- SecretKey :: from_slice ( & session_priv_hash[ ..] ) . expect ( "You broke SHA-256!" )
1575
- } ) ) ;
1576
- }
1577
-
1578
1546
let outer_session_priv = outer_session_priv_override. as_ref ( ) . unwrap_or ( session_priv) ;
1579
1547
let onion_keys = construct_onion_keys ( & secp_ctx, & path, outer_session_priv) . map_err ( |_| {
1580
1548
APIError :: InvalidRoute { err : "Pubkey along hop was maliciously selected" . to_owned ( ) }
0 commit comments