001: /*
002: * @(#)UniqueIdentity.java 1.17 06/10/10
003: *
004: * Copyright 1990-2006 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: */
027: package sun.security.x509;
028:
029: import java.io.IOException;
030: import java.math.BigInteger;
031:
032: import sun.misc.HexDumpEncoder;
033: import sun.security.util.*;
034:
035: /**
036: * This class defines the UniqueIdentity class used by certificates.
037: *
038: * @author Amit Kapoor
039: * @author Hemma Prafullchandra
040: * @version 1.10
041: */
042: public class UniqueIdentity {
043: // Private data members
044: private BitArray id;
045:
046: /**
047: * The default constructor for this class.
048: *
049: * @param id the byte array containing the unique identifier.
050: */
051: public UniqueIdentity(BitArray id) {
052: this .id = id;
053: }
054:
055: /**
056: * The default constructor for this class.
057: *
058: * @param id the byte array containing the unique identifier.
059: */
060: public UniqueIdentity(byte[] id) {
061: this .id = new BitArray(id.length * 8, id);
062: }
063:
064: /**
065: * Create the object, decoding the values from the passed DER stream.
066: *
067: * @param in the DerInputStream to read the UniqueIdentity from.
068: * @exception IOException on decoding errors.
069: */
070: public UniqueIdentity(DerInputStream in) throws IOException {
071: DerValue derVal = in.getDerValue();
072: id = derVal.getUnalignedBitString(true);
073: }
074:
075: /**
076: * Create the object, decoding the values from the passed DER stream.
077: *
078: * @param derVal the DerValue decoded from the stream.
079: * @param tag the tag the value is encoded under.
080: * @exception IOException on decoding errors.
081: */
082: public UniqueIdentity(DerValue derVal) throws IOException {
083: id = derVal.getUnalignedBitString(true);
084: }
085:
086: /**
087: * Return the UniqueIdentity as a printable string.
088: */
089: public String toString() {
090: return ("UniqueIdentity:" + id.toString() + "\n");
091: }
092:
093: /**
094: * Encode the UniqueIdentity in DER form to the stream.
095: *
096: * @param out the DerOutputStream to marshal the contents to.
097: * @param tag enocode it under the following tag.
098: * @exception IOException on errors.
099: */
100: public void encode(DerOutputStream out, byte tag)
101: throws IOException {
102: byte[] bytes = id.toByteArray();
103: int excessBits = bytes.length * 8 - id.length();
104:
105: out.write(tag);
106: out.putLength(bytes.length + 1);
107:
108: out.write(excessBits);
109: out.write(bytes);
110: }
111:
112: /**
113: * Return the unique id.
114: */
115: public boolean[] getId() {
116: if (id == null)
117: return null;
118:
119: return id.toBooleanArray();
120: }
121: }
|