DigestInfo.java revision e6bf3e8dfa2804891a82075cb469b736321b4827
1package org.bouncycastle.asn1.x509;
2
3import java.util.Enumeration;
4
5import org.bouncycastle.asn1.ASN1EncodableVector;
6import org.bouncycastle.asn1.ASN1Object;
7import org.bouncycastle.asn1.ASN1OctetString;
8import org.bouncycastle.asn1.ASN1Primitive;
9import org.bouncycastle.asn1.ASN1Sequence;
10import org.bouncycastle.asn1.ASN1TaggedObject;
11import org.bouncycastle.asn1.DEROctetString;
12import org.bouncycastle.asn1.DERSequence;
13
14/**
15 * The DigestInfo object.
16 * <pre>
17 * DigestInfo::=SEQUENCE{
18 *          digestAlgorithm  AlgorithmIdentifier,
19 *          digest OCTET STRING }
20 * </pre>
21 */
22public class DigestInfo
23    extends ASN1Object
24{
25    private byte[]                  digest;
26    private AlgorithmIdentifier     algId;
27
28    public static DigestInfo getInstance(
29        ASN1TaggedObject obj,
30        boolean          explicit)
31    {
32        return getInstance(ASN1Sequence.getInstance(obj, explicit));
33    }
34
35    public static DigestInfo getInstance(
36        Object  obj)
37    {
38        if (obj instanceof DigestInfo)
39        {
40            return (DigestInfo)obj;
41        }
42        else if (obj != null)
43        {
44            return new DigestInfo(ASN1Sequence.getInstance(obj));
45        }
46
47        return null;
48    }
49
50    public DigestInfo(
51        AlgorithmIdentifier  algId,
52        byte[]               digest)
53    {
54        this.digest = digest;
55        this.algId = algId;
56    }
57
58    public DigestInfo(
59        ASN1Sequence  obj)
60    {
61        Enumeration             e = obj.getObjects();
62
63        algId = AlgorithmIdentifier.getInstance(e.nextElement());
64        digest = ASN1OctetString.getInstance(e.nextElement()).getOctets();
65    }
66
67    public AlgorithmIdentifier getAlgorithmId()
68    {
69        return algId;
70    }
71
72    public byte[] getDigest()
73    {
74        return digest;
75    }
76
77    public ASN1Primitive toASN1Primitive()
78    {
79        ASN1EncodableVector  v = new ASN1EncodableVector();
80
81        v.add(algId);
82        v.add(new DEROctetString(digest));
83
84        return new DERSequence(v);
85    }
86}
87