docs: update readmes/licences
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
01832a3b03
commit
c98b9947b4
12
README.md
12
README.md
@ -102,6 +102,8 @@ Please take a look a the compatibility table below to check if your target is su
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
#### Compatibility
|
||||||
|
|
||||||
First, check compatibility with your targets.
|
First, check compatibility with your targets.
|
||||||
|
|
||||||
| iOS | Android | MacOS | Linux | Windows | Web |
|
| iOS | Android | MacOS | Linux | Windows | Web |
|
||||||
@ -110,6 +112,16 @@ First, check compatibility with your targets.
|
|||||||
|
|
||||||
> Warning: NativeCrypto 0.2.0+ is not compatible with lower NativeCrypto versions. Especially, with NativeCrypto 0.0. X because the cipher mode is not the same. Now, NativeCrypto uses AES-GCM mode instead of AES-CBC mode. (See [Changelog](./CHANGELOG.md))
|
> Warning: NativeCrypto 0.2.0+ is not compatible with lower NativeCrypto versions. Especially, with NativeCrypto 0.0. X because the cipher mode is not the same. Now, NativeCrypto uses AES-GCM mode instead of AES-CBC mode. (See [Changelog](./CHANGELOG.md))
|
||||||
|
|
||||||
|
NativeCrypto ciphertexts are formatted as follow:
|
||||||
|
|
||||||
|
```
|
||||||
|
+------------------+--------------------+------------------+
|
||||||
|
| Nonce (12 bytes) | Cipher text (n-28) | Tag (16 bytes) |
|
||||||
|
+------------------+--------------------+------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
> Warning: If your data comes from another source, make sur to use the same format.
|
||||||
|
|
||||||
#### Hash
|
#### Hash
|
||||||
|
|
||||||
To digest a message, you'll need to initialize a Hasher object implementing `Hash` . Then, you can digest your message.
|
To digest a message, you'll need to initialize a Hasher object implementing `Hash` . Then, you can digest your message.
|
||||||
|
@ -2,7 +2,7 @@ NativeCrypto
|
|||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2019 - 2022 Hugo Pointcheval
|
Copyright (c) 2019 - 2023 Hugo Pointcheval
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,133 +1,3 @@
|
|||||||
<p align="center">
|
# NativeCrypto
|
||||||
<img width="700px" src="resources/native_crypto.png" style="background-color: rgb(255,255,255)">
|
|
||||||
<h5 align="center">Fast and powerful cryptographic functions for Flutter.</h5>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align="center">
|
Readme available at [project root](../../README.md).
|
||||||
<a href="https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_analysis">
|
|
||||||
<img src="https://img.shields.io/badge/Style-Wyatt%20Analysis-blue.svg?style=flat-square" alt="Style: Wyatt Analysis" />
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a href="https://github.com/invertase/melos">
|
|
||||||
<img src="https://img.shields.io/badge/Maintained%20with-melos-f700ff.svg?style=flat-square" alt="Maintained with Melos" />
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a href="https://drone.wyatt-studio.fr/hugo/native-crypto">
|
|
||||||
<img src="https://drone.wyatt-studio.fr/api/badges/hugo/native-crypto/status.svg" alt="Build Status" />
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
[[Changelog]](./CHANGELOG.md) | [[License]](./LICENSE)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## About
|
|
||||||
|
|
||||||
The goal of this plugin is to provide a fast and powerful cryptographic functions by calling native libraries. On Android, it uses [javax.cypto](https://developer.android.com/reference/javax/crypto/package-summary), and on iOS, it uses [CommonCrypto](https://opensource.apple.com/source/CommonCrypto/) and [CryptoKit](https://developer.apple.com/documentation/cryptokit/)
|
|
||||||
|
|
||||||
I started this projet because I wanted to add cryptographic functions on a Flutter app. But I faced a problem with the well-known [Pointy Castle](https://pub.dev/packages/pointycastle) library: the performance was very poor. Here some benchmarks and comparison:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
For comparison, on a *iPhone 13*, you can encrypt/decrypt a message of **2MiB** in **~5.6s** with PointyCastle and in **~40ms** with NativeCrypto. And on an *OnePlus 5*, you can encrypt/decrypt a message of **50MiB** in **~6min30** with PointyCastle and in less than **~1s** with NativeCrypto.
|
|
||||||
|
|
||||||
In short, NativeCrypto is incomparable with PointyCastle.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
First, check compatibility with your targets.
|
|
||||||
|
|
||||||
| iOS | Android | MacOS | Linux | Windows | Web |
|
|
||||||
| --- | ------- | ----- | ----- | ------- | --- |
|
|
||||||
| ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
|
|
||||||
|
|
||||||
#### Hash
|
|
||||||
|
|
||||||
To digest a message, you can use the following function:
|
|
||||||
|
|
||||||
```dart
|
|
||||||
Uint8List hash = await HashAlgorithm.sha256.digest(message);
|
|
||||||
```
|
|
||||||
|
|
||||||
> In NativeCrypto, you can use the following hash functions: SHA-256, SHA-384, SHA-512
|
|
||||||
|
|
||||||
#### Keys
|
|
||||||
|
|
||||||
You can build a `SecretKey` from a utf8, base64, base16 (hex) strings or raw bytes. You can also generate a SecretKey from secure random.
|
|
||||||
|
|
||||||
```dart
|
|
||||||
SecretKey secretKey = SecretKey(Uint8List.fromList([0x73, 0x65, 0x63, 0x72, 0x65, 0x74]));
|
|
||||||
SecretKey secretKey = SecretKey.fromUtf8('secret');
|
|
||||||
SecretKey secretKey = SecretKey.fromBase64('c2VjcmV0');
|
|
||||||
SecretKey secretKey = SecretKey.fromBase16('63657274');
|
|
||||||
SecretKey secretKey = await SecretKey.fromSecureRandom(256);
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Key derivation
|
|
||||||
|
|
||||||
You can derive a `SecretKey` using **PBKDF2**.
|
|
||||||
|
|
||||||
First, you need to initialize a `Pbkdf2` object.
|
|
||||||
|
|
||||||
```dart
|
|
||||||
Pbkdf2 pbkdf2 = Pbkdf2(
|
|
||||||
keyBytesCount: 32,
|
|
||||||
iterations: 1000,
|
|
||||||
algorithm: HashAlgorithm.sha512,
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, you can derive a `SecretKey` from a password and salt.
|
|
||||||
|
|
||||||
```dart
|
|
||||||
SecretKey secretKey = await pbkdf2.derive(password: password, salt: 'salt');
|
|
||||||
```
|
|
||||||
|
|
||||||
> In NativeCrypto, you can use the following key derivation function: PBKDF2
|
|
||||||
|
|
||||||
#### Cipher
|
|
||||||
|
|
||||||
And now, you can use the `SecretKey` to encrypt/decrypt a message.
|
|
||||||
|
|
||||||
First, you need to initialize a `Cipher` object.
|
|
||||||
|
|
||||||
```dart
|
|
||||||
AES cipher = AES(secretKey);
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, you can encrypt your message.
|
|
||||||
|
|
||||||
```dart
|
|
||||||
CipherTextWrapper wrapper = await cipher.encrypt(message);
|
|
||||||
|
|
||||||
CipherText cipherText = wrapper.unwrap<CipherText>();
|
|
||||||
// same as
|
|
||||||
CipherText cipherText = wrapper.single;
|
|
||||||
|
|
||||||
// or
|
|
||||||
|
|
||||||
List<CipherText> cipherTexts = wrapper.unwrap<List<CipherText>>();
|
|
||||||
// same as
|
|
||||||
List<CipherText> cipherTexts = wrapper.list;
|
|
||||||
```
|
|
||||||
|
|
||||||
After an encryption you obtain a `CipherTextWrapper` which contains `CipherText` or `List<CipherText>` depending on the message size. It's up to you to know how to unwrap the `CipherTextWrapper` depending the chunk size you configured.
|
|
||||||
|
|
||||||
Uppon receiving encrypted message, you can decrypt it.
|
|
||||||
You have to reconstruct the wrapper before decrypting.
|
|
||||||
|
|
||||||
```dart
|
|
||||||
CipherTextWrapper wrapper = CipherTextWrapper.fromBytes(
|
|
||||||
data,
|
|
||||||
ivLength: AESMode.gcm.ivLength,
|
|
||||||
tagLength: AESMode.gcm.tagLength,
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, you can decrypt your message.
|
|
||||||
|
|
||||||
```dart
|
|
||||||
Uint8List message = await cipher.decrypt(wrapper);
|
|
||||||
```
|
|
||||||
|
@ -2,7 +2,7 @@ NativeCrypto - Android Implementation
|
|||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2019 - 2022 Hugo Pointcheval
|
Copyright (c) 2019 - 2023 Hugo Pointcheval
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
# native_crypto_android
|
# NativeCrypto - Android Implementation
|
||||||
|
|
||||||
A new flutter plugin project.
|
Android Implementation of [NativeCrypto][1] Plugin.
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
This project is a starting point for a Flutter
|
This project is a starting point for a Flutter [plug-in package][2], a specialized package that includes platform-specific implementation code for Android and/or iOS.
|
||||||
[plug-in package](https://flutter.dev/developing-packages/),
|
|
||||||
a specialized package that includes platform-specific implementation code for
|
|
||||||
Android and/or iOS.
|
|
||||||
|
|
||||||
For help getting started with Flutter, view our
|
For help getting started with Flutter, view our [online documentation][3], which offers tutorials, samples, guidance on mobile development, and a full API reference.
|
||||||
[online documentation](https://flutter.dev/docs), which offers tutorials,
|
|
||||||
samples, guidance on mobile development, and a full API reference.
|
|
||||||
|
|
||||||
|
[1]: ../../README.md
|
||||||
|
[2]: https://flutter.dev/developing-packages/
|
||||||
|
[3]: https://flutter.dev/docs
|
||||||
|
@ -2,7 +2,7 @@ NativeCrypto - iOS Implementation
|
|||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2019 - 2022 Hugo Pointcheval
|
Copyright (c) 2019 - 2023 Hugo Pointcheval
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
# NativeCrypto - iOS Implementation
|
# NativeCrypto - iOS Implementation
|
||||||
|
|
||||||
iOS Implementation of NativeCrypto Plugin.
|
iOS Implementation of [NativeCrypto][1] Plugin.
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
This project is a starting point for a Flutter
|
This project is a starting point for a Flutter [plug-in package][2], a specialized package that includes platform-specific implementation code for Android and/or iOS.
|
||||||
[plug-in package](https://flutter.dev/developing-packages/),
|
|
||||||
a specialized package that includes platform-specific implementation code for
|
|
||||||
Android and/or iOS.
|
|
||||||
|
|
||||||
For help getting started with Flutter, view our
|
For help getting started with Flutter, view our [online documentation][3], which offers tutorials, samples, guidance on mobile development, and a full API reference.
|
||||||
[online documentation](https://flutter.dev/docs), which offers tutorials,
|
|
||||||
samples, guidance on mobile development, and a full API reference.
|
|
||||||
|
|
||||||
|
[1]: ../../README.md
|
||||||
|
[2]: https://flutter.dev/developing-packages/
|
||||||
|
[3]: https://flutter.dev/docs
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
# NativeCrypto - Platform Interface
|
# NativeCrypto - Platform Interface
|
||||||
|
|
||||||
A common platform interface for the [`native_crypto`][1] plugin.
|
A common platform interface for the [NativeCrypto][1] plugin.
|
||||||
|
|
||||||
This interface allows platform-specific implementations of the `native_crypto` plugin, as well as the plugin itself, to ensure they are supporting the same interface.
|
This interface allows platform-specific implementations of the `native_crypto` plugin, as well as the plugin itself, to ensure they are supporting the same interface.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To implement a new platform-specific implementation of `native_crypto`, extend [`NativeCryptoPlatform`][2] with an implementation that performs the platform-specific behavior, and when you register your plugin, set the default `NativeCryptoPlatform` by calling `NativeCryptoPlatform.instance = MyNativeCryptoPlatform()`.
|
To implement a new platform-specific implementation of `native_crypto`, extend [`NativeCryptoPlatform`][1] with an implementation that performs the platform-specific behavior, and when you register your plugin, set the default `NativeCryptoPlatform` by calling `NativeCryptoPlatform.instance = MyNativeCryptoPlatform()`.
|
||||||
|
|
||||||
## Pigeon
|
## Pigeon
|
||||||
|
|
||||||
@ -16,5 +16,5 @@ Run generator with `flutter pub run pigeon --input pigeons/messages.dart`.
|
|||||||
|
|
||||||
> Note: Make sure the `lib/src/gen` folder exists before running the generator.
|
> Note: Make sure the `lib/src/gen` folder exists before running the generator.
|
||||||
|
|
||||||
[1]: ../native_crypto
|
[1]: ../../README.md
|
||||||
[2]: lib/native_crypto_platform_interface.dart
|
[2]: lib/native_crypto_platform_interface.dart
|
||||||
|
Loading…
x
Reference in New Issue
Block a user