8153948: sun/security/mscapi/ShortRSAKey1024.sh fails with "Field length overflow"
Reviewed-by: coffeys, xuelei
--- a/jdk/test/ProblemList.txt Mon Jul 04 10:50:28 2016 +0000
+++ b/jdk/test/ProblemList.txt Mon Jul 04 16:25:11 2016 +0300
@@ -212,8 +212,6 @@
sun/security/tools/keytool/ListKeychainStore.sh 8156889 macosx-all
-sun/security/mscapi/ShortRSAKey1024.sh 8153948 windows-all
-
sun/security/tools/jarsigner/warnings/BadKeyUsageTest.java 8026393 generic-all
sun/security/pkcs11/Cipher/ReinitCipher.java 8077138,8023434 windows-all
--- a/jdk/test/sun/security/mscapi/ShortRSAKeyWithinTLS.java Mon Jul 04 10:50:28 2016 +0000
+++ b/jdk/test/sun/security/mscapi/ShortRSAKeyWithinTLS.java Mon Jul 04 16:25:11 2016 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,10 @@
*/
import java.io.*;
+import java.net.*;
+import java.util.*;
import java.security.*;
+import java.security.cert.*;
import javax.net.*;
import javax.net.ssl.*;
@@ -71,22 +74,34 @@
void doServerSide() throws Exception {
// load the key store
- KeyStore ks = KeyStore.getInstance("Windows-MY", "SunMSCAPI");
- ks.load(null, null);
+ serverKS = KeyStore.getInstance("Windows-MY", "SunMSCAPI");
+ serverKS.load(null, null);
System.out.println("Loaded keystore: Windows-MY");
// check key size
- checkKeySize(ks);
+ checkKeySize(serverKS);
// initialize the SSLContext
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
- kmf.init(ks, null);
+ kmf.init(serverKS, null);
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
- tmf.init(ks);
+ tmf.init(serverKS);
+ TrustManager[] tms = tmf.getTrustManagers();
+ if (tms == null || tms.length == 0) {
+ throw new Exception("unexpected trust manager implementation");
+ } else {
+ if (!(tms[0] instanceof X509TrustManager)) {
+ throw new Exception("unexpected trust manager" +
+ " implementation: " +
+ tms[0].getClass().getCanonicalName());
+ }
+ }
+ serverTM = new MyExtendedX509TM((X509TrustManager)tms[0]);
+ tms = new TrustManager[] {serverTM};
SSLContext ctx = SSLContext.getInstance("TLS");
- ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
+ ctx.init(kmf.getKeyManagers(), tms, null);
ServerSocketFactory ssf = ctx.getServerSocketFactory();
SSLServerSocket sslServerSocket = (SSLServerSocket)
@@ -228,6 +243,8 @@
Thread clientThread = null;
Thread serverThread = null;
+ KeyStore serverKS;
+ MyExtendedX509TM serverTM;
/*
* Primary constructor, used to drive remainder of the test.
@@ -348,5 +365,60 @@
}
}
}
+
+
+ class MyExtendedX509TM extends X509ExtendedTrustManager
+ implements X509TrustManager {
+
+ X509TrustManager tm;
+
+ MyExtendedX509TM(X509TrustManager tm) {
+ this.tm = tm;
+ }
+
+ public void checkClientTrusted(X509Certificate chain[], String authType)
+ throws CertificateException {
+ tm.checkClientTrusted(chain, authType);
+ }
+
+ public void checkServerTrusted(X509Certificate chain[], String authType)
+ throws CertificateException {
+ tm.checkServerTrusted(chain, authType);
+ }
+
+ public X509Certificate[] getAcceptedIssuers() {
+ List<X509Certificate> certs = new ArrayList<>();
+ try {
+ for (X509Certificate c : tm.getAcceptedIssuers()) {
+ if (serverKS.getCertificateAlias(c).equals(keyAlias))
+ certs.add(c);
+ }
+ } catch (KeyStoreException kse) {
+ throw new RuntimeException(kse);
+ }
+ return certs.toArray(new X509Certificate[certs.size()]);
+ }
+
+ public void checkClientTrusted(X509Certificate[] chain, String authType,
+ Socket socket) throws CertificateException {
+ tm.checkClientTrusted(chain, authType);
+ }
+
+ public void checkServerTrusted(X509Certificate[] chain, String authType,
+ Socket socket) throws CertificateException {
+ tm.checkServerTrusted(chain, authType);
+ }
+
+ public void checkClientTrusted(X509Certificate[] chain, String authType,
+ SSLEngine engine) throws CertificateException {
+ tm.checkClientTrusted(chain, authType);
+ }
+
+ public void checkServerTrusted(X509Certificate[] chain, String authType,
+ SSLEngine engine) throws CertificateException {
+ tm.checkServerTrusted(chain, authType);
+ }
+ }
+
}