001: /*
002: * @(#)Signer.java 1.43 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 java.security;
029:
030: import java.io.*;
031:
032: /**
033: * This class is used to represent an Identity that can also digitally
034: * sign data.
035: *
036: * <p>The management of a signer's private keys is an important and
037: * sensitive issue that should be handled by subclasses as appropriate
038: * to their intended use.
039: *
040: * @see Identity
041: *
042: * @version 1.37 00/02/02
043: * @author Benjamin Renaud
044: *
045: * @deprecated This class is no longer used. Its functionality has been
046: * replaced by <code>java.security.KeyStore</code>, the
047: * <code>java.security.cert</code> package, and
048: * <code>java.security.Principal</code>.
049: */
050: public abstract class Signer extends Identity {
051:
052: /**
053: * The signer's private key.
054: *
055: * @serial
056: */
057: private PrivateKey privateKey;
058:
059: /**
060: * Creates a signer. This constructor should only be used for
061: * serialization.
062: */
063: protected Signer() {
064: super ();
065: }
066:
067: /**
068: * Creates a signer with the specified identity name.
069: *
070: * @param name the identity name.
071: */
072: public Signer(String name) {
073: super (name);
074: }
075:
076: /**
077: * Creates a signer with the specified identity name and scope.
078: *
079: * @param name the identity name.
080: *
081: * @param scope the scope of the identity.
082: *
083: * @exception KeyManagementException if there is already an identity
084: * with the same name in the scope.
085: */
086: public Signer(String name, IdentityScope scope)
087: throws KeyManagementException {
088: super (name, scope);
089: }
090:
091: /**
092: * Returns this signer's private key.
093: *
094: * <p>First, if there is a security manager, its <code>checkSecurityAccess</code>
095: * method is called with <code>"getSignerPrivateKey"</code>
096: * as its argument to see if it's ok to return the private key.
097: *
098: * @return this signer's private key, or null if the private key has
099: * not yet been set.
100: *
101: * @exception SecurityException if a security manager exists and its
102: * <code>checkSecurityAccess</code> method doesn't allow
103: * returning the private key.
104: *
105: * @see SecurityManager#checkSecurityAccess
106: */
107: public PrivateKey getPrivateKey() {
108: check("getSignerPrivateKey");
109: return privateKey;
110: }
111:
112: /**
113: * Sets the key pair (public key and private key) for this signer.
114: *
115: * <p>First, if there is a security manager, its <code>checkSecurityAccess</code>
116: * method is called with <code>"setSignerKeyPair"</code>
117: * as its argument to see if it's ok to set the key pair.
118: *
119: * @param pair an initialized key pair.
120: *
121: * @exception InvalidParameterException if the key pair is not
122: * properly initialized.
123: * @exception KeyException if the key pair cannot be set for any
124: * other reason.
125: * @exception SecurityException if a security manager exists and its
126: * <code>checkSecurityAccess</code> method doesn't allow
127: * setting the key pair.
128: *
129: * @see SecurityManager#checkSecurityAccess
130: */
131: public final void setKeyPair(KeyPair pair)
132: throws InvalidParameterException, KeyException {
133: check("setSignerKeyPair");
134: final PublicKey pub = pair.getPublic();
135: PrivateKey priv = pair.getPrivate();
136:
137: if (pub == null || priv == null) {
138: throw new InvalidParameterException();
139: }
140: try {
141: AccessController
142: .doPrivileged(new PrivilegedExceptionAction() {
143: public Object run()
144: throws KeyManagementException {
145: setPublicKey(pub);
146: return null;
147: }
148: });
149: } catch (PrivilegedActionException pae) {
150: throw (KeyManagementException) pae.getException();
151: }
152: privateKey = priv;
153: }
154:
155: String printKeys() {
156: String keys = "";
157: PublicKey publicKey = getPublicKey();
158: if (publicKey != null && privateKey != null) {
159: keys = "\tpublic and private keys initialized";
160:
161: } else {
162: keys = "\tno keys";
163: }
164: return keys;
165: }
166:
167: /**
168: * Returns a string of information about the signer.
169: *
170: * @return a string of information about the signer.
171: */
172: public String toString() {
173: return "[Signer]" + super .toString();
174: }
175:
176: private static void check(String directive) {
177: SecurityManager security = System.getSecurityManager();
178: if (security != null) {
179: security.checkSecurityAccess(directive);
180: }
181: }
182:
183: }
|