summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2013-09-25 16:11:09 -0700
committerKenny Root <kroot@google.com>2013-09-25 16:13:35 -0700
commitaffc5f44e461331f0e768791ee55911912500e0c (patch)
tree0d3e920632f6fce19aad0f33d56f3c7493c40b40
parent5444a8ef87dc014f79914d78f468cc65fda10c77 (diff)
downloadlibcore-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.java4
-rw-r--r--luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/MacTest.java27
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;