Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/sun/security/validator/ConstructorTest.java
41149 views
1
/*
2
* Copyright (c) 2014, 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.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/*
25
* @test
26
* @bug 6996377
27
* @summary shrink duplicate code in the constructor of PKIXValidator
28
* @modules java.base/sun.security.validator
29
*/
30
31
import java.io.ByteArrayInputStream;
32
import java.io.FileInputStream;
33
import java.io.IOException;
34
import java.security.KeyStore;
35
import java.security.cert.Certificate;
36
import java.security.cert.CertificateFactory;
37
import java.security.cert.CertificateException;
38
import java.security.cert.X509Certificate;
39
import java.security.cert.TrustAnchor;
40
import java.security.cert.PKIXBuilderParameters;
41
import java.security.cert.X509CertSelector;
42
import javax.security.auth.x500.X500Principal;
43
import java.util.Date;
44
import java.util.List;
45
import java.util.Arrays;
46
import java.util.ArrayList;
47
import java.util.Set;
48
import java.util.HashSet;
49
import java.util.Enumeration;
50
import java.util.Collection;
51
import sun.security.validator.Validator;
52
import sun.security.validator.PKIXValidator;
53
54
public class ConstructorTest {
55
56
// COMMON-OPTS: All certs created with the following common options:
57
// -keystore <STORE> -storepass <PASS> -keypass <PASS> -keyalg rsa
58
// -keysize 2048 -validity 720 -sigalg sha256withrsa
59
60
// keytool <COMMON-OPTS> -alias root -ext bc:critical=ca:true
61
// -ext ku:critical=keyCertSign,cRLSign
62
private static final String ROOT =
63
"-----BEGIN CERTIFICATE-----\n" +
64
"MIIC3jCCAcagAwIBAgIEInKZgjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRS\n" +
65
"b290MB4XDTE0MDUwODE4MjcwOFoXDTE2MDQyNzE4MjcwOFowDzENMAsGA1UEAxME\n" +
66
"Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIzgMkrCZD7PuoFb\n" +
67
"fmtAd2+Td6nA9sgBd8Z3NjQgP6nwyn79svaVV9XAVLTrLian72wV/1Kbq/6HUXQQ\n" +
68
"AqyUAvobDwXeIAmE4+D7qcZxiEJgVNr2Ddv1bbS8Y0/Ta72qzjFiEPMO3Y2GP52C\n" +
69
"ssKQpsdNttHfM9c73cKUspobc3p51k2lkynheshCSNOWxR/Rvsl/gcbEFg8vIEHV\n" +
70
"oJPwKSrABc4sWiiXQj0yLVW+DKVEFuWNqqitcikQLZFpgOYv8P1SjhJFkcA9s0oN\n" +
71
"sbvKO2VF141h161i0AFddTsGE85A3j42qEdwQ0cs9gyAoeU865TFvxCuhSqSgJ3a\n" +
72
"Mdgn7ssCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw\n" +
73
"HQYDVR0OBBYEFFQY2UJynMSoS7Tf/+DvNPp/ZxXfMA0GCSqGSIb3DQEBCwUAA4IB\n" +
74
"AQAeXRQnEhxNl8lrcGY1U1LbIdrNMlGnc0JbgwiVYwRlE3+u4GvDae1VueXyY6nw\n" +
75
"8m63H3Q/Do9/72aw2Q0FSwvDg+k5ssj+gXQ3Gyx8xsVPJEG0TizOSwnWiZtWu65w\n" +
76
"14p5TB8P8wdPEs6sfE9oheiKhDRjBZHIfqMd4DaBiM9N9qHpSwTJc02BB2KnGwga\n" +
77
"yiYNJbce7GFKn/exryj972n/Nl4xy1WdZrRwTBbV21/GINw+xdXn1+FD95EGqGlr\n" +
78
"Sb4+G7U7Ydo+xFpVQnrqxZe98pI5W2bG7VSKvIzcPxfL5/tjwtNaqhiD7wIBNHVx\n" +
79
"ZeJevm41O9qFQEdXNyVGpB+u\n" +
80
"-----END CERTIFICATE-----\n";
81
82
// keytool <COMMON-OPTS> -alias int -ext bc:critical=ca:true
83
// -ext ku:critical=keyCertSign,cRLSign
84
private static final String INTERMED =
85
"-----BEGIN CERTIFICATE-----\n" +
86
"MIIC/jCCAeagAwIBAgIEDkzdijANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRS\n" +
87
"b290MB4XDTE0MDUwODE4MjcyNFoXDTE2MDQyNzE4MjcyNFowDjEMMAoGA1UEAxMD\n" +
88
"SW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwslILfgvXPxdRgu8\n" +
89
"4SnrZJsSzb/XvYwYGAKTSvsDaI1nXypBbwDGz87+YPpZSJcExcS8I8GBKqN6kXIh\n" +
90
"YvJ9yMGJX8wdwoMQpw2ZfJpzfw9Nqtlhv8/q5kPlaDghJ+nGNwy5lyYNOzDMVht0\n" +
91
"1XQG65C+l7m52lDJ478tGRZEFkx0aTh2QUBI59iNji6r2Buyeiijhg4YBrvIlYLK\n" +
92
"OAHxru4N/Y2Cq3ECUUvm7Lf8tM8yrINS8FLT+pmNcLj8AKkGW8cFFaiGPMyon0/m\n" +
93
"4iJB7ZaeG+BGm9TvBv93cphAsM2tY+S+P/dLfI01ltucibPkSglmquUSA0xW9ilv\n" +
94
"PEYWqQIDAQABo2MwYTAfBgNVHSMEGDAWgBRUGNlCcpzEqEu03//g7zT6f2cV3zAP\n" +
95
"BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU1jeG+pzz\n" +
96
"WnHa+0PfJNw9JTrZaoMwDQYJKoZIhvcNAQELBQADggEBABRshh0oJ8Dq87Tgcf3w\n" +
97
"ERVZ/uDWKj76UXWQ3uvKMhnNxKN/vs1rCfhovkptn39CXndOb8m6UkvmMjDtJsiO\n" +
98
"Oq/DiR6NngCy5yJ5hMuBsdQ2QVvdiqG4Sb+vOaQ2TNQNEHEWC7sB0ztImjxlqDtq\n" +
99
"yvof5pd8pHeZJNyDo5cHw1cpoUI9GLz6CK5i0wUlBvsYERIX5aRqxqdtKgBefHFN\n" +
100
"S2ChTRB16A5C1h+Lu79KnoeS33lZt1VeebIA7hvaHkqhGGpncutEYgT8QNFFpjM8\n" +
101
"yFCjZG+ZuUD/s5hd/xHnPdJzR+RWVKMjjVCTpnni3+NHXo2fh0G8YFhdHQ2F/YFI\n" +
102
"ig0=\n" +
103
"-----END CERTIFICATE-----\n";
104
105
// keytool <COMMON-OPTS> -alias user -ext ku:c=digitalSignature
106
// -ext eku=clientAuth
107
private static final String USER =
108
"-----BEGIN CERTIFICATE-----\n" +
109
"MIIDAjCCAeqgAwIBAgIEKgsK2DANBgkqhkiG9w0BAQsFADAOMQwwCgYDVQQDEwNJ\n" +
110
"bnQwHhcNMTQwNTA4MTgyNzI3WhcNMTYwNDI3MTgyNzI3WjAPMQ0wCwYDVQQDEwRV\n" +
111
"c2VyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArBFLJZ1liQAEkEyJ\n" +
112
"9vAiViRXtDDV+lc62DR4DBj1/Vsw9djVOxmwDKM0+jj83F4Qn9vulr+xp2aZzx4Y\n" +
113
"GiJgbtoxPvZmwNv4MPCNX+fgl/+C0nFKOoSYfHb/tK0Jj6u8HOmQqkbSmGJd/yRL\n" +
114
"qavapRvhS94tFhiNK7wwLAK9AZ+r7cTEBtUSqfaS7mY7tUsERcZs6z3+rmsuxWw6\n" +
115
"/xnNTIVWjdUSbEnjZCdkfZ0cjFONotL6aKoa6YXzohzgA5c3SJZqscEaz4yPkMvl\n" +
116
"7bGy7cn6xjfbb5V3oNqo1dtF3Jm8zp0q8Zgvc47l+DAoGIHSpDhPGX+qSWOTwRla\n" +
117
"QT6NDwIDAQABo2cwZTAfBgNVHSMEGDAWgBTWN4b6nPNacdr7Q98k3D0lOtlqgzAT\n" +
118
"BgNVHSUEDDAKBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFE/p\n" +
119
"UEn8+capIj2+V+7GoxUhdVnWMA0GCSqGSIb3DQEBCwUAA4IBAQBkEyFJ/1CCMoU3\n" +
120
"C1sYoq4Wt36z3e4Z2rMjfpFXcagqOQaq+hq+/eG8gDE50tOp30nZF7BxSv0RKnxa\n" +
121
"KSkrKcupwgPJOZZWVR6ycV3xWm4QleLuDJh3NdK0o8vvIwLQP47fXURzEXTpGodl\n" +
122
"+hGx7jcghsOKftBDCaleywam4jcZ5YPfp5Ayev0pK/Euf0kZgZAhRM33uJVVfEns\n" +
123
"UotoGK7SL6hZMCrreVlXygof19p531Ps5xMqu0y2u2xztjVQJ+gPU5zcYbjByUl+\n" +
124
"pY+wDPb8XU1EoLl7J5UyayXlk0c3KG/5f+CrVi2HtRfCcKLBf8/MH6OFIpX9O77p\n" +
125
"Qq3r+W/l\n" +
126
"-----END CERTIFICATE-----\n";
127
128
// keytool <COMMON-OPTS> -alias red-ta-key -ext bc:critical=ca:true
129
// -ext ku:critical=keyCertSign,cRLSign
130
private static final String RED_ROOT =
131
"-----BEGIN CERTIFICATE-----\n" +
132
"MIIC5jCCAc6gAwIBAgIEWK8vRTANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhS\n" +
133
"ZWQgUm9vdDAeFw0xNDA1MDgxODI3MTNaFw0xNjA0MjcxODI3MTNaMBMxETAPBgNV\n" +
134
"BAMTCFJlZCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjpMy\n" +
135
"Qh5yq4R3DrwsWaBZoCR+gda4a1PjGpjlQW/Au6R3hwUDAunkQIz/sX1CnLLJ7cks\n" +
136
"4m6ba2wjYE3NbVP9D3HozLAv2ErB75/F3evRu5UvzkGLkamyHJBY0xEyFyOaD4MC\n" +
137
"hhlo8dDEY++YL8Od+m4i56fYXQlTT94u20I+6hZxeIpJxFSHyouZg06jb+URibi0\n" +
138
"e7I3JApWghgcDfgEXZWlCmB8IswYPdd+XWRFDNc4rSWueRP+SeQOFx9x1jM6+skP\n" +
139
"DGLpuaChO7cqsUxYnsEx9zhdxQ+v4V3vOye/GigpRaO7WvgPB4g5sYhFlwZ/tp+A\n" +
140
"KQebXExXCGOOQUoFEwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB\n" +
141
"/wQEAwIBBjAdBgNVHQ4EFgQUYL8o0Ku7Irg33xzCgA4q1PFz6IQwDQYJKoZIhvcN\n" +
142
"AQELBQADggEBAGSVpI7Qmb0oupBCs+tXlJ4/+TX6eBGcHydaT/2hlgEEdT7S7y6O\n" +
143
"iMC8C8wlEKTLZ6MJSxjeFTIO62OkTjCsGtk+BHTaE81QL5rxjGFkvtuQrwck8gHg\n" +
144
"fAb7daF9ZVLz6B8+cX047xZHx9ZGM/ID+GJg/3fk17WA2BhW1Xkzskby5AWpBDol\n" +
145
"i6+zEod0uZhpHiWwVSfHlEA+rnkhW632oVaVNNDkeUhsCxrU0k7nlQx8bG5bmUso\n" +
146
"1MaPP1kRKvcy0UGx6q3s8pcrKw0X1S66n7HV+WbQebg83U0MVE1r/J0Cfi0jMS/x\n" +
147
"ZUVXs7rjCGFhwfiT/kybKD8adrGHSmLhKs0=\n" +
148
"-----END CERTIFICATE-----\n";
149
150
// keytool <COMMON-OPTS> -alias orange-ta-key -ext bc:critical=ca:true
151
// -ext ku:critical=keyCertSign,cRLSign
152
private static final String ORANGE_ROOT =
153
"-----BEGIN CERTIFICATE-----\n" +
154
"MIIC7DCCAdSgAwIBAgIEQPSszTANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtP\n" +
155
"cmFuZ2UgUm9vdDAeFw0xNDA1MDgxODI3MTRaFw0xNjA0MjcxODI3MTRaMBYxFDAS\n" +
156
"BgNVBAMTC09yYW5nZSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\n" +
157
"AQEAknfh3lKWVQxl2w/eRSza6+0+zeTtMkQFCEFpGJsisDK5XOU1HcJMP4QUteWM\n" +
158
"tg1SGO9bjpiKqJ7JVRnzOC3q6erBj2LmwpWW7p12tg6ENOQfsy6tRZLlQWMFGBkT\n" +
159
"Tatsg9HwKpr6itvk2wERh18AcIqSjtN94kGTljP1qf9gMd31G5d/HyG6EwMZukJm\n" +
160
"4/EFpzh3fVwr/EN1WzrYlsBOA+3Tru/k0p8wP6Bomrx1vAEUqRWSLWxsa7we76jL\n" +
161
"H/kMkyWENyjd/A2c5CwscoG+KSx9cifYnSqrUAmpY88KKuZG2Y1+9ablUEwXW4Gh\n" +
162
"RYLCGIgxp6NrtFG/eUcDBgtEwQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G\n" +
163
"A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUPvRE9j3GPGcc3dNGrVrQoWDb9RMwDQYJ\n" +
164
"KoZIhvcNAQELBQADggEBADjPTuHXMbXc2Kn+i+dnBiQCWcjzaox4KWV4MNO7vkvi\n" +
165
"ADBk5/vVM+HTzwL+gZNwE96/agcOzwHZ8/Dz4aA3zzmAmQB4bt+pUa0iyGvX6+F5\n" +
166
"IH1kd4kBnSBMc76fRcEJnebhrXFgTlps5VELMVcEOn3Q4nt+gVfXmPStTkFjM1/4\n" +
167
"fQggsScLpE2TVkk3oS52NIzG/vyBIt3W0gX20hlQobA2vziJDx8xy/+qe5igyp5F\n" +
168
"WScwSQE8qeuoDJYJRxpxZ7kq8NiHxfGPw5Hjn518zBz2VKJOsJYmckAMFIdS//kM\n" +
169
"NUysH6gFksW/PHy75QkbtD4OFtb2zp01ERuf5OoJavs=\n" +
170
"-----END CERTIFICATE-----\n";
171
172
// keytool <COMMON-OPTS> -alias yellow-ta-key -ext bc:critical=ca:true
173
// -ext ku:critical=keyCertSign,cRLSign
174
private static final String YELLOW_ROOT =
175
"-----BEGIN CERTIFICATE-----\n" +
176
"MIIC7DCCAdSgAwIBAgIEfLA7azANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtZ\n" +
177
"ZWxsb3cgUm9vdDAeFw0xNDA1MDgxODI3MTZaFw0xNjA0MjcxODI3MTZaMBYxFDAS\n" +
178
"BgNVBAMTC1llbGxvdyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\n" +
179
"AQEAgLMOpzIR8LyALox2AvItM42VjFDp1EyHU0faJZCpwVbQPJ2f+8Gr7XuTv1uZ\n" +
180
"Ixe6JjcyGNHZG0NuFmMFbK2Y7cg3PdQBjcm+x68iSWzyEUuhytSKSLUt6i+xAg+9\n" +
181
"h9UGXlBNarVjWq63tPt8HK/YHxt9Ber0iriF3SEUsgMOzRrLw1mw35SmgidRp19y\n" +
182
"yNXlgQfylEAVtYD9IYhxTm/j9NL3rTgqXiKjvNAVjAUrD2I2nK5WQqO2hmQr9x/9\n" +
183
"EqgIK03dw0ps7/XL+gpd+zwGZqDr9pbFnko4badiE4AJqPlm6u/Tdc0dSkLu/oXq\n" +
184
"Ex4iqtM0TP5+oeDXGZv6EprzKQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G\n" +
185
"A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUp0/g/PqT9jDVGKSsBh997Kg9KBIwDQYJ\n" +
186
"KoZIhvcNAQELBQADggEBAG4vr5UkWUEA9qNU6wBNg5yySS6KhNVyBDMReyX6qsz6\n" +
187
"yUIeGU/UC8LwdB+Tl3S+FZyUlsx+gwh1n0ei7eOV58cCeWmZ3sUWvLTwsY9iBNyt\n" +
188
"HkItOCDO+JEjgo7OhEBlzYkD4MkwAjaYnT4tU41BSnlTR4+jK77f/b1oMVzDv2tL\n" +
189
"+JAiem04TEoGO97uZ94l6gKwwGO35uejGEUPhFPLtxo+yR2QQqX0S8smG88pCQ82\n" +
190
"6XscdvRTjSfkuI3LiqNORS0fGZ3ykxDCkDLZZ1mSg1h2/3xOUEbFQ0phhMrnr2Rl\n" +
191
"mWNGYCam2jns4qmMnbzPIwQduvRkz1O1lusbLNFpcdY=\n" +
192
"-----END CERTIFICATE-----\n";
193
194
// keytool <COMMON-OPTS> -alias green-ta-key -ext bc:critical=ca:true
195
// -ext ku:critical=keyCertSign,cRLSign
196
private static final String GREEN_ROOT =
197
"-----BEGIN CERTIFICATE-----\n" +
198
"MIIC6jCCAdKgAwIBAgIENWwt8TANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwpH\n" +
199
"cmVlbiBSb290MB4XDTE0MDUwODE4MjcxOFoXDTE2MDQyNzE4MjcxOFowFTETMBEG\n" +
200
"A1UEAxMKR3JlZW4gUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\n" +
201
"AKHvh3FRJghpNtLqIk5UDSGkcA3rtEygRsFa51ucwNQ1x4SXOVnsNHZZW66RuKOn\n" +
202
"6wjS8+xctNnMIy1XNXa2nlAswQVe75xX0jfGMB4w0MlaqLK9HrU479WrWmrBjz/P\n" +
203
"vvHY8x1CIfTMjOtLO9yxbYQrXsEz6JKxAz6/+ErbkvUjBynezZdJNXgURVz5HmFx\n" +
204
"e/SUbSALX+Kx+/+hXggaQdwlrpoDl/Nqm6S1iR5xtdZB1CEauIwFDSWOG1TjR1Hp\n" +
205
"8OSGb0AhwwM5FzIxevwgKke6WHFKf5p4lcpiQZqmhgqyFbARUfUjYX3WzQTmrJ/q\n" +
206
"87OMIJasvmkNEYkNbrSmI9kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV\n" +
207
"HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHG7s0KrfUsnl/3/UGYbCrdXTZtcMA0GCSqG\n" +
208
"SIb3DQEBCwUAA4IBAQBUe18kbDHeqsxM17ahr30hvjdxMkYLkLcGoSOlSI8sFBu6\n" +
209
"jG4JZvvFXw2ZqMQTLSALvsSZ9wkfS8tDCNEHRvCB6aqW4tjp9ddkfe+56WINzTv6\n" +
210
"Ibqwg2JGsOzWttpUA5OPLfODbMqOYzT101toF3sKteX0yyiF/SfMTXR5Jv0uo/dp\n" +
211
"sFeJtWFfhy/Q0jiEAz945BBoSHCIF7Fs4vcls7gNJxfap66W8lamjzFyMDsnlz+b\n" +
212
"sSLWZmvwM+R/RfL1Q3LPCcZWLiP9WSAO4hUoju1E9WeWHHjlPwJJ/iRECL9cnHRt\n" +
213
"Z7/kOlNLGxKvpEbY4xqH0zE07UWPCCBlemk/6jlO\n" +
214
"-----END CERTIFICATE-----\n";
215
216
// keytool <COMMON-OPTS> -alias blue-ta-key -ext bc:critical=ca:true
217
// -ext ku:critical=keyCertSign,cRLSign
218
private static final String BLUE_ROOT =
219
"-----BEGIN CERTIFICATE-----\n" +
220
"MIIC6DCCAdCgAwIBAgIEX3XC9zANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDEwlC\n" +
221
"bHVlIFJvb3QwHhcNMTQwNTA4MTgyNzIwWhcNMTYwNDI3MTgyNzIwWjAUMRIwEAYD\n" +
222
"VQQDEwlCbHVlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCY\n" +
223
"pc4r8mfgGGeiYlvHSrEIlp6djHS489P7eqoQRqmS5U/I0lLGNu7QZsY240a9a84S\n" +
224
"2t6VpZID5juK8AF2v4psShsqgfj+RjVev8FJE/D5j8B4QZ+HmbLJIl80f+YOPaLG\n" +
225
"HX1eNktLx3S2gkIKHVdn7q3o4DdXBO+YdaBA56lL4l+dWFtto65+5Sjy4yfyvWJz\n" +
226
"MylXjP/wiC0T3C0NcQX3AIu2tjY2u9lrVbem2rIi0kPFIoYvstKiqXMc/sRf2CfO\n" +
227
"it5k629HsbvdACVRZFxU3Lz25oP4HGz1kq1cpiIS+W3gQQmCKu9XqzpNRThG0SEL\n" +
228
"jaH9E4pZDnZiRCr+Mxm1AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P\n" +
229
"AQH/BAQDAgEGMB0GA1UdDgQWBBS5ebHO4iamr3n0+KtxJYAitg9QcTANBgkqhkiG\n" +
230
"9w0BAQsFAAOCAQEAGjh/UzERw+skEK4zM1zfL1RsZnUlFu7mTbOBGgccewHWC+MM\n" +
231
"AQbLo0m4NTEbRoW6fFcAESgE61ZZBLkmhcjXBunNJq6O1hMDpppYA806eG6GcZmK\n" +
232
"rLOZljxx4D1YC17vMEVsMF9XgIj5dLWceJjotZzNxe+miwXLEkxaGIMe/n2VtCoR\n" +
233
"BSrGrAeCsFZ7G2NRWUxUEVJrhLnVZJDt6fHd43BCVnV191PyF5TuB08nijyCoJoS\n" +
234
"/WJkYHxx3vUUfDE5E4UE+iY80BHnAPxiNKwO3XsWjeqbJ8PS+5AvShdG5QdFBhKe\n" +
235
"/tJTZLs0UEubKdaWd5ZgsXP3913bJm/mBo+eJA==\n" +
236
"-----END CERTIFICATE-----\n";
237
238
// keytool <COMMON-OPTS> -alias indigo-ta-key -ext bc:critical=ca:true
239
// -ext ku:critical=keyCertSign,cRLSign
240
private static final String INDIGO_ROOT =
241
"-----BEGIN CERTIFICATE-----\n" +
242
"MIIC7DCCAdSgAwIBAgIESdUmczANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtJ\n" +
243
"bmRpZ28gUm9vdDAeFw0xNDA1MDgxODI3MjFaFw0xNjA0MjcxODI3MjFaMBYxFDAS\n" +
244
"BgNVBAMTC0luZGlnbyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\n" +
245
"AQEA2opDa3wDxQrX6GjffbDGtXyvKw0/vhZTeus4cxdZIYF3CWkGbeurDIhPUKRO\n" +
246
"Azact0SECJuMXVxkB5vQKBmHRByNh8ugFfzXWi7/rteXTNjLNKnzVr8plbMvzwM7\n" +
247
"zjIgm0mTRbwv6gZmUbgfmO9FCB8zlV4hYbYbFTJn7GlVPpqZkZNNMTyJkOPxMzXD\n" +
248
"yaToxyR0uY3cMv9pmks3GxU2XoGTFuqptbL9XFSpwrm5BRfWuJDP1t8moLHQZ5iu\n" +
249
"tkCz6MVYcrhTlV/UY0PSGcmUvAu83sNBfIGjme0RIiERy02gLJnSZ/M9r1ukCUJE\n" +
250
"Z6At+9TsNCYNPgW5vcjNLO63/wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G\n" +
251
"A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU8eJ+kMmanqF+IcAQTjxSMv+VR7kwDQYJ\n" +
252
"KoZIhvcNAQELBQADggEBAGRB4C5qYXXJJnEGzJZf8S974SaeLmEvHlmaQPOuCxME\n" +
253
"tCeBoWQqD9qTDVy39izzjA4uE/fCMVCkyr1QL+588dtMI8jJfbzx+TxnlDWlJcMM\n" +
254
"5J8EJPNEy7eR6qqpFncvjmbXzf16XfzL9qSXwHYCvpo25nEEH801y2njJE2gGzZT\n" +
255
"raYRFuwzsZLiSV5TyO5MbRXiZLebDXfE/wXukor87pjGpx1/kevjH/g66OpaIBzu\n" +
256
"IfLePEOekTKXHF1zL89uYHwpUVCzfhO5hNQlSsTCuBkBifSTYm4ixoATi/C2kqze\n" +
257
"WHUK179u1+7v6xRONLQxe1JDftdlHHVg7DSeTY59euo=\n" +
258
"-----END CERTIFICATE-----\n";
259
260
// keytool <COMMON-OPTS> -alias violet-ta-key -ext bc:critical=ca:true
261
// -ext ku:critical=keyCertSign,cRLSign
262
private static final String VIOLET_ROOT =
263
"-----BEGIN CERTIFICATE-----\n" +
264
"MIIC7DCCAdSgAwIBAgIEXwgmLDANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtW\n" +
265
"aW9sZXQgUm9vdDAeFw0xNDA1MDgxODI3MjNaFw0xNjA0MjcxODI3MjNaMBYxFDAS\n" +
266
"BgNVBAMTC1Zpb2xldCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\n" +
267
"AQEAvElr11MoHUNfnx6nBy4NSXFFzA68g57ohTt+sspEn3wzuPErugMypReHLhtH\n" +
268
"CTrs45T0KU8P4Gi5QHnsBs8yC3QCHNPugo2A4zP+ciTqp+1gRNxQ9wzKSzCoseJg\n" +
269
"RMQflGFzuEe7gWwYfrsDfD1sJCubfBtBUFCSYf1ZSZbdEMrc3RPtC35Ge+3XRxFZ\n" +
270
"KdzH8l7gQTtgAmRQmK+i4jwzSHV/Iu2yiRdhjqIZUezf3pYFfJlmfAY5ruQBKkc+\n" +
271
"KRgdmKanpLbmAo/+3q6snt8V09CoQ+6Cz+P9P0yOxiiwr/6jg9WtHA3ujvtf3dGj\n" +
272
"EeB8SmzXHFZErQIn+QbrJ3/izwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G\n" +
273
"A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUlxlHI8JTrX86r4ezgDLICo6rApowDQYJ\n" +
274
"KoZIhvcNAQELBQADggEBALnfWZx6LC9vDMI8vBH/vbyk2ZQtiQFRt3kbwKtlrw65\n" +
275
"/bqeGXcQ1Lh9gDzp+uGYSfuDNvtJO6xmfny0W5j5WQVJxs+iWyoJfYxeG0kBZut+\n" +
276
"hbxJPlehBwhveuznZbeTN3RXeBi8MSxnBD/WC1e2rnfnrxoLfYZ1BSUP8LaIzC32\n" +
277
"vd6WCgnJRXputlGvnOoAT1WduWonhd7lCoqbtZksw7o0smuAn2mSnod8j948rzzt\n" +
278
"uDQVao/3tCyoX4NSom2hWooPltk5FTdF9cZKfbaU5TPV+U30RN7/UWY/dCvL1fMq\n" +
279
"1kvtJbkh+UMHvszHOxlgjk+3J76Wx0PFjNaIfbj2bmk=\n" +
280
"-----END CERTIFICATE-----\n";
281
282
public static final String[] rootArrayPEM = { RED_ROOT, ORANGE_ROOT,
283
YELLOW_ROOT, GREEN_ROOT, BLUE_ROOT, INDIGO_ROOT, VIOLET_ROOT, ROOT };
284
285
/**
286
* @param args {cacerts keystore, cert chain}
287
*/
288
public static void main(String[] args) throws Exception {
289
Set<X509Certificate> trustedCertSet = new HashSet<>();
290
CertificateFactory cf = CertificateFactory.getInstance("X.509");
291
292
for (String pemCert : rootArrayPEM) {
293
trustedCertSet.add(makeCertFromPEM(pemCert));
294
}
295
296
testCtorByCollection(trustedCertSet);
297
298
testCtorByPKIXBuilderParams(trustedCertSet);
299
}
300
301
public static X509Certificate makeCertFromPEM(String pemCert)
302
throws CertificateException {
303
CertificateFactory cf = CertificateFactory.getInstance("X.509");
304
ByteArrayInputStream is = new ByteArrayInputStream(pemCert.getBytes());
305
306
return ((X509Certificate)cf.generateCertificate(is));
307
}
308
309
public static void showValidatedChain(Validator v, X509Certificate[] chain,
310
Set<X509Certificate> otherCerts) throws Exception {
311
for (X509Certificate cert : v.validate(chain, otherCerts)) {
312
System.out.println("\tSubj: " + cert.getSubjectX500Principal() +
313
" Iss: " + cert.getIssuerX500Principal());
314
}
315
}
316
317
public static Set<TrustAnchor> makeTrustAnchorSet(
318
Set<X509Certificate> certSet) throws Exception {
319
Set<TrustAnchor> anchors = new HashSet<>();
320
321
for (Certificate cert : certSet) {
322
anchors.add(new TrustAnchor((X509Certificate)cert, null));
323
}
324
325
return anchors;
326
}
327
328
public static void testCtorByCollection(Set<X509Certificate> certSet)
329
throws Exception {
330
Validator valOK;
331
Validator valNoGood;
332
X509Certificate[] chain = new X509Certificate[1];
333
Set<X509Certificate> intermeds = new HashSet<>();
334
335
// Case 1: Make a PKIXValidator with valid arguments
336
// Expected result: Well-formed PKIXValidator
337
System.out.println("Constructor test 1: Valid inputs");
338
valOK = Validator.getInstance(Validator.TYPE_PKIX,
339
Validator.VAR_GENERIC, certSet);
340
341
// Convert our user cert from PEM format, then do the same for
342
// its intermediate signer and add that as a helper for path building
343
chain[0] = makeCertFromPEM(USER);
344
intermeds.add(makeCertFromPEM(INTERMED));
345
PKIXBuilderParameters pbParams = ((PKIXValidator)valOK).getParameters();
346
pbParams.setDate(new Date(1426399200000L)); // 03-15-2014 6:00:00 GMT
347
348
// See if we can build a trusted path to a root to make sure
349
// everything still works as expected.
350
showValidatedChain(valOK, chain, intermeds);
351
352
// Case 2: Make a PKIXValidator with null anchor list.
353
// Expected result: throw NullPointerException
354
System.out.println("Constructor test 2: null trustedCerts");
355
try {
356
valNoGood = Validator.getInstance(Validator.TYPE_PKIX,
357
Validator.VAR_GENERIC, (Collection<X509Certificate>)null);
358
// Throw something non Runtime-related to indicate we shouldn't
359
// have succeeded on construction.
360
throw new IOException(
361
"Constructor did not throw NullPointerException");
362
} catch (NullPointerException npe) {
363
System.out.println("\tCaught Exception (" + npe.toString() +
364
") [PASS])");
365
}
366
367
// Case 3: Try putting a null reference into a populated TA List
368
// Expected result: throw NullPointerException
369
System.out.println("Constructor test 3: null in trustedCerts list");
370
try {
371
certSet.add(null);
372
valNoGood = Validator.getInstance(Validator.TYPE_PKIX,
373
Validator.VAR_GENERIC, certSet);
374
// Throw something non Runtime-related to indicate we shouldn't
375
// have succeeded on construction.
376
throw new IOException("Constructor did not throw RuntimeException");
377
} catch (NullPointerException npe) {
378
System.out.println("\tCaught Exception (" + npe.toString() +
379
") [PASS])");
380
} finally {
381
// Return the certSet list to its original state
382
certSet.remove(null);
383
}
384
385
// Case 4: Provide an empty List as the X509Certificate collection
386
// Expected result: throw RuntimeException
387
System.out.println("Constructor test 4: empty trustedCerts list");
388
try {
389
valNoGood = Validator.getInstance(Validator.TYPE_PKIX,
390
Validator.VAR_GENERIC, new ArrayList<X509Certificate>());
391
// Throw something non Runtime-related to indicate we shouldn't
392
// have succeeded on construction.
393
throw new IOException("Constructor did not throw RuntimeException");
394
} catch (RuntimeException re) {
395
System.out.println("\tCaught RuntimeException (" + re.toString() +
396
") [PASS])");
397
}
398
399
// Case 5: Provide an invalid variant
400
// Expected result: successful construction.
401
// Note: subsequent calls to validate may throw CertificateException
402
// if the submitted chain has a length > 1.
403
System.out.println("Constructor test 5: Unsupported variant");
404
valNoGood = Validator.getInstance(Validator.TYPE_PKIX,
405
"BogusVariant", certSet);
406
System.out.println("\tSuccessful construction [PASS]");
407
408
// Case 6: Provide a null variant
409
// Expected result: throw NullPointerException
410
System.out.println("Constructor test 6: null variant");
411
try {
412
valNoGood = Validator.getInstance(Validator.TYPE_PKIX, null,
413
certSet);
414
// Throw something non Runtime-related to indicate we shouldn't
415
// have succeeded on construction.
416
throw new IOException(
417
"Constructor did not throw NullPointerException");
418
} catch (NullPointerException npe) {
419
System.out.println("\tCaught RuntimeException (" + npe.toString() +
420
") [PASS])");
421
}
422
}
423
424
public static void testCtorByPKIXBuilderParams(Set<X509Certificate> certSet)
425
throws Exception {
426
Set<TrustAnchor> taSet = makeTrustAnchorSet(certSet);
427
Validator valOK;
428
Validator valNoGood;
429
X509Certificate[] chain = new X509Certificate[1];
430
Set<X509Certificate> intermeds = new HashSet<>();
431
432
// Case 7: Make a PKIXValidator with valid arguments
433
// Expected result: Well-formed PKIXValidator object
434
System.out.println("Constructor test 7: Valid inputs");
435
436
// Set up the PKIXBuilderParameters
437
X509CertSelector sel = new X509CertSelector();
438
sel.setSubject("CN=User");
439
PKIXBuilderParameters pbParams = new PKIXBuilderParameters(taSet, sel);
440
pbParams.setRevocationEnabled(false);
441
pbParams.setDate(new Date(1426399200000L)); // 03-15-2014 6:00:00 GMT
442
443
valOK = Validator.getInstance(Validator.TYPE_PKIX,
444
Validator.VAR_GENERIC, pbParams);
445
446
// Convert our user cert from PEM format, then do the same for
447
// its intermediate signer and add that as a helper for path building
448
chain[0] = makeCertFromPEM(USER);
449
intermeds.add(makeCertFromPEM(INTERMED));
450
451
showValidatedChain(valOK, chain, intermeds);
452
453
// Case 8: Make a PKIXValidator but provide a null PKIXBuilderParameters
454
// Expected result: throw NullPointerException
455
System.out.println("Constructor test 8: null params");
456
try {
457
valNoGood = Validator.getInstance(Validator.TYPE_PKIX,
458
Validator.VAR_GENERIC, (PKIXBuilderParameters)null);
459
// Throw something non Runtime-related to indicate we shouldn't
460
// have succeeded on construction.
461
throw new IOException(
462
"Constructor did not throw NullPointerException");
463
} catch (NullPointerException npe) {
464
System.out.println("\tCaught RuntimeException (" + npe.toString() +
465
") [PASS])");
466
}
467
}
468
}
469
470