@@ -12,7 +12,7 @@ use prelude::*;
12
12
use ln:: msgs:: LightningError ;
13
13
use ln:: msgs;
14
14
15
- use bitcoin:: hashes:: { Hash , HashEngine , Hmac , HmacEngine } ;
15
+ use bitcoin:: hashes:: { Hash , HashEngine } ;
16
16
use bitcoin:: hashes:: sha256:: Hash as Sha256 ;
17
17
18
18
use bitcoin:: secp256k1:: Secp256k1 ;
@@ -21,6 +21,7 @@ use bitcoin::secp256k1::ecdh::SharedSecret;
21
21
use bitcoin:: secp256k1;
22
22
23
23
use util:: chacha20poly1305rfc:: ChaCha20Poly1305RFC ;
24
+ use util:: crypto:: hkdf_extract_expand;
24
25
use bitcoin:: hashes:: hex:: ToHex ;
25
26
26
27
/// Maximum Lightning message data length according to
@@ -160,24 +161,11 @@ impl PeerChannelEncryptor {
160
161
Ok ( ( ) )
161
162
}
162
163
163
- fn hkdf_extract_expand ( salt : & [ u8 ] , ikm : & [ u8 ] ) -> ( [ u8 ; 32 ] , [ u8 ; 32 ] ) {
164
- let mut hmac = HmacEngine :: < Sha256 > :: new ( salt) ;
165
- hmac. input ( ikm) ;
166
- let prk = Hmac :: from_engine ( hmac) . into_inner ( ) ;
167
- let mut hmac = HmacEngine :: < Sha256 > :: new ( & prk[ ..] ) ;
168
- hmac. input ( & [ 1 ; 1 ] ) ;
169
- let t1 = Hmac :: from_engine ( hmac) . into_inner ( ) ;
170
- let mut hmac = HmacEngine :: < Sha256 > :: new ( & prk[ ..] ) ;
171
- hmac. input ( & t1) ;
172
- hmac. input ( & [ 2 ; 1 ] ) ;
173
- ( t1, Hmac :: from_engine ( hmac) . into_inner ( ) )
174
- }
175
-
176
164
#[ inline]
177
165
fn hkdf ( state : & mut BidirectionalNoiseState , ss : SharedSecret ) -> [ u8 ; 32 ] {
178
- let ( t1 , t2 ) = Self :: hkdf_extract_expand ( & state. ck , & ss[ ..] ) ;
179
- state. ck = t1 ;
180
- t2
166
+ let hkdf = hkdf_extract_expand ( & state. ck , & ss[ ..] , 2 ) ;
167
+ state. ck = hkdf [ 0 ] ;
168
+ hkdf [ 1 ]
181
169
}
182
170
183
171
#[ inline]
@@ -311,7 +299,7 @@ impl PeerChannelEncryptor {
311
299
let temp_k = PeerChannelEncryptor :: hkdf ( bidirectional_state, ss) ;
312
300
313
301
PeerChannelEncryptor :: encrypt_with_ad ( & mut res[ 50 ..] , 0 , & temp_k, & bidirectional_state. h , & [ 0 ; 0 ] ) ;
314
- final_hkdf = Self :: hkdf_extract_expand ( & bidirectional_state. ck , & [ 0 ; 0 ] ) ;
302
+ final_hkdf = hkdf_extract_expand ( & bidirectional_state. ck , & [ 0 ; 0 ] , 2 ) ;
315
303
ck = bidirectional_state. ck . clone ( ) ;
316
304
res
317
305
} ,
@@ -320,7 +308,7 @@ impl PeerChannelEncryptor {
320
308
_ => panic ! ( "Cannot get act one after noise handshake completes" ) ,
321
309
} ;
322
310
323
- let ( sk, rk) = final_hkdf;
311
+ let ( sk, rk) = ( final_hkdf[ 0 ] , final_hkdf [ 1 ] ) ;
324
312
self . noise_state = NoiseState :: Finished {
325
313
sk,
326
314
sn : 0 ,
@@ -365,15 +353,15 @@ impl PeerChannelEncryptor {
365
353
let temp_k = PeerChannelEncryptor :: hkdf ( bidirectional_state, ss) ;
366
354
367
355
PeerChannelEncryptor :: decrypt_with_ad ( & mut [ 0 ; 0 ] , 0 , & temp_k, & bidirectional_state. h , & act_three[ 50 ..] ) ?;
368
- final_hkdf = Self :: hkdf_extract_expand ( & bidirectional_state. ck , & [ 0 ; 0 ] ) ;
356
+ final_hkdf = hkdf_extract_expand ( & bidirectional_state. ck , & [ 0 ; 0 ] , 2 ) ;
369
357
ck = bidirectional_state. ck . clone ( ) ;
370
358
} ,
371
359
_ => panic ! ( "Wrong direction for act" ) ,
372
360
} ,
373
361
_ => panic ! ( "Cannot get act one after noise handshake completes" ) ,
374
362
}
375
363
376
- let ( rk, sk) = final_hkdf;
364
+ let ( rk, sk) = ( final_hkdf[ 0 ] , final_hkdf [ 1 ] ) ;
377
365
self . noise_state = NoiseState :: Finished {
378
366
sk,
379
367
sn : 0 ,
@@ -399,9 +387,9 @@ impl PeerChannelEncryptor {
399
387
match self . noise_state {
400
388
NoiseState :: Finished { ref mut sk, ref mut sn, ref mut sck, rk : _, rn : _, rck : _ } => {
401
389
if * sn >= 1000 {
402
- let ( new_sck , new_sk ) = Self :: hkdf_extract_expand ( sck, sk) ;
403
- * sck = new_sck ;
404
- * sk = new_sk ;
390
+ let hkdf = hkdf_extract_expand ( sck, sk, 2 ) ;
391
+ * sck = hkdf [ 0 ] ;
392
+ * sk = hkdf [ 1 ] ;
405
393
* sn = 0 ;
406
394
}
407
395
@@ -425,9 +413,9 @@ impl PeerChannelEncryptor {
425
413
match self . noise_state {
426
414
NoiseState :: Finished { sk : _, sn : _, sck : _, ref mut rk, ref mut rn, ref mut rck } => {
427
415
if * rn >= 1000 {
428
- let ( new_rck , new_rk ) = Self :: hkdf_extract_expand ( rck, rk) ;
429
- * rck = new_rck ;
430
- * rk = new_rk ;
416
+ let hkdf = hkdf_extract_expand ( rck, rk, 2 ) ;
417
+ * rck = hkdf [ 0 ] ;
418
+ * rk = hkdf [ 1 ] ;
431
419
* rn = 0 ;
432
420
}
433
421
0 commit comments