0 purchases
dart rust encrypt
dart_rust_encrypt #
A Dart plugin package (see this for the flutter
wrapper) to have common data encrypt algorithms and tools using Rust.
Overview #
This plugin is a wrapper/bridge for purely-written-in Rust hashing and encryption algorithms (like
SHA3-256) to have the safety and speed of Rust. This screenshot shows the speed difference between a
dart implementation for SHA3-256 (pointycastle
package) and the Rust one, both hashing the same 20MB string:
Features #
This list will be updated as the project grows:
SHA3-256
SHA3-512
PBKDF2-SHA3-512
Installation #
To use this plugin, add dart_rust_encrypt as a dependency in your pubspec.yaml file.
dependencies:
dart_rust_encrypt:
copied to clipboard
Then run:
flutter pub get
copied to clipboard
Usage #
Import the package in your Dart files:
import 'package:dart_rust_encrypt/dart_rust_encrypt.dart';
copied to clipboard
Initializing and Use #
import 'dart:typed_data';
import 'package:dart_rust_encrypt/dart_rust_encrypt.dart';
import 'dart:convert';
void main(List<String> args) async {
final dartRustEncrypt = createWrapper(DynamicLibrary.open(args[0]));
final hashed =
await dartRustEncrypt.sha3_256(Uint8List.fromList(utf8.encode('Hello World')));
print(message);
}
copied to clipboard
Tip: Read provided example comments to know how you should pass the generated library path to dart compiler.
Example #
A complete example is in the example folder.
Building From Source (Pure Dart) #
In case of any changes to the rust functionality you need to build the binaries again. To do so, you need to have some requirements installed on your machine and then use following commands to build the library again.
All the provided functionally in Rust side is in the api.rs file. So this is where the changes should be made/add. After that you need to build the library again.
Requirements #
Install Rust (Default toolchain installation)
Install flutter_rust_bridge_codegen: brew install desdaemon/repo/flutter_rust_bridge_codegen
Building #
flutter_rust_bridge_codegen --rust-input path/to/api.rs \
--dart-output path/to/bridge_generated.dart
copied to clipboard
cargo build --release
copied to clipboard
Now you can use target/realse/libdart_rust_encrypt.dylib in your project (.dylib is used for macOS machine, for other platform you need other formats of the library (like .so, .dll)) for more info see flutter_rust_bridge docs.
Building From Source (Flutter Plugin) #
You can already use provided scripts to build the library for iOS and Android in flutter. For more info these are what is build-ios.sh and build-android.sh files do:
Runs add targets for rustup
Generate dart bridges from rust code
Generate binaries from rust code for each target
Build the library for each platform (iOS xcframework & Android jniLib)
Requirements #
Main Requirements
Install Rust (Default toolchain installation)
Install flutter_rust_bridge_codegen
XCode Full install
Android NDK (You can use Android Studio to install it)
iOS & macOS Building requirements
Obviously you need a MacOS machine to build the iOS library. Also you need to have XCode installed on your machine, which you can install it from App Store. then:
run rustup target add {target_name} for each target you want to build. For example: rustup target add aarch64-apple-ios x86_64-apple-ios
List of targets for fulls iOS & macOS support:
rustup target add aarch64-apple-ios
rustup target add x86_64-apple-ios
rustup target add aarch64-apple-ios-sim
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
copied to clipboard
Android Building requirements
Install Cargo NDK
Add required targets to rustup
Just like the iOS part, for full android support:
rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi
rustup target add i686-linux-android
rustup target add x86_64-linux-android
copied to clipboard
Building #
After running the scripts in scripts folder, you can find the generated framework for flutter in scripts/platform-builds directory.
Android build: android.tar.gz
iOS build: DartRustEncrypt.xcframework.zip
Now you can use these libraries in flutter plugin wrapper (see this). So Each generated library should copy and paste to the required platform directory in our flutter plugin directory.
Android: Copy android.tar.gz to flutter_rust_encrypt/android/
iOS: Copy DartRustEncrypt.xcframework.zip to flutter_rust_encrypt/ios/Frameworks/
There is no need to extract these files manually, Because injected steps in each platform building
source (in already provided flutter wrapper plugin)
will do this for us. you can see these steps in:
iOS: flutter_rust_encrypt/ios/flutter_rust_encrypt.podspec
Android: flutter_rust_encrypt/android/build.gradle (with the help of CMakeLists.txt)
Also you need to replace 2 generated header file frb.h for macOS and iOS to the required directory in our flutter plugin directory:
iOS: flutter_rust_encrypt/ios/Classes/
macOS: flutter_rust_encrypt/macos/Classes/
Now you can add your flutter wrapper plugin to your project and use the power and speed of rust.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.