001package org.apache.commons.ssl.org.bouncycastle.asn1.x509;
002
003import java.util.Enumeration;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
011import org.apache.commons.ssl.org.bouncycastle.asn1.DEROctetString;
012import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
013
014/**
015 * The DigestInfo object.
016 * <pre>
017 * DigestInfo::=SEQUENCE{
018 *          digestAlgorithm  AlgorithmIdentifier,
019 *          digest OCTET STRING }
020 * </pre>
021 */
022public class DigestInfo
023    extends ASN1Object
024{
025    private byte[]                  digest;
026    private AlgorithmIdentifier     algId;
027
028    public static DigestInfo getInstance(
029        ASN1TaggedObject obj,
030        boolean          explicit)
031    {
032        return getInstance(ASN1Sequence.getInstance(obj, explicit));
033    }
034
035    public static DigestInfo getInstance(
036        Object  obj)
037    {
038        if (obj instanceof DigestInfo)
039        {
040            return (DigestInfo)obj;
041        }
042        else if (obj != null)
043        {
044            return new DigestInfo(ASN1Sequence.getInstance(obj));
045        }
046
047        return null;
048    }
049
050    public DigestInfo(
051        AlgorithmIdentifier  algId,
052        byte[]               digest)
053    {
054        this.digest = digest;
055        this.algId = algId;
056    }
057
058    public DigestInfo(
059        ASN1Sequence  obj)
060    {
061        Enumeration             e = obj.getObjects();
062
063        algId = AlgorithmIdentifier.getInstance(e.nextElement());
064        digest = ASN1OctetString.getInstance(e.nextElement()).getOctets();
065    }
066
067    public AlgorithmIdentifier getAlgorithmId()
068    {
069        return algId;
070    }
071
072    public byte[] getDigest()
073    {
074        return digest;
075    }
076
077    public ASN1Primitive toASN1Primitive()
078    {
079        ASN1EncodableVector  v = new ASN1EncodableVector();
080
081        v.add(algId);
082        v.add(new DEROctetString(digest));
083
084        return new DERSequence(v);
085    }
086}