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:
027: package java.security;
028:
029: /**
030: * The Key interface is the top-level interface for all keys. It
031: * defines the functionality shared by all key objects. All keys
032: * have three characteristics:
033: *
034: * <UL>
035: *
036: * <LI>An Algorithm
037: *
038: * <P>This is the key algorithm for that key. The key algorithm is usually
039: * an encryption or asymmetric operation algorithm (such as DSA or
040: * RSA), which will work with those algorithms and with related
041: * algorithms (such as MD5 with RSA, SHA-1 with RSA, Raw DSA, etc.)
042: *
043: * <LI>An Encoded Form
044: *
045: * <P>This is an external encoded form for the key used when a standard
046: * representation of the key is needed outside the Java Virtual Machine,
047: * as when transmitting the key to some other party. The key
048: * is encoded according to a standard format (such as
049: * X.509 <code>SubjectPublicKeyInfo</code>).
050: * Note: The syntax of the ASN.1 type <code>SubjectPublicKeyInfo</code>
051: * is defined as follows:
052: *
053: * <pre>
054: * SubjectPublicKeyInfo ::= SEQUENCE {
055: * algorithm AlgorithmIdentifier,
056: * subjectPublicKey BIT STRING }
057: *
058: * AlgorithmIdentifier ::= SEQUENCE {
059: * algorithm OBJECT IDENTIFIER,
060: * parameters ANY DEFINED BY algorithm OPTIONAL }
061: * </pre>
062: *
063: * For more information, see
064: * <a href="http://www.ietf.org/rfc/rfc2459.txt">RFC 2459:
065: * Internet X.509 Public Key Infrastructure Certificate and CRL Profile</a>.
066: * <P>
067: *
068: * <LI>A Format
069: *
070: * <P>This is the name of the format of the encoded key.
071: *
072: * </UL>
073: *
074: * Keys are generally obtained through key generators and certificates.
075: * Keys may also be obtained from key specifications (transparent
076: * representations of the underlying key material) through the use of a key
077: * factory.
078: *
079: */
080:
081: public interface Key {
082:
083: /**
084: * Returns the standard algorithm name for this key.
085: * For example, "DSA" would indicate that this key is a DSA key.
086: * See Appendix A in the Java Cryptography Architecture API
087: * Specification & Reference for information about standard algorithm names
088: *
089: * @return the name of the algorithm associated with this key.
090: */
091: public String getAlgorithm();
092:
093: /**
094: * Returns the name of the primary encoding format of this key, or null
095: * if this key does not support encoding. The primary encoding format is
096: * named in terms of the appropriate ASN.1 data format, if an ASN.1
097: * specification for this key exists. For example, the name of the ASN.1
098: * data format for public keys is <I>SubjectPublicKeyInfo</I>, as defined by
099: * the X.509 standard; in this case, the returned format is
100: * <code>"X.509"</code>.
101: * Similarly, the name of the ASN.1 data format for private keys is
102: * <I>PrivateKeyInfo</I>, as defined by the PKCS #8 standard; in this case,
103: * the returned format is <code>"PKCS#8"</code>.
104: *
105: * @return the primary encoding format of the key.
106: */
107: public String getFormat();
108:
109: /**
110: * Returns the key in its primary encoding format, or null
111: * if this key does not support encoding.
112: *
113: * @return the encoded key, or null if the key does not support encoding.
114: */
115: public byte[] getEncoded();
116:
117: }
|