Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/sun/security/ssl/SignatureScheme/Tls13NamedGroups.java
41152 views
1
/*
2
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
//
27
// SunJSSE does not support dynamic system properties, no way to re-use
28
// system properties in samevm/agentvm mode.
29
//
30
31
/*
32
* @test
33
* @bug 8225766
34
* @summary Curve in certificate should not affect signature scheme
35
* when using TLSv1.3
36
* @library /javax/net/ssl/templates
37
* @run main/othervm Tls13NamedGroups
38
*/
39
40
import java.net.*;
41
import java.io.*;
42
import javax.net.ssl.*;
43
import java.security.*;
44
import java.security.cert.*;
45
import java.security.spec.*;
46
import java.security.interfaces.*;
47
import java.util.Base64;
48
49
public class Tls13NamedGroups extends SSLSocketTemplate {
50
51
public static void main(String[] args) throws Exception {
52
// Limit the supported named group to secp521r1.
53
System.setProperty("jdk.tls.namedGroups", "secp521r1");
54
55
new Tls13NamedGroups().run();
56
}
57
58
@Override
59
protected SSLContext createServerSSLContext() throws Exception {
60
return generateSSLContext();
61
}
62
63
@Override
64
protected void configureServerSocket(SSLServerSocket socket) {
65
socket.setNeedClientAuth(true);
66
}
67
68
@Override
69
protected SSLContext createClientSSLContext() throws Exception {
70
return generateSSLContext();
71
}
72
73
/*
74
* =============================================================
75
* The remainder is just support stuff
76
*/
77
78
// Certificates and key used in the test.
79
//
80
// Trusted Certificate.
81
static String trustedCertStr =
82
// SHA256withECDSA, curve prime256v1
83
// Validity
84
// Not Before: May 22 07:18:16 2018 GMT
85
// Not After : May 17 07:18:16 2038 GMT
86
// Subject Key Identifier:
87
// 60:CF:BD:73:FF:FA:1A:30:D2:A4:EC:D3:49:71:46:EF:1A:35:A0:86
88
"-----BEGIN CERTIFICATE-----\n" +
89
"MIIBvjCCAWOgAwIBAgIJAIvFG6GbTroCMAoGCCqGSM49BAMCMDsxCzAJBgNVBAYT\n" +
90
"AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
91
"ZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMDsxCzAJBgNVBAYTAlVT\n" +
92
"MQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZjZTBZ\n" +
93
"MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBz1WeVb6gM2mh85z3QlvaB/l11b5h0v\n" +
94
"LIzmkC3DKlVukZT+ltH2Eq1oEkpXuf7QmbM0ibrUgtjsWH3mULfmcWmjUDBOMB0G\n" +
95
"A1UdDgQWBBRgz71z//oaMNKk7NNJcUbvGjWghjAfBgNVHSMEGDAWgBRgz71z//oa\n" +
96
"MNKk7NNJcUbvGjWghjAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0kAMEYCIQCG\n" +
97
"6wluh1r2/T6L31mZXRKf9JxeSf9pIzoLj+8xQeUChQIhAJ09wAi1kV8yePLh2FD9\n" +
98
"2YEHlSQUAbwwqCDEVB5KxaqP\n" +
99
"-----END CERTIFICATE-----";
100
// -----BEGIN PRIVATE KEY-----
101
// MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/HcHdoLJCdq3haVd
102
// XZTSKP00YzM3xX97l98vGL/RI1KhRANCAAQc9VnlW+oDNpofOc90Jb2gf5ddW+Yd
103
// LyyM5pAtwypVbpGU/pbR9hKtaBJKV7n+0JmzNIm61ILY7Fh95lC35nFp
104
// -----END PRIVATE KEY-----
105
106
// End entity certificate.
107
static String targetCertStr =
108
// SHA256withECDSA, curve prime256v1
109
// Validity
110
// Not Before: May 22 07:18:16 2018 GMT
111
// Not After : May 17 07:18:16 2038 GMT
112
// Authority Key Identifier:
113
// 60:CF:BD:73:FF:FA:1A:30:D2:A4:EC:D3:49:71:46:EF:1A:35:A0:86
114
"-----BEGIN CERTIFICATE-----\n" +
115
"MIIBqjCCAVCgAwIBAgIJAPLY8qZjgNRAMAoGCCqGSM49BAMCMDsxCzAJBgNVBAYT\n" +
116
"AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
117
"ZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMFUxCzAJBgNVBAYTAlVT\n" +
118
"MQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZjZTEY\n" +
119
"MBYGA1UEAwwPUmVncmVzc2lvbiBUZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD\n" +
120
"QgAEb+9n05qfXnfHUb0xtQJNS4JeSi6IjOfW5NqchvKnfJey9VkJzR7QHLuOESdf\n" +
121
"xlR7q8YIWgih3iWLGfB+wxHiOqMjMCEwHwYDVR0jBBgwFoAUYM+9c//6GjDSpOzT\n" +
122
"SXFG7xo1oIYwCgYIKoZIzj0EAwIDSAAwRQIgWpRegWXMheiD3qFdd8kMdrkLxRbq\n" +
123
"1zj8nQMEwFTUjjQCIQDRIrAjZX+YXHN9b0SoWWLPUq0HmiFIi8RwMnO//wJIGQ==\n" +
124
"-----END CERTIFICATE-----";
125
126
// Private key in the format of PKCS#8.
127
static String targetPrivateKey =
128
//
129
// EC private key related to cert endEntityCertStrs[0].
130
//
131
"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgn5K03bpTLjEtFQRa\n" +
132
"JUtx22gtmGEvvSUSQdimhGthdtihRANCAARv72fTmp9ed8dRvTG1Ak1Lgl5KLoiM\n" +
133
"59bk2pyG8qd8l7L1WQnNHtAcu44RJ1/GVHurxghaCKHeJYsZ8H7DEeI6";
134
135
static char passphrase[] = "passphrase".toCharArray();
136
137
// Create the SSLContext instance.
138
private static SSLContext generateSSLContext() throws Exception {
139
140
// generate certificate from cert string
141
CertificateFactory cf = CertificateFactory.getInstance("X.509");
142
143
// create a key store
144
KeyStore ks = KeyStore.getInstance("JKS");
145
ks.load(null, null);
146
147
// import the trused cert
148
X509Certificate trusedCert = null;
149
ByteArrayInputStream is =
150
new ByteArrayInputStream(trustedCertStr.getBytes());
151
trusedCert = (X509Certificate)cf.generateCertificate(is);
152
is.close();
153
154
ks.setCertificateEntry("Trusted EC Signer", trusedCert);
155
156
// generate the private key.
157
PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec(
158
Base64.getMimeDecoder().decode(targetPrivateKey));
159
KeyFactory kf = KeyFactory.getInstance("EC");
160
ECPrivateKey priKey =
161
(ECPrivateKey)kf.generatePrivate(priKeySpec);
162
163
// generate certificate chain
164
is = new ByteArrayInputStream(targetCertStr.getBytes());
165
X509Certificate keyCert = (X509Certificate)cf.generateCertificate(is);
166
is.close();
167
168
X509Certificate[] chain = new X509Certificate[2];
169
chain[0] = keyCert;
170
chain[1] = trusedCert;
171
172
// import the key entry and the chain
173
ks.setKeyEntry("TheKey", priKey, passphrase, chain);
174
175
// create SSL context
176
TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");
177
tmf.init(ks);
178
179
KeyManagerFactory kmf = KeyManagerFactory.getInstance("NewSunX509");
180
kmf.init(ks, passphrase);
181
182
SSLContext ctx = SSLContext.getInstance("TLSv1.3");
183
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
184
ks = null;
185
186
return ctx;
187
}
188
}
189
190