1
package org.bouncycastle.mail.smime.test;
3
import junit.framework.Test;
4
import junit.framework.TestCase;
5
import junit.framework.TestSuite;
6
import org.bouncycastle.asn1.ASN1EncodableVector;
7
import org.bouncycastle.asn1.cms.AttributeTable;
8
import org.bouncycastle.asn1.smime.SMIMECapabilitiesAttribute;
9
import org.bouncycastle.asn1.smime.SMIMECapability;
10
import org.bouncycastle.asn1.smime.SMIMECapabilityVector;
11
import org.bouncycastle.cms.SignerInformation;
12
import org.bouncycastle.cms.SignerInformationStore;
13
import org.bouncycastle.cms.test.CMSTestUtil;
14
import org.bouncycastle.mail.smime.SMIMECompressed;
15
import org.bouncycastle.mail.smime.SMIMECompressedGenerator;
16
import org.bouncycastle.mail.smime.SMIMECompressedParser;
17
import org.bouncycastle.mail.smime.SMIMESigned;
18
import org.bouncycastle.mail.smime.SMIMESignedGenerator;
19
import org.bouncycastle.mail.smime.SMIMEUtil;
20
import org.bouncycastle.util.Arrays;
22
import javax.mail.Session;
23
import javax.mail.internet.MimeBodyPart;
24
import javax.mail.internet.MimeMessage;
25
import javax.mail.internet.MimeMultipart;
26
import java.io.ByteArrayOutputStream;
27
import java.io.InputStream;
28
import java.security.KeyPair;
29
import java.security.cert.CertStore;
30
import java.security.cert.CollectionCertStoreParameters;
31
import java.security.cert.X509Certificate;
32
import java.util.ArrayList;
33
import java.util.Collection;
34
import java.util.Iterator;
35
import java.util.List;
37
public class SMIMECompressedTest
40
private static final String COMPRESSED_CONTENT_TYPE = "application/pkcs7-mime; name=\"smime.p7z\"; smime-type=compressed-data";
48
X509Certificate signCert;
52
X509Certificate origCert;
56
X509Certificate reciCert;
59
X509Certificate dsaSignCert;
62
X509Certificate dsaOrigCert;
70
public SMIMECompressedTest(
76
msg = SMIMETestUtil.makeMimeBodyPart("Hello world!");
78
signDN = "O=Bouncy Castle, C=AU";
79
signKP = CMSTestUtil.makeKeyPair();
80
signCert = CMSTestUtil.makeCertificate(signKP, signDN, signKP, signDN);
82
origDN = "CN=Eric H. Echidna, E=eric@bouncycastle.org, O=Bouncy Castle, C=AU";
83
origKP = CMSTestUtil.makeKeyPair();
84
origCert = CMSTestUtil.makeCertificate(origKP, origDN, signKP, signDN);
87
public static void main(String args[])
89
junit.textui.TestRunner.run(SMIMECompressedTest.class);
92
public static Test suite()
94
return new SMIMETestSetup(new TestSuite(SMIMECompressedTest.class));
97
public void testHeaders()
100
SMIMECompressedGenerator cgen = new SMIMECompressedGenerator();
102
MimeBodyPart cbp = cgen.generate(msg, SMIMECompressedGenerator.ZLIB);
104
assertEquals(COMPRESSED_CONTENT_TYPE, cbp.getHeader("Content-Type")[0]);
105
assertEquals("attachment; filename=\"smime.p7z\"", cbp.getHeader("Content-Disposition")[0]);
106
assertEquals("S/MIME Compressed Message", cbp.getHeader("Content-Description")[0]);
109
public void testBasic()
112
SMIMECompressedGenerator cgen = new SMIMECompressedGenerator();
113
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
114
MimeBodyPart cbp = cgen.generate(msg, SMIMECompressedGenerator.ZLIB);
116
SMIMECompressed sc = new SMIMECompressed(cbp);
120
assertTrue(Arrays.areEqual(bOut.toByteArray(), sc.getContent()));
123
public void testParser()
126
SMIMECompressedGenerator cgen = new SMIMECompressedGenerator();
127
ByteArrayOutputStream bOut1 = new ByteArrayOutputStream();
128
ByteArrayOutputStream bOut2 = new ByteArrayOutputStream();
129
MimeBodyPart cbp = cgen.generate(msg, SMIMECompressedGenerator.ZLIB);
130
SMIMECompressedParser sc = new SMIMECompressedParser(cbp);
134
InputStream in = sc.getContent().getContentStream();
137
while ((ch = in.read()) >= 0)
142
assertTrue(Arrays.areEqual(bOut1.toByteArray(), bOut2.toByteArray()));
146
* test compressing and uncompressing of a multipart-signed message.
148
public void testCompressedSHA1WithRSA()
151
List certList = new ArrayList();
153
certList.add(origCert);
154
certList.add(signCert);
156
CertStore certs = CertStore.getInstance("Collection",
157
new CollectionCertStoreParameters(certList), "BC");
159
ASN1EncodableVector signedAttrs = new ASN1EncodableVector();
160
SMIMECapabilityVector caps = new SMIMECapabilityVector();
162
caps.addCapability(SMIMECapability.dES_EDE3_CBC);
163
caps.addCapability(SMIMECapability.rC2_CBC, 128);
164
caps.addCapability(SMIMECapability.dES_CBC);
166
signedAttrs.add(new SMIMECapabilitiesAttribute(caps));
168
SMIMESignedGenerator gen = new SMIMESignedGenerator();
170
gen.addSigner(origKP.getPrivate(), origCert, SMIMESignedGenerator.DIGEST_SHA1, new AttributeTable(signedAttrs), null);
172
gen.addCertificatesAndCRLs(certs);
174
MimeMultipart smp = gen.generate(msg, "BC");
176
MimeMessage bp2 = new MimeMessage((Session)null);
182
SMIMECompressedGenerator cgen = new SMIMECompressedGenerator();
184
MimeBodyPart cbp = cgen.generate(bp2, SMIMECompressedGenerator.ZLIB);
186
SMIMECompressed cm = new SMIMECompressed(cbp);
188
MimeMultipart mm = (MimeMultipart)SMIMEUtil.toMimeBodyPart(cm.getContent()).getContent();
190
SMIMESigned s = new SMIMESigned(mm);
192
ByteArrayOutputStream _baos = new ByteArrayOutputStream();
195
byte[] _msgBytes = _baos.toByteArray();
196
_baos = new ByteArrayOutputStream();
197
s.getContent().writeTo(_baos);
199
byte[] _resBytes = _baos.toByteArray();
201
assertEquals(true, Arrays.areEqual(_msgBytes, _resBytes));
203
certs = s.getCertificatesAndCRLs("Collection", "BC");
205
SignerInformationStore signers = s.getSignerInfos();
206
Collection c = signers.getSigners();
207
Iterator it = c.iterator();
211
SignerInformation signer = (SignerInformation)it.next();
212
Collection certCollection = certs.getCertificates(signer.getSID());
214
Iterator certIt = certCollection.iterator();
215
X509Certificate cert = (X509Certificate)certIt.next();
217
assertEquals(true, signer.verify(cert, "BC"));