resolve darcs stupidity
[org.ibex.core.git] / src / org / bouncycastle / asn1 / x509 / SubjectKeyIdentifier.java
index 0dd2b27..f12f9c2 100644 (file)
@@ -12,8 +12,36 @@ import org.bouncycastle.asn1.*;
 public class SubjectKeyIdentifier
     implements DEREncodable
 {
-       private byte[] keyidentifier;
+        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,30 +49,29 @@ public class SubjectKeyIdentifier
     }
 
     public SubjectKeyIdentifier(
-        DEROctetString  keyid)
+        ASN1OctetString  keyid)
     {
-               this.keyidentifier=keyid.getOctets();
+                this.keyidentifier=keyid.getOctets();
 
     }
 
-       /**
-        *
-        * Calulates the keyidentifier using a SHA1 hash over the BIT STRING
-        * from SubjectPublicKeyInfo as defined in RFC2459.
-        *
-        **/
-       public SubjectKeyIdentifier(
-               SubjectPublicKeyInfo    spki)
-       {
-               Digest  digest = new SHA1Digest();
-               byte[]  resBuf = new byte[digest.getDigestSize()];
+        /**
+         *
+         * Calulates the keyidentifier using a SHA1 hash over the BIT STRING
+         * from SubjectPublicKeyInfo as defined in RFC2459.
+         *
+         **/
+        public SubjectKeyIdentifier(
+                SubjectPublicKeyInfo    spki)
+        {
+                Digest  digest = new SHA1Digest();
+                byte[]  resBuf = new byte[digest.getDigestSize()];
 
-               DERBitString derpk = new DERBitString(spki.getPublicKey());
-               byte[] bytes = derpk.getBytes();
-               digest.update(bytes, 0, bytes.length);
-               digest.doFinal(resBuf, 0);
-               this.keyidentifier=resBuf;
-       }
+                byte[] bytes = spki.getPublicKeyData().getBytes();
+                digest.update(bytes, 0, bytes.length);
+                digest.doFinal(resBuf, 0);
+                this.keyidentifier=resBuf;
+        }
 
     public byte[] getKeyIdentifier()
     {
@@ -58,7 +85,6 @@ public class SubjectKeyIdentifier
      */
     public DERObject getDERObject()
     {
-        DEROctetString oct = new DEROctetString(keyidentifier);
-        return oct;
+        return new DEROctetString(keyidentifier);
     }
 }