From 7627e15a48e3b4cf4e2f5305164edebd2c668d35 Mon Sep 17 00:00:00 2001 From: m2049r Date: Sun, 10 Jun 2018 10:57:24 +0200 Subject: [PATCH] Fix keystore null (#308) * avoid crash if input to large * avoid NPE if wallet key not found --- .../com/m2049r/xmrwallet/util/BitcoinAddressValidator.java | 2 ++ .../java/com/m2049r/xmrwallet/util/KeyStoreHelper.java | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/m2049r/xmrwallet/util/BitcoinAddressValidator.java b/app/src/main/java/com/m2049r/xmrwallet/util/BitcoinAddressValidator.java index b1506eb..05d2b1e 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/util/BitcoinAddressValidator.java +++ b/app/src/main/java/com/m2049r/xmrwallet/util/BitcoinAddressValidator.java @@ -66,6 +66,8 @@ public class BitcoinAddressValidator { byte[] result = new byte[25]; byte[] numBytes = num.toByteArray(); + if (numBytes.length > result.length) return null; + if (num.bitLength() == 200) { System.arraycopy(numBytes, 1, result, 0, 25); } else { diff --git a/app/src/main/java/com/m2049r/xmrwallet/util/KeyStoreHelper.java b/app/src/main/java/com/m2049r/xmrwallet/util/KeyStoreHelper.java index 6db0631..2e3521c 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/util/KeyStoreHelper.java +++ b/app/src/main/java/com/m2049r/xmrwallet/util/KeyStoreHelper.java @@ -284,7 +284,9 @@ public class KeyStoreHelper { private static byte[] decrypt(String alias, byte[] data) { try { - PrivateKey privateKey = getPrivateKeyEntry(alias).getPrivateKey(); + KeyStore.PrivateKeyEntry pke = getPrivateKeyEntry(alias); + if (pke == null) return null; + PrivateKey privateKey = pke.getPrivateKey(); Cipher cipher = Cipher.getInstance(SecurityConstants.CIPHER_RSA_ECB_PKCS1); cipher.init(Cipher.DECRYPT_MODE, privateKey); @@ -305,7 +307,8 @@ public class KeyStoreHelper { */ private static byte[] signData(String alias, byte[] data) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException { - + KeyStore.PrivateKeyEntry pke = getPrivateKeyEntry(alias); + if (pke == null) return null; PrivateKey privateKey = getPrivateKeyEntry(alias).getPrivateKey(); Signature s = Signature.getInstance(SecurityConstants.SIGNATURE_SHA256withRSA); s.initSign(privateKey);