diff options
author | Kenny Root <kroot@google.com> | 2013-09-25 16:11:09 -0700 |
---|---|---|
committer | Kenny Root <kroot@google.com> | 2013-09-25 16:13:35 -0700 |
commit | affc5f44e461331f0e768791ee55911912500e0c (patch) | |
tree | 0d3e920632f6fce19aad0f33d56f3c7493c40b40 | |
parent | 5444a8ef87dc014f79914d78f468cc65fda10c77 (diff) | |
download | libcore-affc5f44e461331f0e768791ee55911912500e0c.zip libcore-affc5f44e461331f0e768791ee55911912500e0c.tar.gz libcore-affc5f44e461331f0e768791ee55911912500e0c.tar.bz2 |
Do not throw exception on Mac#reset
OpenSSLMac was not checking whether it was initialized before
dereferencing its macKey field. This caused callers to Mac#reset()
before Mac#init() to get a NullPointerException.
Bug: https://code.google.com/p/android/issues/detail?id=58179
Change-Id: I8523983fec578079a66a04d585c1ddbe7732575e
-rw-r--r-- | crypto/src/main/java/org/conscrypt/OpenSSLMac.java | 4 | ||||
-rw-r--r-- | luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/MacTest.java | 27 |
2 files changed, 18 insertions, 13 deletions
diff --git a/crypto/src/main/java/org/conscrypt/OpenSSLMac.java b/crypto/src/main/java/org/conscrypt/OpenSSLMac.java index 824e6b9..ed9ea52 100644 --- a/crypto/src/main/java/org/conscrypt/OpenSSLMac.java +++ b/crypto/src/main/java/org/conscrypt/OpenSSLMac.java @@ -94,6 +94,10 @@ public abstract class OpenSSLMac extends MacSpi { } private void reset() { + final OpenSSLKey macKey = this.macKey; + if (macKey == null) { + return; + } NativeCrypto.EVP_DigestSignInit(ctx.getContext(), evp_md, macKey.getPkeyContext()); } diff --git a/luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/MacTest.java b/luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/MacTest.java index b1559f5..842a00a 100644 --- a/luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/MacTest.java +++ b/luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/MacTest.java @@ -30,6 +30,7 @@ import java.security.NoSuchProviderException; import java.security.Provider; import java.security.Security; import java.security.spec.PSSParameterSpec; +import java.util.ArrayList; import java.util.Arrays; import javax.crypto.Mac; @@ -90,20 +91,19 @@ public class MacTest extends TestCase { } } - private Mac [] createMacs() { + private Mac[] createMacs() throws Exception { if (!DEFSupported) { fail(NotSupportedMsg); return null; } - try { - Mac m [] = new Mac[3]; - m[0] = Mac.getInstance(defaultAlgorithm); - m[1] = Mac.getInstance(defaultAlgorithm, defaultProvider); - m[2] = Mac.getInstance(defaultAlgorithm, defaultProviderName); - return m; - } catch (Exception e) { - return null; + ArrayList<Mac> macList = new ArrayList<Mac>(); + macList.add(Mac.getInstance(defaultAlgorithm)); + macList.add(Mac.getInstance(defaultAlgorithm, defaultProvider)); + macList.add(Mac.getInstance(defaultAlgorithm, defaultProviderName)); + for (Provider p : Security.getProviders("Mac." + defaultAlgorithm)) { + macList.add(Mac.getInstance(defaultAlgorithm, p)); } + return macList.toArray(new Mac[macList.size()]); } /** @@ -547,7 +547,7 @@ public class MacTest extends TestCase { * Test for <code>clone()</code> method * Assertion: returns Mac object or throws CloneNotSupportedException */ - public void testMacClone() throws NoSuchAlgorithmException, CloneNotSupportedException { + public void testMacClone() throws Exception { if (!DEFSupported) { fail(NotSupportedMsg); return; @@ -588,6 +588,7 @@ public class MacTest extends TestCase { SecretKeySpec sks1 = new SecretKeySpec(b, "RSA"); for (int i = 0; i < macs.length; i++) { + macs[i].reset(); macs[i].init(sks); try { macs[i].init(sks1, algPSS); @@ -699,7 +700,7 @@ public class MacTest extends TestCase { * Test for <code>clone()</code> method * Assertion: clone if provider is clo */ - public void testClone() { + public void testClone() throws Exception { if (!DEFSupported) { fail(NotSupportedMsg); return; @@ -720,7 +721,7 @@ public class MacTest extends TestCase { * Test for <code>getMacLength()</code> method * Assertion: return Mac length */ - public void testGetMacLength() { + public void testGetMacLength() throws Exception { if (!DEFSupported) { fail(NotSupportedMsg); return; @@ -736,7 +737,7 @@ public class MacTest extends TestCase { * Test for <code>reset()</code> method * Assertion: return Mac length */ - public void testReset() throws InvalidKeyException { + public void testReset() throws Exception { if (!DEFSupported) { fail(NotSupportedMsg); return; |