From ee8f325bc02f4a5c75ca0695ab0af4bbce73fc49 Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Fri, 26 Feb 2016 10:03:42 -0800 Subject: [PATCH] add timing info for flx creation --- packages/flutter_tools/lib/src/commands/run.dart | 2 +- packages/flutter_tools/lib/src/flx.dart | 8 ++++++-- packages/flx/lib/bundle.dart | 2 +- packages/flx/lib/signing.dart | 13 +++++++++---- packages/flx/test/signing_test.dart | 2 +- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart index d6d466cb671..f35f7c7d1c6 100644 --- a/packages/flutter_tools/lib/src/commands/run.dart +++ b/packages/flutter_tools/lib/src/commands/run.dart @@ -123,7 +123,7 @@ class RunCommand extends RunCommandBase { debugPort: debugPort ); - printTrace('Finished start command.'); + printTrace('Finished $name command.'); return result; } } diff --git a/packages/flutter_tools/lib/src/flx.dart b/packages/flutter_tools/lib/src/flx.dart index cf127073b11..421932b1bde 100644 --- a/packages/flutter_tools/lib/src/flx.dart +++ b/packages/flutter_tools/lib/src/flx.dart @@ -256,7 +256,7 @@ Future build( Future assemble({ Map manifestDescriptor: const {}, - ArchiveFile snapshotFile: null, + ArchiveFile snapshotFile, String assetBasePath: defaultAssetBasePath, String materialAssetBasePath: defaultMaterialAssetBasePath, String outputPath: defaultFlxOutputPath, @@ -287,11 +287,15 @@ Future assemble({ if (fontManifest != null) archive.addFile(fontManifest); - await CipherParameters.get().seedRandom(); + printTrace('Calling CipherParameters.seedRandom().'); + CipherParameters.get().seedRandom(); AsymmetricKeyPair keyPair = keyPairFromPrivateKeyFileSync(privateKeyPath); + printTrace('KeyPair from $privateKeyPath: $keyPair.'); + printTrace('Encoding zip file.'); Uint8List zipBytes = new Uint8List.fromList(new ZipEncoder().encode(archive)); ensureDirectoryExists(outputPath); + printTrace('Creating flx at ${outputPath}.'); Bundle bundle = new Bundle.fromContent( path: outputPath, manifest: manifestDescriptor, diff --git a/packages/flx/lib/bundle.dart b/packages/flx/lib/bundle.dart index 12da0825ff1..0b7fe3725cd 100644 --- a/packages/flx/lib/bundle.dart +++ b/packages/flx/lib/bundle.dart @@ -72,7 +72,7 @@ class Bundle { this.path, this.manifest, contentBytes, - AsymmetricKeyPair keyPair: null + AsymmetricKeyPair keyPair }) : _contentBytes = contentBytes { assert(path != null); assert(manifest != null); diff --git a/packages/flx/lib/signing.dart b/packages/flx/lib/signing.dart index 0c476fe9840..68c86f95438 100644 --- a/packages/flx/lib/signing.dart +++ b/packages/flx/lib/signing.dart @@ -20,6 +20,7 @@ class CipherParameters { final String signerAlgorithm = 'SHA-256/ECDSA'; final String hashAlgorithm = 'SHA-256'; final ECDomainParameters domain = new ECDomainParameters('prime256v1'); + SecureRandom get random { if (_random == null) _initRandom(new Uint8List(16), new Uint8List(16)); @@ -29,12 +30,16 @@ class CipherParameters { // Seeds our secure random number generator using data from /dev/urandom. // Disclaimer: I don't really understand why we need 2 parameters for // pointycastle's API. - Future seedRandom() async { + void seedRandom() { + if (_random != null) + return; + try { - RandomAccessFile file = await new File("/dev/urandom").open(); - Uint8List key = new Uint8List.fromList(await file.read(16)); - Uint8List iv = new Uint8List.fromList(await file.read(16)); + RandomAccessFile file = new File("/dev/urandom").openSync(); + Uint8List key = new Uint8List.fromList(file.readSync(16)); + Uint8List iv = new Uint8List.fromList(file.readSync(16)); _initRandom(key, iv); + file.closeSync(); } on FileSystemException { // TODO(mpcomplete): need an entropy source on Windows. We might get this // for free from Dart itself soon. diff --git a/packages/flx/test/signing_test.dart b/packages/flx/test/signing_test.dart index 6c68a5eb5f0..46e746ea30b 100644 --- a/packages/flx/test/signing_test.dart +++ b/packages/flx/test/signing_test.dart @@ -34,7 +34,7 @@ main() async { // Set up a key generator. CipherParameters cipher = CipherParameters.get(); - await cipher.seedRandom(); + cipher.seedRandom(); ECKeyGeneratorParameters ecParams = new ECKeyGeneratorParameters(cipher.domain); ParametersWithRandom keyGeneratorParams = new ParametersWithRandom(ecParams, cipher.random);