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