1 /*
2 * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
3 */
4
5 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright notice,
11 * this list of conditions and the following disclaimer.
12 *
13 * 2. Redistributions in binary form must reproduce the above copyright notice,
14 * this list of conditions and the following disclaimer in the documentation
15 * and/or other materials provided with the distribution.
16 *
17 * 3. The end-user documentation included with the redistribution, if any, must
18 * include the following acknowledgment:
19 *
20 * "This product includes software developed by IAIK of Graz University of
21 * Technology."
22 *
23 * Alternately, this acknowledgment may appear in the software itself, if
24 * and wherever such third-party acknowledgments normally appear.
25 *
26 * 4. The names "Graz University of Technology" and "IAIK of Graz University of
27 * Technology" must not be used to endorse or promote products derived from
28 * this software without prior written permission.
29 *
30 * 5. Products derived from this software may not be called
31 * "IAIK PKCS Wrapper", nor may "IAIK" appear in their name, without prior
32 * written permission of Graz University of Technology.
33 *
34 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
35 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
36 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
37 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE LICENSOR BE
38 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
39 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
40 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
41 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
42 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
43 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
44 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
45 * POSSIBILITY OF SUCH DAMAGE.
46 */
47
48 package sun.security.pkcs11.wrapper;
49
50
51
52 /**
53 * class CK_TOKEN_INFO provides information about a token.<p>
54 * <B>PKCS#11 structure:</B>
55 * <PRE>
56 * typedef struct CK_TOKEN_INFO {
57 * CK_UTF8CHAR label[32];
58 * CK_UTF8CHAR manufacturerID[32];
59 * CK_UTF8CHAR model[16];
60 * CK_CHAR serialNumber[16];
61 * CK_FLAGS flags;
62 * CK_ULONG ulMaxSessionCount;
63 * CK_ULONG ulSessionCount;
64 * CK_ULONG ulMaxRwSessionCount;
65 * CK_ULONG ulRwSessionCount;
66 * CK_ULONG ulMaxPinLen;
67 * CK_ULONG ulMinPinLen;
68 * CK_ULONG ulTotalPublicMemory;
69 * CK_ULONG ulFreePublicMemory;
70 * CK_ULONG ulTotalPrivateMemory;
71 * CK_ULONG ulFreePrivateMemory;
72 * CK_VERSION hardwareVersion;
73 * CK_VERSION firmwareVersion;
74 * CK_CHAR utcTime[16];
75 * } CK_TOKEN_INFO;
76 *
77 * </PRE>
78 *
79 * @author Karl Scheibelhofer <Karl.Scheibelhofer@iaik.at>
80 * @author Martin Schlaeffer <schlaeff@sbox.tugraz.at>
81 */
82 public class CK_TOKEN_INFO {
83
84 /* label, manufacturerID, and model have been changed from
85 * CK_CHAR to CK_UTF8CHAR for v2.11. */
86 /**
87 * must be blank padded and only the first 32 chars will be used<p>
88 * <B>PKCS#11:</B>
89 * <PRE>
90 * CK_UTF8CHAR label[32];
91 * </PRE>
92 */
93 public char[] label; /* blank padded */
94
95 /**
96 * must be blank padded and only the first 32 chars will be used<p>
97 * <B>PKCS#11:</B>
98 * <PRE>
99 * CK_UTF8CHAR manufacturerID[32];
100 * </PRE>
101 */
102 public char[] manufacturerID; /* blank padded */
103
104 /**
105 * must be blank padded and only the first 16 chars will be used<p>
106 * <B>PKCS#11:</B>
107 * <PRE>
108 * CK_UTF8CHAR model[16];
109 * </PRE>
110 */
111 public char[] model; /* blank padded */
112
113 /**
114 * must be blank padded and only the first 16 chars will be used<p>
115 * <B>PKCS#11:</B>
116 * <PRE>
117 * CK_CHAR serialNumber[16];
118 * </PRE>
119 */
120 public char[] serialNumber; /* blank padded */
121
122 /**
123 * <B>PKCS#11:</B>
124 * <PRE>
125 * CK_FLAGS flags;
126 * </PRE>
127 */
128 public long flags; /* see below */
129
130 /* ulMaxSessionCount, ulSessionCount, ulMaxRwSessionCount,
131 * ulRwSessionCount, ulMaxPinLen, and ulMinPinLen have all been
132 * changed from CK_USHORT to CK_ULONG for v2.0 */
133 /**
134 * <B>PKCS#11:</B>
135 * <PRE>
136 * CK_ULONG ulMaxSessionCount;
137 * </PRE>
138 */
139 public long ulMaxSessionCount; /* max open sessions */
140
141 /**
142 * <B>PKCS#11:</B>
143 * <PRE>
144 * CK_ULONG ulSessionCount;
145 * </PRE>
146 */
147 public long ulSessionCount; /* sess. now open */
148
149 /**
150 * <B>PKCS#11:</B>
151 * <PRE>
152 * CK_ULONG ulMaxRwSessionCount;
153 * </PRE>
154 */
155 public long ulMaxRwSessionCount; /* max R/W sessions */
156
157 /**
158 * <B>PKCS#11:</B>
159 * <PRE>
160 * CK_ULONG ulRwSessionCount;
161 * </PRE>
162 */
163 public long ulRwSessionCount; /* R/W sess. now open */
164
165 /**
166 * <B>PKCS#11:</B>
167 * <PRE>
168 * CK_ULONG ulMaxPinLen;
169 * </PRE>
170 */
171 public long ulMaxPinLen; /* in bytes */
172
173 /**
174 * <B>PKCS#11:</B>
175 * <PRE>
176 * CK_ULONG ulMinPinLen;
177 * </PRE>
178 */
179 public long ulMinPinLen; /* in bytes */
180
181 /**
182 * <B>PKCS#11:</B>
183 * <PRE>
184 * CK_ULONG ulTotalPublicMemory;
185 * </PRE>
186 */
187 public long ulTotalPublicMemory; /* in bytes */
188
189 /**
190 * <B>PKCS#11:</B>
191 * <PRE>
192 * CK_ULONG ulFreePublicMemory;
193 * </PRE>
194 */
195 public long ulFreePublicMemory; /* in bytes */
196
197 /**
198 * <B>PKCS#11:</B>
199 * <PRE>
200 * CK_ULONG ulTotalPrivateMemory;
201 * </PRE>
202 */
203 public long ulTotalPrivateMemory; /* in bytes */
204
205 /**
206 * <B>PKCS#11:</B>
207 * <PRE>
208 * CK_ULONG ulFreePrivateMemory;
209 * </PRE>
210 */
211 public long ulFreePrivateMemory; /* in bytes */
212
213 /* hardwareVersion, firmwareVersion, and time are new for
214 * v2.0 */
215 /**
216 * <B>PKCS#11:</B>
217 * <PRE>
218 * CK_VERSION hardwareVersion;
219 * </PRE>
220 */
221 public CK_VERSION hardwareVersion; /* version of hardware */
222
223 /**
224 * <B>PKCS#11:</B>
225 * <PRE>
226 * CK_VERSION firmwareVersion;
227 * </PRE>
228 */
229 public CK_VERSION firmwareVersion; /* version of firmware */
230
231 /**
232 * only the first 16 chars will be used
233 * <B>PKCS#11:</B>
234 * <PRE>
235 * CK_CHAR utcTime[16];
236 * </PRE>
237 */
238 public char[] utcTime; /* time */
239
240 public CK_TOKEN_INFO(char[] label, char[] vendor, char[] model,
241 char[] serialNo, long flags,
242 long sessionMax, long session,
243 long rwSessionMax, long rwSession,
244 long pinLenMax, long pinLenMin,
245 long totalPubMem, long freePubMem,
246 long totalPrivMem, long freePrivMem,
247 CK_VERSION hwVer, CK_VERSION fwVer, char[] utcTime) {
248 this.label = label;
249 this.manufacturerID = vendor;
250 this.model = model;
251 this.serialNumber = serialNo;
252 this.flags = flags;
253 this.ulMaxSessionCount = sessionMax;
254 this.ulSessionCount = session;
255 this.ulMaxRwSessionCount = rwSessionMax;
256 this.ulRwSessionCount = rwSession;
257 this.ulMaxPinLen = pinLenMax;
258 this.ulMinPinLen = pinLenMin;
259 this.ulTotalPublicMemory = totalPubMem;
260 this.ulFreePublicMemory = freePubMem;
261 this.ulTotalPrivateMemory = totalPrivMem;
262 this.ulFreePrivateMemory = freePrivMem;
263 this.hardwareVersion = hwVer;
264 this.firmwareVersion = fwVer;
265 this.utcTime = utcTime;
266 }
267
268 /**
269 * Returns the string representation of CK_TOKEN_INFO.
270 *
271 * @return the string representation of CK_TOKEN_INFO
272 */
273 public String toString() {
274 StringBuilder sb = new StringBuilder();
275
276 sb.append(Constants.INDENT);
277 sb.append("label: ");
278 sb.append(new String(label));
279 sb.append(Constants.NEWLINE);
280
281 sb.append(Constants.INDENT);
282 sb.append("manufacturerID: ");
283 sb.append(new String(manufacturerID));
284 sb.append(Constants.NEWLINE);
285
286 sb.append(Constants.INDENT);
287 sb.append("model: ");
288 sb.append(new String(model));
289 sb.append(Constants.NEWLINE);
290
291 sb.append(Constants.INDENT);
292 sb.append("serialNumber: ");
293 sb.append(new String(serialNumber));
294 sb.append(Constants.NEWLINE);
295
296 sb.append(Constants.INDENT);
297 sb.append("flags: ");
298 sb.append(Functions.tokenInfoFlagsToString(flags));
299 sb.append(Constants.NEWLINE);
300
301 sb.append(Constants.INDENT);
302 sb.append("ulMaxSessionCount: ");
303 sb.append((ulMaxSessionCount == PKCS11Constants.CK_EFFECTIVELY_INFINITE)
304 ? "CK_EFFECTIVELY_INFINITE"
305 : (ulMaxSessionCount == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
306 ? "CK_UNAVAILABLE_INFORMATION"
307 : String.valueOf(ulMaxSessionCount));
308 sb.append(Constants.NEWLINE);
309
310 sb.append(Constants.INDENT);
311 sb.append("ulSessionCount: ");
312 sb.append((ulSessionCount == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
313 ? "CK_UNAVAILABLE_INFORMATION"
314 : String.valueOf(ulSessionCount));
315 sb.append(Constants.NEWLINE);
316
317 sb.append(Constants.INDENT);
318 sb.append("ulMaxRwSessionCount: ");
319 sb.append((ulMaxRwSessionCount == PKCS11Constants.CK_EFFECTIVELY_INFINITE)
320 ? "CK_EFFECTIVELY_INFINITE"
321 : (ulMaxRwSessionCount == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
322 ? "CK_UNAVAILABLE_INFORMATION"
323 : String.valueOf(ulMaxRwSessionCount));
324 sb.append(Constants.NEWLINE);
325
326 sb.append(Constants.INDENT);
327 sb.append("ulRwSessionCount: ");
328 sb.append((ulRwSessionCount == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
329 ? "CK_UNAVAILABLE_INFORMATION"
330 : String.valueOf(ulRwSessionCount));
331 sb.append(Constants.NEWLINE);
332
333 sb.append(Constants.INDENT);
334 sb.append("ulMaxPinLen: ");
335 sb.append(String.valueOf(ulMaxPinLen));
336 sb.append(Constants.NEWLINE);
337
338 sb.append(Constants.INDENT);
339 sb.append("ulMinPinLen: ");
340 sb.append(String.valueOf(ulMinPinLen));
341 sb.append(Constants.NEWLINE);
342
343 sb.append(Constants.INDENT);
344 sb.append("ulTotalPublicMemory: ");
345 sb.append((ulTotalPublicMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
346 ? "CK_UNAVAILABLE_INFORMATION"
347 : String.valueOf(ulTotalPublicMemory));
348 sb.append(Constants.NEWLINE);
349
350 sb.append(Constants.INDENT);
351 sb.append("ulFreePublicMemory: ");
352 sb.append((ulFreePublicMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
353 ? "CK_UNAVAILABLE_INFORMATION"
354 : String.valueOf(ulFreePublicMemory));
355 sb.append(Constants.NEWLINE);
356
357 sb.append(Constants.INDENT);
358 sb.append("ulTotalPrivateMemory: ");
359 sb.append((ulTotalPrivateMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
360 ? "CK_UNAVAILABLE_INFORMATION"
361 : String.valueOf(ulTotalPrivateMemory));
362 sb.append(Constants.NEWLINE);
363
364 sb.append(Constants.INDENT);
365 sb.append("ulFreePrivateMemory: ");
366 sb.append((ulFreePrivateMemory == PKCS11Constants.CK_UNAVAILABLE_INFORMATION)
367 ? "CK_UNAVAILABLE_INFORMATION"
368 : String.valueOf(ulFreePrivateMemory));
369 sb.append(Constants.NEWLINE);
370
371 sb.append(Constants.INDENT);
372 sb.append("hardwareVersion: ");
373 sb.append(hardwareVersion.toString());
374 sb.append(Constants.NEWLINE);
375
376 sb.append(Constants.INDENT);
377 sb.append("firmwareVersion: ");
378 sb.append(firmwareVersion.toString());
379 sb.append(Constants.NEWLINE);
380
381 sb.append(Constants.INDENT);
382 sb.append("utcTime: ");
383 sb.append(new String(utcTime));
384 //buffer.append(Constants.NEWLINE);
385
386 return sb.toString() ;
387 }
388
389 }