Updated:
1. Any examples that used incorrect seeding.
If you have been using xxx.nextInt(255) to seed a RNG then you must change it to either .nextInt(256) alternatively use Platform.instance.platformEntropySource().getBytes(_how many_)
diff --git a/tutorials/examples/aes-cbc-direct.dart b/tutorials/examples/aes-cbc-direct.dart
index c26182a..53622e8 100644
--- a/tutorials/examples/aes-cbc-direct.dart
+++ b/tutorials/examples/aes-cbc-direct.dart
@@ -7,6 +7,7 @@
import 'dart:typed_data';
import 'package:pointycastle/export.dart';
+import 'package:pointycastle/src/platform_check/platform_check.dart';
// Code convention: variable names starting with underscores are examples only,
// and should be implementated according to the needs of the program.
@@ -178,13 +179,8 @@
// First invocation: create _secureRandom and seed it
_secureRandom = FortunaRandom();
-
- final seedSource = Random.secure();
- final seeds = <int>[];
- for (var i = 0; i < 32; i++) {
- seeds.add(seedSource.nextInt(255));
- }
- _secureRandom!.seed(KeyParameter(Uint8List.fromList(seeds)));
+ _secureRandom!.seed(
+ KeyParameter(Platform.instance.platformEntropySource().getBytes(32)));
}
// Use it to generate the random bytes
diff --git a/tutorials/examples/aes-cbc-registry.dart b/tutorials/examples/aes-cbc-registry.dart
index d7f5f4d..5631b84 100644
--- a/tutorials/examples/aes-cbc-registry.dart
+++ b/tutorials/examples/aes-cbc-registry.dart
@@ -7,6 +7,7 @@
import 'dart:typed_data';
import 'package:pointycastle/pointycastle.dart';
+import 'package:pointycastle/src/platform_check/platform_check.dart';
// Code convention: variable names starting with underscores are examples only,
// and should be implementated according to the needs of the program.
@@ -176,15 +177,9 @@
Uint8List? generateRandomBytes(int numBytes) {
if (_secureRandom == null) {
// First invocation: create _secureRandom and seed it
-
_secureRandom = SecureRandom('Fortuna');
-
- final seedSource = Random.secure();
- final seeds = <int>[];
- for (var i = 0; i < 32; i++) {
- seeds.add(seedSource.nextInt(255));
- }
- _secureRandom!.seed(KeyParameter(Uint8List.fromList(seeds)));
+ _secureRandom!.seed(
+ KeyParameter(Platform.instance.platformEntropySource().getBytes(32)));
}
// Use it to generate the random bytes
diff --git a/tutorials/examples/import-demo/import-demo-1.dart b/tutorials/examples/import-demo/import-demo-1.dart
index 5088b03..2cbeb1a 100644
--- a/tutorials/examples/import-demo/import-demo-1.dart
+++ b/tutorials/examples/import-demo/import-demo-1.dart
@@ -23,6 +23,7 @@
import 'dart:typed_data';
import 'package:pointycastle/pointycastle.dart';
+import 'package:pointycastle/src/platform_check/platform_check.dart';
void main() {
useRegistry();
@@ -45,8 +46,7 @@
//final kd = KeyDerivator('SHA-256/HMAC/PBKDF2');
final _sGen = Random.secure();
- final _seed =
- Uint8List.fromList(List.generate(32, (n) => _sGen.nextInt(255)));
+ final _seed = Platform.instance.platformEntropySource().getBytes(32);
final secRnd = SecureRandom('Fortuna')..seed(KeyParameter(_seed));
// AES-CBC encryption
@@ -128,7 +128,7 @@
final _sGen = Random.secure();
final _seed =
- Uint8List.fromList(List.generate(32, (n) => _sGen.nextInt(255)));
+ _KeyParameter(Platform.instance.platformEntropySource().getBytes(32);
final secRnd = FortunaRandom()..seed(KeyParameter(_seed));
// AES-CBC encryption
diff --git a/tutorials/examples/import-demo/import-demo-2.dart b/tutorials/examples/import-demo/import-demo-2.dart
index 841b26d..fc2c518 100644
--- a/tutorials/examples/import-demo/import-demo-2.dart
+++ b/tutorials/examples/import-demo/import-demo-2.dart
@@ -23,6 +23,7 @@
import 'dart:typed_data';
import 'package:pointycastle/export.dart';
+import 'package:pointycastle/src/platform_check/platform_check.dart';
void main() {
useRegistry();
@@ -45,8 +46,7 @@
//final kd = KeyDerivator('SHA-256/HMAC/PBKDF2');
final _sGen = Random.secure();
- final _seed =
- Uint8List.fromList(List.generate(32, (n) => _sGen.nextInt(255)));
+ final _seed = Platform.instance.platformEntropySource().getBytes(32);
final secRnd = SecureRandom('Fortuna')..seed(KeyParameter(_seed));
// AES-CBC encryption
@@ -129,8 +129,7 @@
// Secure random number generator
final _sGen = Random.secure();
- final _seed =
- Uint8List.fromList(List.generate(32, (n) => _sGen.nextInt(255)));
+ final _seed = Platform.instance.platformEntropySource().getBytes(32);
final secRnd = FortunaRandom()..seed(KeyParameter(_seed));
// AES-CBC encryption
diff --git a/tutorials/examples/import-demo/import-demo-3.dart b/tutorials/examples/import-demo/import-demo-3.dart
index 7fcdb3c..f3d700a 100644
--- a/tutorials/examples/import-demo/import-demo-3.dart
+++ b/tutorials/examples/import-demo/import-demo-3.dart
@@ -38,6 +38,7 @@
import 'package:pointycastle/block/modes/cbc.dart';
import 'package:pointycastle/paddings/pkcs7.dart';
import 'package:pointycastle/random/fortuna_random.dart';
+import 'package:pointycastle/src/platform_check/platform_check.dart';
void main() {
useRegistry();
@@ -60,8 +61,7 @@
//final kd = KeyDerivator('SHA-256/HMAC/PBKDF2');
final _sGen = Random.secure();
- final _seed =
- Uint8List.fromList(List.generate(32, (n) => _sGen.nextInt(255)));
+ final _seed = Platform.instance.platformEntropySource().getBytes(32);
final secRnd = SecureRandom('Fortuna')..seed(KeyParameter(_seed));
// AES-CBC encryption
@@ -144,8 +144,7 @@
// Secure random number generator
final _sGen = Random.secure();
- final _seed =
- Uint8List.fromList(List.generate(32, (n) => _sGen.nextInt(255)));
+ final _seed = Platform.instance.platformEntropySource().getBytes(32);
final secRnd = FortunaRandom()..seed(KeyParameter(_seed));
// AES-CBC encryption
diff --git a/tutorials/examples/import-demo/import-demo-4.dart b/tutorials/examples/import-demo/import-demo-4.dart
index aa64f23..21da504 100644
--- a/tutorials/examples/import-demo/import-demo-4.dart
+++ b/tutorials/examples/import-demo/import-demo-4.dart
@@ -25,6 +25,7 @@
import 'package:pointycastle/asymmetric/api.dart';
import 'package:pointycastle/key_derivators/api.dart';
import 'package:pointycastle/key_generators/api.dart';
+import 'package:pointycastle/src/platform_check/platform_check.dart';
// Note: these individual libraries are deliberatly not imported
// import 'package:pointycastle/macs/hmac.dart';
@@ -54,8 +55,7 @@
//final kd = KeyDerivator('SHA-256/HMAC/PBKDF2');
final _sGen = Random.secure();
- final _seed =
- Uint8List.fromList(List.generate(32, (n) => _sGen.nextInt(255)));
+ final _seed = Platform.instance.platformEntropySource().getBytes(32);
final secRnd = SecureRandom('Fortuna')..seed(KeyParameter(_seed));
// AES-CBC encryption
@@ -136,8 +136,7 @@
// Secure random number generator
final _sGen = Random.secure();
- final _seed =
- Uint8List.fromList(List.generate(32, (n) => _sGen.nextInt(255)));
+ final _seed = KeyParameter(Platform.instance.platformEntropySource().getBytes(32);
final secRnd = FortunaRandom()..seed(KeyParameter(_seed));
// AES-CBC encryption
diff --git a/tutorials/examples/rsa-demo.dart b/tutorials/examples/rsa-demo.dart
index fc25a8b..4fb2348 100644
--- a/tutorials/examples/rsa-demo.dart
+++ b/tutorials/examples/rsa-demo.dart
@@ -16,6 +16,7 @@
// When not using the registry:
import 'package:pointycastle/export.dart';
+import 'package:pointycastle/src/platform_check/platform_check.dart';
//================================================================
// Test data
@@ -200,12 +201,8 @@
//final result = SecureRandom('Fortuna'); // Get using registry
final secureRandom = FortunaRandom(); // Get directly
- final seedSource = Random.secure();
- final seeds = <int>[];
- for (var i = 0; i < 32; i++) {
- seeds.add(seedSource.nextInt(255));
- }
- secureRandom.seed(KeyParameter(Uint8List.fromList(seeds)));
+ secureRandom.seed(
+ KeyParameter(Platform.instance.platformEntropySource().getBytes(32)));
return secureRandom;
}
diff --git a/tutorials/rsa.md b/tutorials/rsa.md
index f273ddc..74e7710 100644
--- a/tutorials/rsa.md
+++ b/tutorials/rsa.md
@@ -30,7 +30,7 @@
```dart
import 'dart:math';
import 'dart:typed_data';
-
+import 'package:pointycastle/src/platform_check/platform_check.dart';
import "package:pointycastle/export.dart";
AsymmetricKeyPair<RSAPublicKey, RSAPrivateKey> generateRSAkeyPair(
@@ -56,15 +56,10 @@
}
SecureRandom exampleSecureRandom() {
- final secureRandom = FortunaRandom();
- final seedSource = Random.secure();
- final seeds = <int>[];
- for (int i = 0; i < 32; i++) {
- seeds.add(seedSource.nextInt(255));
- }
- secureRandom.seed(KeyParameter(Uint8List.fromList(seeds)));
-
+ final secureRandom = SecureRandom('Fortuna')
+ ..seed(KeyParameter(
+ Platform.instance.platformEntropySource().getBytes(32)));
return secureRandom;
}