AesCtr class abstract

AES-CTR (counter mode) Cipher.

Available implementation

  • In browsers, BrowserAesCtr is used by default.
  • Otherwise DartAesCtr is used by default.
  • The package cryptography_flutter supports native implementations available in Android and iOS.

About the algorithm

  • Three possible key lengths:
  • Nonce length is 12 bytes by default. That means 4 bytes is used for block counter.
    • Because block is 16 bytes, maximum message size is 32 GB with a single nonce.
    • You can choose another nonce length in the constructor if you need to.
  • You must choose some macAlgorithm. If you are sure that you don't need one, use MacAlgorithm.empty.

Example

import 'package:better_cryptography/better_cryptography.dart';

Future<void> main() async {
  final message = <int>[1,2,3];

  // AES-CTR with 128 bit keys and HMAC-SHA256 authentication.
  final algorithm = AesCtr.with128bits(
    macAlgorithm: Hmac.sha256(),
  );
  final secretKey = await algorithm.newSecretKey();
  final nonce = algorithm.newNonce();

  // Encrypt
  final secretBox = await algorithm.encrypt(
    message,
    secretKey: secretKey,
  );
  print('Nonce: ${secretBox.nonce}')
  print('Ciphertext: ${secretBox.cipherText}')
  print('MAC: ${secretBox.mac.bytes}')

  // Decrypt
  final clearText = await algorithm.encrypt(
    secretBox,
    secretKey: secretKey,
  );
  print('Cleartext: $clearText');
}
Inheritance
Implementers

Constructors

AesCtr.constructor()
Constructor for classes that extend this class.
const
AesCtr.with128bits({required MacAlgorithm macAlgorithm})
factory
AesCtr.with192bits({required MacAlgorithm macAlgorithm})
factory
AesCtr.with256bits({required MacAlgorithm macAlgorithm})
factory

Properties

counterBits int
Number of bits occupied by the counter.
no setter
hashCode int
The hash code for this object.
no setteroverride
macAlgorithm MacAlgorithm
Message authentication code (MacAlgorithm) used by the cipher.
no setterinherited
nonceLength int
Number of bytes in the nonce ("Initialization Vector", "IV", "salt").
no setteroverride
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
secretKeyLength int
Number of bytes in the SecretKey.
no setterinherited

Methods

decrypt(SecretBox secretBox, {required SecretKey secretKey, List<int> aad = const <int>[], int keyStreamIndex = 0}) Future<List<int>>
Decrypts a ciphertext.
inherited
encrypt(List<int> clearText, {required SecretKey secretKey, List<int>? nonce, List<int> aad = const <int>[], int keyStreamIndex = 0}) Future<SecretBox>
Encrypts a cleartext.
inherited
newNonce() List<int>
Generates a new nonce with the correct length (nonceLength).
inherited
newSecretKey() Future<SecretKey>
Generates a new SecretKey with the correct length (secretKeyLength).
inherited
newSecretKeyFromBytes(List<int> bytes) Future<SecretKey>
Constructs a new SecretKey from the bytes.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() String
A string representation of this object.
override

Operators

operator ==(Object other) bool
The equality operator.
override