Fix/Update #1
| @ -3,10 +3,11 @@ | |||||||
| // ----- | // ----- | ||||||
| // File: benchmark_page.dart | // File: benchmark_page.dart | ||||||
| // Created Date: 28/12/2021 15:12:39 | // Created Date: 28/12/2021 15:12:39 | ||||||
| // Last Modified: 25/05/2022 15:26:42 | // Last Modified: 25/05/2022 17:16:12 | ||||||
| // ----- | // ----- | ||||||
| // Copyright (c) 2021 | // Copyright (c) 2021 | ||||||
| 
 | 
 | ||||||
|  | import 'dart:math'; | ||||||
| import 'dart:typed_data'; | import 'dart:typed_data'; | ||||||
| 
 | 
 | ||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| @ -24,10 +25,12 @@ class BenchmarkPage extends ConsumerWidget { | |||||||
|   final Output keyContent = Output(); |   final Output keyContent = Output(); | ||||||
|   final Output benchmarkStatus = Output(large: true); |   final Output benchmarkStatus = Output(large: true); | ||||||
| 
 | 
 | ||||||
|   Future<void> _benchmarkEncryptionOnly( |   Future<void> _benchmark( | ||||||
|     WidgetRef ref, |     WidgetRef ref, | ||||||
|     Cipher cipher, |     Cipher cipher, { | ||||||
|   ) async { |     bool usePc = false, | ||||||
|  |     bool encryptionOnly = false, | ||||||
|  |   }) async { | ||||||
|     Session state = ref.read(sessionProvider.state).state; |     Session state = ref.read(sessionProvider.state).state; | ||||||
|     AesGcm pc = AesGcm(); |     AesGcm pc = AesGcm(); | ||||||
| 
 | 
 | ||||||
| @ -37,79 +40,47 @@ class BenchmarkPage extends ConsumerWidget { | |||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     benchmarkStatus.print("Benchmark 2/4/8/16/32/64/128/256MB\n"); |     List<int> testedSizes = [2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50]; | ||||||
|     List<int> testedSizes = [2, 4, 8, 16, 32, 64, 128, 256]; |     int multiplier = pow(2, 20).toInt(); // MiB | ||||||
|     String csv = "size;encryption time\n"; |  | ||||||
| 
 | 
 | ||||||
|  |     benchmarkStatus.print("[Benchmark] Sizes: ${testedSizes.join('/')}MiB\n"); | ||||||
|  |     benchmarkStatus.appendln( | ||||||
|  |         "[Benchmark] Engine: " + (usePc ? " PointyCastle" : " NativeCrypto")); | ||||||
|  |     benchmarkStatus.appendln("[Benchmark] Test: " + | ||||||
|  |         (encryptionOnly ? " Encryption Only" : " Encryption & Decryption")); | ||||||
|  |     benchmarkStatus.appendln( | ||||||
|  |         '[Benchmark] bytesCountPerChunk: ${Cipher.bytesCountPerChunk} bytes/chunk'); | ||||||
|  | 
 | ||||||
|  |     String csv = encryptionOnly | ||||||
|  |         ? "Run;Size (B);Encryption Time (ms)\n" | ||||||
|  |         : "Run;Size (B);Encryption Time (ms);Decryption Time (ms)\n"; | ||||||
|  | 
 | ||||||
|  |     int run = 0; | ||||||
|     var beforeBench = DateTime.now(); |     var beforeBench = DateTime.now(); | ||||||
|     Cipher.bytesCountPerChunk = Cipher.bytesCountPerChunk; | 
 | ||||||
|     benchmarkStatus |  | ||||||
|         .append('[Benchmark] ${Cipher.bytesCountPerChunk} bytes/chunk \n'); |  | ||||||
|     for (int size in testedSizes) { |     for (int size in testedSizes) { | ||||||
|       var b = Uint8List(size * 1000000); |       run++; | ||||||
|       csv += "${size * 1000000};"; |       final StringBuffer csvLine = StringBuffer(); | ||||||
|  |       final dummyBytes = Uint8List(size * multiplier); | ||||||
|  |       csvLine.write('$run;${size * multiplier};'); | ||||||
| 
 | 
 | ||||||
|       // Encryption |       // Encryption | ||||||
|       var before = DateTime.now(); |  | ||||||
|       var encryptedBigFile = await cipher.encrypt(b); |  | ||||||
|       var after = DateTime.now(); |  | ||||||
| 
 |  | ||||||
|       var benchmark = |  | ||||||
|           after.millisecondsSinceEpoch - before.millisecondsSinceEpoch; |  | ||||||
|       benchmarkStatus.append('[$size MB] Encryption took $benchmark ms\n'); |  | ||||||
| 
 |  | ||||||
|       csv += "$benchmark\n"; |  | ||||||
|     } |  | ||||||
|     var afterBench = DateTime.now(); |  | ||||||
|     var benchmark = |  | ||||||
|         afterBench.millisecondsSinceEpoch - beforeBench.millisecondsSinceEpoch; |  | ||||||
|     var sum = testedSizes.reduce((a, b) => a + b); |  | ||||||
|     benchmarkStatus.append( |  | ||||||
|         'Benchmark finished.\nGenerated, and encrypted $sum MB in $benchmark ms'); |  | ||||||
|     debugPrint("[Benchmark cvs]\n$csv"); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Future<void> _benchmark(WidgetRef ref, Cipher cipher, |  | ||||||
|       {bool usePc = false}) async { |  | ||||||
|     Session state = ref.read(sessionProvider.state).state; |  | ||||||
|     AesGcm pc = AesGcm(); |  | ||||||
| 
 |  | ||||||
|     if (state.secretKey.bytes.isEmpty) { |  | ||||||
|       benchmarkStatus |  | ||||||
|           .print('No SecretKey!\nGo in Key tab and generate or derive one.'); |  | ||||||
|       return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     benchmarkStatus.print("Benchmark 2/4/8/16/32/64/128/256MB\n"); |  | ||||||
|     List<int> testedSizes = [2, 4, 8, 16, 32, 64, 128, 256]; |  | ||||||
|     String csv = "size;encryption time;decryption time;crypto time\n"; |  | ||||||
| 
 |  | ||||||
|     var beforeBench = DateTime.now(); |  | ||||||
|     Cipher.bytesCountPerChunk = Cipher.bytesCountPerChunk; |  | ||||||
|     benchmarkStatus |  | ||||||
|         .append('[Benchmark] ${Cipher.bytesCountPerChunk} bytes/chunk \n'); |  | ||||||
|     for (int size in testedSizes) { |  | ||||||
|       var b = Uint8List(size * 1000000); |  | ||||||
|       csv += "${size * 1000000};"; |  | ||||||
|       var cryptoTime = 0; |  | ||||||
| 
 |  | ||||||
|       // Encryption |  | ||||||
|       var before = DateTime.now(); |  | ||||||
|       Object encryptedBigFile; |       Object encryptedBigFile; | ||||||
|  |       var before = DateTime.now(); | ||||||
|       if (usePc) { |       if (usePc) { | ||||||
|         encryptedBigFile = pc.encrypt(b, state.secretKey.bytes); |         encryptedBigFile = pc.encrypt(dummyBytes, state.secretKey.bytes); | ||||||
|       } else { |       } else { | ||||||
|         encryptedBigFile = await cipher.encrypt(b); |         encryptedBigFile = await cipher.encrypt(dummyBytes); | ||||||
|       } |       } | ||||||
|       var after = DateTime.now(); |       var after = DateTime.now(); | ||||||
| 
 | 
 | ||||||
|       var benchmark = |       var benchmark = | ||||||
|           after.millisecondsSinceEpoch - before.millisecondsSinceEpoch; |           after.millisecondsSinceEpoch - before.millisecondsSinceEpoch; | ||||||
|       benchmarkStatus.append('[$size MB] Encryption took $benchmark ms\n'); |       benchmarkStatus | ||||||
| 
 |           .appendln('[Benchmark] ${size}MiB => Encryption took $benchmark ms'); | ||||||
|       csv += "$benchmark;"; |       csvLine.write('$benchmark'); | ||||||
|       cryptoTime += benchmark; |  | ||||||
| 
 | 
 | ||||||
|  |       if (!encryptionOnly) { | ||||||
|         // Decryption |         // Decryption | ||||||
|         before = DateTime.now(); |         before = DateTime.now(); | ||||||
|         if (usePc) { |         if (usePc) { | ||||||
| @ -118,21 +89,23 @@ class BenchmarkPage extends ConsumerWidget { | |||||||
|           await cipher.decrypt(encryptedBigFile as CipherText); |           await cipher.decrypt(encryptedBigFile as CipherText); | ||||||
|         } |         } | ||||||
|         after = DateTime.now(); |         after = DateTime.now(); | ||||||
| 
 |         benchmark = | ||||||
|       benchmark = after.millisecondsSinceEpoch - before.millisecondsSinceEpoch; |             after.millisecondsSinceEpoch - before.millisecondsSinceEpoch; | ||||||
|       benchmarkStatus.append('[$size MB] Decryption took $benchmark ms\n'); |         benchmarkStatus | ||||||
| 
 |             .appendln('[Benchmark] ${size}MiB => Decryption took $benchmark ms'); | ||||||
|       csv += "$benchmark;"; |         csvLine.write(';$benchmark'); | ||||||
|       cryptoTime += benchmark; |       } | ||||||
|       csv += "$cryptoTime\n"; |       csv += csvLine.toString() + '\n'; | ||||||
|     } |     } | ||||||
|     var afterBench = DateTime.now(); |     var afterBench = DateTime.now(); | ||||||
|     var benchmark = |     var benchmark = | ||||||
|         afterBench.millisecondsSinceEpoch - beforeBench.millisecondsSinceEpoch; |         afterBench.millisecondsSinceEpoch - beforeBench.millisecondsSinceEpoch; | ||||||
|     var sum = testedSizes.reduce((a, b) => a + b); |     var sum = testedSizes.reduce((a, b) => a + b); | ||||||
|     benchmarkStatus.append( |     benchmarkStatus | ||||||
|         'Benchmark finished.\nGenerated, encrypted and decrypted $sum MB in $benchmark ms'); |         .appendln('[Benchmark] Finished: ${sum}MiB in $benchmark ms'); | ||||||
|     debugPrint("[Benchmark cvs]\n$csv"); |     benchmarkStatus.appendln('[Benchmark] Check the console for csv data'); | ||||||
|  |     benchmarkStatus.appendln(csv); | ||||||
|  |     print(csv); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   void _clear() { |   void _clear() { | ||||||
| @ -174,37 +147,39 @@ class BenchmarkPage extends ConsumerWidget { | |||||||
|               alignment: Alignment.centerLeft, |               alignment: Alignment.centerLeft, | ||||||
|             ), |             ), | ||||||
|             keyContent, |             keyContent, | ||||||
|             Column( |             Wrap( | ||||||
|               crossAxisAlignment: CrossAxisAlignment.start, |  | ||||||
|               children: [ |  | ||||||
|                 Row( |  | ||||||
|                   mainAxisAlignment: MainAxisAlignment.spaceEvenly, |  | ||||||
|               children: [ |               children: [ | ||||||
|                 Button( |                 Button( | ||||||
|                   () => _benchmark(ref, cipher), |                   () => _benchmark(ref, cipher), | ||||||
|                   "NativeCrypto", |                   "NativeCrypto", | ||||||
|                 ), |                 ), | ||||||
|  |                 const SizedBox(width: 8), | ||||||
|                 Button( |                 Button( | ||||||
|                   () => _benchmark(ref, cipher, usePc: true), |                   () => _benchmark(ref, cipher, usePc: true), | ||||||
|                   "PointyCastle", |                   "PointyCastle", | ||||||
|                 ), |                 ), | ||||||
|                   ], |                 const SizedBox(width: 8), | ||||||
|                 ), |  | ||||||
|                 Row( |  | ||||||
|                   mainAxisAlignment: MainAxisAlignment.spaceEvenly, |  | ||||||
|                   children: [ |  | ||||||
|                 Button( |                 Button( | ||||||
|                       () => _benchmarkEncryptionOnly(ref, cipher), |                   () => _benchmark(ref, cipher, encryptionOnly: true), | ||||||
|                       "NC Persistence", |                   "NC Encryption Only", | ||||||
|                 ), |                 ), | ||||||
|  |                 const SizedBox(width: 8), | ||||||
|  |                 Button( | ||||||
|  |                   () => _benchmark( | ||||||
|  |                     ref, | ||||||
|  |                     cipher, | ||||||
|  |                     usePc: true, | ||||||
|  |                     encryptionOnly: true, | ||||||
|  |                   ), | ||||||
|  |                   "PC Encryption Only", | ||||||
|  |                 ), | ||||||
|  |                 const SizedBox(width: 8), | ||||||
|                 Button( |                 Button( | ||||||
|                   _clear, |                   _clear, | ||||||
|                   "Clear", |                   "Clear", | ||||||
|                 ), |                 ), | ||||||
|               ], |               ], | ||||||
|             ), |             ), | ||||||
|               ], |  | ||||||
|             ), |  | ||||||
|             benchmarkStatus, |             benchmarkStatus, | ||||||
|           ], |           ], | ||||||
|         ), |         ), | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ | |||||||
| // ----- | // ----- | ||||||
| // File: output.dart | // File: output.dart | ||||||
| // Created Date: 28/12/2021 13:31:39 | // Created Date: 28/12/2021 13:31:39 | ||||||
| // Last Modified: 28/12/2021 14:12:11 | // Last Modified: 25/05/2022 16:39:39 | ||||||
| // ----- | // ----- | ||||||
| // Copyright (c) 2021 | // Copyright (c) 2021 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user