Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.base/share/classes/sun/security/provider/certpath/BuildStep.java
41161 views
1
/*
2
* Copyright (c) 2000, 2012, 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
package sun.security.provider.certpath;
27
28
import java.security.cert.X509Certificate;
29
30
/**
31
* Describes one step of a certification path build, consisting of a
32
* <code>Vertex</code> state description, a certificate, a possible throwable,
33
* and a result code.
34
*
35
* @author Anne Anderson
36
* @since 1.4
37
* @see sun.security.provider.certpath.Vertex
38
*/
39
public class BuildStep {
40
41
private Vertex vertex;
42
private X509Certificate cert;
43
private Throwable throwable;
44
private int result;
45
46
/**
47
* result code associated with a certificate that may continue a path from
48
* the current certificate.
49
*/
50
public static final int POSSIBLE = 1;
51
52
/**
53
* result code associated with a certificate that was tried, but that
54
* represents an unsuccessful path, so the certificate has been backed out
55
* to allow backtracking to the next possible path.
56
*/
57
public static final int BACK = 2;
58
59
/**
60
* result code associated with a certificate that successfully continues the
61
* current path, but does not yet reach the target.
62
*/
63
public static final int FOLLOW = 3;
64
65
/**
66
* result code associated with a certificate that represents the end of the
67
* last possible path, where no path successfully reached the target.
68
*/
69
public static final int FAIL = 4;
70
71
/**
72
* result code associated with a certificate that represents the end of a
73
* path that successfully reaches the target.
74
*/
75
public static final int SUCCEED = 5;
76
77
/**
78
* construct a BuildStep
79
*
80
* @param vtx description of the vertex at this step
81
* @param res result, where result is one of POSSIBLE, BACK,
82
* FOLLOW, FAIL, SUCCEED
83
*/
84
public BuildStep(Vertex vtx, int res) {
85
vertex = vtx;
86
if (vertex != null) {
87
cert = vertex.getCertificate();
88
throwable = vertex.getThrowable();
89
}
90
result = res;
91
}
92
93
/**
94
* return vertex description for this build step
95
*
96
* @return Vertex
97
*/
98
public Vertex getVertex() {
99
return vertex;
100
}
101
102
/**
103
* return the certificate associated with this build step
104
*
105
* @return X509Certificate
106
*/
107
public X509Certificate getCertificate() {
108
return cert;
109
}
110
111
/**
112
* return string form of issuer name from certificate associated with this
113
* build step
114
*
115
* @return String form of issuer name or null, if no certificate.
116
*/
117
public String getIssuerName() {
118
return getIssuerName(null);
119
}
120
121
/**
122
* return string form of issuer name from certificate associated with this
123
* build step, or a default name if no certificate associated with this
124
* build step, or if issuer name could not be obtained from the certificate.
125
*
126
* @param defaultName name to use as default if unable to return an issuer
127
* name from the certificate, or if no certificate.
128
* @return String form of issuer name or defaultName, if no certificate or
129
* exception received while trying to extract issuer name from certificate.
130
*/
131
public String getIssuerName(String defaultName) {
132
return (cert == null ? defaultName
133
: cert.getIssuerX500Principal().toString());
134
}
135
136
/**
137
* return string form of subject name from certificate associated with this
138
* build step.
139
*
140
* @return String form of subject name or null, if no certificate.
141
*/
142
public String getSubjectName() {
143
return getSubjectName(null);
144
}
145
146
/**
147
* return string form of subject name from certificate associated with this
148
* build step, or a default name if no certificate associated with this
149
* build step, or if subject name could not be obtained from the
150
* certificate.
151
*
152
* @param defaultName name to use as default if unable to return a subject
153
* name from the certificate, or if no certificate.
154
* @return String form of subject name or defaultName, if no certificate or
155
* if an exception was received while attempting to extract the subject name
156
* from the certificate.
157
*/
158
public String getSubjectName(String defaultName) {
159
return (cert == null ? defaultName
160
: cert.getSubjectX500Principal().toString());
161
}
162
163
/**
164
* return the exception associated with this build step.
165
*
166
* @return Throwable
167
*/
168
public Throwable getThrowable() {
169
return throwable;
170
}
171
172
/**
173
* return the result code associated with this build step. The result codes
174
* are POSSIBLE, FOLLOW, BACK, FAIL, SUCCEED.
175
*
176
* @return int result code
177
*/
178
public int getResult() {
179
return result;
180
}
181
182
/**
183
* return a string representing the meaning of the result code associated
184
* with this build step.
185
*
186
* @param res result code
187
* @return String string representing meaning of the result code
188
*/
189
public String resultToString(int res) {
190
String resultString = "";
191
switch (res) {
192
case POSSIBLE:
193
resultString = "Certificate to be tried.\n";
194
break;
195
case BACK:
196
resultString = "Certificate backed out since path does not "
197
+ "satisfy build requirements.\n";
198
break;
199
case FOLLOW:
200
resultString = "Certificate satisfies conditions.\n";
201
break;
202
case FAIL:
203
resultString = "Certificate backed out since path does not "
204
+ "satisfy conditions.\n";
205
break;
206
case SUCCEED:
207
resultString = "Certificate satisfies conditions.\n";
208
break;
209
default:
210
resultString = "Internal error: Invalid step result value.\n";
211
}
212
return resultString;
213
}
214
215
/**
216
* return a string representation of this build step, showing minimal
217
* detail.
218
*
219
* @return String
220
*/
221
@Override
222
public String toString() {
223
String out = "Internal Error\n";
224
switch (result) {
225
case BACK:
226
case FAIL:
227
out = resultToString(result);
228
out = out + vertex.throwableToString();
229
break;
230
case FOLLOW:
231
case SUCCEED:
232
case POSSIBLE:
233
out = resultToString(result);
234
break;
235
default:
236
out = "Internal Error: Invalid step result\n";
237
}
238
return out;
239
}
240
241
/**
242
* return a string representation of this build step, showing all detail of
243
* the vertex state appropriate to the result of this build step, and the
244
* certificate contents.
245
*
246
* @return String
247
*/
248
public String verboseToString() {
249
String out = resultToString(getResult());
250
switch (result) {
251
case BACK:
252
case FAIL:
253
out = out + vertex.throwableToString();
254
break;
255
case FOLLOW:
256
case SUCCEED:
257
out = out + vertex.moreToString();
258
break;
259
case POSSIBLE:
260
break;
261
default:
262
break;
263
}
264
out = out + "Certificate contains:\n" + vertex.certToString();
265
return out;
266
}
267
268
/**
269
* return a string representation of this build step, including all possible
270
* detail of the vertex state, but not including the certificate contents.
271
*
272
* @return String
273
*/
274
public String fullToString() {
275
return resultToString(getResult()) + vertex.toString();
276
}
277
}
278
279