SubjectKeyIdentifier.java
上传用户:lior1029
上传日期:2013-05-07
资源大小:209k
文件大小:2k
源码类别:

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1.x509;
  2. import org.bouncycastle.crypto.Digest;
  3. import org.bouncycastle.crypto.digests.SHA1Digest;
  4. import org.bouncycastle.asn1.*;
  5. /**
  6.  * <pre>
  7.  * SubjectKeyIdentifier::= OCTET STRING
  8.  * </pre>
  9.  */
  10. public class SubjectKeyIdentifier
  11.     implements DEREncodable
  12. {
  13. private byte[] keyidentifier;
  14.     public static SubjectKeyIdentifier getInstance(
  15.         ASN1TaggedObject obj,
  16.         boolean          explicit)
  17.     {
  18.         return getInstance(ASN1OctetString.getInstance(obj, explicit));
  19.     }
  20.     public static SubjectKeyIdentifier getInstance(
  21.         Object obj)
  22.     {
  23.         if(obj == null || obj instanceof SubjectKeyIdentifier) 
  24.         {
  25.             return (SubjectKeyIdentifier)obj;
  26.         }
  27.         
  28.         if(obj instanceof SubjectPublicKeyInfo) 
  29.         {
  30.             return new SubjectKeyIdentifier((SubjectPublicKeyInfo)obj);
  31.         }
  32.         
  33.         if(obj instanceof ASN1OctetString) 
  34.         {
  35.             return new SubjectKeyIdentifier((ASN1OctetString)obj);
  36.         }
  37.         
  38.         throw new IllegalArgumentException("Invalid SubjectKeyIdentifier: " + obj.getClass().getName());
  39.     }
  40.     public SubjectKeyIdentifier(
  41.         byte[] keyid)
  42.     {
  43.         this.keyidentifier=keyid;
  44.     }
  45.     public SubjectKeyIdentifier(
  46.         ASN1OctetString  keyid)
  47.     {
  48. this.keyidentifier=keyid.getOctets();
  49.     }
  50. /**
  51.  *
  52.  * Calulates the keyidentifier using a SHA1 hash over the BIT STRING
  53.  * from SubjectPublicKeyInfo as defined in RFC2459.
  54.  *
  55.  **/
  56. public SubjectKeyIdentifier(
  57. SubjectPublicKeyInfo    spki)
  58. {
  59. Digest  digest = new SHA1Digest();
  60. byte[]  resBuf = new byte[digest.getDigestSize()];
  61. byte[] bytes = spki.getPublicKeyData().getBytes();
  62. digest.update(bytes, 0, bytes.length);
  63. digest.doFinal(resBuf, 0);
  64. this.keyidentifier=resBuf;
  65. }
  66.     public byte[] getKeyIdentifier()
  67.     {
  68.         return keyidentifier;
  69.     }
  70.      /**
  71.      * <pre>
  72.      * SubjectKeyIdentifier := OCTET STRING
  73.      * </pre>
  74.      */
  75.     public DERObject getDERObject()
  76.     {
  77.         return new DEROctetString(keyidentifier);
  78.     }
  79. }