keyidentifier.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 158 行

JAVA
158
字号
/* * @(#)KeyIdentifier.java	1.17 06/10/10 * * Copyright  1990-2008 Sun Microsystems, Inc. All Rights Reserved.   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER   *    * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License version   * 2 only, as published by the Free Software Foundation.    *    * This program is distributed in the hope that it will be useful, but   * WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   * General Public License version 2 for more details (a copy is   * included at /legal/license.txt).    *    * You should have received a copy of the GNU General Public License   * version 2 along with this work; if not, write to the Free Software   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA   * 02110-1301 USA    *    * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa   * Clara, CA 95054 or visit www.sun.com if you need additional   * information or have any questions.  * */package sun.security.x509;import java.io.IOException;import java.security.PublicKey;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import sun.misc.HexDumpEncoder;import sun.security.util.*;/** * Represent the Key Identifier ASN.1 object. * * @author Amit Kapoor * @author Hemma Prafullchandra * @version 1.10 */public class KeyIdentifier {    private byte[] octetString;    /**     * Create a KeyIdentifier with the passed bit settings.     *     * @param octetString the octet string identifying the key identifier.     */    public KeyIdentifier(byte[] octetString) {        this.octetString = (byte[])octetString.clone();    }    /**     * Create a KeyIdentifier from the DER encoded value.     *     * @param val the DerValue     */    public KeyIdentifier(DerValue val) throws IOException {        octetString = val.getOctetString();    }    /**     * Creates a KeyIdentifier from a public-key value.     *     * <p>From RFC2459: Two common methods for generating key identifiers from     * the public key are:     * <ol>     * <li>The keyIdentifier is composed of the 160-bit SHA-1 hash of the     * value of the BIT STRING subjectPublicKey (excluding the tag,     * length, and number of unused bits).     * <p>     * <li>The keyIdentifier is composed of a four bit type field with     * the value 0100 followed by the least significant 60 bits of the     * SHA-1 hash of the value of the BIT STRING subjectPublicKey.     * </ol>     * <p>This method supports method 1.     *     * @param pubKey the public key from which to construct this KeyIdentifier     * @throws IOException on parsing errors     */    public KeyIdentifier(PublicKey pubKey)	throws IOException    {	DerValue algAndKey = new DerValue(pubKey.getEncoded());	if (algAndKey.tag != DerValue.tag_Sequence)	    throw new IOException("PublicKey value is not a valid "				  + "X.509 public key");	AlgorithmId algid = AlgorithmId.parse(algAndKey.data.getDerValue());	byte[] key = algAndKey.data.getUnalignedBitString().toByteArray();	MessageDigest md = null;	try {	    md = MessageDigest.getInstance("SHA1");	} catch (NoSuchAlgorithmException e3) {	    throw new IOException("SHA1 not supported");	}	md.update(key);	this.octetString = md.digest();    }    /**     * Return the value of the KeyIdentifier as byte array.     */    public byte[] getIdentifier() {        return ((byte[])octetString.clone());    }    /**     * Returns a printable representation of the KeyUsage.     */    public String toString() {        String s = "KeyIdentifier [\n";        HexDumpEncoder encoder = new HexDumpEncoder();        s += encoder.encodeBuffer(octetString);        s += "]\n";        return (s);    }    /**     * Write the KeyIdentifier to the DerOutputStream.     *     * @param out the DerOutputStream to write the object to.     * @exception IOException     */    void encode(DerOutputStream out) throws IOException {        out.putOctetString(octetString);    }    /**     * Returns a hash code value for this object.     * Objects that are equal will also have the same hashcode.     */    public int hashCode () {	int retval = 0;	for (int i = 0; i < octetString.length; i++)	    retval += octetString[i] * i;	return retval;    }    /**     * Indicates whether some other object is "equal to" this one.     */    public boolean equals(Object other) {        if (this == other)            return true;        if (!(other instanceof KeyIdentifier))            return false;        return java.util.Arrays.equals(octetString,				       ((KeyIdentifier)other).getIdentifier());    }}

⌨️ 快捷键说明

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