1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.asn1.cms; 2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.util.Enumeration; 4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1EncodableVector; 6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Integer; 7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Object; 8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier; 9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Sequence; 11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Set; 12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1TaggedObject; 13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.BERSequence; 14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.BERSet; 15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.BERTaggedObject; 16e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.DERTaggedObject; 17e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom/** 19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * a signed data object. 20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom */ 21e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompublic class SignedData 22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom extends ASN1Object 23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{ 24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private ASN1Integer version; 25e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private ASN1Set digestAlgorithms; 26e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private ContentInfo contentInfo; 27e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private ASN1Set certificates; 28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private ASN1Set crls; 29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private ASN1Set signerInfos; 30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private boolean certsBer; 31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private boolean crlsBer; 32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public static SignedData getInstance( 34e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom Object o) 35e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 36e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (o instanceof SignedData) 37e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 38e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return (SignedData)o; 39e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 40e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else if (o != null) 41e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 42e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new SignedData(ASN1Sequence.getInstance(o)); 43e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 44e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 45e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return null; 46e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 47e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 48e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public SignedData( 49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Set digestAlgorithms, 50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ContentInfo contentInfo, 51e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Set certificates, 52e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Set crls, 53e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Set signerInfos) 54e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 55e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.version = calculateVersion(contentInfo.getContentType(), certificates, crls, signerInfos); 56e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.digestAlgorithms = digestAlgorithms; 57e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.contentInfo = contentInfo; 58e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.certificates = certificates; 59e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.crls = crls; 60e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.signerInfos = signerInfos; 61e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.crlsBer = crls instanceof BERSet; 62e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.certsBer = certificates instanceof BERSet; 63e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 64e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 65e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 66e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // RFC3852, section 5.1: 67e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // IF ((certificates is present) AND 68e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // (any certificates with a type of other are present)) OR 69e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // ((crls is present) AND 70e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // (any crls with a type of other are present)) 71e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // THEN version MUST be 5 72e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // ELSE 73e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // IF (certificates is present) AND 74e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // (any version 2 attribute certificates are present) 75e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // THEN version MUST be 4 76e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // ELSE 77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // IF ((certificates is present) AND 78e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // (any version 1 attribute certificates are present)) OR 79e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // (any SignerInfo structures are version 3) OR 80e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // (encapContentInfo eContentType is other than id-data) 81e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // THEN version MUST be 3 82e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // ELSE version MUST be 1 83e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // 84e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private ASN1Integer calculateVersion( 85e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1ObjectIdentifier contentOid, 86e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Set certs, 87e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Set crls, 88e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Set signerInfs) 89e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 90e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom boolean otherCert = false; 91e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom boolean otherCrl = false; 92e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom boolean attrCertV1Found = false; 93e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom boolean attrCertV2Found = false; 94e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 95e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (certs != null) 96e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 97e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom for (Enumeration en = certs.getObjects(); en.hasMoreElements();) 98e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 99e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom Object obj = en.nextElement(); 100e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (obj instanceof ASN1TaggedObject) 101e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 102e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1TaggedObject tagged = ASN1TaggedObject.getInstance(obj); 103e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 104e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (tagged.getTagNo() == 1) 105e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 106e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom attrCertV1Found = true; 107e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 108e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else if (tagged.getTagNo() == 2) 109e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 110e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom attrCertV2Found = true; 111e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 112e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else if (tagged.getTagNo() == 3) 113e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 114e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom otherCert = true; 115e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 116e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 117e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 118e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 119e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 120e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (otherCert) 121e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 122e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new ASN1Integer(5); 123e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 124e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 125e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (crls != null) // no need to check if otherCert is true 126e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 127e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom for (Enumeration en = crls.getObjects(); en.hasMoreElements();) 128e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 129e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom Object obj = en.nextElement(); 130e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (obj instanceof ASN1TaggedObject) 131e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 132e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom otherCrl = true; 133e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 134e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 135e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 136e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 137e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (otherCrl) 138e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 139e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new ASN1Integer(5); 140e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 141e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 142e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (attrCertV2Found) 143e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 144e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new ASN1Integer(4); 145e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 146e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 147e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (attrCertV1Found) 148e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 149e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new ASN1Integer(3); 150e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 151e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 152e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (checkForVersion3(signerInfs)) 153e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 154e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new ASN1Integer(3); 155e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 156e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 157e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (!CMSObjectIdentifiers.data.equals(contentOid)) 158e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 159e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new ASN1Integer(3); 160e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 161e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 162e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new ASN1Integer(1); 163e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 164e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 165e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private boolean checkForVersion3(ASN1Set signerInfs) 166e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 167e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom for (Enumeration e = signerInfs.getObjects(); e.hasMoreElements();) 168e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 169e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom SignerInfo s = SignerInfo.getInstance(e.nextElement()); 170e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 171e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (s.getVersion().getValue().intValue() == 3) 172e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 173e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return true; 174e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 175e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 176e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 177e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return false; 178e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 179e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 180e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private SignedData( 181e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Sequence seq) 182e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 183e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom Enumeration e = seq.getObjects(); 184e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 185e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom version = ASN1Integer.getInstance(e.nextElement()); 186e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom digestAlgorithms = ((ASN1Set)e.nextElement()); 187e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom contentInfo = ContentInfo.getInstance(e.nextElement()); 188e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 189e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom while (e.hasMoreElements()) 190e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 191e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Primitive o = (ASN1Primitive)e.nextElement(); 192e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 193e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // 194e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // an interesting feature of SignedData is that there appear 195e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // to be varying implementations... 196e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // for the moment we ignore anything which doesn't fit. 197e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom // 198e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (o instanceof ASN1TaggedObject) 199e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 200e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1TaggedObject tagged = (ASN1TaggedObject)o; 201e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 202e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom switch (tagged.getTagNo()) 203e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 204e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom case 0: 205e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom certsBer = tagged instanceof BERTaggedObject; 206e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom certificates = ASN1Set.getInstance(tagged, false); 207e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom break; 208e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom case 1: 209e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom crlsBer = tagged instanceof BERTaggedObject; 210e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom crls = ASN1Set.getInstance(tagged, false); 211e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom break; 212e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom default: 213e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom throw new IllegalArgumentException("unknown tag value " + tagged.getTagNo()); 214e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 215e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 216e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else 217e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 218e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom signerInfos = (ASN1Set)o; 219e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 220e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 221e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 222e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 223e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public ASN1Integer getVersion() 224e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 225e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return version; 226e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 227e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 228e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public ASN1Set getDigestAlgorithms() 229e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 230e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return digestAlgorithms; 231e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 232e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 233e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public ContentInfo getEncapContentInfo() 234e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 235e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return contentInfo; 236e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 237e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 238e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public ASN1Set getCertificates() 239e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 240e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return certificates; 241e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 242e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 243e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public ASN1Set getCRLs() 244e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 245e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return crls; 246e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 247e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 248e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public ASN1Set getSignerInfos() 249e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 250e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return signerInfos; 251e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 252e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 253e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom /** 254e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * Produce an object suitable for an ASN1OutputStream. 255e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * <pre> 256e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * SignedData ::= SEQUENCE { 257e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * version CMSVersion, 258e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * digestAlgorithms DigestAlgorithmIdentifiers, 259e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * encapContentInfo EncapsulatedContentInfo, 260e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * certificates [0] IMPLICIT CertificateSet OPTIONAL, 261e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * crls [1] IMPLICIT CertificateRevocationLists OPTIONAL, 262e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * signerInfos SignerInfos 263e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * } 264e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * </pre> 265e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom */ 266e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public ASN1Primitive toASN1Primitive() 267e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 268e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1EncodableVector v = new ASN1EncodableVector(); 269e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 270e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom v.add(version); 271e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom v.add(digestAlgorithms); 272e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom v.add(contentInfo); 273e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 274e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (certificates != null) 275e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 276e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (certsBer) 277e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 278e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom v.add(new BERTaggedObject(false, 0, certificates)); 279e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 280e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else 281e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 282e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom v.add(new DERTaggedObject(false, 0, certificates)); 283e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 284e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 285e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 286e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (crls != null) 287e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 288e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (crlsBer) 289e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 290e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom v.add(new BERTaggedObject(false, 1, crls)); 291e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 292e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else 293e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 294e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom v.add(new DERTaggedObject(false, 1, crls)); 295e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 296e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 297e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 298e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom v.add(signerInfos); 299e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 300e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new BERSequence(v); 301e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 302e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom} 303