From 0d0b0da7dd6221918385d94a9800a0f83537c500 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Sat, 18 Apr 2020 15:28:00 +0200 Subject: [PATCH] Fix example with pbkdf2 and exceptions --- example/lib/main.dart | 81 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 75 insertions(+), 6 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 24680aa..a47fa2f 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -4,8 +4,10 @@ import 'dart:developer'; import 'dart:typed_data'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:native_crypto/symmetric_crypto.dart'; +import 'package:native_crypto/exceptions.dart'; void main() => runApp(MyApp()); @@ -16,20 +18,46 @@ class MyApp extends StatefulWidget { class _MyAppState extends State { final textController = TextEditingController(); + final pwdController = TextEditingController(); + String _output = 'none'; String _bench; AES aes = AES(); List encryptedPayload; Uint8List decryptedPayload; + Uint8List key; void _generateKey() async { // You can also generate key before creating aes object. // Uint8List aeskey = await KeyGenerator().secretKey(keySize: KeySize.bits256); // AES aes = AES(key: aeskey); - await aes.init(KeySize.bits256); + var output; + try { + await aes.init(KeySize.bits256); + output = 'Key generated. Length: ${aes.key.length}'; + } catch (e) { + // PlatformException or KeyException, both have message property. + output = e.message; + } + setState(() { - _output = 'Key generated. Length: ${aes.key.length}'; + _output = output; + }); + } + + void _pbkdf2() async { + final password = pwdController.text.trim(); + + var output; + if (password.isEmpty) { + output = 'Password is empty'; + } else { + key = await KeyGenerator().pbkdf2(password, 'salt'); + output = 'Key successfully derived.'; + } + setState(() { + _output = output; }); } @@ -43,7 +71,7 @@ class _MyAppState extends State { var stringToBytes = TypeHelper().stringToBytes(plainText); // You can also pass a specific key. // encryptedPayload = await AES().encrypt(stringToBytes, key: aeskey); - encryptedPayload = await aes.encrypt(stringToBytes); + encryptedPayload = await aes.encrypt(stringToBytes, key: key?? null); output = 'String successfully encrypted.'; } setState(() { @@ -51,6 +79,20 @@ class _MyAppState extends State { }); } + void _alter() async { + var output; + if (encryptedPayload == null || encryptedPayload[0].isEmpty) { + output = 'Encrypt before altering payload!'; + } else { + // Shuffle payload. + encryptedPayload[0].shuffle(); + output = 'Payload altered.'; + } + setState(() { + _output = output; + }); + } + void _decrypt() async { var output; if (encryptedPayload == null || encryptedPayload[0].isEmpty) { @@ -58,9 +100,13 @@ class _MyAppState extends State { } else { // You can also pass a specific key. // decryptedPayload = await AES().decrypt(encryptedPayload, key: aeskey); - decryptedPayload = await aes.decrypt(encryptedPayload); - var bytesToString = TypeHelper().bytesToString(decryptedPayload); - output = 'String successfully decrypted:\n\n$bytesToString'; + try { + decryptedPayload = await aes.decrypt(encryptedPayload, key: key?? null); + var bytesToString = TypeHelper().bytesToString(decryptedPayload); + output = 'String successfully decrypted:\n\n$bytesToString'; + } on DecryptionException catch (e) { + output = e.message; + } } setState(() { _output = output; @@ -120,6 +166,7 @@ class _MyAppState extends State { void dispose() { // Clean up the controller when the widget is disposed. textController.dispose(); + pwdController.dispose(); super.dispose(); } @@ -137,6 +184,21 @@ class _MyAppState extends State { child: Center( child: Column( children: [ + TextField( + controller: pwdController, + decoration: InputDecoration( + hintText: 'Test password', + ), + ), + SizedBox(height: 20), + FlatButton( + onPressed: _pbkdf2, + color: Colors.blue, + child: Text( + 'Pbkdf2', + style: TextStyle(color: Colors.white), + )), + SizedBox(height: 30), TextField( controller: textController, decoration: InputDecoration( @@ -151,6 +213,13 @@ class _MyAppState extends State { 'Encrypt String', style: TextStyle(color: Colors.white), )), + FlatButton( + onPressed: _alter, + color: Colors.blue, + child: Text( + 'Alter encrypted payload', + style: TextStyle(color: Colors.white), + )), FlatButton( onPressed: _decrypt, color: Colors.blue,