SignedData.java revision a198e1ecc615e26a167d0f2dca9fa7e5fc62de10
147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgpackage org.bouncycastle.asn1.cms; 247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport java.util.Enumeration; 447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.ASN1EncodableVector; 647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.ASN1Integer; 747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.ASN1Object; 847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.ASN1ObjectIdentifier; 947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.ASN1Primitive; 1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.ASN1Sequence; 1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.ASN1Set; 1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.ASN1TaggedObject; 1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.BERSequence; 1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.BERSet; 1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.BERTaggedObject; 1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.bouncycastle.asn1.DERTaggedObject; 1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/** 1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * a signed data object. 2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */ 2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgpublic class SignedData 2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org extends ASN1Object 2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org{ 2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private static final ASN1Integer VERSION_1 = new ASN1Integer(1); 2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private static final ASN1Integer VERSION_3 = new ASN1Integer(3); 2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private static final ASN1Integer VERSION_4 = new ASN1Integer(4); 2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private static final ASN1Integer VERSION_5 = new ASN1Integer(5); 2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private ASN1Integer version; 3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private ASN1Set digestAlgorithms; 3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private ContentInfo contentInfo; 3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private ASN1Set certificates; 3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private ASN1Set crls; 3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private ASN1Set signerInfos; 3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private boolean certsBer; 3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private boolean crlsBer; 3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public static SignedData getInstance( 3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Object o) 4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (o instanceof SignedData) 4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return (SignedData)o; 4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org else if (o != null) 4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return new SignedData(ASN1Sequence.getInstance(o)); 4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return null; 5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public SignedData( 5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1Set digestAlgorithms, 5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ContentInfo contentInfo, 5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1Set certificates, 5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1Set crls, 5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1Set signerInfos) 5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org this.version = calculateVersion(contentInfo.getContentType(), certificates, crls, signerInfos); 6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org this.digestAlgorithms = digestAlgorithms; 6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org this.contentInfo = contentInfo; 6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org this.certificates = certificates; 6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org this.crls = crls; 6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org this.signerInfos = signerInfos; 6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org this.crlsBer = crls instanceof BERSet; 6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org this.certsBer = certificates instanceof BERSet; 6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // RFC3852, section 5.1: 7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // IF ((certificates is present) AND 7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // (any certificates with a type of other are present)) OR 7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // ((crls is present) AND 7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // (any crls with a type of other are present)) 7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // THEN version MUST be 5 7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // ELSE 7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // IF (certificates is present) AND 7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // (any version 2 attribute certificates are present) 8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // THEN version MUST be 4 8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // ELSE 8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // IF ((certificates is present) AND 8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // (any version 1 attribute certificates are present)) OR 8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // (any SignerInfo structures are version 3) OR 8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // (encapContentInfo eContentType is other than id-data) 8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // THEN version MUST be 3 8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // ELSE version MUST be 1 8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // 8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private ASN1Integer calculateVersion( 9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1ObjectIdentifier contentOid, 9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1Set certs, 9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1Set crls, 9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1Set signerInfs) 9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 9547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org boolean otherCert = false; 9647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org boolean otherCrl = false; 9747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org boolean attrCertV1Found = false; 9847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org boolean attrCertV2Found = false; 9947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 10047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (certs != null) 10147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 10247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org for (Enumeration en = certs.getObjects(); en.hasMoreElements();) 10347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 10447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Object obj = en.nextElement(); 10547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (obj instanceof ASN1TaggedObject) 10647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 10747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1TaggedObject tagged = ASN1TaggedObject.getInstance(obj); 10847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 10947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (tagged.getTagNo() == 1) 11047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 11147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org attrCertV1Found = true; 11247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 11347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org else if (tagged.getTagNo() == 2) 11447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 11547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org attrCertV2Found = true; 11647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 11747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org else if (tagged.getTagNo() == 3) 11847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 11947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org otherCert = true; 12047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 12147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 12247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 12347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 12447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 12547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (otherCert) 12647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 12747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return new ASN1Integer(5); 12847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 12947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 13047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (crls != null) // no need to check if otherCert is true 13147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 13247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org for (Enumeration en = crls.getObjects(); en.hasMoreElements();) 13347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 13447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Object obj = en.nextElement(); 13547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (obj instanceof ASN1TaggedObject) 13647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 13747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org otherCrl = true; 13847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 13947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 14047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 14147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 14247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (otherCrl) 14347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 14447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VERSION_5; 14547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 14647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 14747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (attrCertV2Found) 14847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 14947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VERSION_4; 15047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 15147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 15247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (attrCertV1Found) 15347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 15447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VERSION_3; 15547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 15647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 15747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (checkForVersion3(signerInfs)) 15847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 15947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VERSION_3; 16047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 16147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 16247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (!CMSObjectIdentifiers.data.equals(contentOid)) 16347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 16447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VERSION_3; 16547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 16647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 16747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return VERSION_1; 16847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 16947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 17047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private boolean checkForVersion3(ASN1Set signerInfs) 17147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 17247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org for (Enumeration e = signerInfs.getObjects(); e.hasMoreElements();) 17347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 17447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SignerInfo s = SignerInfo.getInstance(e.nextElement()); 17547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 17647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (s.getVersion().getValue().intValue() == 3) 17747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 17847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return true; 17947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 18047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 18147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 18247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return false; 18347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 18447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 18547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private SignedData( 18647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1Sequence seq) 18747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 18847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Enumeration e = seq.getObjects(); 18947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 19047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org version = ASN1Integer.getInstance(e.nextElement()); 19147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org digestAlgorithms = ((ASN1Set)e.nextElement()); 19247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org contentInfo = ContentInfo.getInstance(e.nextElement()); 19347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 19447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org while (e.hasMoreElements()) 19547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 19647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1Primitive o = (ASN1Primitive)e.nextElement(); 19747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 19847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // 19947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // an interesting feature of SignedData is that there appear 20047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // to be varying implementations... 20147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // for the moment we ignore anything which doesn't fit. 20247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // 20347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (o instanceof ASN1TaggedObject) 20447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 20547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ASN1TaggedObject tagged = (ASN1TaggedObject)o; 20647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 20747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org switch (tagged.getTagNo()) 20847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 20947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org case 0: 21047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org certsBer = tagged instanceof BERTaggedObject; 21147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org certificates = ASN1Set.getInstance(tagged, false); 21247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org break; 21347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org case 1: 21447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org crlsBer = tagged instanceof BERTaggedObject; 21547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org crls = ASN1Set.getInstance(tagged, false); 21647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org break; 21747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org default: 21847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org throw new IllegalArgumentException("unknown tag value " + tagged.getTagNo()); 21947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 22047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 22147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org else 22247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 22347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org signerInfos = (ASN1Set)o; 22447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 22547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 22647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 22747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 22847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public ASN1Integer getVersion() 22947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 23047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return version; 23147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 23247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 23347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public ASN1Set getDigestAlgorithms() 23447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 23547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return digestAlgorithms; 23647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 23747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 23847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public ContentInfo getEncapContentInfo() 23947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 24047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return contentInfo; 24147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 24247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 24347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public ASN1Set getCertificates() 24447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 24547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return certificates; 24647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 24747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 24847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public ASN1Set getCRLs() 24947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 25047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return crls; 25147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 25247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 25347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public ASN1Set getSignerInfos() 25447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 25547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return signerInfos; 25647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 25747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 25847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org /** 25947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Produce an object suitable for an ASN1OutputStream. 26047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * <pre> 261 * SignedData ::= SEQUENCE { 262 * version CMSVersion, 263 * digestAlgorithms DigestAlgorithmIdentifiers, 264 * encapContentInfo EncapsulatedContentInfo, 265 * certificates [0] IMPLICIT CertificateSet OPTIONAL, 266 * crls [1] IMPLICIT CertificateRevocationLists OPTIONAL, 267 * signerInfos SignerInfos 268 * } 269 * </pre> 270 */ 271 public ASN1Primitive toASN1Primitive() 272 { 273 ASN1EncodableVector v = new ASN1EncodableVector(); 274 275 v.add(version); 276 v.add(digestAlgorithms); 277 v.add(contentInfo); 278 279 if (certificates != null) 280 { 281 if (certsBer) 282 { 283 v.add(new BERTaggedObject(false, 0, certificates)); 284 } 285 else 286 { 287 v.add(new DERTaggedObject(false, 0, certificates)); 288 } 289 } 290 291 if (crls != null) 292 { 293 if (crlsBer) 294 { 295 v.add(new BERTaggedObject(false, 1, crls)); 296 } 297 else 298 { 299 v.add(new DERTaggedObject(false, 1, crls)); 300 } 301 } 302 303 v.add(signerInfos); 304 305 return new BERSequence(v); 306 } 307} 308