From a3106bffca1ce1e0e53458c476e098d10a6f7b13 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 27 Sep 2014 15:42:12 -0700 Subject: [PATCH] Speed up initial discovery by generating a new keypair while discovering machines. --- src/com/limelight/PcView.java | 4 ++++ .../limelight/binding/crypto/AndroidCryptoProvider.java | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/com/limelight/PcView.java b/src/com/limelight/PcView.java index ae22092a..04dbf8ab 100644 --- a/src/com/limelight/PcView.java +++ b/src/com/limelight/PcView.java @@ -6,6 +6,7 @@ import java.net.InetAddress; import java.net.UnknownHostException; import com.limelight.binding.PlatformBinding; +import com.limelight.binding.crypto.AndroidCryptoProvider; import com.limelight.computers.ComputerManagerListener; import com.limelight.computers.ComputerManagerService; import com.limelight.nvstream.http.ComputerDetails; @@ -59,6 +60,9 @@ public class PcView extends Activity { // Start updates startComputerUpdates(); + + // Force a keypair to be generated early to avoid discovery delays + new AndroidCryptoProvider(PcView.this).getClientCertificate(); } }.start(); } diff --git a/src/com/limelight/binding/crypto/AndroidCryptoProvider.java b/src/com/limelight/binding/crypto/AndroidCryptoProvider.java index 4df63dca..242749f3 100644 --- a/src/com/limelight/binding/crypto/AndroidCryptoProvider.java +++ b/src/com/limelight/binding/crypto/AndroidCryptoProvider.java @@ -51,6 +51,8 @@ public class AndroidCryptoProvider implements LimelightCryptoProvider { private RSAPrivateKey key; private byte[] pemCertBytes; + private static Object globalCryptoLock = new Object(); + static { // Install the Bouncy Castle provider Security.addProvider(new BouncyCastleProvider()); @@ -208,7 +210,7 @@ public class AndroidCryptoProvider implements LimelightCryptoProvider { public X509Certificate getClientCertificate() { // Use a lock here to ensure only one guy will be generating or loading // the certificate and key at a time - synchronized (this) { + synchronized (globalCryptoLock) { // Return a loaded cert if we have one if (cert != null) { return cert; @@ -235,7 +237,7 @@ public class AndroidCryptoProvider implements LimelightCryptoProvider { public RSAPrivateKey getClientPrivateKey() { // Use a lock here to ensure only one guy will be generating or loading // the certificate and key at a time - synchronized (this) { + synchronized (globalCryptoLock) { // Return a loaded key if we have one if (key != null) { return key; @@ -260,7 +262,7 @@ public class AndroidCryptoProvider implements LimelightCryptoProvider { } public byte[] getPemEncodedClientCertificate() { - synchronized (this) { + synchronized (globalCryptoLock) { // Call our helper function to do the cert loading/generation for us getClientCertificate();