refactor: change file organization
This commit is contained in:
parent
32106f549f
commit
70a6fda3ed
@ -3,7 +3,7 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: kdf_page.dart
|
// File: kdf_page.dart
|
||||||
// Created Date: 28/12/2021 13:40:34
|
// Created Date: 28/12/2021 13:40:34
|
||||||
// Last Modified: 28/12/2021 15:14:12
|
// Last Modified: 23/05/2022 22:49:06
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2021
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ class KdfPage extends ConsumerWidget {
|
|||||||
if (password.isEmpty) {
|
if (password.isEmpty) {
|
||||||
pbkdf2Status.print('Password is empty');
|
pbkdf2Status.print('Password is empty');
|
||||||
} else {
|
} else {
|
||||||
PBKDF2 _pbkdf2 = PBKDF2(32, 1000, algorithm: HashAlgorithm.sha512);
|
Pbkdf2 _pbkdf2 = Pbkdf2(32, 1000, algorithm: HashAlgorithm.sha512);
|
||||||
SecretKey sk = await _pbkdf2.derive(password: password, salt: 'salt');
|
SecretKey sk = await _pbkdf2.derive(password: password, salt: 'salt');
|
||||||
state.setKey(sk);
|
state.setKey(sk);
|
||||||
pbkdf2Status.print('Key successfully derived.');
|
pbkdf2Status.print('Key successfully derived.');
|
||||||
@ -59,14 +59,14 @@ class KdfPage extends ConsumerWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _hash(Hasher hasher) async {
|
Future<void> _hash(HashAlgorithm hasher) async {
|
||||||
final message = _messageTextController.text.trim();
|
final message = _messageTextController.text.trim();
|
||||||
if (message.isEmpty) {
|
if (message.isEmpty) {
|
||||||
hashStatus.print('Message is empty');
|
hashStatus.print('Message is empty');
|
||||||
} else {
|
} else {
|
||||||
Uint8List hash = await hasher.digest(message.toBytes());
|
Uint8List hash = await hasher.digest(message.toBytes());
|
||||||
hashStatus.print(
|
hashStatus.print(
|
||||||
'Message successfully hashed with ${hasher.algorithm} :${hash.toStr(to: Encoding.hex)}');
|
'Message successfully hashed with $hasher :${hash.toStr(to: Encoding.hex)}');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,15 +108,15 @@ class KdfPage extends ConsumerWidget {
|
|||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
children: [
|
children: [
|
||||||
Button(
|
Button(
|
||||||
() => _hash(SHA256()),
|
() => _hash(HashAlgorithm.sha256),
|
||||||
"SHA256",
|
"SHA256",
|
||||||
),
|
),
|
||||||
Button(
|
Button(
|
||||||
() => _hash(SHA384()),
|
() => _hash(HashAlgorithm.sha384),
|
||||||
"SHA384",
|
"SHA384",
|
||||||
),
|
),
|
||||||
Button(
|
Button(
|
||||||
() => _hash(SHA512()),
|
() => _hash(HashAlgorithm.sha512),
|
||||||
"SHA512",
|
"SHA512",
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -3,28 +3,27 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: native_crypto.dart
|
// File: native_crypto.dart
|
||||||
// Created Date: 16/12/2021 16:28:00
|
// Created Date: 16/12/2021 16:28:00
|
||||||
// Last Modified: 23/05/2022 21:43:54
|
// Last Modified: 23/05/2022 23:09:10
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2021
|
||||||
|
|
||||||
export 'src/byte_array.dart';
|
/// Fast and powerful cryptographic functions
|
||||||
export 'src/cipher.dart';
|
/// thanks to javax.crypto, CommonCrypto and CryptoKit.
|
||||||
export 'src/cipher_text.dart';
|
///
|
||||||
export 'src/ciphers/aes.dart';
|
/// Author: Hugo Pointcheval
|
||||||
export 'src/exceptions.dart';
|
library native_crypto;
|
||||||
export 'src/hasher.dart';
|
|
||||||
export 'src/hashers/sha256.dart';
|
|
||||||
export 'src/hashers/sha384.dart';
|
|
||||||
export 'src/hashers/sha512.dart';
|
|
||||||
export 'src/kdf/pbkdf2.dart';
|
|
||||||
export 'src/keyderivation.dart';
|
|
||||||
export 'src/keys/secret_key.dart';
|
|
||||||
export 'src/utils.dart';
|
|
||||||
|
|
||||||
const String version = '0.1.0';
|
export 'src/builders/builders.dart';
|
||||||
const String author = 'Hugo Pointcheval';
|
export 'src/ciphers/ciphers.dart';
|
||||||
const String website = 'https://hugo.pointcheval.fr/';
|
export 'src/core/core.dart';
|
||||||
const List<String> repositories = [
|
export 'src/interfaces/interfaces.dart';
|
||||||
'https://github.com/hugo-pcl/native-crypto-flutter',
|
export 'src/kdf/kdf.dart';
|
||||||
'https://git.pointcheval.fr/NativeCrypto/native-crypto-flutter'
|
export 'src/keys/keys.dart';
|
||||||
];
|
// Utils
|
||||||
|
export 'src/utils/cipher_algorithm.dart';
|
||||||
|
export 'src/utils/convert.dart';
|
||||||
|
export 'src/utils/hash_algorithm.dart';
|
||||||
|
export 'src/utils/kdf_algorithm.dart';
|
||||||
|
|
||||||
|
// ignore: constant_identifier_names
|
||||||
|
const String AUTHOR = 'Hugo Pointcheval';
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: aes_builder.dart
|
// File: aes_builder.dart
|
||||||
// Created Date: 28/12/2021 12:03:11
|
// Created Date: 28/12/2021 12:03:11
|
||||||
// Last Modified: 23/05/2022 21:46:33
|
// Last Modified: 23/05/2022 23:05:19
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2021
|
||||||
|
|
||||||
import 'package:native_crypto/src/builder.dart';
|
import 'package:native_crypto/src/ciphers/aes/aes.dart';
|
||||||
import 'package:native_crypto/src/ciphers/aes.dart';
|
import 'package:native_crypto/src/core/exceptions.dart';
|
||||||
import 'package:native_crypto/src/exceptions.dart';
|
import 'package:native_crypto/src/interfaces/builder.dart';
|
||||||
import 'package:native_crypto/src/keys/secret_key.dart';
|
import 'package:native_crypto/src/keys/secret_key.dart';
|
||||||
|
|
||||||
class AESBuilder implements Builder<AES> {
|
class AESBuilder implements Builder<AES> {
|
||||||
|
10
packages/native_crypto/lib/src/builders/builders.dart
Normal file
10
packages/native_crypto/lib/src/builders/builders.dart
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: builders.dart
|
||||||
|
// Created Date: 23/05/2022 22:56:03
|
||||||
|
// Last Modified: 23/05/2022 22:56:12
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
export 'aes_builder.dart';
|
@ -3,39 +3,26 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: aes.dart
|
// File: aes.dart
|
||||||
// Created Date: 16/12/2021 16:28:00
|
// Created Date: 16/12/2021 16:28:00
|
||||||
// Last Modified: 23/05/2022 21:47:08
|
// Last Modified: 23/05/2022 23:06:05
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2022
|
||||||
|
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:native_crypto/src/cipher.dart';
|
import 'package:native_crypto/src/ciphers/aes/aes_key_size.dart';
|
||||||
import 'package:native_crypto/src/cipher_text.dart';
|
import 'package:native_crypto/src/ciphers/aes/aes_mode.dart';
|
||||||
import 'package:native_crypto/src/exceptions.dart';
|
import 'package:native_crypto/src/ciphers/aes/aes_padding.dart';
|
||||||
|
import 'package:native_crypto/src/core/cipher_text.dart';
|
||||||
|
import 'package:native_crypto/src/core/cipher_text_list.dart';
|
||||||
|
import 'package:native_crypto/src/core/exceptions.dart';
|
||||||
|
import 'package:native_crypto/src/interfaces/cipher.dart';
|
||||||
import 'package:native_crypto/src/keys/secret_key.dart';
|
import 'package:native_crypto/src/keys/secret_key.dart';
|
||||||
import 'package:native_crypto/src/platform.dart';
|
import 'package:native_crypto/src/platform.dart';
|
||||||
import 'package:native_crypto/src/utils.dart';
|
import 'package:native_crypto/src/utils/cipher_algorithm.dart';
|
||||||
|
|
||||||
/// Defines the AES modes of operation.
|
export 'package:native_crypto/src/ciphers/aes/aes_key_size.dart';
|
||||||
enum AESMode { gcm }
|
export 'package:native_crypto/src/ciphers/aes/aes_mode.dart';
|
||||||
|
export 'package:native_crypto/src/ciphers/aes/aes_padding.dart';
|
||||||
/// Defines all available key sizes.
|
|
||||||
enum AESKeySize { bits128, bits192, bits256 }
|
|
||||||
|
|
||||||
/// Represents different paddings.
|
|
||||||
enum AESPadding { none }
|
|
||||||
|
|
||||||
extension AESKeySizeExtension on AESKeySize {
|
|
||||||
static final Map<AESKeySize, int> sizes = <AESKeySize, int>{
|
|
||||||
AESKeySize.bits128: 128,
|
|
||||||
AESKeySize.bits192: 192,
|
|
||||||
AESKeySize.bits256: 256,
|
|
||||||
};
|
|
||||||
static final List<int> supportedSizes = sizes.values.toList(growable: false);
|
|
||||||
int get length {
|
|
||||||
return sizes[this]!; // this is safe because `this` is listed in the enum
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class AES implements Cipher {
|
class AES implements Cipher {
|
||||||
final SecretKey key;
|
final SecretKey key;
|
||||||
@ -46,7 +33,7 @@ class AES implements Cipher {
|
|||||||
CipherAlgorithm get algorithm => CipherAlgorithm.aes;
|
CipherAlgorithm get algorithm => CipherAlgorithm.aes;
|
||||||
|
|
||||||
AES(this.key, this.mode, {this.padding = AESPadding.none}) {
|
AES(this.key, this.mode, {this.padding = AESPadding.none}) {
|
||||||
if (!AESKeySizeExtension.supportedSizes.contains(key.bytes.length * 8)) {
|
if (!AESKeySize.supportedSizes.contains(key.bytes.length * 8)) {
|
||||||
throw CipherInitException('Invalid key length!');
|
throw CipherInitException('Invalid key length!');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,7 +54,7 @@ class AES implements Cipher {
|
|||||||
final Uint8List d = await platform.decrypt(
|
final Uint8List d = await platform.decrypt(
|
||||||
ct.bytes,
|
ct.bytes,
|
||||||
key.bytes,
|
key.bytes,
|
||||||
Utils.enumToStr(algorithm),
|
algorithm.name,
|
||||||
) ??
|
) ??
|
||||||
Uint8List(0);
|
Uint8List(0);
|
||||||
decryptedData.add(d);
|
decryptedData.add(d);
|
||||||
@ -76,7 +63,7 @@ class AES implements Cipher {
|
|||||||
final Uint8List d = await platform.decrypt(
|
final Uint8List d = await platform.decrypt(
|
||||||
cipherText.bytes,
|
cipherText.bytes,
|
||||||
key.bytes,
|
key.bytes,
|
||||||
Utils.enumToStr(algorithm),
|
algorithm.name,
|
||||||
) ??
|
) ??
|
||||||
Uint8List(0);
|
Uint8List(0);
|
||||||
decryptedData.add(d);
|
decryptedData.add(d);
|
||||||
@ -102,7 +89,7 @@ class AES implements Cipher {
|
|||||||
final Uint8List c = await platform.encrypt(
|
final Uint8List c = await platform.encrypt(
|
||||||
dataToEncrypt,
|
dataToEncrypt,
|
||||||
key.bytes,
|
key.bytes,
|
||||||
Utils.enumToStr(algorithm),
|
algorithm.name,
|
||||||
) ??
|
) ??
|
||||||
Uint8List(0);
|
Uint8List(0);
|
||||||
cipherTextList.add(
|
cipherTextList.add(
|
||||||
@ -115,7 +102,7 @@ class AES implements Cipher {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
final Uint8List c =
|
final Uint8List c =
|
||||||
await platform.encrypt(data, key.bytes, Utils.enumToStr(algorithm)) ??
|
await platform.encrypt(data, key.bytes, algorithm.name) ??
|
||||||
Uint8List(0);
|
Uint8List(0);
|
||||||
|
|
||||||
return CipherText(
|
return CipherText(
|
22
packages/native_crypto/lib/src/ciphers/aes/aes_key_size.dart
Normal file
22
packages/native_crypto/lib/src/ciphers/aes/aes_key_size.dart
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: aes_key_size.dart
|
||||||
|
// Created Date: 23/05/2022 22:10:07
|
||||||
|
// Last Modified: 23/05/2022 22:33:32
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
/// Defines all available key sizes.
|
||||||
|
enum AESKeySize {
|
||||||
|
bits128(128),
|
||||||
|
bits192(192),
|
||||||
|
bits256(256);
|
||||||
|
|
||||||
|
static final List<int> supportedSizes = [128, 192, 256];
|
||||||
|
|
||||||
|
final int bits;
|
||||||
|
int get bytes => bits ~/ 8;
|
||||||
|
|
||||||
|
const AESKeySize(this.bits);
|
||||||
|
}
|
11
packages/native_crypto/lib/src/ciphers/aes/aes_mode.dart
Normal file
11
packages/native_crypto/lib/src/ciphers/aes/aes_mode.dart
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: aes_mode.dart
|
||||||
|
// Created Date: 23/05/2022 22:09:16
|
||||||
|
// Last Modified: 23/05/2022 22:10:31
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
/// Defines the AES modes of operation.
|
||||||
|
enum AESMode { gcm }
|
11
packages/native_crypto/lib/src/ciphers/aes/aes_padding.dart
Normal file
11
packages/native_crypto/lib/src/ciphers/aes/aes_padding.dart
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: aes_padding.dart
|
||||||
|
// Created Date: 23/05/2022 22:10:17
|
||||||
|
// Last Modified: 23/05/2022 22:13:28
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
/// Represents different paddings.
|
||||||
|
enum AESPadding { none }
|
10
packages/native_crypto/lib/src/ciphers/ciphers.dart
Normal file
10
packages/native_crypto/lib/src/ciphers/ciphers.dart
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: ciphers.dart
|
||||||
|
// Created Date: 23/05/2022 22:56:30
|
||||||
|
// Last Modified: 23/05/2022 22:56:47
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
export 'aes/aes.dart';
|
@ -3,13 +3,13 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: cipher_text.dart
|
// File: cipher_text.dart
|
||||||
// Created Date: 16/12/2021 16:59:53
|
// Created Date: 16/12/2021 16:59:53
|
||||||
// Last Modified: 23/05/2022 21:48:27
|
// Last Modified: 23/05/2022 23:02:10
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2021
|
||||||
|
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:native_crypto/src/byte_array.dart';
|
import 'package:native_crypto/src/interfaces/byte_array.dart';
|
||||||
|
|
||||||
class CipherText extends ByteArray {
|
class CipherText extends ByteArray {
|
||||||
final int _ivLength;
|
final int _ivLength;
|
||||||
@ -43,18 +43,3 @@ class CipherText extends ByteArray {
|
|||||||
/// Gets the CipherText tag length.
|
/// Gets the CipherText tag length.
|
||||||
int get tagLength => _tagLength;
|
int get tagLength => _tagLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
class CipherTextList extends CipherText {
|
|
||||||
static const int chunkSize = 33554432;
|
|
||||||
final List<CipherText> _list;
|
|
||||||
|
|
||||||
CipherTextList()
|
|
||||||
: _list = [],
|
|
||||||
super(Uint8List(0), Uint8List(0), Uint8List(0));
|
|
||||||
|
|
||||||
void add(CipherText cipherText) {
|
|
||||||
_list.add(cipherText);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<CipherText> get list => _list;
|
|
||||||
}
|
|
27
packages/native_crypto/lib/src/core/cipher_text_list.dart
Normal file
27
packages/native_crypto/lib/src/core/cipher_text_list.dart
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: cipher_text_list.dart
|
||||||
|
// Created Date: 23/05/2022 22:59:02
|
||||||
|
// Last Modified: 23/05/2022 23:05:02
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
import 'dart:typed_data';
|
||||||
|
|
||||||
|
import 'package:native_crypto/src/core/cipher_text.dart';
|
||||||
|
|
||||||
|
class CipherTextList extends CipherText {
|
||||||
|
static const int chunkSize = 33554432;
|
||||||
|
final List<CipherText> _list;
|
||||||
|
|
||||||
|
CipherTextList()
|
||||||
|
: _list = [],
|
||||||
|
super(Uint8List(0), Uint8List(0), Uint8List(0));
|
||||||
|
|
||||||
|
void add(CipherText cipherText) {
|
||||||
|
_list.add(cipherText);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<CipherText> get list => _list;
|
||||||
|
}
|
12
packages/native_crypto/lib/src/core/core.dart
Normal file
12
packages/native_crypto/lib/src/core/core.dart
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: core.dart
|
||||||
|
// Created Date: 23/05/2022 23:05:26
|
||||||
|
// Last Modified: 23/05/2022 23:05:30
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
export 'cipher_text.dart';
|
||||||
|
export 'cipher_text_list.dart';
|
||||||
|
export 'exceptions.dart';
|
@ -3,7 +3,7 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: exceptions.dart
|
// File: exceptions.dart
|
||||||
// Created Date: 16/12/2021 16:28:00
|
// Created Date: 16/12/2021 16:28:00
|
||||||
// Last Modified: 23/05/2022 21:51:55
|
// Last Modified: 23/05/2022 22:30:27
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2021
|
||||||
|
|
||||||
@ -13,29 +13,29 @@ class NativeCryptoException implements Exception {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class UtilsException extends NativeCryptoException {
|
class UtilsException extends NativeCryptoException {
|
||||||
UtilsException(String message) : super(message);
|
UtilsException(super.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
class KeyException extends NativeCryptoException {
|
class KeyException extends NativeCryptoException {
|
||||||
KeyException(String message) : super(message);
|
KeyException(super.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
class KeyDerivationException extends NativeCryptoException {
|
class KeyDerivationException extends NativeCryptoException {
|
||||||
KeyDerivationException(String message) : super(message);
|
KeyDerivationException(super.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
class CipherInitException extends NativeCryptoException {
|
class CipherInitException extends NativeCryptoException {
|
||||||
CipherInitException(String message) : super(message);
|
CipherInitException(super.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
class EncryptionException extends NativeCryptoException {
|
class EncryptionException extends NativeCryptoException {
|
||||||
EncryptionException(String message) : super(message);
|
EncryptionException(super.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
class DecryptionException extends NativeCryptoException {
|
class DecryptionException extends NativeCryptoException {
|
||||||
DecryptionException(String message) : super(message);
|
DecryptionException(super.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
class NotImplementedException extends NativeCryptoException {
|
class NotImplementedException extends NativeCryptoException {
|
||||||
NotImplementedException(String message) : super(message);
|
NotImplementedException(super.message);
|
||||||
}
|
}
|
@ -1,29 +0,0 @@
|
|||||||
// Author: Hugo Pointcheval
|
|
||||||
// Email: git@pcl.ovh
|
|
||||||
// -----
|
|
||||||
// File: hasher.dart
|
|
||||||
// Created Date: 16/12/2021 16:28:00
|
|
||||||
// Last Modified: 27/12/2021 22:06:29
|
|
||||||
// -----
|
|
||||||
// Copyright (c) 2021
|
|
||||||
|
|
||||||
import 'dart:typed_data';
|
|
||||||
|
|
||||||
import 'platform.dart';
|
|
||||||
import 'utils.dart';
|
|
||||||
|
|
||||||
enum HashAlgorithm { sha256, sha384, sha512 }
|
|
||||||
|
|
||||||
abstract class Hasher {
|
|
||||||
/// Returns the standard algorithm name for this digest
|
|
||||||
HashAlgorithm get algorithm;
|
|
||||||
|
|
||||||
/// Hashes a message
|
|
||||||
Future<Uint8List> digest(Uint8List data) async {
|
|
||||||
Uint8List hash =
|
|
||||||
(await platform.digest(data, Utils.enumToStr(algorithm))) ??
|
|
||||||
Uint8List(0);
|
|
||||||
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
// Author: Hugo Pointcheval
|
|
||||||
// Email: git@pcl.ovh
|
|
||||||
// -----
|
|
||||||
// File: sha256.dart
|
|
||||||
// Created Date: 17/12/2021 11:31:20
|
|
||||||
// Last Modified: 23/05/2022 21:47:23
|
|
||||||
// -----
|
|
||||||
// Copyright (c) 2021
|
|
||||||
|
|
||||||
import 'package:native_crypto/src/hasher.dart';
|
|
||||||
|
|
||||||
class SHA256 extends Hasher {
|
|
||||||
@override
|
|
||||||
HashAlgorithm get algorithm => HashAlgorithm.sha256;
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
// Author: Hugo Pointcheval
|
|
||||||
// Email: git@pcl.ovh
|
|
||||||
// -----
|
|
||||||
// File: sha384.dart
|
|
||||||
// Created Date: 17/12/2021 11:31:53
|
|
||||||
// Last Modified: 23/05/2022 21:47:28
|
|
||||||
// -----
|
|
||||||
// Copyright (c) 2021
|
|
||||||
|
|
||||||
import 'package:native_crypto/src/hasher.dart';
|
|
||||||
|
|
||||||
class SHA384 extends Hasher {
|
|
||||||
@override
|
|
||||||
HashAlgorithm get algorithm => HashAlgorithm.sha384;
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
// Author: Hugo Pointcheval
|
|
||||||
// Email: git@pcl.ovh
|
|
||||||
// -----
|
|
||||||
// File: sha512.dart
|
|
||||||
// Created Date: 17/12/2021 11:32:14
|
|
||||||
// Last Modified: 23/05/2022 21:47:35
|
|
||||||
// -----
|
|
||||||
// Copyright (c) 2021
|
|
||||||
|
|
||||||
import 'package:native_crypto/src/hasher.dart';
|
|
||||||
|
|
||||||
class SHA512 extends Hasher {
|
|
||||||
@override
|
|
||||||
HashAlgorithm get algorithm => HashAlgorithm.sha512;
|
|
||||||
}
|
|
@ -3,10 +3,12 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: builder.dart
|
// File: builder.dart
|
||||||
// Created Date: 28/12/2021 12:02:34
|
// Created Date: 28/12/2021 12:02:34
|
||||||
// Last Modified: 28/12/2021 12:32:12
|
// Last Modified: 23/05/2022 22:38:44
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2021
|
||||||
|
|
||||||
|
// ignore_for_file: one_member_abstracts
|
||||||
|
|
||||||
abstract class Builder<T> {
|
abstract class Builder<T> {
|
||||||
Future<T> build();
|
Future<T> build();
|
||||||
}
|
}
|
@ -3,23 +3,25 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: byte_array.dart
|
// File: byte_array.dart
|
||||||
// Created Date: 16/12/2021 17:54:16
|
// Created Date: 16/12/2021 17:54:16
|
||||||
// Last Modified: 23/05/2022 21:44:38
|
// Last Modified: 23/05/2022 23:07:03
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2021
|
||||||
|
|
||||||
import 'dart:convert' as convert;
|
import 'dart:convert' as convert;
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:native_crypto/src/utils.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:native_crypto/src/utils/convert.dart';
|
||||||
|
|
||||||
class ByteArray {
|
@immutable
|
||||||
Uint8List _bytes;
|
abstract class ByteArray {
|
||||||
|
final Uint8List _bytes;
|
||||||
|
|
||||||
ByteArray(this._bytes);
|
const ByteArray(this._bytes);
|
||||||
|
|
||||||
/// Creates an ByteArray object from a hexdecimal string.
|
/// Creates an ByteArray object from a hexdecimal string.
|
||||||
ByteArray.fromBase16(String encoded)
|
ByteArray.fromBase16(String encoded)
|
||||||
: _bytes = Utils.decodeHexString(encoded);
|
: _bytes = Convert.decodeHexString(encoded);
|
||||||
|
|
||||||
/// Creates an ByteArray object from a Base64 string.
|
/// Creates an ByteArray object from a Base64 string.
|
||||||
ByteArray.fromBase64(String encoded)
|
ByteArray.fromBase64(String encoded)
|
||||||
@ -36,9 +38,6 @@ class ByteArray {
|
|||||||
// ignore: unnecessary_getters_setters
|
// ignore: unnecessary_getters_setters
|
||||||
Uint8List get bytes => _bytes;
|
Uint8List get bytes => _bytes;
|
||||||
|
|
||||||
/// Sets the ByteArray bytes.
|
|
||||||
set bytes(Uint8List value) => _bytes = value;
|
|
||||||
|
|
||||||
/// Gets the ByteArray bytes as a Hexadecimal representation.
|
/// Gets the ByteArray bytes as a Hexadecimal representation.
|
||||||
String get base16 =>
|
String get base16 =>
|
||||||
_bytes.map((byte) => byte.toRadixString(16).padLeft(2, '0')).join();
|
_bytes.map((byte) => byte.toRadixString(16).padLeft(2, '0')).join();
|
@ -3,16 +3,14 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: cipher.dart
|
// File: cipher.dart
|
||||||
// Created Date: 16/12/2021 16:28:00
|
// Created Date: 16/12/2021 16:28:00
|
||||||
// Last Modified: 28/12/2021 12:25:38
|
// Last Modified: 23/05/2022 23:06:20
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2021
|
||||||
|
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'cipher_text.dart';
|
import 'package:native_crypto/src/core/cipher_text.dart';
|
||||||
|
import 'package:native_crypto/src/utils/cipher_algorithm.dart';
|
||||||
/// Represents different cipher algorithms
|
|
||||||
enum CipherAlgorithm { aes, rsa }
|
|
||||||
|
|
||||||
/// Represents a cipher.
|
/// Represents a cipher.
|
||||||
///
|
///
|
14
packages/native_crypto/lib/src/interfaces/interfaces.dart
Normal file
14
packages/native_crypto/lib/src/interfaces/interfaces.dart
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: interfaces.dart
|
||||||
|
// Created Date: 23/05/2022 23:03:47
|
||||||
|
// Last Modified: 23/05/2022 23:10:15
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
export 'builder.dart';
|
||||||
|
export 'byte_array.dart';
|
||||||
|
export 'cipher.dart';
|
||||||
|
// export 'key.dart';
|
||||||
|
export 'keyderivation.dart';
|
18
packages/native_crypto/lib/src/interfaces/key.dart
Normal file
18
packages/native_crypto/lib/src/interfaces/key.dart
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: key.dart
|
||||||
|
// Created Date: 16/12/2021 16:28:00
|
||||||
|
// Last Modified: 23/05/2022 23:02:10
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2021
|
||||||
|
|
||||||
|
import 'package:native_crypto/src/interfaces/byte_array.dart';
|
||||||
|
|
||||||
|
/// A class representing a key.
|
||||||
|
abstract class Key extends ByteArray {
|
||||||
|
const Key(super.bytes);
|
||||||
|
Key.fromBase16(super.encoded) : super.fromBase16();
|
||||||
|
Key.fromBase64(super.encoded) : super.fromBase64();
|
||||||
|
Key.fromUtf8(super.input) : super.fromUtf8();
|
||||||
|
}
|
@ -3,13 +3,12 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: kdf.dart
|
// File: kdf.dart
|
||||||
// Created Date: 18/12/2021 11:56:43
|
// Created Date: 18/12/2021 11:56:43
|
||||||
// Last Modified: 28/12/2021 13:38:02
|
// Last Modified: 23/05/2022 22:37:04
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2021
|
||||||
|
|
||||||
import './keys/secret_key.dart';
|
import 'package:native_crypto/src/keys/secret_key.dart';
|
||||||
|
import 'package:native_crypto/src/utils/kdf_algorithm.dart';
|
||||||
enum KdfAlgorithm { pbkdf2 }
|
|
||||||
|
|
||||||
/// Represents a Key Derivation Function
|
/// Represents a Key Derivation Function
|
||||||
abstract class KeyDerivation {
|
abstract class KeyDerivation {
|
10
packages/native_crypto/lib/src/kdf/kdf.dart
Normal file
10
packages/native_crypto/lib/src/kdf/kdf.dart
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: kdf.dart
|
||||||
|
// Created Date: 23/05/2022 22:57:11
|
||||||
|
// Last Modified: 23/05/2022 23:04:15
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
export 'pbkdf2.dart';
|
@ -3,20 +3,20 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: pbkdf2.dart
|
// File: pbkdf2.dart
|
||||||
// Created Date: 17/12/2021 14:50:42
|
// Created Date: 17/12/2021 14:50:42
|
||||||
// Last Modified: 23/05/2022 21:47:43
|
// Last Modified: 23/05/2022 23:07:19
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2021
|
||||||
|
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:native_crypto/src/exceptions.dart';
|
import 'package:native_crypto/src/core/exceptions.dart';
|
||||||
import 'package:native_crypto/src/hasher.dart';
|
import 'package:native_crypto/src/interfaces/keyderivation.dart';
|
||||||
import 'package:native_crypto/src/keyderivation.dart';
|
|
||||||
import 'package:native_crypto/src/keys/secret_key.dart';
|
import 'package:native_crypto/src/keys/secret_key.dart';
|
||||||
import 'package:native_crypto/src/platform.dart';
|
import 'package:native_crypto/src/platform.dart';
|
||||||
import 'package:native_crypto/src/utils.dart';
|
import 'package:native_crypto/src/utils/hash_algorithm.dart';
|
||||||
|
import 'package:native_crypto/src/utils/kdf_algorithm.dart';
|
||||||
|
|
||||||
class PBKDF2 extends KeyDerivation {
|
class Pbkdf2 extends KeyDerivation {
|
||||||
final int _keyBytesCount;
|
final int _keyBytesCount;
|
||||||
final int _iterations;
|
final int _iterations;
|
||||||
final HashAlgorithm _hash;
|
final HashAlgorithm _hash;
|
||||||
@ -24,7 +24,7 @@ class PBKDF2 extends KeyDerivation {
|
|||||||
@override
|
@override
|
||||||
KdfAlgorithm get algorithm => KdfAlgorithm.pbkdf2;
|
KdfAlgorithm get algorithm => KdfAlgorithm.pbkdf2;
|
||||||
|
|
||||||
PBKDF2(
|
Pbkdf2(
|
||||||
int keyBytesCount,
|
int keyBytesCount,
|
||||||
int iterations, {
|
int iterations, {
|
||||||
HashAlgorithm algorithm = HashAlgorithm.sha256,
|
HashAlgorithm algorithm = HashAlgorithm.sha256,
|
||||||
@ -43,7 +43,7 @@ class PBKDF2 extends KeyDerivation {
|
|||||||
salt,
|
salt,
|
||||||
_keyBytesCount,
|
_keyBytesCount,
|
||||||
_iterations,
|
_iterations,
|
||||||
Utils.enumToStr(_hash),
|
_hash.name,
|
||||||
)) ??
|
)) ??
|
||||||
Uint8List(0);
|
Uint8List(0);
|
||||||
|
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
// Author: Hugo Pointcheval
|
|
||||||
// Email: git@pcl.ovh
|
|
||||||
// -----
|
|
||||||
// File: key.dart
|
|
||||||
// Created Date: 16/12/2021 16:28:00
|
|
||||||
// Last Modified: 28/12/2021 13:37:50
|
|
||||||
// -----
|
|
||||||
// Copyright (c) 2021
|
|
||||||
|
|
||||||
import 'dart:typed_data';
|
|
||||||
|
|
||||||
import 'byte_array.dart';
|
|
||||||
|
|
||||||
/// A class representing a key.
|
|
||||||
class Key extends ByteArray {
|
|
||||||
Key(Uint8List bytes) : super(bytes);
|
|
||||||
Key.fromBase16(String encoded) : super.fromBase16(encoded);
|
|
||||||
Key.fromBase64(String encoded) : super.fromBase64(encoded);
|
|
||||||
Key.fromUtf8(String input) : super.fromUtf8(input);
|
|
||||||
}
|
|
10
packages/native_crypto/lib/src/keys/keys.dart
Normal file
10
packages/native_crypto/lib/src/keys/keys.dart
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: keys.dart
|
||||||
|
// Created Date: 23/05/2022 23:04:04
|
||||||
|
// Last Modified: 23/05/2022 23:04:07
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
export 'secret_key.dart';
|
@ -3,26 +3,25 @@
|
|||||||
// -----
|
// -----
|
||||||
// File: secret_key.dart
|
// File: secret_key.dart
|
||||||
// Created Date: 28/12/2021 13:36:54
|
// Created Date: 28/12/2021 13:36:54
|
||||||
// Last Modified: 23/05/2022 21:52:05
|
// Last Modified: 23/05/2022 23:07:28
|
||||||
// -----
|
// -----
|
||||||
// Copyright (c) 2021
|
// Copyright (c) 2021
|
||||||
|
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:native_crypto/src/core/exceptions.dart';
|
||||||
import 'package:native_crypto/src/exceptions.dart';
|
import 'package:native_crypto/src/interfaces/key.dart';
|
||||||
import 'package:native_crypto/src/key.dart';
|
|
||||||
import 'package:native_crypto/src/platform.dart';
|
import 'package:native_crypto/src/platform.dart';
|
||||||
|
|
||||||
/// A class representing a secret key.
|
/// A class representing a secret key.
|
||||||
/// A secret key is a key that is not accessible by anyone else.
|
/// A secret key is a key that is not accessible by anyone else.
|
||||||
/// It is used to encrypt and decrypt data.
|
/// It is used to encrypt and decrypt data.
|
||||||
class SecretKey extends Key {
|
class SecretKey extends Key {
|
||||||
SecretKey(Uint8List bytes) : super(bytes);
|
const SecretKey(super.bytes);
|
||||||
SecretKey.fromBase16(String encoded) : super.fromBase16(encoded);
|
SecretKey.fromBase16(super.encoded) : super.fromBase16();
|
||||||
SecretKey.fromBase64(String encoded) : super.fromBase64(encoded);
|
SecretKey.fromBase64(super.encoded) : super.fromBase64();
|
||||||
SecretKey.fromUtf8(String input) : super.fromUtf8(input);
|
SecretKey.fromUtf8(super.input) : super.fromUtf8();
|
||||||
|
|
||||||
static Future<SecretKey> fromSecureRandom(int bitsCount) async {
|
static Future<SecretKey> fromSecureRandom(int bitsCount) async {
|
||||||
try {
|
try {
|
||||||
|
@ -1,92 +0,0 @@
|
|||||||
// Author: Hugo Pointcheval
|
|
||||||
// Email: git@pcl.ovh
|
|
||||||
// -----
|
|
||||||
// File: utils.dart
|
|
||||||
// Created Date: 16/12/2021 16:28:00
|
|
||||||
// Last Modified: 23/05/2022 21:45:56
|
|
||||||
// -----
|
|
||||||
// Copyright (c) 2021
|
|
||||||
|
|
||||||
import 'dart:typed_data';
|
|
||||||
|
|
||||||
import 'package:native_crypto/src/cipher.dart';
|
|
||||||
import 'package:native_crypto/src/exceptions.dart';
|
|
||||||
import 'package:native_crypto/src/hasher.dart';
|
|
||||||
import 'package:native_crypto/src/keyderivation.dart';
|
|
||||||
|
|
||||||
class Utils {
|
|
||||||
/// Returns enum value to string, without the enum name
|
|
||||||
static String enumToStr(dynamic enumValue) {
|
|
||||||
return enumValue.toString().split('.').last;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns enum list as string list
|
|
||||||
static List<String> enumToList<T>(List<T> enumValues) {
|
|
||||||
final List<String> _res = [];
|
|
||||||
for (final T enumValue in enumValues) {
|
|
||||||
_res.add(enumToStr(enumValue));
|
|
||||||
}
|
|
||||||
|
|
||||||
return _res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns enum from string
|
|
||||||
static T strToEnum<T>(String str, List<T> enumValues) {
|
|
||||||
for (final T enumValue in enumValues) {
|
|
||||||
if (enumToStr(enumValue) == str) {
|
|
||||||
return enumValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw UtilsException('Invalid enum value: $str');
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns [HashAlgorithm] from his name.
|
|
||||||
static HashAlgorithm getHashAlgorithm(String algorithm) {
|
|
||||||
return strToEnum<HashAlgorithm>(
|
|
||||||
algorithm.toLowerCase(),
|
|
||||||
HashAlgorithm.values,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns all available [HashAlgorithm] as String list
|
|
||||||
static List<String> getAvailableHashAlgorithms() {
|
|
||||||
return enumToList<HashAlgorithm>(HashAlgorithm.values);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns [KdfAlgorithm] from his name.
|
|
||||||
static KdfAlgorithm getKdfAlgorithm(String algorithm) {
|
|
||||||
return strToEnum<KdfAlgorithm>(
|
|
||||||
algorithm.toLowerCase(),
|
|
||||||
KdfAlgorithm.values,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns all available [KdfAlgorithm] as String list
|
|
||||||
static List<String> getAvailableKdfAlgorithms() {
|
|
||||||
return enumToList<KdfAlgorithm>(KdfAlgorithm.values);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns [CipherAlgorithm] from his name.
|
|
||||||
static CipherAlgorithm getCipherAlgorithm(String algorithm) {
|
|
||||||
return strToEnum<CipherAlgorithm>(
|
|
||||||
algorithm.toLowerCase(),
|
|
||||||
CipherAlgorithm.values,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns all available [CipherAlgorithm] as String list
|
|
||||||
static List<String> getAvailableCipherAlgorithms() {
|
|
||||||
return enumToList<CipherAlgorithm>(CipherAlgorithm.values);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Uint8List decodeHexString(String input) {
|
|
||||||
assert(input.length.isEven, 'Input needs to be an even length.');
|
|
||||||
|
|
||||||
return Uint8List.fromList(
|
|
||||||
List.generate(
|
|
||||||
input.length ~/ 2,
|
|
||||||
(i) => int.parse(input.substring(i * 2, (i * 2) + 2), radix: 16),
|
|
||||||
).toList(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
11
packages/native_crypto/lib/src/utils/cipher_algorithm.dart
Normal file
11
packages/native_crypto/lib/src/utils/cipher_algorithm.dart
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: cipher_algorithm.dart
|
||||||
|
// Created Date: 23/05/2022 22:07:54
|
||||||
|
// Last Modified: 23/05/2022 22:33:56
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
/// Represents different cipher algorithms
|
||||||
|
enum CipherAlgorithm { aes, rsa }
|
23
packages/native_crypto/lib/src/utils/convert.dart
Normal file
23
packages/native_crypto/lib/src/utils/convert.dart
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: convert.dart
|
||||||
|
// Created Date: 16/12/2021 16:28:00
|
||||||
|
// Last Modified: 23/05/2022 22:39:19
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2021
|
||||||
|
|
||||||
|
import 'dart:typed_data';
|
||||||
|
|
||||||
|
abstract class Convert {
|
||||||
|
static Uint8List decodeHexString(String input) {
|
||||||
|
assert(input.length.isEven, 'Input needs to be an even length.');
|
||||||
|
|
||||||
|
return Uint8List.fromList(
|
||||||
|
List.generate(
|
||||||
|
input.length ~/ 2,
|
||||||
|
(i) => int.parse(input.substring(i * 2, (i * 2) + 2), radix: 16),
|
||||||
|
).toList(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
25
packages/native_crypto/lib/src/utils/hash_algorithm.dart
Normal file
25
packages/native_crypto/lib/src/utils/hash_algorithm.dart
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: hash_algorithm.dart
|
||||||
|
// Created Date: 23/05/2022 22:01:59
|
||||||
|
// Last Modified: 23/05/2022 22:47:08
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
import 'dart:typed_data';
|
||||||
|
|
||||||
|
import 'package:native_crypto/src/platform.dart';
|
||||||
|
|
||||||
|
enum HashAlgorithm {
|
||||||
|
sha256,
|
||||||
|
sha384,
|
||||||
|
sha512;
|
||||||
|
|
||||||
|
/// Hashes a message
|
||||||
|
Future<Uint8List> digest(Uint8List data) async {
|
||||||
|
final Uint8List hash = (await platform.digest(data, name)) ?? Uint8List(0);
|
||||||
|
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
}
|
10
packages/native_crypto/lib/src/utils/kdf_algorithm.dart
Normal file
10
packages/native_crypto/lib/src/utils/kdf_algorithm.dart
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Author: Hugo Pointcheval
|
||||||
|
// Email: git@pcl.ovh
|
||||||
|
// -----
|
||||||
|
// File: kdf_algorithm.dart
|
||||||
|
// Created Date: 23/05/2022 22:36:24
|
||||||
|
// Last Modified: 23/05/2022 22:36:36
|
||||||
|
// -----
|
||||||
|
// Copyright (c) 2022
|
||||||
|
|
||||||
|
enum KdfAlgorithm { pbkdf2 }
|
@ -5,7 +5,7 @@ version: 0.1.0
|
|||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.15.0 <3.0.0"
|
sdk: ">=2.17.0 <3.0.0"
|
||||||
flutter: ">=2.5.0"
|
flutter: ">=2.5.0"
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user