From 7627e15a48e3b4cf4e2f5305164edebd2c668d35 Mon Sep 17 00:00:00 2001
From: m2049r <miner2049er@women-at-work.org>
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 b1506eb5..05d2b1e0 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 6db06317..2e3521ca 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);