rusty_chacha 0.7.2 copy "rusty_chacha: ^0.7.2" to clipboard
rusty_chacha: ^0.7.2 copied to clipboard

A Flutter library for fast ChaCha20-Poly1305 encryption, powered by Rust

Build Status Github Stars MIT License

Rusty ChaCha Banner

Rusty ChaCha 💃🦀 #

A Flutter library for fast ChaCha20-Poly1305 encryption, leveraging the capabilities of the Rust chacha20poly1305 crate.

🚧 Under Development: Not recommended for production use yet. 🚧


Features #

Blazingly fast 🔥 #

Thanks to Rust encryption and decryption with ChaCha20-Poly1305 run at 500-1000 MiB/s. This is up to 50x faster than packages like cryptography_flutter or pointycastle.

Getting Started #

  • With Flutter, run flutter pub add rusty_chacha

Usage #

import 'dart:typed_data';
import 'package:collection/collection.dart';
import 'package:rusty_chacha/rusty_chacha.dart';

main() async {
  
  final data = Uint8List.fromList([1, 2, 3, 4, 5]);


  // Create and use a ChaCha20Poly1305 cipher with a random key:
  RustyChaCha20Poly1305 cipher = await RustyChaCha.create();
  Uint8List myEncryptedData = await cipher.encrypt(cleartext: data);
  Uint8List decrypted1 = await cipher.decrypt(ciphertext: myEncryptedData);

  assert(const ListEquality().equals(data, decrypted1));


  // Or with explicit key:
  Uint8List key = await RustyChaCha20Poly1305.generateKey();
  cipher = await RustyChaCha.create(key: key);


  // Compression example:
  // If compression is used during encryption, it also has to be set for decryption!
  // However compressionLevel does not matter.
  cipher = await RustyChaCha.create(
    key: key,
    compression: const Compression.zstd(compressionLevel: 3), // moderate compression
  );
  Uint8List myCompressedAndEncryptedData = await cipher.encrypt(cleartext: data);
  Uint8List decrypted2 = await cipher.decrypt(ciphertext: myCompressedAndEncryptedData);

  assert(const ListEquality().equals(data, decrypted2));


  // AAD example:
  cipher = await RustyChaCha.create();
  Uint8List additionalData = Uint8List.fromList([1, 2, 3]); // some additional (non-secret) data
  Uint8List myEncryptedDataWithAad = await cipher.encrypt(
    cleartext: data,
    aad: additionalData, // pass it in when encrypting
  );
  Uint8List decrypted3 = await cipher.decrypt(
    ciphertext: myEncryptedDataWithAad,
    aad: additionalData, // pass it in to decrypt (decrypt will fail if additionalData is not the same)
  );

  assert(const ListEquality().equals(data, decrypted3));


  // Create and use a XChaCha20Poly1305 with an extended 192-bit (24-byte) nonce instead of 96-bit (12-byte):
  RustyXChaCha20Poly1305 cipherX = await RustyChaCha.createX();
  Uint8List myEncryptedData2 = await cipher.encrypt(cleartext: data);
  Uint8List decrypted4 = await cipher.decrypt(ciphertext: myEncryptedData2);

  assert(const ListEquality().equals(data, decrypted4));
}

Supported platforms (for now) #

  • iOS
  • MacOS
  • Windows
  • Linux

Thanks to #

3
likes
150
points
52
downloads

Publisher

verified publisher32k.eu

Weekly Downloads

A Flutter library for fast ChaCha20-Poly1305 encryption, powered by Rust

Repository (GitHub)
View/report issues
Contributing

Documentation

API reference

License

MIT (license)

Dependencies

flutter, rusty_chacha_dart

More

Packages that depend on rusty_chacha