1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1.cms; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Encodable; 4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector; 54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object; 66e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence; 9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1TaggedObject; 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.BERSequence; 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.BERTaggedObject; 12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class ContentInfo 144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends ASN1Object 156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // BEGIN android-removed 166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // implements CMSObjectIdentifiers 176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // END android-removed 18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private ASN1ObjectIdentifier contentType; 204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private ASN1Encodable content; 21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static ContentInfo getInstance( 23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Object obj) 24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (obj instanceof ContentInfo) 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (ContentInfo)obj; 28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom else if (obj != null) 30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return new ContentInfo(ASN1Sequence.getInstance(obj)); 32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return null; 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public ContentInfo( 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1Sequence seq) 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (seq.size() < 1 || seq.size() > 2) 416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom contentType = (ASN1ObjectIdentifier)seq.getObjectAt(0); 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (seq.size() > 1) 48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom ASN1TaggedObject tagged = (ASN1TaggedObject)seq.getObjectAt(1); 506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (!tagged.isExplicit() || tagged.getTagNo() != 0) 516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom throw new IllegalArgumentException("Bad tag for 'content'"); 536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom content = tagged.getObject(); 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public ContentInfo( 606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom ASN1ObjectIdentifier contentType, 614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1Encodable content) 62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.contentType = contentType; 64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam this.content = content; 65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public ASN1ObjectIdentifier getContentType() 68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return contentType; 70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Encodable getContent() 73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return content; 75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * Produce an object suitable for an ASN1OutputStream. 79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * <pre> 80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * ContentInfo ::= SEQUENCE { 81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * contentType ContentType, 82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * content 83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL } 84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * </pre> 85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Primitive toASN1Primitive() 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1EncodableVector v = new ASN1EncodableVector(); 89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(contentType); 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (content != null) 93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(new BERTaggedObject(0, content)); 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new BERSequence(v); 98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 100