⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 authbysignature.java

📁 aglet的部分源码
💻 JAVA
字号:
package com.ibm.atp.auth;/* * @(#)AuthBySignature.java *  * IBM Confidential-Restricted *  * OCO Source Materials *  * 03L7246 (c) Copyright IBM Corp. 1996, 1998 *  * The source code for this program is not published or otherwise * divested of its trade secrets, irrespective of what has been * deposited with the U.S. Copyright Office. */import java.security.MessageDigest;import java.security.PrivateKey;import java.security.PublicKey;import java.security.Signature;import java.security.NoSuchAlgorithmException;import java.security.InvalidKeyException;import java.security.SignatureException;/** * The <tt>AuthBySignature</tt> class is the class for challenge-response * authentication by message digest. *  * @version     1.00    $Date: 2001/07/28 06:33:49 $ * @author      ONO Kouichi */public class AuthBySignature extends Auth {	/**	 * The Digital Signature algorithm	 * "DSA".	 * docs/guide/security/CryptoSpec.html#AppA	 */	private final String DEFAULTDIGITALSIGNATUREALGORITHM = "DSA";	private String _signatureAlgorithm = DEFAULTDIGITALSIGNATUREALGORITHM;	/**	 * A Digital Signature	 */	private Signature _signature = null;	/**	 * The private key of self	 */	private PrivateKey _privateKey = null;	/**	 * The public key of opponent	 */	private PublicKey _publicKey = null;	/**	 * Default constructor creates a default message digest function.	 */	protected AuthBySignature() {		super();	}	/**	 * Constructor creates a specified message digest function.	 * @param digestName the name of message digest function algorithm	 */	protected AuthBySignature(String digestName) {		super(digestName);		setSignatureAlgorithm(DEFAULTDIGITALSIGNATUREALGORITHM);	}	/**	 * Constructor creates a specified message digest function.	 * @param digestName the name of message digest function algorithm	 * @param signatureName the name of message digest function algorithm	 */	protected AuthBySignature(String digestName, String signatureName) {		super(digestName);		setSignatureAlgorithm(signatureName);	}	/**	 * Constructor creates a specified message digest function.	 * @param digestName the name of message digest function algorithm	 * @param signatureName the name of message digest function algorithm	 * @param privateKey private key of self	 * @param publicKey public key of opponent	 */	protected AuthBySignature(String digestName, String signatureName, 							  PrivateKey privateKey, PublicKey publicKey) {		this(digestName, signatureName);		setPrivateKey(privateKey);		setPublicKey(publicKey);	}	/**	 * Constructor creates a specified message digest function.	 * @param digestName the name of message digest function algorithm	 * @param privateKey private key of self	 * @param publicKey public key of opponent	 */	protected AuthBySignature(String digestName, PrivateKey privateKey, 							  PublicKey publicKey) {		this(digestName);		setPrivateKey(privateKey);		setPublicKey(publicKey);	}	/**	 * Constructor creates a default message digest function.	 * @param privateKey private key of self	 * @param publicKey public key of opponent	 */	protected AuthBySignature(PrivateKey privateKey, PublicKey publicKey) {		this();		setPrivateKey(privateKey);		setPublicKey(publicKey);	}	/**	 * Calculate response value for authentication.	 * @param turn of individual	 * @param challenge a challenge	 * @return response value for authentication	 * @exception AuthenticationException byte sequence for response is invalid	 */	public final byte[] calculateResponse(int turn, Challenge challenge) 			throws AuthenticationException {		return sign(turn, challenge);	}	/**	 * Gets the private key of self.	 * @return private key of self	 */	public PrivateKey getPrivateKey() {		return _privateKey;	}	/**	 * Gets the public key of opponent.	 * @return public key of opponent	 */	public PublicKey getPublicKey() {		return _publicKey;	}	/**	 * Returns the name of digital signature algorithm.	 * @return the name of digital signature algorithm.	 */	public String getSignatureAlgorithm() {		return _signatureAlgorithm;	}	/**	 * Calculate hashed value for authentication.	 * @param turn of individual	 * @param challenge a challenge	 * @return hashed value for authentication	 * @exception AuthenticationException byte sequence for response is invalid	 */	protected final byte[] hash(int turn, Challenge challenge) 			throws AuthenticationException {		resetDigest();		if (challenge == null) {			throw new AuthenticationException("Challenge is null.");		} 		addBytes(challenge.challenge());		final String turnPad = getTurnPad(turn);		if (turnPad == null || turnPad.equals("")) {			throw new AuthenticationException("TurnPad is null.");		} 		addBytes(turnPad.getBytes());		return getDigestValue();	}	/**	 * Sets the private key of self.	 * @param privateKey private key of self	 */	protected void setPrivateKey(PrivateKey privateKey) {		_privateKey = privateKey;	}	/**	 * Sets the public key of opponent.	 * @param publicKey public key of opponent	 */	protected void setPublicKey(PublicKey publicKey) {		_publicKey = publicKey;	}	/**	 * Sets the name of digital signature algorithm.	 * @param name the name of digital signature algorithm	 */	protected void setSignatureAlgorithm(String name) {		_signatureAlgorithm = name;		try {			_signature = Signature.getInstance(name);		} catch (NoSuchAlgorithmException excpt) {			System.err.println("Exception: Authenticate: " + excpt);			_signatureAlgorithm = null;			_signature = null;		} 	}	/**	 * Calculate signature	 * @param turn of individual	 * @param challenge a challenge	 * @exception AuthenticationException byte sequence for response is invalid	 */	protected final byte[] sign(int turn, Challenge challenge) 			throws AuthenticationException {		byte[] signature = null;		try {			/* Initialize digital signature with a private key */			_signature.initSign(_privateKey);			/* Update and sign the hashed data */			_signature.update(hash(turn, challenge));			/* sign it */			signature = _signature.sign();		} catch (InvalidKeyException excpt) {			System.err.println("Exception: Authenticate: " + excpt);			throw new AuthenticationException("private key is invalid.");		} catch (SignatureException excpt) {			System.err.println("Exception: Authenticate: " + excpt);			throw new AuthenticationException("signature cannot be calculated.");		} 		return signature;	}	/**	 * Verify signature	 * @param turn of individual	 * @param challenge a challenge	 * @param response response value for authentication	 * @exception AuthenticationException byte sequence for response is invalid	 */	public final boolean verify(int turn, Challenge challenge, byte[] signature) 			throws AuthenticationException {		boolean verifies = true;		try {			/* Initialize digital signature with a public key */			_signature.initVerify(_publicKey);			/* Update and sign the hashed data */			_signature.update(hash(turn, challenge));			/* verify it */			verifies = _signature.verify(signature);		} catch (InvalidKeyException excpt) {			System.err.println("Exception: Authenticate: " + excpt);			throw new AuthenticationException("public key is invalid.");		} catch (SignatureException excpt) {			System.err.println("Exception: Authenticate: " + excpt);			throw new AuthenticationException("signature verification is failed.");		} 		return verifies;	}	/**	 * Verify signature	 * @param turn of individual	 * @param challenge a challenge	 * @param response response value for authentication	 * @exception AuthenticationException byte sequence for response is invalid	 */	public final boolean verify(int turn, Challenge challenge, ByteSequence signature) 			throws AuthenticationException {		if (signature == null) {			return false;		} 		return verify(turn, challenge, signature.sequence());	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -