@@ -42,7 +42,7 @@ use crate::io_extras::read_to_end;
42
42
43
43
use crate :: util:: events:: { MessageSendEventsProvider , OnionMessageProvider } ;
44
44
use crate :: util:: logger;
45
- use crate :: util:: ser:: { BigSize , LengthReadable , Readable , ReadableArgs , Writeable , Writer , FixedLengthReader , HighZeroBytesDroppedBigSize , Hostname } ;
45
+ use crate :: util:: ser:: { LengthReadable , Readable , ReadableArgs , Writeable , Writer , FixedLengthReader , HighZeroBytesDroppedBigSize , Hostname } ;
46
46
47
47
use crate :: ln:: { PaymentPreimage , PaymentHash , PaymentSecret } ;
48
48
@@ -1028,9 +1028,6 @@ mod fuzzy_internal_msgs {
1028
1028
}
1029
1029
1030
1030
pub ( crate ) enum OnionHopDataFormat {
1031
- Legacy { // aka Realm-0
1032
- short_channel_id : u64 ,
1033
- } ,
1034
1031
NonFinalNode {
1035
1032
short_channel_id : u64 ,
1036
1033
} ,
@@ -1046,7 +1043,6 @@ mod fuzzy_internal_msgs {
1046
1043
/// Message serialization may panic if this value is more than 21 million Bitcoin.
1047
1044
pub ( crate ) amt_to_forward : u64 ,
1048
1045
pub ( crate ) outgoing_cltv_value : u32 ,
1049
- // 12 bytes of 0-padding for Legacy format
1050
1046
}
1051
1047
1052
1048
pub struct DecodedOnionErrorPacket {
@@ -1459,13 +1455,6 @@ impl Readable for FinalOnionHopData {
1459
1455
impl Writeable for OnionHopData {
1460
1456
fn write < W : Writer > ( & self , w : & mut W ) -> Result < ( ) , io:: Error > {
1461
1457
match self . format {
1462
- OnionHopDataFormat :: Legacy { short_channel_id } => {
1463
- 0u8 . write ( w) ?;
1464
- short_channel_id. write ( w) ?;
1465
- self . amt_to_forward . write ( w) ?;
1466
- self . outgoing_cltv_value . write ( w) ?;
1467
- w. write_all ( & [ 0 ; 12 ] ) ?;
1468
- } ,
1469
1458
OnionHopDataFormat :: NonFinalNode { short_channel_id } => {
1470
1459
encode_varint_length_prefixed_tlv ! ( w, {
1471
1460
( 2 , HighZeroBytesDroppedBigSize ( self . amt_to_forward) , required) ,
@@ -1488,58 +1477,44 @@ impl Writeable for OnionHopData {
1488
1477
1489
1478
impl Readable for OnionHopData {
1490
1479
fn read < R : Read > ( r : & mut R ) -> Result < Self , DecodeError > {
1491
- let b: BigSize = Readable :: read ( r) ?;
1492
- const LEGACY_ONION_HOP_FLAG : u64 = 0 ;
1493
- let ( format, amt, cltv_value) = if b. 0 != LEGACY_ONION_HOP_FLAG {
1494
- let mut rd = FixedLengthReader :: new ( r, b. 0 ) ;
1495
- let mut amt = HighZeroBytesDroppedBigSize ( 0u64 ) ;
1496
- let mut cltv_value = HighZeroBytesDroppedBigSize ( 0u32 ) ;
1497
- let mut short_id: Option < u64 > = None ;
1498
- let mut payment_data: Option < FinalOnionHopData > = None ;
1499
- let mut keysend_preimage: Option < PaymentPreimage > = None ;
1500
- decode_tlv_stream ! ( & mut rd, {
1501
- ( 2 , amt, required) ,
1502
- ( 4 , cltv_value, required) ,
1503
- ( 6 , short_id, option) ,
1504
- ( 8 , payment_data, option) ,
1505
- // See https://github.com/lightning/blips/blob/master/blip-0003.md
1506
- ( 5482373484 , keysend_preimage, option)
1507
- } ) ;
1508
- rd. eat_remaining ( ) . map_err ( |_| DecodeError :: ShortRead ) ?;
1509
- let format = if let Some ( short_channel_id) = short_id {
1510
- if payment_data. is_some ( ) { return Err ( DecodeError :: InvalidValue ) ; }
1511
- OnionHopDataFormat :: NonFinalNode {
1512
- short_channel_id,
1513
- }
1514
- } else {
1515
- if let & Some ( ref data) = & payment_data {
1516
- if data. total_msat > MAX_VALUE_MSAT {
1517
- return Err ( DecodeError :: InvalidValue ) ;
1518
- }
1519
- }
1520
- OnionHopDataFormat :: FinalNode {
1521
- payment_data,
1522
- keysend_preimage,
1523
- }
1524
- } ;
1525
- ( format, amt. 0 , cltv_value. 0 )
1480
+ let mut amt = HighZeroBytesDroppedBigSize ( 0u64 ) ;
1481
+ let mut cltv_value = HighZeroBytesDroppedBigSize ( 0u32 ) ;
1482
+ let mut short_id: Option < u64 > = None ;
1483
+ let mut payment_data: Option < FinalOnionHopData > = None ;
1484
+ let mut keysend_preimage: Option < PaymentPreimage > = None ;
1485
+ read_tlv_fields ! ( r, {
1486
+ ( 2 , amt, required) ,
1487
+ ( 4 , cltv_value, required) ,
1488
+ ( 6 , short_id, option) ,
1489
+ ( 8 , payment_data, option) ,
1490
+ // See https://github.com/lightning/blips/blob/master/blip-0003.md
1491
+ ( 5482373484 , keysend_preimage, option)
1492
+ } ) ;
1493
+
1494
+ let format = if let Some ( short_channel_id) = short_id {
1495
+ if payment_data. is_some ( ) { return Err ( DecodeError :: InvalidValue ) ; }
1496
+ OnionHopDataFormat :: NonFinalNode {
1497
+ short_channel_id,
1498
+ }
1526
1499
} else {
1527
- let format = OnionHopDataFormat :: Legacy {
1528
- short_channel_id : Readable :: read ( r) ?,
1529
- } ;
1530
- let amt: u64 = Readable :: read ( r) ?;
1531
- let cltv_value: u32 = Readable :: read ( r) ?;
1532
- r. read_exact ( & mut [ 0 ; 12 ] ) ?;
1533
- ( format, amt, cltv_value)
1500
+ if let & Some ( ref data) = & payment_data {
1501
+ if data. total_msat > MAX_VALUE_MSAT {
1502
+ return Err ( DecodeError :: InvalidValue ) ;
1503
+ }
1504
+ }
1505
+ OnionHopDataFormat :: FinalNode {
1506
+ payment_data,
1507
+ keysend_preimage,
1508
+ }
1534
1509
} ;
1535
1510
1536
- if amt > MAX_VALUE_MSAT {
1511
+ if amt. 0 > MAX_VALUE_MSAT {
1537
1512
return Err ( DecodeError :: InvalidValue ) ;
1538
1513
}
1539
1514
Ok ( OnionHopData {
1540
1515
format,
1541
- amt_to_forward : amt,
1542
- outgoing_cltv_value : cltv_value,
1516
+ amt_to_forward : amt. 0 ,
1517
+ outgoing_cltv_value : cltv_value. 0 ,
1543
1518
} )
1544
1519
}
1545
1520
}
@@ -2669,20 +2644,6 @@ mod tests {
2669
2644
assert_eq ! ( encoded_value, target_value) ;
2670
2645
}
2671
2646
2672
- #[ test]
2673
- fn encoding_legacy_onion_hop_data ( ) {
2674
- let msg = msgs:: OnionHopData {
2675
- format : OnionHopDataFormat :: Legacy {
2676
- short_channel_id : 0xdeadbeef1bad1dea ,
2677
- } ,
2678
- amt_to_forward : 0x0badf00d01020304 ,
2679
- outgoing_cltv_value : 0xffffffff ,
2680
- } ;
2681
- let encoded_value = msg. encode ( ) ;
2682
- let target_value = hex:: decode ( "00deadbeef1bad1dea0badf00d01020304ffffffff000000000000000000000000" ) . unwrap ( ) ;
2683
- assert_eq ! ( encoded_value, target_value) ;
2684
- }
2685
-
2686
2647
#[ test]
2687
2648
fn encoding_nonfinal_onion_hop_data ( ) {
2688
2649
let mut msg = msgs:: OnionHopData {
0 commit comments