biometric_storage

Creator: coderz1093

Last updated:

Add to Cart

Description:

biometric storage

biometric_storage #

Encrypted file store, optionally secured by biometric lock
for Android, iOS, MacOS and partial support for Linux, Windows and Web.
Meant as a way to store small data in a hardware encrypted fashion. E.g. to
store passwords, secret keys, etc. but not massive amounts
of data.

Android: Uses androidx with KeyStore.
iOS and MacOS: LocalAuthentication with KeyChain.
Linux: Stores values in Keyring using libsecret. (No biometric authentication support).
Windows: Uses wincreds.h to store into read/write into credential store.
Web: Warning Uses unauthenticated, unencrypted storage in localStorage.
If you have a better idea for secure storage on web platform, please open an Issue.

Check out AuthPass Password Manager for a app which
makes heavy use of this plugin.
Getting Started #
Installation #
Android

Requirements:


Android: API Level >= 23 (android/app/build.gradle minSdkVersion 23)


Make sure to use the latest kotlin version:

android/build.gradle: ext.kotlin_version = '1.4.31'



MainActivity must extend FlutterFragmentActivity


Theme for the main activity must use Theme.AppCompat thme.
(Otherwise there will be crashes on Android < 29)
For example:
android/app/src/main/AndroidManifest.xml:
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme">
[...]
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
</activity>
copied to clipboard
android/app/src/main/res/values/styles.xml:
<resources>
<style name="LaunchTheme" parent="Theme.AppCompat.NoActionBar">
...
</style>
<style name="NormalTheme" parent="Theme.AppCompat.NoActionBar">
...
</style>
</resources>
copied to clipboard




Resources

https://developer.android.com/topic/security/data
https://developer.android.com/topic/security/best-practices

iOS
https://developer.apple.com/documentation/localauthentication/logging_a_user_into_your_app_with_face_id_or_touch_id

include the NSFaceIDUsageDescription key in your app’s Info.plist file
Supports all iOS versions supported by Flutter. (ie. iOS 12)

Known Issue: since iOS 15 the simulator seem to no longer support local authentication:
https://developer.apple.com/forums/thread/685773
Mac OS

include the NSFaceIDUsageDescription key in your app’s Info.plist file
enable keychain sharing and signing. (not sure why this is required. but without it
You will probably see an error like:

SecurityError, Error while writing data: -34018: A required entitlement isn't present.


Supports all MacOS Versions supported by Flutter (ie. >= MacOS 10.14)

Usage #

You basically only need 4 methods.


Check whether biometric authentication is supported by the device

final response = await BiometricStorage().canAuthenticate()
if (response != CanAuthenticateResponse.success) {
// panic..
}
copied to clipboard

Create the access object

final store = BiometricStorage().getStorage('mystorage');
copied to clipboard

Read data

final data = await storageFile.read();
copied to clipboard

Write data

final myNewData = 'Hello World';
await storageFile.write(myNewData);
copied to clipboard
See also the API documentation: https://pub.dev/documentation/biometric_storage/latest/biometric_storage/BiometricStorageFile-class.html#instance-methods

License

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

Customer Reviews

There are no reviews.