@@ -12,7 +12,7 @@ import '../aes.dart';
1212import '../padding.dart' ;
1313
1414/// The sink used for encryption by the [AESInCBCModeEncrypt] algorithm.
15- class AESInCBCModeEncryptSink implements CipherSink {
15+ class AESInCBCModeEncryptSink extends CipherSink {
1616 AESInCBCModeEncryptSink (
1717 this ._key,
1818 this ._iv,
@@ -22,7 +22,6 @@ class AESInCBCModeEncryptSink implements CipherSink {
2222 }
2323
2424 int _pos = 0 ;
25- bool _closed = false ;
2625 final Uint8List _iv;
2726 final Uint8List _key;
2827 final Padding _padding;
@@ -32,35 +31,22 @@ class AESInCBCModeEncryptSink implements CipherSink {
3231 late final _block32 = Uint32List .view (_block.buffer);
3332 late final _xkey32 = AESCore .$expandEncryptionKey (_key32);
3433
35- @override
36- bool get closed => _closed;
37-
3834 @override
3935 void reset () {
36+ super .reset ();
4037 _pos = 0 ;
41- _closed = false ;
4238 for (int i = 0 ; i < 16 ; ++ i) {
4339 _block[i] = _iv[i];
4440 }
4541 }
4642
4743 @override
48- Uint8List add (
49- List <int > data, [
50- bool last = false ,
51- int start = 0 ,
52- int ? end,
53- ]) {
54- if (_closed) {
55- throw StateError ('The sink is closed' );
56- }
57- _closed = last;
58- end ?? = data.length;
59-
44+ @pragma ('vm:prefer-inline' )
45+ Uint8List $add (List <int > data, int start, int end) {
6046 int i, j, p, n;
6147
6248 n = _pos + end - start;
63- if (last ) {
49+ if (closed ) {
6450 n += 16 - (n & 15 );
6551 }
6652 var output = Uint8List (n);
@@ -78,7 +64,7 @@ class AESInCBCModeEncryptSink implements CipherSink {
7864 }
7965 }
8066
81- if (last ) {
67+ if (closed ) {
8268 for (j = _pos; j < 16 ; ++ j) {
8369 _temp[j] = _block[j];
8470 }
@@ -105,14 +91,10 @@ class AESInCBCModeEncryptSink implements CipherSink {
10591 return output.sublist (0 , p);
10692 }
10793 }
108-
109- @override
110- @pragma ('vm:prefer-inline' )
111- Uint8List close () => add ([], true );
11294}
11395
11496/// The sink used for decryption by the [AESInCBCModeDecrypt] algorithm.
115- class AESInCBCModeDecryptSink implements CipherSink {
97+ class AESInCBCModeDecryptSink extends CipherSink {
11698 AESInCBCModeDecryptSink (
11799 this ._key,
118100 this ._iv,
@@ -123,7 +105,6 @@ class AESInCBCModeDecryptSink implements CipherSink {
123105
124106 int _pos = 0 ;
125107 int _rpos = 0 ;
126- bool _closed = false ;
127108 final Uint8List _key;
128109 final Uint8List _iv;
129110 final Padding _padding;
@@ -135,31 +116,18 @@ class AESInCBCModeDecryptSink implements CipherSink {
135116 late final _block32 = Uint32List .view (_block.buffer);
136117 late final _xkey32 = AESCore .$expandDecryptionKey (_key32);
137118
138- @override
139- bool get closed => _closed;
140-
141119 @override
142120 void reset () {
121+ super .reset ();
143122 _pos = 0 ;
144- _closed = false ;
145123 for (int i = 0 ; i < 16 ; ++ i) {
146124 _salt[i] = _iv[i];
147125 }
148126 }
149127
150128 @override
151- Uint8List add (
152- List <int > data, [
153- bool last = false ,
154- int start = 0 ,
155- int ? end,
156- ]) {
157- if (_closed) {
158- throw StateError ('The sink is closed' );
159- }
160- _closed = last;
161- end ?? = data.length;
162-
129+ @pragma ('vm:prefer-inline' )
130+ Uint8List $add (List <int > data, int start, int end) {
163131 int i, j, k, p, n;
164132
165133 n = _rpos + end - start;
@@ -186,7 +154,7 @@ class AESInCBCModeDecryptSink implements CipherSink {
186154 }
187155 }
188156
189- if (last ) {
157+ if (closed ) {
190158 if (_rpos == 16 ) {
191159 for (k = 0 ; k < 16 ; ++ k) {
192160 output[p++ ] = _residue[k];
@@ -209,10 +177,6 @@ class AESInCBCModeDecryptSink implements CipherSink {
209177 return output.sublist (0 , p);
210178 }
211179 }
212-
213- @override
214- @pragma ('vm:prefer-inline' )
215- Uint8List close () => add ([], true );
216180}
217181
218182/// Provides encryption for AES cipher in CBC mode.
0 commit comments