8
8
9
9
// https://github.com/RustCrypto/block-ciphers
10
10
11
+ use aes:: cipher:: { block_padding:: Pkcs7 , BlockDecryptMut , BlockEncryptMut , KeyIvInit } ;
12
+ use p256:: elliptic_curve:: subtle:: ConstantTimeEq ;
13
+ use rand:: Rng ;
11
14
use std:: io:: Cursor ;
12
15
use std:: ops:: Not ;
13
16
14
- use aes:: Aes256 ;
15
- use block_modes:: { BlockMode , BlockModeError , Cbc } ;
16
- use rand:: Rng ;
17
- use subtle:: ConstantTimeEq ;
18
-
19
- use super :: padding:: DtlsPadding ;
20
17
use crate :: content:: * ;
21
18
use crate :: error:: * ;
22
19
use crate :: prf:: * ;
23
20
use crate :: record_layer:: record_layer_header:: * ;
24
- type Aes256Cbc = Cbc < Aes256 , DtlsPadding > ;
21
+ type Aes256CbcEnc = cbc:: Encryptor < aes:: Aes256 > ;
22
+ type Aes256CbcDec = cbc:: Decryptor < aes:: Aes256 > ;
25
23
26
24
// State needed to handle encrypted input/output
27
25
#[ derive( Clone ) ]
@@ -71,8 +69,8 @@ impl CryptoCbc {
71
69
let mut iv: Vec < u8 > = vec ! [ 0 ; Self :: BLOCK_SIZE ] ;
72
70
rand:: thread_rng ( ) . fill ( iv. as_mut_slice ( ) ) ;
73
71
74
- let write_cbc = Aes256Cbc :: new_var ( & self . local_key , & iv) ?;
75
- let encrypted = write_cbc. encrypt_vec ( & payload) ;
72
+ let write_cbc = Aes256CbcEnc :: new_from_slices ( & self . local_key , & iv) ?;
73
+ let encrypted = write_cbc. encrypt_padded_vec_mut :: < Pkcs7 > ( & payload) ;
76
74
77
75
// Prepend unencrypte header with encrypted payload
78
76
let mut r = vec ! [ ] ;
@@ -100,9 +98,11 @@ impl CryptoCbc {
100
98
let body = & body[ Self :: BLOCK_SIZE ..] ;
101
99
//TODO: add body.len() check
102
100
103
- let read_cbc = Aes256Cbc :: new_var ( & self . remote_key , iv) ?;
101
+ let read_cbc = Aes256CbcDec :: new_from_slices ( & self . remote_key , iv) ?;
104
102
105
- let decrypted = read_cbc. decrypt_vec ( body) ?;
103
+ let decrypted = read_cbc
104
+ . decrypt_padded_vec_mut :: < Pkcs7 > ( body)
105
+ . map_err ( |_| Error :: ErrInvalidPacketLength ) ?;
106
106
107
107
let recv_mac = & decrypted[ decrypted. len ( ) - Self :: MAC_SIZE ..] ;
108
108
let decrypted = & decrypted[ 0 ..decrypted. len ( ) - Self :: MAC_SIZE ] ;
@@ -116,7 +116,7 @@ impl CryptoCbc {
116
116
) ?;
117
117
118
118
if recv_mac. ct_eq ( & mac) . not ( ) . into ( ) {
119
- return Err ( BlockModeError . into ( ) ) ;
119
+ return Err ( Error :: ErrInvalidMac ) ;
120
120
}
121
121
122
122
let mut d = Vec :: with_capacity ( RECORD_LAYER_HEADER_SIZE + decrypted. len ( ) ) ;
0 commit comments