diff --git a/native_crypto_android/example/lib/main.dart b/native_crypto_android/example/lib/main.dart index 0d1e7a6..ce84ce0 100644 --- a/native_crypto_android/example/lib/main.dart +++ b/native_crypto_android/example/lib/main.dart @@ -1,74 +1,84 @@ +// Author: Hugo Pointcheval +// Email: git@pcl.ovh +// ----- +// File: main.dart +// Created Date: 27/12/2021 22:43:20 +// Last Modified: 28/12/2021 18:18:44 +// ----- +// Copyright (c) 2021 + import 'dart:typed_data'; import 'package:flutter/material.dart'; -import 'dart:async'; - -import 'package:flutter/services.dart'; import 'package:native_crypto_platform_interface/native_crypto_platform_interface.dart'; void main() { runApp(const MyApp()); } -class MyApp extends StatefulWidget { +void run() async { + NativeCryptoPlatform _nativeCryptoPlatform = NativeCryptoPlatform.instance; + + debugPrint("Benchmark"); + + int size = 25; + int iterations = 25; + int totalEnc = 0; + int totalDec = 0; + + debugPrint("Size: $size MB"); + Uint8List? secretKey = await _nativeCryptoPlatform.generateSecretKey(128); + + debugPrint("Generate random data..."); + var before = DateTime.now(); + Uint8List data = Uint8List(size * 1024 * 1024); + var after = DateTime.now(); + debugPrint("Generate random data: ${after.difference(before).inMilliseconds} ms"); + + for (var _ in List.generate(iterations, (index) => index)) { + debugPrint("Encrypt data..."); + before = DateTime.now(); + Uint8List? encrypted = await _nativeCryptoPlatform.encrypt(data, secretKey!, "aes"); + after = DateTime.now(); + debugPrint("Encrypt data: ${after.difference(before).inMilliseconds} ms"); + totalEnc += after.difference(before).inMilliseconds; + + debugPrint("Decrypt data..."); + before = DateTime.now(); + data = (await _nativeCryptoPlatform.decrypt(encrypted!, secretKey, "aes"))!; + after = DateTime.now(); + debugPrint("Decrypt data: ${after.difference(before).inMilliseconds} ms"); + totalDec += after.difference(before).inMilliseconds; + } + + debugPrint("Average Encrypt: ${totalEnc/iterations} ms for $size MB"); + debugPrint("Average Decrypt: ${totalDec/iterations} ms for $size MB"); + +} + +class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override - State createState() => _MyAppState(); + Widget build(BuildContext context) { + return const MaterialApp( + home: MyHomePage(), + ); + } } -class _MyAppState extends State { - String _platformVersion = 'Unknown'; - - @override - void initState() { - super.initState(); - initPlatformState(); - } - - // Platform messages are asynchronous, so we initialize in an async method. - Future initPlatformState() async { - NativeCryptoPlatform _nativeCryptoPlatform = NativeCryptoPlatform.instance; - String platformVersion; - // Platform messages may fail, so we use a try/catch PlatformException. - // We also handle the message potentially returning null. - Uint8List? sk = await _nativeCryptoPlatform.generateSecretKey(256); - print(sk ?? 'null'); - - Uint8List? ciphertext = await _nativeCryptoPlatform.encrypt( - Uint8List.fromList("abc".codeUnits), sk!, "aes"); - print(ciphertext ?? 'null'); - - Uint8List? plaintext = - await _nativeCryptoPlatform.decrypt(ciphertext!, sk, "aes"); - print(plaintext ?? 'null'); - - try { - platformVersion = 'Unknown platform version'; - } on PlatformException { - platformVersion = 'Failed to get platform version.'; - } - - // If the widget was removed from the tree while the asynchronous platform - // message was in flight, we want to discard the reply rather than calling - // setState to update our non-existent appearance. - if (!mounted) return; - - setState(() { - _platformVersion = platformVersion; - }); - } +class MyHomePage extends StatelessWidget { + const MyHomePage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { - return MaterialApp( - home: Scaffold( - appBar: AppBar( - title: const Text('Plugin example app'), - ), - body: Center( - child: Text('Running on: $_platformVersion\n'), - ), + run(); + return Scaffold( + appBar: AppBar( + title: const Text('Plugin example app'), + ), + body: const Center( + child: Text("Check the console"), ), ); } diff --git a/native_crypto_android/example/pubspec.lock b/native_crypto_android/example/pubspec.lock index ee5a879..ecc71be 100644 --- a/native_crypto_android/example/pubspec.lock +++ b/native_crypto_android/example/pubspec.lock @@ -108,7 +108,7 @@ packages: path: "../../native_crypto_platform_interface" relative: true source: path - version: "0.0.7" + version: "0.1.0" path: dependency: transitive description: diff --git a/native_crypto_ios/example/lib/main.dart b/native_crypto_ios/example/lib/main.dart index 6636074..ab72cef 100644 --- a/native_crypto_ios/example/lib/main.dart +++ b/native_crypto_ios/example/lib/main.dart @@ -1,78 +1,84 @@ +// Author: Hugo Pointcheval +// Email: git@pcl.ovh +// ----- +// File: main.dart +// Created Date: 27/12/2021 22:43:20 +// Last Modified: 28/12/2021 18:19:37 +// ----- +// Copyright (c) 2021 + import 'dart:typed_data'; import 'package:flutter/material.dart'; -import 'dart:async'; - -import 'package:flutter/services.dart'; import 'package:native_crypto_platform_interface/native_crypto_platform_interface.dart'; void main() { runApp(const MyApp()); } -class MyApp extends StatefulWidget { +void run() async { + NativeCryptoPlatform _nativeCryptoPlatform = NativeCryptoPlatform.instance; + + debugPrint("Benchmark"); + + int size = 25; + int iterations = 25; + int totalEnc = 0; + int totalDec = 0; + + debugPrint("Size: $size MB"); + Uint8List? secretKey = await _nativeCryptoPlatform.generateSecretKey(128); + + debugPrint("Generate random data..."); + var before = DateTime.now(); + Uint8List data = Uint8List(size * 1024 * 1024); + var after = DateTime.now(); + debugPrint("Generate random data: ${after.difference(before).inMilliseconds} ms"); + + for (var _ in List.generate(iterations, (index) => index)) { + debugPrint("Encrypt data..."); + before = DateTime.now(); + Uint8List? encrypted = await _nativeCryptoPlatform.encrypt(data, secretKey!, "aes"); + after = DateTime.now(); + debugPrint("Encrypt data: ${after.difference(before).inMilliseconds} ms"); + totalEnc += after.difference(before).inMilliseconds; + + debugPrint("Decrypt data..."); + before = DateTime.now(); + data = (await _nativeCryptoPlatform.decrypt(encrypted!, secretKey, "aes"))!; + after = DateTime.now(); + debugPrint("Decrypt data: ${after.difference(before).inMilliseconds} ms"); + totalDec += after.difference(before).inMilliseconds; + } + + debugPrint("Average Encrypt: ${totalEnc/iterations} ms for $size MB"); + debugPrint("Average Decrypt: ${totalDec/iterations} ms for $size MB"); + +} + +class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override - State createState() => _MyAppState(); + Widget build(BuildContext context) { + return const MaterialApp( + home: MyHomePage(), + ); + } } -class _MyAppState extends State { - String _platformVersion = 'Unknown'; - - @override - void initState() { - super.initState(); - initPlatformState(); - } - - // Platform messages are asynchronous, so we initialize in an async method. - Future initPlatformState() async { - NativeCryptoPlatform _nativeCryptoPlatform = NativeCryptoPlatform.instance; - String platformVersion; - // Platform messages may fail, so we use a try/catch PlatformException. - // We also handle the message potentially returning null. - Uint8List? sk = await _nativeCryptoPlatform.generateSecretKey(256); - print(sk ?? 'null'); - - Uint8List? ciphertext = await _nativeCryptoPlatform.encrypt(Uint8List.fromList("abc".codeUnits), sk!, "aes"); - print(ciphertext ?? 'null'); - - Uint8List? plaintext = await _nativeCryptoPlatform.decrypt(ciphertext!, sk, "aes"); - print(plaintext ?? 'null'); - - Uint8List? kp = await _nativeCryptoPlatform.generateKeyPair(); - print(kp!.sublist(0, 31)); - print(kp.sublist(32).length); - - Uint8List? sharedSecret = await _nativeCryptoPlatform.generateSharedSecretKey(Uint8List.fromList("salt".codeUnits), 32, kp.sublist(0, 31), kp.sublist(32), "sha256"); - - try { - platformVersion = 'Unknown platform version'; - } on PlatformException { - platformVersion = 'Failed to get platform version.'; - } - - // If the widget was removed from the tree while the asynchronous platform - // message was in flight, we want to discard the reply rather than calling - // setState to update our non-existent appearance. - if (!mounted) return; - - setState(() { - _platformVersion = platformVersion; - }); - } +class MyHomePage extends StatelessWidget { + const MyHomePage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { - return MaterialApp( - home: Scaffold( - appBar: AppBar( - title: const Text('Plugin example app'), - ), - body: Center( - child: Text('Running on: $_platformVersion\n'), - ), + run(); + return Scaffold( + appBar: AppBar( + title: const Text('Plugin example app'), + ), + body: const Center( + child: Text("Check the console"), ), ); }