001: /*
002: * @(#)GeneralNameInterface.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:
028: package sun.security.x509;
029:
030: import java.io.IOException;
031:
032: import sun.security.util.*;
033:
034: /**
035: * This interface specifies the abstract methods which have to be
036: * implemented by all the members of the GeneralNames ASN.1 object.
037: *
038: * @author Amit Kapoor
039: * @author Hemma Prafullchandra
040: * @version 1.10
041: */
042: public interface GeneralNameInterface {
043: /**
044: * The list of names supported.
045: */
046: public static final int NAME_ANY = 0;
047: public static final int NAME_RFC822 = 1;
048: public static final int NAME_DNS = 2;
049: public static final int NAME_X400 = 3;
050: public static final int NAME_DIRECTORY = 4;
051: public static final int NAME_EDI = 5;
052: public static final int NAME_URI = 6;
053: public static final int NAME_IP = 7;
054: public static final int NAME_OID = 8;
055:
056: /**
057: * The list of constraint results.
058: */
059: public static final int NAME_DIFF_TYPE = -1; /* input name is different type from name (i.e. does not constrain) */
060: public static final int NAME_MATCH = 0; /* input name matches name */
061: public static final int NAME_NARROWS = 1; /* input name narrows name */
062: public static final int NAME_WIDENS = 2; /* input name widens name */
063: public static final int NAME_SAME_TYPE = 3; /* input name does not match, narrow, or widen, but is same type */
064:
065: /**
066: * Return the type of the general name, as
067: * defined above.
068: */
069: int getType();
070:
071: /**
072: * Encode the name to the specified DerOutputStream.
073: *
074: * @param out the DerOutputStream to encode the GeneralName to.
075: * @exception IOException thrown if the GeneralName could not be
076: * encoded.
077: */
078: void encode(DerOutputStream out) throws IOException;
079:
080: /**
081: * Return type of constraint inputName places on this name:<ul>
082: * <li>NAME_DIFF_TYPE = -1: input name is different type from name (i.e. does not constrain).
083: * <li>NAME_MATCH = 0: input name matches name.
084: * <li>NAME_NARROWS = 1: input name narrows name (is lower in the naming subtree)
085: * <li>NAME_WIDENS = 2: input name widens name (is higher in the naming subtree)
086: * <li>NAME_SAME_TYPE = 3: input name does not match or narrow name, but is same type.
087: * </ul>. These results are used in checking NameConstraints during
088: * certification path verification.
089: *
090: * @param inputName to be checked for being constrained
091: * @returns constraint type above
092: * @throws UnsupportedOperationException if name is same type, but comparison operations are
093: * not supported for this name type.
094: */
095: int constrains(GeneralNameInterface inputName)
096: throws UnsupportedOperationException;
097:
098: /**
099: * Return subtree depth of this name for purposes of determining
100: * NameConstraints minimum and maximum bounds and for calculating
101: * path lengths in name subtrees.
102: *
103: * @returns distance of name from root
104: * @throws UnsupportedOperationException if not supported for this name type
105: */
106: int subtreeDepth() throws UnsupportedOperationException;
107: }
|