@@ -28,18 +28,12 @@ const KEY_ROTATION_INDEX: u32 = 1000;
28
28
/// Returned after a successful handshake to encrypt and decrypt communication with peer nodes.
29
29
/// It should not normally be manually instantiated.
30
30
/// Automatically handles key rotation.
31
- /// For decryption, it is recommended to call `decrypt_message_stream` for automatic buffering.
32
31
pub struct Conduit {
33
- pub ( super ) encryptor : Encryptor ,
34
-
35
- #[ cfg( feature = "fuzztarget" ) ]
32
+ pub encryptor : Encryptor ,
36
33
pub decryptor : Decryptor ,
37
- #[ cfg( not( feature = "fuzztarget" ) ) ]
38
- pub ( super ) decryptor : Decryptor ,
39
-
40
34
}
41
35
42
- pub ( super ) struct Encryptor {
36
+ pub struct Encryptor {
43
37
sending_key : SymmetricKey ,
44
38
sending_chaining_key : SymmetricKey ,
45
39
sending_nonce : u32 ,
@@ -83,15 +77,6 @@ impl Conduit {
83
77
}
84
78
}
85
79
86
- /// Encrypt data to be sent to peer
87
- pub fn encrypt ( & mut self , buffer : & [ u8 ] ) -> Vec < u8 > {
88
- self . encryptor . encrypt ( buffer)
89
- }
90
-
91
- pub ( super ) fn read ( & mut self , data : & [ u8 ] ) -> Result < ( ) , String > {
92
- self . decryptor . read ( data)
93
- }
94
-
95
80
fn increment_nonce ( nonce : & mut u32 , chaining_key : & mut SymmetricKey , key : & mut SymmetricKey ) {
96
81
* nonce += 1 ;
97
82
if * nonce == KEY_ROTATION_INDEX {
@@ -108,7 +93,7 @@ impl Conduit {
108
93
}
109
94
110
95
impl Encryptor {
111
- pub ( super ) fn encrypt ( & mut self , buffer : & [ u8 ] ) -> Vec < u8 > {
96
+ pub fn encrypt ( & mut self , buffer : & [ u8 ] ) -> Vec < u8 > {
112
97
if buffer. len ( ) > LN_MAX_MSG_LEN {
113
98
panic ! ( "Attempted to encrypt message longer than 65535 bytes!" ) ;
114
99
}
@@ -259,7 +244,7 @@ mod tests {
259
244
let ( mut connected_peer, mut remote_peer) = setup_peers ( ) ;
260
245
261
246
let message: Vec < u8 > = vec ! [ ] ;
262
- let encrypted_message = connected_peer. encrypt ( & message) ;
247
+ let encrypted_message = connected_peer. encryptor . encrypt ( & message) ;
263
248
assert_eq ! ( encrypted_message. len( ) , 2 + 16 + 16 ) ;
264
249
265
250
remote_peer. decryptor . read ( & encrypted_message[ ..] ) . unwrap ( ) ;
@@ -275,7 +260,7 @@ mod tests {
275
260
let ( mut connected_peer, mut remote_peer) = setup_peers ( ) ;
276
261
277
262
let message: Vec < u8 > = vec ! [ 1 ] ;
278
- let encrypted_message = connected_peer. encrypt ( & message) ;
263
+ let encrypted_message = connected_peer. encryptor . encrypt ( & message) ;
279
264
280
265
remote_peer. decryptor . read ( & encrypted_message[ ..1 ] ) . unwrap ( ) ;
281
266
assert ! ( remote_peer. decryptor. next( ) . is_none( ) ) ;
@@ -292,7 +277,7 @@ mod tests {
292
277
let ( mut connected_peer, mut remote_peer) = setup_peers ( ) ;
293
278
294
279
let message: Vec < u8 > = vec ! [ 1 ] ;
295
- let encrypted_message = connected_peer. encrypt ( & message) ;
280
+ let encrypted_message = connected_peer. encryptor . encrypt ( & message) ;
296
281
297
282
remote_peer. decryptor . read ( & encrypted_message[ ..20 ] ) . unwrap ( ) ;
298
283
assert ! ( remote_peer. decryptor. next( ) . is_none( ) ) ;
@@ -308,11 +293,11 @@ mod tests {
308
293
let ( mut connected_peer, _remote_peer) = setup_peers ( ) ;
309
294
let message = hex:: decode ( "68656c6c6f" ) . unwrap ( ) ;
310
295
311
- let encrypted_message = connected_peer. encrypt ( & message) ;
296
+ let encrypted_message = connected_peer. encryptor . encrypt ( & message) ;
312
297
assert_eq ! ( encrypted_message, hex:: decode( "cf2b30ddf0cf3f80e7c35a6e6730b59fe802473180f396d88a8fb0db8cbcf25d2f214cf9ea1d95" ) . unwrap( ) ) ;
313
298
314
299
// the second time the same message is encrypted, the ciphertext should be different
315
- let encrypted_message = connected_peer. encrypt ( & message) ;
300
+ let encrypted_message = connected_peer. encryptor . encrypt ( & message) ;
316
301
assert_eq ! ( encrypted_message, hex:: decode( "72887022101f0b6753e0c7de21657d35a4cb2a1f5cde2650528bbc8f837d0f0d7ad833b1a256a1" ) . unwrap( ) ) ;
317
302
}
318
303
@@ -325,7 +310,7 @@ mod tests {
325
310
let mut encrypted_messages: Vec < Vec < u8 > > = Vec :: new ( ) ;
326
311
327
312
for _ in 0 ..1002 {
328
- let encrypted_message = connected_peer. encrypt ( & message) ;
313
+ let encrypted_message = connected_peer. encryptor . encrypt ( & message) ;
329
314
encrypted_messages. push ( encrypted_message) ;
330
315
}
331
316
@@ -343,7 +328,7 @@ mod tests {
343
328
let mut encrypted_messages: Vec < Vec < u8 > > = Vec :: new ( ) ;
344
329
345
330
for _ in 0 ..1002 {
346
- let encrypted_message = connected_peer. encrypt ( & message) ;
331
+ let encrypted_message = connected_peer. encryptor . encrypt ( & message) ;
347
332
encrypted_messages. push ( encrypted_message) ;
348
333
}
349
334
@@ -352,15 +337,15 @@ mod tests {
352
337
let mut current_encrypted_message = encrypted_messages. remove ( 0 ) ;
353
338
let next_encrypted_message = encrypted_messages. remove ( 0 ) ;
354
339
current_encrypted_message. extend_from_slice ( & next_encrypted_message) ;
355
- remote_peer. read ( & current_encrypted_message[ ..] ) . unwrap ( ) ;
340
+ remote_peer. decryptor . read ( & current_encrypted_message[ ..] ) . unwrap ( ) ;
356
341
357
342
let decrypted_message = remote_peer. decryptor . next ( ) . unwrap ( ) ;
358
343
assert_eq ! ( decrypted_message, message) ;
359
344
}
360
345
361
346
for _ in 0 ..501 {
362
347
// decrypt messages directly from buffer without adding to it
363
- remote_peer. read ( & [ ] ) . unwrap ( ) ;
348
+ remote_peer. decryptor . read ( & [ ] ) . unwrap ( ) ;
364
349
let decrypted_message = remote_peer. decryptor . next ( ) . unwrap ( ) ;
365
350
assert_eq ! ( decrypted_message, message) ;
366
351
}
@@ -370,10 +355,10 @@ mod tests {
370
355
#[ test]
371
356
fn decryption_failure_errors ( ) {
372
357
let ( mut connected_peer, mut remote_peer) = setup_peers ( ) ;
373
- let encrypted = remote_peer. encrypt ( & [ 1 ] ) ;
358
+ let encrypted = remote_peer. encryptor . encrypt ( & [ 1 ] ) ;
374
359
375
360
connected_peer. decryptor . receiving_key = [ 0 ; 32 ] ;
376
- assert_eq ! ( connected_peer. read( & encrypted) , Err ( "invalid hmac" . to_string( ) ) ) ;
361
+ assert_eq ! ( connected_peer. decryptor . read( & encrypted) , Err ( "invalid hmac" . to_string( ) ) ) ;
377
362
}
378
363
379
364
// Test next()::None
@@ -388,8 +373,8 @@ mod tests {
388
373
#[ test]
389
374
fn decryptor_iterator_one_item_valid ( ) {
390
375
let ( mut connected_peer, mut remote_peer) = setup_peers ( ) ;
391
- let encrypted = remote_peer. encrypt ( & [ 1 ] ) ;
392
- connected_peer. read ( & encrypted) . unwrap ( ) ;
376
+ let encrypted = remote_peer. encryptor . encrypt ( & [ 1 ] ) ;
377
+ connected_peer. decryptor . read ( & encrypted) . unwrap ( ) ;
393
378
394
379
assert_eq ! ( connected_peer. decryptor. next( ) , Some ( vec![ 1 ] ) ) ;
395
380
assert_eq ! ( connected_peer. decryptor. next( ) , None ) ;
@@ -406,7 +391,7 @@ mod tests {
406
391
fn max_message_len_encryption ( ) {
407
392
let ( mut connected_peer, _) = setup_peers ( ) ;
408
393
let msg = [ 4u8 ; LN_MAX_MSG_LEN + 1 ] ;
409
- let _should_panic = connected_peer. encrypt ( & msg) ;
394
+ let _should_panic = connected_peer. encryptor . encrypt ( & msg) ;
410
395
}
411
396
412
397
#[ test]
@@ -416,6 +401,6 @@ mod tests {
416
401
417
402
// MSG should not exceed LN_MAX_MSG_LEN + 16
418
403
let msg = [ 4u8 ; LN_MAX_MSG_LEN + 17 ] ;
419
- connected_peer. read ( & msg) . unwrap ( ) ;
404
+ connected_peer. decryptor . read ( & msg) . unwrap ( ) ;
420
405
}
421
406
}
0 commit comments