rusty_chacha

Creator: coderz1093

Last updated:

Add to Cart

Description:

rusty chacha

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 #

Encrypt and decrypt data with ChaCha20-Poly1305 (authenticated)
Additional authenticated data (AAD)
Optional compression using zstd

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));
}
copied to clipboard
Supported platforms (for now) #

iOS
MacOS
Windows
Linux

Thanks to #

RustCrypto for creating the chacha20poly1305 crate
@fzyzcjy for the amazing flutter_rust_bridge
Mimir for providing a project template.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files:

Customer Reviews

There are no reviews.