/* * * * Copyright 1990-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */ package com.sun.satsa.util.pkcs15; import java.util.Vector; import java.io.IOException; import com.sun.satsa.util.*; /** * This class represents the PKCS15 ODF file */ public class ODF extends PKCS15File { /* * ODF entries tags. * These tags means the context-specific constructed type and tag of * the PKCS15Objects ::= CHOICE, */ /** PrivateKeys ODF entry tag. */ public static final int ODFTAG_PRIVATE_KEYS = 0xa0; /** PublicKeys ODF entry tag. */ public static final int ODFTAG_PUBLIC_KEYS = 0xa1; /** PublicKeys ODF entry tag. */ public static final int ODFTAG_TRUSTED_PUBLIC_KEYS = 0xa2; /** SecretKeys ODF entry tag. */ public static final int ODFTAG_SECRET_KEYS = 0xa3; /** Certificates ODF entry tag. */ public static final int ODFTAG_CERTIFICATES = 0xa4; /** Certificates ODF entry tag. */ public static final int ODFTAG_TRUSTED_CERTIFICATES = 0xa5; /** Certificates ODF entry tag. */ public static final int ODFTAG_USEFUL_CERTIFICATES = 0xa6; /** DataObjects ODF entry tag. */ public static final int ODFTAG_DATA_OBJECTS = 0xa7; /** AuthObjects ODF entry tag. */ public static final int ODFTAG_AUTH_OBJECTS = 0xa8; /** PublicKeys objects */ private Vector pukdfPath = new Vector(); /** PrivateKeys objects */ private Vector prkdfPath = new Vector(); /** Certificates obiects */ private Vector cdfPath = new Vector(); /** SecretKeys objects */ private Vector skdfPath = new Vector(); /** AuthObjects objects */ private Vector aodfPath = new Vector(); /** DataObjects objects */ private Vector dodfPath = new Vector(); /** This vector contains parsed objects from DF(ODF). */ private Vector ODF; /** * Creates the ODF object * @param files FileSystemAbstract file system that is used * to reading from file */ public ODF(FileSystemAbstract files) { super(files); } /** * Seeks the DODF file for the pointed tag * @param tag byte[] required tag * @return Vector the OidDo objects from the DODF file * @throws IOException any IO exceptions * @throws TLVException any TLV exceptions */ public Vector getDOFs(byte[] tag) throws IOException, TLVException { Vector v = new Vector(); for (int i = 0; i < dodfPath.size(); i++) { DODF d = new DODF((Location)dodfPath.elementAt(i), files); d.load(); for (int j = 0; j < d.getOidDoNumber(); j++) { if (Utils.byteMatch(tag, d.getOid(j))) { v.addElement(d.getOidDoValueTLV(j)); } } } return v; } /** * Returns a number of the AODF files * @return int number of the AODF files */ public int getAODFCount() { return aodfPath.size(); } /** * returns location of the AODF file * @param index int number uf the AODF file * @return Location */ public Location getAODFPath(int index) { return ((Location)aodfPath.elementAt(index)); } /** * Reads ODF . * @throws IOException if I/O error occurs * @throws TLVException if TLV error occurs * It is supposed that the ODF file contains information in the following * format: * ODFTAG_xxx { * Location * } * ... * ODFTAG_xxx { * Location * } */ public void load() throws IOException, TLVException { ODF = new Vector(); resetLoader(ODF, null, null); parseDF(new short[] {ODFPath}); for (int i = 0; i < ODF.size(); i++) { TLV t = (TLV) ODF.elementAt(i); Location l = files.pathToLocation(t.child.child); switch (t.type) { case ODFTAG_PRIVATE_KEYS: { prkdfPath.addElement(l); break; } case ODFTAG_PUBLIC_KEYS : case ODFTAG_TRUSTED_PUBLIC_KEYS : { pukdfPath.addElement(l); break; } case ODFTAG_SECRET_KEYS : { skdfPath.addElement(l); break; } case ODFTAG_CERTIFICATES : case ODFTAG_TRUSTED_CERTIFICATES : case ODFTAG_USEFUL_CERTIFICATES : { cdfPath.addElement(l); break; } case ODFTAG_DATA_OBJECTS : { dodfPath.addElement(l); break; } case ODFTAG_AUTH_OBJECTS : { aodfPath.addElement(l); break; } } } } }