2002/03/21 01:19:32
[org.ibex.core.git] / src / org / bouncycastle / asn1 / x509 / SubjectKeyIdentifier.java
1 package org.bouncycastle.asn1.x509;
2
3 import org.bouncycastle.crypto.Digest;
4 import org.bouncycastle.crypto.digests.SHA1Digest;
5 import org.bouncycastle.asn1.*;
6
7 /**
8  * <pre>
9  * SubjectKeyIdentifier::= OCTET STRING
10  * </pre>
11  */
12 public class SubjectKeyIdentifier
13     implements DEREncodable
14 {
15         private byte[] keyidentifier;
16
17     public SubjectKeyIdentifier(
18         byte[] keyid)
19     {
20         this.keyidentifier=keyid;
21     }
22
23     public SubjectKeyIdentifier(
24         DEROctetString  keyid)
25     {
26                 this.keyidentifier=keyid.getOctets();
27
28     }
29
30         /**
31          *
32          * Calulates the keyidentifier using a SHA1 hash over the BIT STRING
33          * from SubjectPublicKeyInfo as defined in RFC2459.
34          *
35          **/
36         public SubjectKeyIdentifier(
37                 SubjectPublicKeyInfo    spki)
38         {
39                 Digest  digest = new SHA1Digest();
40                 byte[]  resBuf = new byte[digest.getDigestSize()];
41
42                 DERBitString derpk = new DERBitString(spki.getPublicKey());
43                 byte[] bytes = derpk.getBytes();
44                 digest.update(bytes, 0, bytes.length);
45                 digest.doFinal(resBuf, 0);
46                 this.keyidentifier=resBuf;
47         }
48
49     public byte[] getKeyIdentifier()
50     {
51         return keyidentifier;
52     }
53
54      /**
55      * <pre>
56      * SubjectKeyIdentifier := OCTET STRING
57      * </pre>
58      */
59     public DERObject getDERObject()
60     {
61         DEROctetString oct = new DEROctetString(keyidentifier);
62         return oct;
63     }
64 }