package org.spongycastle.asn1.cms; import org.spongycastle.asn1.ASN1EncodableVector; import org.spongycastle.asn1.ASN1Integer; import org.spongycastle.asn1.ASN1Object; import org.spongycastle.asn1.ASN1OctetString; import org.spongycastle.asn1.ASN1Primitive; import org.spongycastle.asn1.ASN1Sequence; import org.spongycastle.asn1.ASN1TaggedObject; import org.spongycastle.asn1.BERSequence; import org.spongycastle.asn1.DEROctetString; import org.spongycastle.asn1.x509.AlgorithmIdentifier; /** * RFC 5652 DigestedData object. *
* DigestedData ::= SEQUENCE { * version CMSVersion, * digestAlgorithm DigestAlgorithmIdentifier, * encapContentInfo EncapsulatedContentInfo, * digest Digest } **/ public class DigestedData extends ASN1Object { private ASN1Integer version; private AlgorithmIdentifier digestAlgorithm; private ContentInfo encapContentInfo; private ASN1OctetString digest; public DigestedData( AlgorithmIdentifier digestAlgorithm, ContentInfo encapContentInfo, byte[] digest) { this.version = new ASN1Integer(0); this.digestAlgorithm = digestAlgorithm; this.encapContentInfo = encapContentInfo; this.digest = new DEROctetString(digest); } private DigestedData( ASN1Sequence seq) { this.version = (ASN1Integer)seq.getObjectAt(0); this.digestAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); this.encapContentInfo = ContentInfo.getInstance(seq.getObjectAt(2)); this.digest = ASN1OctetString.getInstance(seq.getObjectAt(3)); } /** * Return a DigestedData object from a tagged object. * * @param ato the tagged object holding the object we want. * @param isExplicit true if the object is meant to be explicitly * tagged false otherwise. * @exception IllegalArgumentException if the object held by the * tagged object cannot be converted. */ public static DigestedData getInstance( ASN1TaggedObject ato, boolean isExplicit) { return getInstance(ASN1Sequence.getInstance(ato, isExplicit)); } /** * Return a DigestedData object from the given object. *
* Accepted inputs: *