Rename api

This commit is contained in:
Hugo Pointcheval 2020-04-18 11:28:29 +02:00
parent b838edf718
commit b95c88b708

View File

@ -11,34 +11,64 @@ enum KeySize { bits128, bits192, bits256 }
/// Defines all available ciphers. /// Defines all available ciphers.
enum Cipher { AES } enum Cipher { AES }
/// Key Helper
///
/// You can generate Secret keys of different sizes.
class KeyGenerator {
/// Generate a secret key.
///
/// You can specify a `keySize`. Default is 256 bits.
Future<Uint8List> secretKey({KeySize keySize}) async {
int size;
switch (keySize) {
case KeySize.bits128:
size = 128;
break;
case KeySize.bits192:
size = 192;
break;
case KeySize.bits256:
size = 256;
break;
default:
// Default size = 256 bits
size = 256;
break;
}
return await NativeCrypto().symKeygen(size);
}
}
/// AES Helper /// AES Helper
/// ///
/// You can generate AES keys, encrypt and decrypt data. /// You can encrypt and decrypt data.
class AES { class AES {
/// This key is used for encryption and decryption. Uint8List _key;
Uint8List key;
bool _isInitialized = false; bool _isInitialized = false;
/// Check if the AES object is intialized with a valid key before perform any operation.
bool get isInitialized => _isInitialized;
KeySize _keySize; KeySize _keySize;
/// Defines the size of the generated or passed key.
KeySize get keySize => _keySize;
/// You can pass a key in constructor. /// You can pass a key in constructor.
AES({this.key}) { AES({Uint8List key}) {
this._key = key;
try { try {
bool isValidKey = _testKey(); this._isInitialized = _testKey();
this._isInitialized = isValidKey;
} on KeyException { } on KeyException {
this._isInitialized = false; this._isInitialized = false;
throw KeyException('Invalid key length: ${this.key.length} Bytes'); throw KeyException('Invalid key length: ${this.key.length} Bytes');
} }
} }
/// This key is used for encryption and decryption.
Uint8List get key => this._key;
/// Check if the AES object is intialized with a valid key before perform any operation.
bool get isInitialized => this._isInitialized;
/// Defines the size of the generated or passed key.
KeySize get keySize => this._keySize;
/// [Private] /// [Private]
/// Tests if the key is valid. /// Tests if the key is valid.
/// ///
@ -66,34 +96,16 @@ class AES {
/// Generate an AES key. /// Generate an AES key.
/// ///
/// You can specify a `keySize`. Default is 256 bits. /// You have to specify a `keySize`.
/// Return `null` if the key is already set. /// Return `null` if the key is already set.
init({KeySize keySize}) async { init(KeySize keySize) async {
if (this.key != null) return null; if (this.key != null) return null;
int size;
this._keySize = keySize; this._keySize = keySize;
this._key = await KeyGenerator().secretKey(keySize: keySize);
switch (keySize) {
case KeySize.bits128:
size = 128;
break;
case KeySize.bits192:
size = 192;
break;
case KeySize.bits256:
size = 256;
break;
default:
// Default size = 256 bits
size = 256;
break;
}
this.key = await NativeCrypto().symKeygen(size);
try { try {
bool isValidKey = _testKey(); this._isInitialized = _testKey();
this._isInitialized = isValidKey;
} on KeyException { } on KeyException {
this._isInitialized = false; this._isInitialized = false;
throw KeyException('Invalid key length: ${this.key.length} Bytes'); throw KeyException('Invalid key length: ${this.key.length} Bytes');
@ -105,13 +117,17 @@ class AES {
/// Takes `Uint8List` data as parameter. /// Takes `Uint8List` data as parameter.
/// And returns an `Uint8List` **list**. /// And returns an `Uint8List` **list**.
/// ///
/// You can pass a different key.
///
/// The first member of this list is the `cipher data`, /// The first member of this list is the `cipher data`,
/// and the second member is the `IV`. /// and the second member is the `IV`.
Future<List<Uint8List>> encrypt(Uint8List data) async { Future<List<Uint8List>> encrypt(Uint8List data, {Uint8List key}) async {
if (!this._isInitialized) if (!this._isInitialized && key == null)
throw EncryptionException('Instance not initialized.'); throw EncryptionException(
'Instance not initialized. You can pass a key directly in encrypt method.');
List<Uint8List> encryptedPayload = List<Uint8List> encryptedPayload =
await NativeCrypto().symEncrypt(data, this.key); await NativeCrypto().symEncrypt(data, key ?? this.key);
return encryptedPayload; return encryptedPayload;
} }
@ -119,11 +135,14 @@ class AES {
/// ///
/// Takes `Uint8List` **list** as parameter. /// Takes `Uint8List` **list** as parameter.
/// And returns plain text data as `Uint8List`. /// And returns plain text data as `Uint8List`.
Future<Uint8List> decrypt(List<Uint8List> encryptedPayload) async { ///
if (!this._isInitialized) /// You can pass a different key.
throw DecryptionException('Instance not initialized.'); Future<Uint8List> decrypt(List<Uint8List> encryptedPayload, {Uint8List key}) async {
if (!this._isInitialized && key == null)
throw DecryptionException(
'Instance not initialized. You can pass a key directly in encrypt method.');
Uint8List decryptedPayload = Uint8List decryptedPayload =
await NativeCrypto().symDecrypt(encryptedPayload, this.key); await NativeCrypto().symDecrypt(encryptedPayload, key ?? this.key);
return decryptedPayload; return decryptedPayload;
} }
} }