diff options
Diffstat (limited to 'core/src/test/java/org/spongycastle/asn1/test/SMIMETest.java')
-rw-r--r-- | core/src/test/java/org/spongycastle/asn1/test/SMIMETest.java | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/core/src/test/java/org/spongycastle/asn1/test/SMIMETest.java b/core/src/test/java/org/spongycastle/asn1/test/SMIMETest.java new file mode 100644 index 00000000..e6330386 --- /dev/null +++ b/core/src/test/java/org/spongycastle/asn1/test/SMIMETest.java @@ -0,0 +1,109 @@ +package org.spongycastle.asn1.test; + +import java.io.ByteArrayInputStream; + +import org.spongycastle.asn1.ASN1InputStream; +import org.spongycastle.asn1.ASN1Primitive; +import org.spongycastle.asn1.DERGeneralizedTime; +import org.spongycastle.asn1.DEROctetString; +import org.spongycastle.asn1.cms.RecipientKeyIdentifier; +import org.spongycastle.asn1.smime.SMIMECapabilitiesAttribute; +import org.spongycastle.asn1.smime.SMIMECapability; +import org.spongycastle.asn1.smime.SMIMECapabilityVector; +import org.spongycastle.asn1.smime.SMIMEEncryptionKeyPreferenceAttribute; +import org.spongycastle.util.encoders.Base64; +import org.spongycastle.util.test.SimpleTestResult; +import org.spongycastle.util.test.Test; +import org.spongycastle.util.test.TestResult; + +public class SMIMETest + implements Test +{ + byte[] attrBytes = Base64.decode("MDQGCSqGSIb3DQEJDzEnMCUwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMAcGBSsOAwIH"); + byte[] prefBytes = Base64.decode("MCwGCyqGSIb3DQEJEAILMR2hGwQIAAAAAAAAAAAYDzIwMDcwMzE1MTczNzI5Wg=="); + + private boolean isSameAs( + byte[] a, + byte[] b) + { + if (a.length != b.length) + { + return false; + } + + for (int i = 0; i != a.length; i++) + { + if (a[i] != b[i]) + { + return false; + } + } + + return true; + } + + public TestResult perform() + { + SMIMECapabilityVector caps = new SMIMECapabilityVector(); + + caps.addCapability(SMIMECapability.dES_EDE3_CBC); + caps.addCapability(SMIMECapability.rC2_CBC, 128); + caps.addCapability(SMIMECapability.dES_CBC); + + SMIMECapabilitiesAttribute attr = new SMIMECapabilitiesAttribute(caps); + + SMIMEEncryptionKeyPreferenceAttribute pref = new SMIMEEncryptionKeyPreferenceAttribute( + new RecipientKeyIdentifier(new DEROctetString(new byte[8]), new DERGeneralizedTime("20070315173729Z"), null)); + + try + { + if (!isSameAs(attr.getEncoded(), attrBytes)) + { + return new SimpleTestResult(false, getName() + ": Failed attr data check"); + } + + ByteArrayInputStream bIn = new ByteArrayInputStream(attrBytes); + ASN1InputStream aIn = new ASN1InputStream(bIn); + + ASN1Primitive o = aIn.readObject(); + if (!attr.equals(o)) + { + return new SimpleTestResult(false, getName() + ": Failed equality test for attr"); + } + + if (!isSameAs(pref.getEncoded(), prefBytes)) + { + return new SimpleTestResult(false, getName() + ": Failed attr data check"); + } + + bIn = new ByteArrayInputStream(prefBytes); + aIn = new ASN1InputStream(bIn); + + o = aIn.readObject(); + if (!pref.equals(o)) + { + return new SimpleTestResult(false, getName() + ": Failed equality test for pref"); + } + + return new SimpleTestResult(true, getName() + ": Okay"); + } + catch (Exception e) + { + return new SimpleTestResult(false, getName() + ": Failed - exception " + e.toString(), e); + } + } + + public String getName() + { + return "SMIME"; + } + + public static void main( + String[] args) + { + SMIMETest test = new SMIMETest(); + TestResult result = test.perform(); + + System.out.println(result); + } +} |