Add cipher related interfaces
This commit is contained in:
parent
aaa68278d2
commit
3066b56450
86
lib/src/cipher.dart
Normal file
86
lib/src/cipher.dart
Normal file
@ -0,0 +1,86 @@
|
||||
// Copyright (c) 2020
|
||||
// Author: Hugo Pointcheval
|
||||
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'key.dart';
|
||||
|
||||
/// Represents different block cipher modes
|
||||
enum BlockCipherMode { ECB, CBC, CFB, GCM, CGM }
|
||||
|
||||
/// Represents different padding
|
||||
enum Padding { ANSI_X923, PKCS5, PKCS7, None }
|
||||
|
||||
/// Represents a cipher.
|
||||
///
|
||||
/// In cryptography, a cipher is an algorithm for performing encryption
|
||||
/// or decryption - a series of well-defined steps that can
|
||||
/// be followed as a procedure.
|
||||
abstract class Cipher {
|
||||
/// Returns the standard algorithm name for this cipher
|
||||
String get algorithm;
|
||||
|
||||
/// Returns the secret key used for this cipher
|
||||
SecretKey get secretKey;
|
||||
|
||||
/// Returns the parameters used for this cipher
|
||||
CipherParameters get parameters;
|
||||
|
||||
/// Returns true if cipher is initialized
|
||||
bool get isInitialized;
|
||||
|
||||
/// Encrypts data.
|
||||
///
|
||||
/// Takes [Uint8List] data as parameter.
|
||||
/// Returns a [CipherText].
|
||||
Future<CipherText> encrypt(Uint8List data);
|
||||
|
||||
/// Decrypts cipher text.
|
||||
///
|
||||
/// Takes [CipherText] as parameter.
|
||||
/// And returns plain text data as [Uint8List].
|
||||
Future<Uint8List> decrypt(CipherText cipherText);
|
||||
}
|
||||
|
||||
/// Represents a cipher text.
|
||||
///
|
||||
/// It's the result of an encryption.
|
||||
abstract class CipherText {
|
||||
/// Returns the standard algorithm name used for this ciphertext
|
||||
String get algorithm;
|
||||
|
||||
/// Returns the data of this ciphertext
|
||||
Uint8List get bytes;
|
||||
|
||||
/// Returns the IV of this cipertext
|
||||
Uint8List get iv;
|
||||
}
|
||||
|
||||
/// Represents a pair of [BlockCipherMode] and [Padding]
|
||||
class CipherParameters {
|
||||
BlockCipherMode _mode;
|
||||
Padding _padding;
|
||||
|
||||
/// Returns mode used in the cipher
|
||||
BlockCipherMode get mode => _mode;
|
||||
|
||||
/// Returns padding used in the cipher
|
||||
Padding get padding => _padding;
|
||||
|
||||
CipherParameters(BlockCipherMode mode, Padding padding) {
|
||||
_mode = mode;
|
||||
_padding = padding;
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object o) {
|
||||
if (identical(this, o)) return true;
|
||||
|
||||
return o is CipherParameters &&
|
||||
o._mode.index == _mode.index &&
|
||||
o._padding.index == _padding.index;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => _mode.hashCode ^ _padding.hashCode;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user