diff --git a/app/src/main/java/com/limelight/nvstream/http/PairingManager.java b/app/src/main/java/com/limelight/nvstream/http/PairingManager.java index d55fc0a4..65994b61 100644 --- a/app/src/main/java/com/limelight/nvstream/http/PairingManager.java +++ b/app/src/main/java/com/limelight/nvstream/http/PairingManager.java @@ -98,10 +98,21 @@ public class PairingManager { System.arraycopy(pin.getBytes("UTF-8"), 0, saltedPin, salt.length, pin.length()); return saltedPin; } + + private static Signature getSha256SignatureInstanceForKey(Key key) throws NoSuchAlgorithmException { + switch (key.getAlgorithm()) { + case "RSA": + return Signature.getInstance("SHA256withRSA"); + case "EC": + return Signature.getInstance("SHA256withECDSA"); + default: + throw new NoSuchAlgorithmException("Unhandled key algorithm: " + key.getAlgorithm()); + } + } private static boolean verifySignature(byte[] data, byte[] signature, Certificate cert) { try { - Signature sig = Signature.getInstance("SHA256withRSA"); + Signature sig = PairingManager.getSha256SignatureInstanceForKey(cert.getPublicKey()); sig.initVerify(cert.getPublicKey()); sig.update(data); return sig.verify(signature); @@ -113,7 +124,7 @@ public class PairingManager { private static byte[] signData(byte[] data, PrivateKey key) { try { - Signature sig = Signature.getInstance("SHA256withRSA"); + Signature sig = PairingManager.getSha256SignatureInstanceForKey(key); sig.initSign(key); sig.update(data); return sig.sign();