2003/02/12 06:21:04
[org.ibex.core.git] / src / org / bouncycastle / asn1 / x509 / SubjectKeyIdentifier.java
index 0dd2b27..5d6ffd8 100644 (file)
@@ -14,6 +14,34 @@ public class SubjectKeyIdentifier
 {
        private byte[] keyidentifier;
 
+    public static SubjectKeyIdentifier getInstance(
+        ASN1TaggedObject obj,
+        boolean          explicit)
+    {
+        return getInstance(ASN1OctetString.getInstance(obj, explicit));
+    }
+
+    public static SubjectKeyIdentifier getInstance(
+        Object obj)
+    {
+        if(obj == null || obj instanceof SubjectKeyIdentifier) 
+        {
+            return (SubjectKeyIdentifier)obj;
+        }
+        
+        if(obj instanceof SubjectPublicKeyInfo) 
+        {
+            return new SubjectKeyIdentifier((SubjectPublicKeyInfo)obj);
+        }
+        
+        if(obj instanceof ASN1OctetString) 
+        {
+            return new SubjectKeyIdentifier((ASN1OctetString)obj);
+        }
+        
+        throw new IllegalArgumentException("Invalid SubjectKeyIdentifier: " + obj.getClass().getName());
+    }
+       
     public SubjectKeyIdentifier(
         byte[] keyid)
     {
@@ -21,7 +49,7 @@ public class SubjectKeyIdentifier
     }
 
     public SubjectKeyIdentifier(
-        DEROctetString  keyid)
+        ASN1OctetString  keyid)
     {
                this.keyidentifier=keyid.getOctets();
 
@@ -39,8 +67,7 @@ public class SubjectKeyIdentifier
                Digest  digest = new SHA1Digest();
                byte[]  resBuf = new byte[digest.getDigestSize()];
 
-               DERBitString derpk = new DERBitString(spki.getPublicKey());
-               byte[] bytes = derpk.getBytes();
+               byte[] bytes = spki.getPublicKeyData().getBytes();
                digest.update(bytes, 0, bytes.length);
                digest.doFinal(resBuf, 0);
                this.keyidentifier=resBuf;
@@ -58,7 +85,6 @@ public class SubjectKeyIdentifier
      */
     public DERObject getDERObject()
     {
-        DEROctetString oct = new DEROctetString(keyidentifier);
-        return oct;
+        return new DEROctetString(keyidentifier);
     }
 }