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}