001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs; 002 003import java.util.Enumeration; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 011import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 012import org.apache.commons.ssl.org.bouncycastle.asn1.BERSequence; 013import org.apache.commons.ssl.org.bouncycastle.asn1.BERTaggedObject; 014import org.apache.commons.ssl.org.bouncycastle.asn1.DLSequence; 015 016public class ContentInfo 017 extends ASN1Object 018 implements PKCSObjectIdentifiers 019{ 020 private ASN1ObjectIdentifier contentType; 021 private ASN1Encodable content; 022 private boolean isBer = true; 023 024 public static ContentInfo getInstance( 025 Object obj) 026 { 027 if (obj instanceof ContentInfo) 028 { 029 return (ContentInfo)obj; 030 } 031 032 if (obj != null) 033 { 034 return new ContentInfo(ASN1Sequence.getInstance(obj)); 035 } 036 037 return null; 038 } 039 040 private ContentInfo( 041 ASN1Sequence seq) 042 { 043 Enumeration e = seq.getObjects(); 044 045 contentType = (ASN1ObjectIdentifier)e.nextElement(); 046 047 if (e.hasMoreElements()) 048 { 049 content = ((ASN1TaggedObject)e.nextElement()).getObject(); 050 } 051 052 isBer = seq instanceof BERSequence; 053 } 054 055 public ContentInfo( 056 ASN1ObjectIdentifier contentType, 057 ASN1Encodable content) 058 { 059 this.contentType = contentType; 060 this.content = content; 061 } 062 063 public ASN1ObjectIdentifier getContentType() 064 { 065 return contentType; 066 } 067 068 public ASN1Encodable getContent() 069 { 070 return content; 071 } 072 073 /** 074 * Produce an object suitable for an ASN1OutputStream. 075 * <pre> 076 * ContentInfo ::= SEQUENCE { 077 * contentType ContentType, 078 * content 079 * [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL } 080 * </pre> 081 */ 082 public ASN1Primitive toASN1Primitive() 083 { 084 ASN1EncodableVector v = new ASN1EncodableVector(); 085 086 v.add(contentType); 087 088 if (content != null) 089 { 090 v.add(new BERTaggedObject(true, 0, content)); 091 } 092 093 if (isBer) 094 { 095 return new BERSequence(v); 096 } 097 else 098 { 099 return new DLSequence(v); 100 } 101 } 102}