fix: update code to pass tests
This commit is contained in:
parent
cefa73ec3d
commit
1b00d20ec5
@ -3,7 +3,7 @@
|
||||
// -----
|
||||
// File: aes.dart
|
||||
// Created Date: 16/12/2021 16:28:00
|
||||
// Last Modified: 26/05/2022 21:07:01
|
||||
// Last Modified: 27/05/2022 12:13:28
|
||||
// -----
|
||||
// Copyright (c) 2022
|
||||
|
||||
@ -46,7 +46,6 @@ class AES implements Cipher {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
if (!mode.supportedPaddings.contains(padding)) {
|
||||
throw NativeCryptoException(
|
||||
message: 'Invalid padding! '
|
||||
@ -56,13 +55,25 @@ class AES implements Cipher {
|
||||
}
|
||||
}
|
||||
|
||||
Future<Uint8List> _decrypt(CipherText cipherText,
|
||||
{int chunkCount = 0,}) async {
|
||||
final Uint8List? decrypted = await platform.decrypt(
|
||||
cipherText.bytes,
|
||||
_key.bytes,
|
||||
algorithm.name,
|
||||
);
|
||||
Future<Uint8List> _decrypt(
|
||||
CipherText cipherText, {
|
||||
int chunkCount = 0,
|
||||
}) async {
|
||||
Uint8List? decrypted;
|
||||
|
||||
try {
|
||||
decrypted = await platform.decrypt(
|
||||
cipherText.bytes,
|
||||
_key.bytes,
|
||||
algorithm.name,
|
||||
);
|
||||
} catch (e, s) {
|
||||
throw NativeCryptoException(
|
||||
message: '$e',
|
||||
code: NativeCryptoExceptionCode.platform_throws.code,
|
||||
stackTrace: s,
|
||||
);
|
||||
}
|
||||
|
||||
if (decrypted.isNull) {
|
||||
throw NativeCryptoException(
|
||||
@ -80,11 +91,21 @@ class AES implements Cipher {
|
||||
}
|
||||
|
||||
Future<CipherText> _encrypt(Uint8List data, {int chunkCount = 0}) async {
|
||||
final Uint8List? encrypted = await platform.encrypt(
|
||||
data,
|
||||
_key.bytes,
|
||||
algorithm.name,
|
||||
);
|
||||
Uint8List? encrypted;
|
||||
|
||||
try {
|
||||
encrypted = await platform.encrypt(
|
||||
data,
|
||||
_key.bytes,
|
||||
algorithm.name,
|
||||
);
|
||||
} catch (e, s) {
|
||||
throw NativeCryptoException(
|
||||
message: '$e on chunk #$chunkCount',
|
||||
code: NativeCryptoExceptionCode.platform_throws.code,
|
||||
stackTrace: s,
|
||||
);
|
||||
}
|
||||
|
||||
if (encrypted.isNull) {
|
||||
throw NativeCryptoException(
|
||||
@ -97,13 +118,21 @@ class AES implements Cipher {
|
||||
code: NativeCryptoExceptionCode.platform_returned_empty_data.code,
|
||||
);
|
||||
} else {
|
||||
return CipherText.fromBytes(
|
||||
encrypted,
|
||||
ivLength: 12,
|
||||
messageLength: encrypted.length - 28,
|
||||
tagLength: 16,
|
||||
cipherAlgorithm: CipherAlgorithm.aes,
|
||||
);
|
||||
try {
|
||||
return CipherText.fromBytes(
|
||||
encrypted,
|
||||
ivLength: 12,
|
||||
messageLength: encrypted.length - 28,
|
||||
tagLength: 16,
|
||||
cipherAlgorithm: CipherAlgorithm.aes,
|
||||
);
|
||||
} on NativeCryptoException catch (e, s) {
|
||||
throw NativeCryptoException(
|
||||
message: '${e.message} on chunk #$chunkCount',
|
||||
code: e.code,
|
||||
stackTrace: s,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,6 +154,9 @@ class AES implements Cipher {
|
||||
|
||||
@override
|
||||
Future<CipherTextWrapper> encrypt(Uint8List data) async {
|
||||
if (data.isEmpty) {
|
||||
return CipherTextWrapper.empty();
|
||||
}
|
||||
CipherTextWrapper cipherTextWrapper;
|
||||
Uint8List dataToEncrypt;
|
||||
final int chunkNb = (data.length / Cipher.bytesCountPerChunk).ceil();
|
||||
|
@ -3,7 +3,7 @@
|
||||
// -----
|
||||
// File: cipher_text.dart
|
||||
// Created Date: 16/12/2021 16:59:53
|
||||
// Last Modified: 26/05/2022 22:20:40
|
||||
// Last Modified: 27/05/2022 12:09:47
|
||||
// -----
|
||||
// Copyright (c) 2021
|
||||
|
||||
@ -47,10 +47,12 @@ class CipherText extends ByteArray {
|
||||
factory CipherText.fromBytes(
|
||||
Uint8List bytes, {
|
||||
required int ivLength,
|
||||
required int messageLength,
|
||||
required int tagLength,
|
||||
int? messageLength,
|
||||
CipherAlgorithm? cipherAlgorithm,
|
||||
}) {
|
||||
messageLength ??= bytes.length - ivLength - tagLength;
|
||||
|
||||
if (ivLength.isNegative ||
|
||||
messageLength.isNegative ||
|
||||
tagLength.isNegative) {
|
||||
|
@ -3,7 +3,7 @@
|
||||
// -----
|
||||
// File: cipher_text_wrapper.dart
|
||||
// Created Date: 26/05/2022 14:27:32
|
||||
// Last Modified: 26/05/2022 22:11:42
|
||||
// Last Modified: 27/05/2022 13:43:29
|
||||
// -----
|
||||
// Copyright (c) 2022
|
||||
|
||||
@ -51,7 +51,6 @@ class CipherTextWrapper {
|
||||
factory CipherTextWrapper.fromBytes(
|
||||
Uint8List bytes, {
|
||||
required int ivLength,
|
||||
required int messageLength,
|
||||
required int tagLength,
|
||||
CipherAlgorithm? cipherAlgorithm,
|
||||
int? chunkSize,
|
||||
@ -59,29 +58,38 @@ class CipherTextWrapper {
|
||||
chunkSize ??= Cipher.bytesCountPerChunk;
|
||||
Cipher.bytesCountPerChunk = chunkSize;
|
||||
|
||||
if (bytes.length <= chunkSize) {
|
||||
final int messageLength = bytes.length - ivLength - tagLength;
|
||||
|
||||
if (messageLength <= chunkSize) {
|
||||
return CipherTextWrapper.single(
|
||||
CipherText.fromBytes(
|
||||
bytes,
|
||||
ivLength: ivLength,
|
||||
messageLength: messageLength,
|
||||
tagLength: tagLength,
|
||||
cipherAlgorithm: cipherAlgorithm,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
final cipherTexts = <CipherText>[];
|
||||
for (var i = 0; i < bytes.length; i += chunkSize) {
|
||||
final chunk = bytes.sublist(i, i + chunkSize);
|
||||
cipherTexts.add(
|
||||
CipherText.fromBytes(
|
||||
chunk,
|
||||
ivLength: ivLength,
|
||||
messageLength: messageLength,
|
||||
tagLength: tagLength,
|
||||
cipherAlgorithm: cipherAlgorithm,
|
||||
),
|
||||
);
|
||||
for (var i = 0; i < bytes.length; i += chunkSize + ivLength + tagLength) {
|
||||
final chunk = bytes.trySublist(i, i + chunkSize + ivLength + tagLength);
|
||||
|
||||
try {
|
||||
cipherTexts.add(
|
||||
CipherText.fromBytes(
|
||||
chunk,
|
||||
ivLength: ivLength,
|
||||
tagLength: tagLength,
|
||||
cipherAlgorithm: cipherAlgorithm,
|
||||
),
|
||||
);
|
||||
} on NativeCryptoException catch (e, s) {
|
||||
throw NativeCryptoException(
|
||||
message: '${e.message} on chunk #$i',
|
||||
code: e.code,
|
||||
stackTrace: s,
|
||||
);
|
||||
}
|
||||
}
|
||||
return CipherTextWrapper.list(cipherTexts);
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
// -----
|
||||
// File: extensions.dart
|
||||
// Created Date: 26/05/2022 12:12:48
|
||||
// Last Modified: 26/05/2022 22:15:33
|
||||
// Last Modified: 27/05/2022 12:26:55
|
||||
// -----
|
||||
// Copyright (c) 2022
|
||||
|
||||
@ -87,4 +87,15 @@ extension Uint8ListX on Uint8List {
|
||||
|
||||
/// Returns a concatenation of this with the other [Uint8List].
|
||||
Uint8List plus(final Uint8List other) => [...this, ...other].toTypedList();
|
||||
|
||||
/// Returns a sublist of this from the [start] index to the [end] index.
|
||||
/// If [end] is greater than the length of the list, it is set to the length
|
||||
Uint8List trySublist(int start, [int? end]) {
|
||||
if (isEmpty) return this;
|
||||
|
||||
int ending = end ?? length;
|
||||
if (ending > length) ending = length;
|
||||
|
||||
return sublist(start, ending);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user