001package org.apache.commons.ssl.org.bouncycastle.asn1.tsp;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
008import org.apache.commons.ssl.org.bouncycastle.asn1.DEROctetString;
009import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
010import org.apache.commons.ssl.org.bouncycastle.asn1.x509.AlgorithmIdentifier;
011
012public class MessageImprint
013    extends ASN1Object
014{
015    AlgorithmIdentifier hashAlgorithm;
016    byte[]              hashedMessage;
017    
018    /**
019     * @param o
020     * @return a MessageImprint object.
021     */
022    public static MessageImprint getInstance(Object o)
023    {
024        if (o instanceof MessageImprint)
025        {
026            return (MessageImprint)o;
027        }
028
029        if (o != null)
030        {
031            return new MessageImprint(ASN1Sequence.getInstance(o));
032        }
033
034        return null;
035    }
036    
037    private MessageImprint(
038        ASN1Sequence seq)
039    {
040        this.hashAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(0));
041        this.hashedMessage = ASN1OctetString.getInstance(seq.getObjectAt(1)).getOctets();
042    }
043    
044    public MessageImprint(
045        AlgorithmIdentifier hashAlgorithm,
046        byte[]              hashedMessage)
047    {
048        this.hashAlgorithm = hashAlgorithm;
049        this.hashedMessage = hashedMessage;
050    }
051    
052    public AlgorithmIdentifier getHashAlgorithm()
053    {
054        return hashAlgorithm;
055    }
056    
057    public byte[] getHashedMessage()
058    {
059        return hashedMessage;
060    }
061    
062    /**
063     * <pre>
064     *    MessageImprint ::= SEQUENCE  {
065     *       hashAlgorithm                AlgorithmIdentifier,
066     *       hashedMessage                OCTET STRING  }
067     * </pre>
068     */
069    public ASN1Primitive toASN1Primitive()
070    {
071        ASN1EncodableVector v = new ASN1EncodableVector();
072
073        v.add(hashAlgorithm);
074        v.add(new DEROctetString(hashedMessage));
075
076        return new DERSequence(v);
077    }
078}