X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fbouncycastle%2Fasn1%2Fx509%2FSubjectKeyIdentifier.java;h=f12f9c21ca58129424a11dcc455579e6704056e3;hp=0dd2b27db529082680ca6a287cb69c194a137ed2;hb=da1f843588c8bd2b2c7cc74a5b4ffff8d57ab712;hpb=e5e9355b4f4e0e2c8de9068a71c1e3cc26fa9905 diff --git a/src/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java b/src/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java index 0dd2b27..f12f9c2 100644 --- a/src/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java +++ b/src/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java @@ -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); } }