/* * * * 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.aclapplet; /** * This class represents card file. */ class File { /** File type constant - dedicated file (DF). */ static final byte DIR = 1; /** * File type constant - DF where PINs reside, must be unique for * this implementation. */ static final byte PIN = 3; /** * File type constant - elementary file (EF) where private key * reside. */ static final byte PrivateKeyFile = 4; /** File type constant - root DF for WIM application. */ static final byte WIM = 9; /** File type constant - EF with read permission. */ static final byte READ = 16; /** File type constant - EF with read/write permission. */ static final byte UPDATE = 48; /** File attribute constant - EF is mostly empty . */ static final byte EMPTY = 64; /** Parent DF. */ DFile parent; /** File identifier. */ short id; /** File type. */ short type; /** * Returns true if this file is DF. * @return true. */ boolean isDF() { return true; } } /** * This class represents dedicated card file. */ class DFile extends File { /** * Files contained in this DF. */ File[] files; /** * Constructs new DFile oblect. * @param parent parent DF * @param id file identifier * @param type file type */ public DFile(DFile parent, short id, short type) { this.parent = parent; this.id = id; this.type = type; } /** * This method is used in file selection. * @param id file identifier * @return this file if it has specified identifier, one of the * files in this DF or null if not found */ public File getFile(short id) { if (this.id == id) { return this; } for (short i = 0; i < files.length; i++) { if (files[i].id == id) { return files[i]; } } return null; } } /** * This class represents elementary card file. */ class EFile extends File { /** Offset of file data in <code>Data.Files</code> array. */ short offset; /** File length. */ short length; /** File data. */ byte[] data; /** * Constructs new EFile object. * @param parent parent DF * @param id file identifier * @param type file type * @param offset offset of file data in <code>data</code> array * @param length file length * @param data array where file data stored */ public EFile(DFile parent, short id, short type, short offset, short length, byte[] data) { this.parent = parent; this.id = id; this.type = type; this.offset = offset; this.length = length; this.data = data; } /** * Returns true if this file is DF. * @return false */ boolean isDF() { return false; } }