Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/sun/security/provider/certpath/DisabledAlgorithms/CPBuilderWithMD5.java
38861 views
1
/*
2
* Copyright (c) 2015, 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
// This test case relies on static security property, no way to re-use
25
// security property in samevm/agentvm mode.
26
27
/**
28
* @test
29
*
30
* @bug 8141287
31
* @summary Add MD5 to jdk.certpath.disabledAlgorithms security property
32
*
33
* @run main/othervm CPBuilderWithMD5 trustAnchor_SHA1withRSA_1024 0 true
34
* @run main/othervm CPBuilderWithMD5 trustAnchor_SHA1withRSA_512 0 true
35
* @run main/othervm CPBuilderWithMD5 intermediate_SHA1withRSA_1024_1024 1 true
36
* @run main/othervm CPBuilderWithMD5 intermediate_SHA1withRSA_1024_512 1 false
37
* @run main/othervm CPBuilderWithMD5 intermediate_SHA1withRSA_512_1024 1 false
38
* @run main/othervm CPBuilderWithMD5 intermediate_SHA1withRSA_512_512 1 false
39
* @run main/othervm CPBuilderWithMD5 intermediate_MD5withRSA_1024_1024 1 false
40
* @run main/othervm CPBuilderWithMD5 intermediate_MD5withRSA_1024_512 1 false
41
* @run main/othervm CPBuilderWithMD5 endentiry_SHA1withRSA_1024_1024 2 true
42
* @run main/othervm CPBuilderWithMD5 endentiry_SHA1withRSA_1024_512 2 false
43
* @run main/othervm CPBuilderWithMD5 endentiry_SHA1withRSA_512_1024 2 false
44
* @run main/othervm CPBuilderWithMD5 endentiry_SHA1withRSA_512_512 2 false
45
* @run main/othervm CPBuilderWithMD5 endentiry_MD5withRSA_1024_1024 2 false
46
* @run main/othervm CPBuilderWithMD5 endentiry_MD5withRSA_1024_512 2 false
47
*
48
* @author Xuelei Fan
49
*/
50
51
/*
52
* The generate.sh was designed to generate MD2 signed certificates. The
53
* certificates used in this test are generated by an updated generate.sh that
54
* replacing MD2 with MD5 algorithm.
55
*/
56
import java.io.*;
57
import java.net.SocketException;
58
import java.util.*;
59
import java.security.Security;
60
import java.security.cert.*;
61
import sun.security.util.DerInputStream;
62
63
public class CPBuilderWithMD5 {
64
65
// SHA1withRSA 1024
66
static String trustAnchor_SHA1withRSA_1024 =
67
"-----BEGIN CERTIFICATE-----\n" +
68
"MIICPjCCAaegAwIBAgIBADANBgkqhkiG9w0BAQUFADAfMQswCQYDVQQGEwJVUzEQ\n" +
69
"MA4GA1UEChMHRXhhbXBsZTAeFw0xMzEyMjgxMTA4NTFaFw0zNDEyMDgxMTA4NTFa\n" +
70
"MB8xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFtcGxlMIGfMA0GCSqGSIb3DQEB\n" +
71
"AQUAA4GNADCBiQKBgQDn3JSHACqi/bcohVy7eFqDs3L5ehnXmF9Jrg4rMRUeNrxA\n" +
72
"61F8bJ9JXx4j8WyqmT0TtokgXuqGxbsXRQVVw4AdXLF2PwCs/y+Y+AwU59uDHA3J\n" +
73
"AMk4VvjV9MB2Ea6YzuLnbbj/TNrfxB6LZ7KBvh0fYGt2T40yMvOvilU/f6e3zQID\n" +
74
"AQABo4GJMIGGMB0GA1UdDgQWBBSIxINDFVm8GpUz3v+BbWNmDEKP7TBHBgNVHSME\n" +
75
"QDA+gBSIxINDFVm8GpUz3v+BbWNmDEKP7aEjpCEwHzELMAkGA1UEBhMCVVMxEDAO\n" +
76
"BgNVBAoTB0V4YW1wbGWCAQAwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAgQw\n" +
77
"DQYJKoZIhvcNAQEFBQADgYEAt0mYDXTpInrGvEOylIL2gx65A/bpdz9iDQsSs5sZ\n" +
78
"r3m0v9zJnzR8lRqN4GbaD1vrFdkUrIoObcvXjXitnf5QqDzmc9BbIYj83Ft8QSUj\n" +
79
"jCMy04EGT/7ATss4SiFEu6sJpmOBjsgH6wYuobR27wl/01XOu2CXUo3OOjgAoPBs\n" +
80
"QoQ=\n" +
81
"-----END CERTIFICATE-----";
82
83
// SHA1withRSA 512
84
static String trustAnchor_SHA1withRSA_512 =
85
"-----BEGIN CERTIFICATE-----\n" +
86
"MIIBuTCCAWOgAwIBAgIBADANBgkqhkiG9w0BAQUFADAfMQswCQYDVQQGEwJVUzEQ\n" +
87
"MA4GA1UEChMHRXhhbXBsZTAeFw0xMzEyMjgxMTA4NTFaFw0zNDEyMDgxMTA4NTFa\n" +
88
"MB8xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFtcGxlMFwwDQYJKoZIhvcNAQEB\n" +
89
"BQADSwAwSAJBANLqQkOpH7rBTo/a2ccYjJxvNib/Lxm6UXO1uAd/0AUzPWzJsOpB\n" +
90
"u2zyD26UYc0GNyXCkWMZ44FrtSQ8VI146j8CAwEAAaOBiTCBhjAdBgNVHQ4EFgQU\n" +
91
"5PVLxBY//smN31jHb/MAmCEz5NIwRwYDVR0jBEAwPoAU5PVLxBY//smN31jHb/MA\n" +
92
"mCEz5NKhI6QhMB8xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFtcGxlggEAMA8G\n" +
93
"A1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgIEMA0GCSqGSIb3DQEBBQUAA0EAzF9E\n" +
94
"dXYPLqziCRY45IHCUtxaLjLQmwsjEu91TV4xyuuozGEumcqH7m6Hg6Ohnd1FGfsN\n" +
95
"X+vt1tdaDIu9+OzGjQ==\n" +
96
"-----END CERTIFICATE-----";
97
98
// SHA1withRSA 1024 signed with RSA 1024
99
static String intermediate_SHA1withRSA_1024_1024 =
100
"-----BEGIN CERTIFICATE-----\n" +
101
"MIICUDCCAbmgAwIBAgIBAzANBgkqhkiG9w0BAQUFADAfMQswCQYDVQQGEwJVUzEQ\n" +
102
"MA4GA1UEChMHRXhhbXBsZTAeFw0xMzEyMjgxMTA5MDlaFw0zMzA5MTQxMTA5MDla\n" +
103
"MDExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFtcGxlMRAwDgYDVQQLEwdDbGFz\n" +
104
"cy0xMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/m9wdJT0HR+exquh2Q2Yq\n" +
105
"XvL9HtEsCabCikd0Vjuoi3sZJ/5SBbbHTvh7z7enW0NEpLHQee0ry5FW8mLxDtrR\n" +
106
"38NjE9W7zutucBG5WztwGuvcts13aEw+vH+EwhokJW9PXz9Do+y4PTJo3vdsk7Zs\n" +
107
"bGVY9+YjvlgEaozWXZ1JhQIDAQABo4GJMIGGMB0GA1UdDgQWBBQIsaDZL94kLug/\n" +
108
"A1N4EkNOA4z47DBHBgNVHSMEQDA+gBSIxINDFVm8GpUz3v+BbWNmDEKP7aEjpCEw\n" +
109
"HzELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0V4YW1wbGWCAQAwDwYDVR0TAQH/BAUw\n" +
110
"AwEB/zALBgNVHQ8EBAMCAgQwDQYJKoZIhvcNAQEFBQADgYEA0673aIUF2k20jkpR\n" +
111
"4USN9UkbfX57Uazhl4n765EeAiteWnTzKztISeH1GTrCw7bSl1r07aaflsnbKOHC\n" +
112
"RrL2RxbxNwQARvuuCxr664vXnsGrt86xA5F2iNF22uDM/5HA5sIfBmEk5xXSLrgH\n" +
113
"I7jOaYqAA1b8C+4DU2Z5ZgO4LOA=\n" +
114
"-----END CERTIFICATE-----";
115
116
// SHA1withRSA 1024 signed with RSA 512
117
static String intermediate_SHA1withRSA_1024_512 =
118
"-----BEGIN CERTIFICATE-----\n" +
119
"MIICDzCCAbmgAwIBAgIBBDANBgkqhkiG9w0BAQUFADAfMQswCQYDVQQGEwJVUzEQ\n" +
120
"MA4GA1UEChMHRXhhbXBsZTAeFw0xMzEyMjgxMTA5MDlaFw0zMzA5MTQxMTA5MDla\n" +
121
"MDExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFtcGxlMRAwDgYDVQQLEwdDbGFz\n" +
122
"cy0xMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/m9wdJT0HR+exquh2Q2Yq\n" +
123
"XvL9HtEsCabCikd0Vjuoi3sZJ/5SBbbHTvh7z7enW0NEpLHQee0ry5FW8mLxDtrR\n" +
124
"38NjE9W7zutucBG5WztwGuvcts13aEw+vH+EwhokJW9PXz9Do+y4PTJo3vdsk7Zs\n" +
125
"bGVY9+YjvlgEaozWXZ1JhQIDAQABo4GJMIGGMB0GA1UdDgQWBBQIsaDZL94kLug/\n" +
126
"A1N4EkNOA4z47DBHBgNVHSMEQDA+gBTk9UvEFj/+yY3fWMdv8wCYITPk0qEjpCEw\n" +
127
"HzELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0V4YW1wbGWCAQAwDwYDVR0TAQH/BAUw\n" +
128
"AwEB/zALBgNVHQ8EBAMCAgQwDQYJKoZIhvcNAQEFBQADQQAihshnF7RWZ13tUGsH\n" +
129
"iM4i8HmBjw2+pwW/cs0E8BcycYEy3beWMcL1Np2yfOa/7K5ZvGPhe/piwzTel+Kt\n" +
130
"5VLm\n" +
131
"-----END CERTIFICATE-----";
132
133
// SHA1withRSA 512 signed with RSA 1024
134
static String intermediate_SHA1withRSA_512_1024 =
135
"-----BEGIN CERTIFICATE-----\n" +
136
"MIICDDCCAXWgAwIBAgIBBTANBgkqhkiG9w0BAQUFADAfMQswCQYDVQQGEwJVUzEQ\n" +
137
"MA4GA1UEChMHRXhhbXBsZTAeFw0xMzEyMjgxMTA5MDlaFw0zMzA5MTQxMTA5MDla\n" +
138
"MDExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFtcGxlMRAwDgYDVQQLEwdDbGFz\n" +
139
"cy0xMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK4h/iW3wt+ugR5ObWiFSl394UU/\n" +
140
"lWNm+N6UAgsBRhSzZz/Iof7xZTQI+usNXzOrTnU3+uZsMgokpjkrko1osxUCAwEA\n" +
141
"AaOBiTCBhjAdBgNVHQ4EFgQU88OD48Osuh7lJiLnhfMhrySqW8QwRwYDVR0jBEAw\n" +
142
"PoAUiMSDQxVZvBqVM97/gW1jZgxCj+2hI6QhMB8xCzAJBgNVBAYTAlVTMRAwDgYD\n" +
143
"VQQKEwdFeGFtcGxlggEAMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgIEMA0G\n" +
144
"CSqGSIb3DQEBBQUAA4GBAAHN8XUTT6asa1MvpfqAvKTH6tNrMOmzoFsUamPxSrUB\n" +
145
"tnBv/fa/E9+1QvQwl3g6luVXBkQf2/nVD0195IdkEuD/C6psuGKerXmiaRMv5Wcs\n" +
146
"B+8bTzhNxMzHKPZDJ8Tf/RD3XpPvtxw0T+I5xud68FH/WDhJtu7TiXPAhs7srtHt\n" +
147
"-----END CERTIFICATE-----";
148
149
// SHA1withRSA 512 signed with RSA 512
150
static String intermediate_SHA1withRSA_512_512 =
151
"-----BEGIN CERTIFICATE-----\n" +
152
"MIIByzCCAXWgAwIBAgIBBjANBgkqhkiG9w0BAQUFADAfMQswCQYDVQQGEwJVUzEQ\n" +
153
"MA4GA1UEChMHRXhhbXBsZTAeFw0xMzEyMjgxMTA5MDlaFw0zMzA5MTQxMTA5MDla\n" +
154
"MDExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFtcGxlMRAwDgYDVQQLEwdDbGFz\n" +
155
"cy0xMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK4h/iW3wt+ugR5ObWiFSl394UU/\n" +
156
"lWNm+N6UAgsBRhSzZz/Iof7xZTQI+usNXzOrTnU3+uZsMgokpjkrko1osxUCAwEA\n" +
157
"AaOBiTCBhjAdBgNVHQ4EFgQU88OD48Osuh7lJiLnhfMhrySqW8QwRwYDVR0jBEAw\n" +
158
"PoAU5PVLxBY//smN31jHb/MAmCEz5NKhI6QhMB8xCzAJBgNVBAYTAlVTMRAwDgYD\n" +
159
"VQQKEwdFeGFtcGxlggEAMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgIEMA0G\n" +
160
"CSqGSIb3DQEBBQUAA0EASLN+1/pfo+9ty5EaYkoPu4QeYGr+5wmXyDceiaED/Lok\n" +
161
"RdV0ZH0qwD4kiarlJssNOgMCk+2EzgvXcIhEMDa5hA==\n" +
162
"-----END CERTIFICATE-----";
163
164
// MD5withRSA 1024 signed with RSA 1024
165
static String intermediate_MD5withRSA_1024_1024 =
166
"-----BEGIN CERTIFICATE-----\n" +
167
"MIICUDCCAbmgAwIBAgIBBzANBgkqhkiG9w0BAQQFADAfMQswCQYDVQQGEwJVUzEQ\n" +
168
"MA4GA1UEChMHRXhhbXBsZTAeFw0xMzEyMjgxMTA5MDlaFw0zMzA5MTQxMTA5MDla\n" +
169
"MDExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFtcGxlMRAwDgYDVQQLEwdDbGFz\n" +
170
"cy0xMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/m9wdJT0HR+exquh2Q2Yq\n" +
171
"XvL9HtEsCabCikd0Vjuoi3sZJ/5SBbbHTvh7z7enW0NEpLHQee0ry5FW8mLxDtrR\n" +
172
"38NjE9W7zutucBG5WztwGuvcts13aEw+vH+EwhokJW9PXz9Do+y4PTJo3vdsk7Zs\n" +
173
"bGVY9+YjvlgEaozWXZ1JhQIDAQABo4GJMIGGMB0GA1UdDgQWBBQIsaDZL94kLug/\n" +
174
"A1N4EkNOA4z47DBHBgNVHSMEQDA+gBSIxINDFVm8GpUz3v+BbWNmDEKP7aEjpCEw\n" +
175
"HzELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0V4YW1wbGWCAQAwDwYDVR0TAQH/BAUw\n" +
176
"AwEB/zALBgNVHQ8EBAMCAgQwDQYJKoZIhvcNAQEEBQADgYEAerx2je3FBVn2eoPs\n" +
177
"nTzLKILezqCTCO7mXWiyBidRhh4RGdM8JggMN5SRmuwRurxfYFgPfqmAenWtEFqO\n" +
178
"xZrTXQUvIrrEgpzqkfppFnkCh4kDsX4roD5Nho3J4MTBQkqE0r676Yq6Rp6cywCq\n" +
179
"CHQQztRGY7n/ZYRNJ3uzvuoT1tk=\n" +
180
"-----END CERTIFICATE-----";
181
182
// MD5withRSA 1024 signed with RSA 512
183
static String intermediate_MD5withRSA_1024_512 =
184
"-----BEGIN CERTIFICATE-----\n" +
185
"MIICDzCCAbmgAwIBAgIBCDANBgkqhkiG9w0BAQQFADAfMQswCQYDVQQGEwJVUzEQ\n" +
186
"MA4GA1UEChMHRXhhbXBsZTAeFw0xMzEyMjgxMTA5MTBaFw0zMzA5MTQxMTA5MTBa\n" +
187
"MDExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFtcGxlMRAwDgYDVQQLEwdDbGFz\n" +
188
"cy0xMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/m9wdJT0HR+exquh2Q2Yq\n" +
189
"XvL9HtEsCabCikd0Vjuoi3sZJ/5SBbbHTvh7z7enW0NEpLHQee0ry5FW8mLxDtrR\n" +
190
"38NjE9W7zutucBG5WztwGuvcts13aEw+vH+EwhokJW9PXz9Do+y4PTJo3vdsk7Zs\n" +
191
"bGVY9+YjvlgEaozWXZ1JhQIDAQABo4GJMIGGMB0GA1UdDgQWBBQIsaDZL94kLug/\n" +
192
"A1N4EkNOA4z47DBHBgNVHSMEQDA+gBTk9UvEFj/+yY3fWMdv8wCYITPk0qEjpCEw\n" +
193
"HzELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0V4YW1wbGWCAQAwDwYDVR0TAQH/BAUw\n" +
194
"AwEB/zALBgNVHQ8EBAMCAgQwDQYJKoZIhvcNAQEEBQADQQA3XGQPNin8cDIsJ4vx\n" +
195
"tTxUO6XVJoWOdTsjwzlMrPmLvjJNZeXLtQe3pQu0vjgyUpQ59VYLW3qKN/LF3UH0\n" +
196
"Ep7V\n" +
197
"-----END CERTIFICATE-----";
198
199
// SHA1withRSA 1024 signed with RSA 1024
200
static String endentiry_SHA1withRSA_1024_1024 =
201
"-----BEGIN CERTIFICATE-----\n" +
202
"MIICNzCCAaCgAwIBAgIBAjANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJVUzEQ\n" +
203
"MA4GA1UEChMHRXhhbXBsZTEQMA4GA1UECxMHQ2xhc3MtMTAeFw0xMzEyMjgxMTA5\n" +
204
"MTJaFw0zMzA5MTQxMTA5MTJaMEExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFt\n" +
205
"cGxlMRAwDgYDVQQLEwdDbGFzcy0xMQ4wDAYDVQQDEwVBbGljZTCBnzANBgkqhkiG\n" +
206
"9w0BAQEFAAOBjQAwgYkCgYEAvktJqK4/SvQrTyGgV8tM6zP/K5xQP1pFRipRKS8i\n" +
207
"2yaXdlW4jQBZWVXdfEsm8YwGwtXFKIlleALmgJcLldPwNm0qaKixL4mRJVMm4bXM\n" +
208
"UXCfmr+Im1SpA4Yum4VFCfIJ1kkeQkXqc57sCSfS+rFnC+1kSNa9wj+Mc4+5FR4k\n" +
209
"zqUCAwEAAaNPME0wCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBRDzLh/sWyTsdq1KKnG\n" +
210
"8e7JW1tPUDAfBgNVHSMEGDAWgBQIsaDZL94kLug/A1N4EkNOA4z47DANBgkqhkiG\n" +
211
"9w0BAQUFAAOBgQB2RkWHOaL4WTOGoeTS4J4o9FW+4UXihbocdI/64rMExERjDkE/\n" +
212
"Jh31TEmatnP1gPrF1AfmqQPubqVSbRtCHrZF+Ilk6L6YeyRNzKvsLiMUtgrLYLas\n" +
213
"Vop0DFZxR02xHgaJdoJkcWBjNadb9zG7eZtt8OOOJ4lRwg02aLTy+WDqPA==\n" +
214
"-----END CERTIFICATE-----";
215
216
// SHA1withRSA 1024 signed with RSA 512
217
static String endentiry_SHA1withRSA_1024_512 =
218
"-----BEGIN CERTIFICATE-----\n" +
219
"MIIB9jCCAaCgAwIBAgIBAzANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJVUzEQ\n" +
220
"MA4GA1UEChMHRXhhbXBsZTEQMA4GA1UECxMHQ2xhc3MtMTAeFw0xMzEyMjgxMTA5\n" +
221
"MTJaFw0zMzA5MTQxMTA5MTJaMEExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFt\n" +
222
"cGxlMRAwDgYDVQQLEwdDbGFzcy0xMQ4wDAYDVQQDEwVBbGljZTCBnzANBgkqhkiG\n" +
223
"9w0BAQEFAAOBjQAwgYkCgYEAvktJqK4/SvQrTyGgV8tM6zP/K5xQP1pFRipRKS8i\n" +
224
"2yaXdlW4jQBZWVXdfEsm8YwGwtXFKIlleALmgJcLldPwNm0qaKixL4mRJVMm4bXM\n" +
225
"UXCfmr+Im1SpA4Yum4VFCfIJ1kkeQkXqc57sCSfS+rFnC+1kSNa9wj+Mc4+5FR4k\n" +
226
"zqUCAwEAAaNPME0wCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBRDzLh/sWyTsdq1KKnG\n" +
227
"8e7JW1tPUDAfBgNVHSMEGDAWgBTzw4Pjw6y6HuUmIueF8yGvJKpbxDANBgkqhkiG\n" +
228
"9w0BAQUFAANBAIapvjECUm4YD4O99G0v2SM17cKQzjZtSWkScS7FSk4sxS+dP3hM\n" +
229
"Qb2UpoRl6CGynhOVVy2G/VJN8BEqOfywj8k=\n" +
230
"-----END CERTIFICATE-----";
231
232
// SHA1withRSA 512 signed with RSA 1024
233
static String endentiry_SHA1withRSA_512_1024 =
234
"-----BEGIN CERTIFICATE-----\n" +
235
"MIIB8zCCAVygAwIBAgIBBDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJVUzEQ\n" +
236
"MA4GA1UEChMHRXhhbXBsZTEQMA4GA1UECxMHQ2xhc3MtMTAeFw0xMzEyMjgxMTA5\n" +
237
"MTJaFw0zMzA5MTQxMTA5MTJaMEExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFt\n" +
238
"cGxlMRAwDgYDVQQLEwdDbGFzcy0xMQ4wDAYDVQQDEwVBbGljZTBcMA0GCSqGSIb3\n" +
239
"DQEBAQUAA0sAMEgCQQCngiNTE+qngHcfj2jUpdc82gCw+TFRjR7oMSdp7b/3NwpD\n" +
240
"E+11z9WspoXTDzvbKcGUH9svFl691NyY0ZUmf+4RAgMBAAGjTzBNMAsGA1UdDwQE\n" +
241
"AwID6DAdBgNVHQ4EFgQUK+oVsFTQbz08evgQZ5Sd82c2y4UwHwYDVR0jBBgwFoAU\n" +
242
"CLGg2S/eJC7oPwNTeBJDTgOM+OwwDQYJKoZIhvcNAQEFBQADgYEAMd/8XnjRz5jK\n" +
243
"nbss9DDQQC2mUuCbV/tGdke7eQ1DtBVZLBU6wDgisGr52sUXmyZIPmSVKpQqwCG5\n" +
244
"8cY5uQhaNwPtPmMMKXzX32zN9NhVkiDNceL+zHs3vdjD1i/QiUTST+NKfLYVb6dF\n" +
245
"YMG65lxe3gMVxMweiHSZSukmk1k3gUA=\n" +
246
"-----END CERTIFICATE-----";
247
248
// SHA1withRSA 512 signed with RSA 512
249
static String endentiry_SHA1withRSA_512_512 =
250
"-----BEGIN CERTIFICATE-----\n" +
251
"MIIBsjCCAVygAwIBAgIBBTANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJVUzEQ\n" +
252
"MA4GA1UEChMHRXhhbXBsZTEQMA4GA1UECxMHQ2xhc3MtMTAeFw0xMzEyMjgxMTA5\n" +
253
"MTJaFw0zMzA5MTQxMTA5MTJaMEExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFt\n" +
254
"cGxlMRAwDgYDVQQLEwdDbGFzcy0xMQ4wDAYDVQQDEwVBbGljZTBcMA0GCSqGSIb3\n" +
255
"DQEBAQUAA0sAMEgCQQCngiNTE+qngHcfj2jUpdc82gCw+TFRjR7oMSdp7b/3NwpD\n" +
256
"E+11z9WspoXTDzvbKcGUH9svFl691NyY0ZUmf+4RAgMBAAGjTzBNMAsGA1UdDwQE\n" +
257
"AwID6DAdBgNVHQ4EFgQUK+oVsFTQbz08evgQZ5Sd82c2y4UwHwYDVR0jBBgwFoAU\n" +
258
"88OD48Osuh7lJiLnhfMhrySqW8QwDQYJKoZIhvcNAQEFBQADQQB4xFWtC6ijDBIe\n" +
259
"/Gkf3B9+ycmP52pTPNiPwMS6u1a5vTRXMn5xRDexWfxJKJVZ2s9UR1jheZvWgPC8\n" +
260
"VUWO8bbG\n" +
261
"-----END CERTIFICATE-----";
262
263
// MD5withRSA 1024 signed with RSA 1024
264
static String endentiry_MD5withRSA_1024_1024 =
265
"-----BEGIN CERTIFICATE-----\n" +
266
"MIICNzCCAaCgAwIBAgIBBjANBgkqhkiG9w0BAQQFADAxMQswCQYDVQQGEwJVUzEQ\n" +
267
"MA4GA1UEChMHRXhhbXBsZTEQMA4GA1UECxMHQ2xhc3MtMTAeFw0xMzEyMjgxMTA5\n" +
268
"MTJaFw0zMzA5MTQxMTA5MTJaMEExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFt\n" +
269
"cGxlMRAwDgYDVQQLEwdDbGFzcy0xMQ4wDAYDVQQDEwVBbGljZTCBnzANBgkqhkiG\n" +
270
"9w0BAQEFAAOBjQAwgYkCgYEAvktJqK4/SvQrTyGgV8tM6zP/K5xQP1pFRipRKS8i\n" +
271
"2yaXdlW4jQBZWVXdfEsm8YwGwtXFKIlleALmgJcLldPwNm0qaKixL4mRJVMm4bXM\n" +
272
"UXCfmr+Im1SpA4Yum4VFCfIJ1kkeQkXqc57sCSfS+rFnC+1kSNa9wj+Mc4+5FR4k\n" +
273
"zqUCAwEAAaNPME0wCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBRDzLh/sWyTsdq1KKnG\n" +
274
"8e7JW1tPUDAfBgNVHSMEGDAWgBQIsaDZL94kLug/A1N4EkNOA4z47DANBgkqhkiG\n" +
275
"9w0BAQQFAAOBgQBCVn9/JQxsRTaKIKSrgB+KtEreat+33k3SXuJICuRxcmvjOXIx\n" +
276
"wSdq+mRCA+DpIPSNtgnDAUyipnyxRxpdmRRUHuRYpkALq4a5QtTJK0Y/CEMfsd2J\n" +
277
"Yd2zKcfynDLW6LVeNdtjlY7fTemJnbA/WImNhwyW55V9vbnk3J04EZN8jw==\n" +
278
"-----END CERTIFICATE-----";
279
280
// MD5withRSA 1024 signed with RSA 512
281
static String endentiry_MD5withRSA_1024_512 =
282
"-----BEGIN CERTIFICATE-----\n" +
283
"MIIB9jCCAaCgAwIBAgIBBzANBgkqhkiG9w0BAQQFADAxMQswCQYDVQQGEwJVUzEQ\n" +
284
"MA4GA1UEChMHRXhhbXBsZTEQMA4GA1UECxMHQ2xhc3MtMTAeFw0xMzEyMjgxMTA5\n" +
285
"MTNaFw0zMzA5MTQxMTA5MTNaMEExCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFeGFt\n" +
286
"cGxlMRAwDgYDVQQLEwdDbGFzcy0xMQ4wDAYDVQQDEwVBbGljZTCBnzANBgkqhkiG\n" +
287
"9w0BAQEFAAOBjQAwgYkCgYEAvktJqK4/SvQrTyGgV8tM6zP/K5xQP1pFRipRKS8i\n" +
288
"2yaXdlW4jQBZWVXdfEsm8YwGwtXFKIlleALmgJcLldPwNm0qaKixL4mRJVMm4bXM\n" +
289
"UXCfmr+Im1SpA4Yum4VFCfIJ1kkeQkXqc57sCSfS+rFnC+1kSNa9wj+Mc4+5FR4k\n" +
290
"zqUCAwEAAaNPME0wCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBRDzLh/sWyTsdq1KKnG\n" +
291
"8e7JW1tPUDAfBgNVHSMEGDAWgBTzw4Pjw6y6HuUmIueF8yGvJKpbxDANBgkqhkiG\n" +
292
"9w0BAQQFAANBAAbZwmkqb6sfiiIxuLnj6PjhJsXGfvPomkkbLu5CapAMhen/p6ZG\n" +
293
"6vh69TbIsBR9UHu7qDyTl5Xax7bmYeW+sDQ=\n" +
294
"-----END CERTIFICATE-----";
295
296
static HashMap<String, String> certmap = new HashMap<String, String>();
297
static {
298
certmap.put("trustAnchor_SHA1withRSA_1024",
299
trustAnchor_SHA1withRSA_1024);
300
certmap.put("trustAnchor_SHA1withRSA_512",
301
trustAnchor_SHA1withRSA_512);
302
certmap.put("intermediate_SHA1withRSA_1024_1024",
303
intermediate_SHA1withRSA_1024_1024);
304
certmap.put("intermediate_SHA1withRSA_1024_512",
305
intermediate_SHA1withRSA_1024_512);
306
certmap.put("intermediate_SHA1withRSA_512_1024",
307
intermediate_SHA1withRSA_512_1024);
308
certmap.put("intermediate_SHA1withRSA_512_512",
309
intermediate_SHA1withRSA_512_512);
310
certmap.put("intermediate_MD5withRSA_1024_1024",
311
intermediate_MD5withRSA_1024_1024);
312
certmap.put("intermediate_MD5withRSA_1024_512",
313
intermediate_MD5withRSA_1024_512);
314
certmap.put("endentiry_SHA1withRSA_1024_1024",
315
endentiry_SHA1withRSA_1024_1024);
316
certmap.put("endentiry_SHA1withRSA_1024_512",
317
endentiry_SHA1withRSA_1024_512);
318
certmap.put("endentiry_SHA1withRSA_512_1024",
319
endentiry_SHA1withRSA_512_1024);
320
certmap.put("endentiry_SHA1withRSA_512_512",
321
endentiry_SHA1withRSA_512_512);
322
certmap.put("endentiry_MD5withRSA_1024_1024",
323
endentiry_MD5withRSA_1024_1024);
324
certmap.put("endentiry_MD5withRSA_1024_512",
325
endentiry_MD5withRSA_1024_512);
326
}
327
328
private static Set<TrustAnchor> generateTrustAnchors()
329
throws CertificateException {
330
// generate certificate from cert string
331
CertificateFactory cf = CertificateFactory.getInstance("X.509");
332
HashSet<TrustAnchor> anchors = new HashSet<TrustAnchor>();
333
334
ByteArrayInputStream is =
335
new ByteArrayInputStream(trustAnchor_SHA1withRSA_1024.getBytes());
336
Certificate cert = cf.generateCertificate(is);
337
TrustAnchor anchor = new TrustAnchor((X509Certificate)cert, null);
338
anchors.add(anchor);
339
340
is = new ByteArrayInputStream(trustAnchor_SHA1withRSA_512.getBytes());
341
cert = cf.generateCertificate(is);
342
anchor = new TrustAnchor((X509Certificate)cert, null);
343
anchors.add(anchor);
344
345
return anchors;
346
}
347
348
private static CertStore generateCertificateStore() throws Exception {
349
Collection entries = new HashSet();
350
351
// generate certificate from certificate string
352
CertificateFactory cf = CertificateFactory.getInstance("X.509");
353
354
for (String key : certmap.keySet()) {
355
String certStr = certmap.get(key);
356
ByteArrayInputStream is =
357
new ByteArrayInputStream(certStr.getBytes());;
358
Certificate cert = cf.generateCertificate(is);
359
entries.add(cert);
360
}
361
362
return CertStore.getInstance("Collection",
363
new CollectionCertStoreParameters(entries));
364
}
365
366
private static X509CertSelector generateSelector(String name)
367
throws Exception {
368
X509CertSelector selector = new X509CertSelector();
369
370
String certStr = certmap.get(name);
371
if (certStr == null) {
372
return null;
373
}
374
375
// generate certificate from certificate string
376
CertificateFactory cf = CertificateFactory.getInstance("X.509");
377
ByteArrayInputStream is = new ByteArrayInputStream(certStr.getBytes());
378
X509Certificate target = (X509Certificate)cf.generateCertificate(is);
379
380
selector.setCertificate(target);
381
382
return selector;
383
}
384
385
private static boolean match(String name, Certificate cert)
386
throws Exception {
387
X509CertSelector selector = new X509CertSelector();
388
389
String certStr = certmap.get(name);
390
if (certStr == null) {
391
return false;
392
}
393
394
// generate certificate from certificate string
395
CertificateFactory cf = CertificateFactory.getInstance("X.509");
396
ByteArrayInputStream is = new ByteArrayInputStream(certStr.getBytes());
397
X509Certificate target = (X509Certificate)cf.generateCertificate(is);
398
399
return target.equals(cert);
400
}
401
402
public static void main(String args[]) throws Exception {
403
CertPathBuilder builder = CertPathBuilder.getInstance("PKIX");
404
405
X509CertSelector selector = generateSelector(args[0]);
406
if (selector == null) {
407
// no target certificate, ignore it
408
return;
409
}
410
411
Set<TrustAnchor> anchors = generateTrustAnchors();
412
CertStore certs = generateCertificateStore();
413
414
PKIXBuilderParameters params =
415
new PKIXBuilderParameters(anchors, selector);
416
params.addCertStore(certs);
417
params.setRevocationEnabled(false);
418
params.setDate(new Date(114, 9, 1)); // 2014-09-01
419
420
boolean success = Boolean.valueOf(args[2]);
421
try {
422
PKIXCertPathBuilderResult result =
423
(PKIXCertPathBuilderResult)builder.build(params);
424
if (!success) {
425
throw new Exception("expected algorithm disabled exception");
426
}
427
428
int length = Integer.parseInt(args[1]);
429
List<? extends Certificate> path =
430
result.getCertPath().getCertificates();
431
if (length != path.size()) {
432
throw new Exception("unexpected certification path length");
433
}
434
435
if (!path.isEmpty()) { // the target is not a trust anchor
436
if (!match(args[0], path.get(0))) {
437
throw new Exception("unexpected certificate");
438
}
439
}
440
} catch (CertPathBuilderException cpbe) {
441
if (success) {
442
throw new Exception("unexpected exception", cpbe);
443
} else {
444
System.out.println("Get the expected exception " + cpbe);
445
}
446
}
447
}
448
449
}
450
451