001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026: package com.sun.satsa.util.pkcs15;
027:
028: import java.util.Vector;
029: import java.io.IOException;
030: import com.sun.satsa.util.*;
031:
032: /**
033: * This class represents the PKCS15 ODF file
034: */
035: public class ODF extends PKCS15File {
036:
037: /*
038: * ODF entries tags.
039: * These tags means the context-specific constructed type and tag of
040: * the PKCS15Objects ::= CHOICE,
041: */
042: /** PrivateKeys ODF entry tag. */
043: public static final int ODFTAG_PRIVATE_KEYS = 0xa0;
044: /** PublicKeys ODF entry tag. */
045: public static final int ODFTAG_PUBLIC_KEYS = 0xa1;
046: /** PublicKeys ODF entry tag. */
047: public static final int ODFTAG_TRUSTED_PUBLIC_KEYS = 0xa2;
048: /** SecretKeys ODF entry tag. */
049: public static final int ODFTAG_SECRET_KEYS = 0xa3;
050: /** Certificates ODF entry tag. */
051: public static final int ODFTAG_CERTIFICATES = 0xa4;
052: /** Certificates ODF entry tag. */
053: public static final int ODFTAG_TRUSTED_CERTIFICATES = 0xa5;
054: /** Certificates ODF entry tag. */
055: public static final int ODFTAG_USEFUL_CERTIFICATES = 0xa6;
056: /** DataObjects ODF entry tag. */
057: public static final int ODFTAG_DATA_OBJECTS = 0xa7;
058: /** AuthObjects ODF entry tag. */
059: public static final int ODFTAG_AUTH_OBJECTS = 0xa8;
060:
061: /** PublicKeys objects */
062: private Vector pukdfPath = new Vector();
063: /** PrivateKeys objects */
064: private Vector prkdfPath = new Vector();
065: /** Certificates obiects */
066: private Vector cdfPath = new Vector();
067: /** SecretKeys objects */
068: private Vector skdfPath = new Vector();
069: /** AuthObjects objects */
070: private Vector aodfPath = new Vector();
071: /** DataObjects objects */
072: private Vector dodfPath = new Vector();
073:
074: /** This vector contains parsed objects from DF(ODF). */
075: private Vector ODF;
076:
077: /**
078: * Creates the ODF object
079: * @param files FileSystemAbstract file system that is used
080: * to reading from file
081: */
082: public ODF(FileSystemAbstract files) {
083: super (files);
084: }
085:
086: /**
087: * Seeks the DODF file for the pointed tag
088: * @param tag byte[] required tag
089: * @return Vector the OidDo objects from the DODF file
090: * @throws IOException any IO exceptions
091: * @throws TLVException any TLV exceptions
092: */
093: public Vector getDOFs(byte[] tag) throws IOException, TLVException {
094: Vector v = new Vector();
095: for (int i = 0; i < dodfPath.size(); i++) {
096: DODF d = new DODF((Location) dodfPath.elementAt(i), files);
097: d.load();
098: for (int j = 0; j < d.getOidDoNumber(); j++) {
099: if (Utils.byteMatch(tag, d.getOid(j))) {
100: v.addElement(d.getOidDoValueTLV(j));
101: }
102: }
103: }
104: return v;
105: }
106:
107: /**
108: * Returns a number of the AODF files
109: * @return int number of the AODF files
110: */
111: public int getAODFCount() {
112: return aodfPath.size();
113: }
114:
115: /**
116: * returns location of the AODF file
117: * @param index int number uf the AODF file
118: * @return Location
119: */
120: public Location getAODFPath(int index) {
121: return ((Location) aodfPath.elementAt(index));
122: }
123:
124: /**
125: * Reads ODF .
126: * @throws IOException if I/O error occurs
127: * @throws TLVException if TLV error occurs
128: * It is supposed that the ODF file contains information in the following
129: * format:
130: * ODFTAG_xxx {
131: * Location
132: * }
133: * ...
134: * ODFTAG_xxx {
135: * Location
136: * }
137: */
138: public void load() throws IOException, TLVException {
139:
140: ODF = new Vector();
141: resetLoader(ODF, null, null);
142: parseDF(new short[] { ODFPath });
143:
144: for (int i = 0; i < ODF.size(); i++) {
145: TLV t = (TLV) ODF.elementAt(i);
146: Location l = files.pathToLocation(t.child.child);
147: switch (t.type) {
148: case ODFTAG_PRIVATE_KEYS: {
149: prkdfPath.addElement(l);
150: break;
151: }
152: case ODFTAG_PUBLIC_KEYS:
153: case ODFTAG_TRUSTED_PUBLIC_KEYS: {
154: pukdfPath.addElement(l);
155: break;
156: }
157: case ODFTAG_SECRET_KEYS: {
158: skdfPath.addElement(l);
159: break;
160: }
161: case ODFTAG_CERTIFICATES:
162: case ODFTAG_TRUSTED_CERTIFICATES:
163: case ODFTAG_USEFUL_CERTIFICATES: {
164: cdfPath.addElement(l);
165: break;
166: }
167: case ODFTAG_DATA_OBJECTS: {
168: dodfPath.addElement(l);
169: break;
170: }
171: case ODFTAG_AUTH_OBJECTS: {
172: aodfPath.addElement(l);
173: break;
174: }
175:
176: }
177: }
178: }
179: }
|