Substrate Sign Flutter Plugin
Flutter plugin for using Substrate signing functions offline.
This plugin use Dart
ffi module to bind Rust function.
Now works on Android, check this thread to get update for ios
More details about using rust in flutter please check this great article
SURI refers to Secret URI, it is with format of:
SURI bottom drive obey lake curtain smoke basket hold race lonely fit walk//kusama/1///000000.
randomPhrase: Generate random seed phrase
String randomPhrase(int digits)
substrateAddress: Generate substrate address with provided suri(Secret URI).
String substrateAddress(String seed, int prefix)
substrateSign: Sign hex string with the provided seed
String substrateSign(String suri, String message)
encryptData: encrypt data with ethsign
String encryptData(String data, String password)
decryptData: decrypt data with ethsign
String decryptData(String data, String password)
Functions with seed pointer
By using seed phrase, we could keep seed phrase in the protected Rust runtime and avoid it to be exposed to the dart Runtime and avoid it to keep in the app state. To interact with seed reference functions user need give the seed pointer as an argument.
//get address with seed pointer String substrateAddressWithRef(int seedRef, String suriSuffix, int prefix) //sign hex data with seed pointer String substrateSignWithRef(int seedRef, String suriSuffix, String message) //decrypt the cipher text and return the seed pointer int decryptDataWithRef(String data, String password) //destroy the pointer, deallocate the memory assigned to the seed void destroyDataRef(int ref)
suriSuffix refer to the combination of derivation path and derivation password like
//some_path/1///123456 or only path but without password like
To customize the library or add more functions. First run
to setup required toolchains, you will also need Android NDK for generating android native code, download it here and pointer environment variable
NDK_HOME to it.
After customizing the rust code, run
to generate the glue code and binaries for Rust, Flutter, iOS and Android.
Now use integration test for testing the native binding functions.
cd example && flutter drive --target=test_driver/app.dart