1
1
use ln:: channelmanager:: { PaymentHash , HTLCSource } ;
2
2
use ln:: msgs;
3
3
use ln:: router:: { Route , RouteHop } ;
4
- use util:: { byte_utils, internal_traits } ;
4
+ use util:: byte_utils;
5
5
use util:: chacha20:: ChaCha20 ;
6
6
use util:: errors:: { self , APIError } ;
7
7
use util:: ser:: { Readable , Writeable } ;
@@ -17,7 +17,6 @@ use secp256k1::Secp256k1;
17
17
use secp256k1:: ecdh:: SharedSecret ;
18
18
use secp256k1;
19
19
20
- use std:: ptr;
21
20
use std:: io:: Cursor ;
22
21
use std:: sync:: Arc ;
23
22
@@ -114,24 +113,22 @@ pub(super) fn build_onion_payloads(route: &Route, starting_htlc_offset: u32) ->
114
113
let mut cur_cltv = starting_htlc_offset;
115
114
let mut last_short_channel_id = 0 ;
116
115
let mut res: Vec < msgs:: OnionHopData > = Vec :: with_capacity ( route. hops . len ( ) ) ;
117
- internal_traits:: test_no_dealloc :: < msgs:: OnionHopData > ( None ) ;
118
- unsafe { res. set_len ( route. hops . len ( ) ) ; }
119
116
120
117
for ( idx, hop) in route. hops . iter ( ) . enumerate ( ) . rev ( ) {
121
118
// First hop gets special values so that it can check, on receipt, that everything is
122
119
// exactly as it should be (and the next hop isn't trying to probe to find out if we're
123
120
// the intended recipient).
124
121
let value_msat = if cur_value_msat == 0 { hop. fee_msat } else { cur_value_msat } ;
125
122
let cltv = if cur_cltv == starting_htlc_offset { hop. cltv_expiry_delta + starting_htlc_offset } else { cur_cltv } ;
126
- res[ idx ] = msgs:: OnionHopData {
123
+ res. insert ( 0 , msgs:: OnionHopData {
127
124
realm : 0 ,
128
125
data : msgs:: OnionRealm0HopData {
129
126
short_channel_id : last_short_channel_id,
130
127
amt_to_forward : value_msat,
131
128
outgoing_cltv_value : cltv,
132
129
} ,
133
130
hmac : [ 0 ; 32 ] ,
134
- } ;
131
+ } ) ;
135
132
cur_value_msat += hop. fee_msat ;
136
133
if cur_value_msat >= 21000000 * 100000000 * 1000 {
137
134
return Err ( APIError :: RouteError { err : "Channel fees overflowed?!" } ) ;
@@ -147,8 +144,8 @@ pub(super) fn build_onion_payloads(route: &Route, starting_htlc_offset: u32) ->
147
144
148
145
#[ inline]
149
146
fn shift_arr_right ( arr : & mut [ u8 ; 20 * 65 ] ) {
150
- unsafe {
151
- ptr :: copy ( arr[ 0 .. ] . as_ptr ( ) , arr[ 65 .. ] . as_mut_ptr ( ) , 19 * 65 ) ;
147
+ for i in ( 65 .. 20 * 65 ) . rev ( ) {
148
+ arr[ i ] = arr[ i- 65 ] ;
152
149
}
153
150
for i in 0 ..65 {
154
151
arr[ i] = 0 ;
0 commit comments