1package org.bouncycastle.asn1.pkcs; 2 3import java.util.Enumeration; 4 5import org.bouncycastle.asn1.ASN1Encodable; 6import org.bouncycastle.asn1.ASN1EncodableVector; 7import org.bouncycastle.asn1.ASN1Sequence; 8import org.bouncycastle.asn1.BERSequence; 9import org.bouncycastle.asn1.BERTaggedObject; 10import org.bouncycastle.asn1.DEREncodable; 11import org.bouncycastle.asn1.DERObject; 12import org.bouncycastle.asn1.DERObjectIdentifier; 13import org.bouncycastle.asn1.DERTaggedObject; 14 15public class ContentInfo 16 extends ASN1Encodable 17 implements PKCSObjectIdentifiers 18{ 19 private DERObjectIdentifier contentType; 20 private DEREncodable content; 21 22 public static ContentInfo getInstance( 23 Object obj) 24 { 25 if (obj instanceof ContentInfo) 26 { 27 return (ContentInfo)obj; 28 } 29 else if (obj instanceof ASN1Sequence) 30 { 31 return new ContentInfo((ASN1Sequence)obj); 32 } 33 34 throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); 35 } 36 37 public ContentInfo( 38 ASN1Sequence seq) 39 { 40 Enumeration e = seq.getObjects(); 41 42 contentType = (DERObjectIdentifier)e.nextElement(); 43 44 if (e.hasMoreElements()) 45 { 46 content = ((DERTaggedObject)e.nextElement()).getObject(); 47 } 48 } 49 50 public ContentInfo( 51 DERObjectIdentifier contentType, 52 DEREncodable content) 53 { 54 this.contentType = contentType; 55 this.content = content; 56 } 57 58 public DERObjectIdentifier getContentType() 59 { 60 return contentType; 61 } 62 63 public DEREncodable getContent() 64 { 65 return content; 66 } 67 68 /** 69 * Produce an object suitable for an ASN1OutputStream. 70 * <pre> 71 * ContentInfo ::= SEQUENCE { 72 * contentType ContentType, 73 * content 74 * [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL } 75 * </pre> 76 */ 77 public DERObject toASN1Object() 78 { 79 ASN1EncodableVector v = new ASN1EncodableVector(); 80 81 v.add(contentType); 82 83 if (content != null) 84 { 85 v.add(new BERTaggedObject(0, content)); 86 } 87 88 return new BERSequence(v); 89 } 90} 91