001// Copyright (C) 2002 IAIK 002// https://sic.tech/ 003// 004// Copyright (C) 2003 - 2025 Stiftung Secure Information and 005// Communication Technologies SIC 006// https://sic.tech/ 007// 008// All rights reserved. 009// 010// This source is provided for inspection purposes and recompilation only, 011// unless specified differently in a contract with IAIK. This source has to 012// be kept in strict confidence and must not be disclosed to any third party 013// under any circumstances. Redistribution in source and binary forms, with 014// or without modification, are <not> permitted in any case! 015// 016// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 017// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 018// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 019// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 020// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 021// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 022// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 023// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 024// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 025// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 026// SUCH DAMAGE. 027// 028// $Header: /IAIK-CMS/current/src/demo/DemoAll.java 64 12.02.25 17:58 Dbratko $ 029// $Revision: 64 $ 030// 031 032package demo; 033 034import java.io.File; 035import java.io.IOException; 036 037import demo.cms.authEnvelopedData.AuthEnvelopedDataDemo; 038import demo.cms.authEnvelopedData.AuthEnvelopedDataOutputStreamDemo; 039import demo.cms.authenticatedData.AuthenticatedDataDemo; 040import demo.cms.authenticatedData.AuthenticatedDataOutputStreamDemo; 041import demo.cms.authenticatedData.HMACwith3DESAuthenticatedDataDemo; 042import demo.cms.authenticatedData.HMACwithAESAuthenticatedDataDemo; 043import demo.cms.basic.CMSDemo; 044import demo.cms.compressedData.CompressedDataDemo; 045import demo.cms.compressedData.CompressedDataOutputStreamDemo; 046import demo.cms.data.DataDemo; 047import demo.cms.digestedData.DigestedDataDemo; 048import demo.cms.digestedData.DigestedDataOutputStreamDemo; 049import demo.cms.ecc.ECCDemoUtil; 050import demo.cms.ecc.EckaEGAuthEnvelopedDataDemo; 051import demo.cms.encryptedData.EncryptedDataDemo; 052import demo.cms.encryptedData.EncryptedDataOutputStreamDemo; 053import demo.cms.envelopedData.ArcFourEnvelopedDataDemo; 054import demo.cms.envelopedData.CAST128EnvelopedDataDemo; 055import demo.cms.envelopedData.EncryptedContentInfoDemo; 056import demo.cms.envelopedData.EnvelopedDataDemo; 057import demo.cms.envelopedData.EnvelopedDataDemoAEAD; 058import demo.cms.envelopedData.EnvelopedDataOutputStreamDemo; 059import demo.cms.envelopedData.ExplicitEnvelopedDataDemo; 060import demo.cms.envelopedData.OaepEnvelopedDataDemo; 061import demo.cms.envelopedData.RC2EnvelopedDataDemo; 062import demo.cms.pkcs7cms.PKCS7CMSDataDemo; 063import demo.cms.pkcs7cms.PKCS7CMSDigestedDataDemo; 064import demo.cms.pkcs7cms.PKCS7CMSEncryptedContentInfoDemo; 065import demo.cms.pkcs7cms.PKCS7CMSEncryptedDataDemo; 066import demo.cms.pkcs7cms.PKCS7CMSEnvelopedDataDemo; 067import demo.cms.pkcs7cms.PKCS7CMSSignedDataDemo; 068import demo.cms.signedAndEnvelopedData.SignedAndEnvelopedDataDemo; 069import demo.cms.signedData.CounterSignatureDemo; 070import demo.cms.signedData.PssSignedDataDemo; 071import demo.cms.signedData.SignedDataDemo; 072import demo.cms.signedData.SignedDataDemoWithAdditionalSignerInfo; 073import demo.cms.signedData.SignedDataInOutStreamDemoWithAdditionalSignerInfo; 074import demo.cms.signedData.SignedDataOutputStreamDemo; 075import demo.cms.signedData.SignedDataStreamDemoWithAdditionalSignerInfo; 076import demo.keystore.CMSKeyStoreConstants; 077import demo.keystore.SetupCMSKeyStore; 078import demo.smime.basic.BinarySignedDemo; 079import demo.smime.basic.CMSStreamDemo; 080import demo.smime.basic.ProcessMessageDemo; 081import demo.smime.basic.SMimeDemo; 082import demo.smime.basic.SMimeEnvelopedDemoAEAD; 083import demo.smime.basic.SMimeV3Demo; 084import demo.smime.basic.SMimeV4Demo; 085import demo.smime.ecc.SMimeV4BrainpoolDemo; 086import demo.smime.ess.MLADemo; 087import demo.smime.ess.SignedReceiptDemo; 088import demo.smime.ess.SigningCertificateDemo; 089import demo.smime.ess.TripleWrappingDemo; 090import iaik.asn1.structures.AlgorithmID; 091import iaik.cms.SecurityProvider; 092import iaik.cms.Utils; 093 094/** 095 * This class runs all available demos. 096 */ 097public class DemoAll implements CMSKeyStoreConstants { 098 099 /** 100 * Start all tests. 101 */ 102 public void start() throws Exception { 103 104 File keystore = new File(CMSKeyStoreConstants.KS_FILENAME); 105 if (!keystore.exists()) { 106 System.out.println("Can't find '"+CMSKeyStoreConstants.KS_FILENAME+"'!"); 107 System.out.println("Create new keystore..."); 108 109 SetupCMSKeyStore.start(); 110 } 111 112 String jdkVersion = (String) System.getProperty("java.version"); 113 114 // cms demos 115 (new CMSDemo()).start(); 116 (new DataDemo()).start(); 117 (new DigestedDataDemo()).start(); 118 (new EncryptedDataDemo()).start(); 119 if (Utils.isClassAvailable("iaik.security.dh.ESDHPublicKey")) { 120 // require ESDH 121 (new EnvelopedDataDemo()).start(); 122 if ((jdkVersion != null) && (jdkVersion.compareTo("1.7") >= 0)) { 123 // EnvelopedData with GCM only available for JDK versions >= 1.7 124 (new EnvelopedDataDemoAEAD()).start(); 125 } 126 (new ExplicitEnvelopedDataDemo()).start(); 127 if (DemoUtil.getIaikProviderVersion() >= 3.12) { 128 (new AuthenticatedDataDemo()).start(); 129 (new HMACwith3DESAuthenticatedDataDemo()).start(); 130 (new HMACwithAESAuthenticatedDataDemo()).start(); 131 } 132 if (DemoUtil.getIaikProviderVersion() >= 3.14) { 133 (new demo.cms.envelopedData.AESEnvelopedDataDemo()).start(); 134 (new EnvelopedDataDemo((AlgorithmID)AlgorithmID.aes192_CBC.clone(), 135 (AlgorithmID)AlgorithmID.cms_aes192_wrap.clone(), 136 192)).start(); 137 (new EnvelopedDataDemo((AlgorithmID)AlgorithmID.aes256_CBC.clone(), 138 (AlgorithmID)AlgorithmID.cms_aes256_wrap.clone(), 139 256)).start(); 140 141 (new demo.cms.envelopedData.ExplicitAESEnvelopedDataDemo()).start(); 142 (new ExplicitEnvelopedDataDemo((AlgorithmID)AlgorithmID.aes192_CBC.clone(), 143 (AlgorithmID)AlgorithmID.cms_aes192_wrap.clone(), 144 192)).start(); 145 (new ExplicitEnvelopedDataDemo((AlgorithmID)AlgorithmID.aes256_CBC.clone(), 146 (AlgorithmID)AlgorithmID.cms_aes256_wrap.clone(), 147 256)).start(); 148 } 149 if (DemoUtil.getIaikProviderVersion() > 3.18) { 150 (new demo.cms.envelopedData.CamelliaEnvelopedDataDemo()).start(); 151 (new EnvelopedDataDemo((AlgorithmID)AlgorithmID.camellia192_CBC.clone(), 152 (AlgorithmID)AlgorithmID.cms_camellia192_wrap.clone(), 153 192)).start(); 154 (new EnvelopedDataDemo((AlgorithmID)AlgorithmID.camellia256_CBC.clone(), 155 (AlgorithmID)AlgorithmID.cms_camellia256_wrap.clone(), 156 256)).start(); 157 158 (new ExplicitEnvelopedDataDemo((AlgorithmID)AlgorithmID.camellia128_CBC.clone(), 159 (AlgorithmID)AlgorithmID.cms_camellia128_wrap.clone(), 160 128)).start(); 161 (new ExplicitEnvelopedDataDemo((AlgorithmID)AlgorithmID.camellia192_CBC.clone(), 162 (AlgorithmID)AlgorithmID.cms_camellia192_wrap.clone(), 163 192)).start(); 164 (new ExplicitEnvelopedDataDemo((AlgorithmID)AlgorithmID.camellia256_CBC.clone(), 165 (AlgorithmID)AlgorithmID.cms_camellia256_wrap.clone(), 166 256)).start(); 167 168 169 (new demo.cms.authenticatedData.HMACwithAESAuthenticatedDataDemo()).start(); 170 } 171 } 172 (new SignedDataDemo()).start(); 173 (new CompressedDataDemo()).start(); 174 (new EncryptedContentInfoDemo()).start(); 175 (new SignedAndEnvelopedDataDemo()).start(); 176 (new CAST128EnvelopedDataDemo()).start(); 177 (new RC2EnvelopedDataDemo()).start(); 178 (new ArcFourEnvelopedDataDemo()).start(); 179 180 // run separatly since stores encryption result to a file 181 //(new FileEncryptionDemo()).start(); 182 183 (new PKCS7CMSDataDemo()).start(); 184 (new PKCS7CMSDigestedDataDemo()).start(); 185 (new PKCS7CMSEncryptedDataDemo()).start(); 186 (new PKCS7CMSEnvelopedDataDemo()).start(); 187 (new PKCS7CMSSignedDataDemo()).start(); 188 (new PKCS7CMSEncryptedContentInfoDemo()).start(); 189 (new PssSignedDataDemo()).start(); 190 (new OaepEnvelopedDataDemo()).start(); 191 (new SignedDataDemoWithAdditionalSignerInfo()).start(); 192 (new SignedDataStreamDemoWithAdditionalSignerInfo()).start(); 193 if (DemoUtil.getIaikProviderVersion() >= 3.16) { 194 (new SignedDataInOutStreamDemoWithAdditionalSignerInfo()).start(); 195 } 196 (new CounterSignatureDemo()).start(); 197 (new EnvelopedDataOutputStreamDemo()).start(); 198 (new SignedDataOutputStreamDemo()).start(); 199 (new EncryptedDataOutputStreamDemo()).start(); 200 (new DigestedDataOutputStreamDemo()).start(); 201 if (Utils.isClassAvailable("iaik.security.dh.ESDHPublicKey")) { 202 if (DemoUtil.getIaikProviderVersion() >= 3.12) { 203 (new AuthenticatedDataOutputStreamDemo()).start(); 204 } 205 if (DemoUtil.getIaikProviderVersion() >= 3.17) { 206 (new AuthEnvelopedDataDemo()).start(); 207 (new AuthEnvelopedDataOutputStreamDemo()).start(); 208 } 209 } 210 (new CompressedDataOutputStreamDemo()).start(); 211 212 if (Utils.isClassAvailable("iaik.security.dh.ESDHPublicKey")) { 213 // requires ESDH 214 (new CMSStreamDemo()).start(); 215 } 216 217 // smime demos 218 (new SMimeDemo()).start(); 219 if (Utils.isClassAvailable("iaik.security.dh.ESDHPublicKey")) { 220 // requires ESDH 221 (new SMimeV3Demo()).start(); 222 (new SMimeV4Demo()).start(); 223 } 224 if ((jdkVersion != null) && (jdkVersion.compareTo("1.7") >= 0)) { 225 // S/MIME EnvelopedData with GCM only available for JDK versions >= 1.7 226 (new SMimeEnvelopedDemoAEAD()).start(); 227 } 228 if (DemoUtil.getIaikProviderVersion() > 3.18) { 229 (new demo.smime.basic.SMimeCamelliaDemo()).start(); 230 (new demo.smime.basic.SMimeV3CamelliaDemo()).start(); 231 } 232 (new ProcessMessageDemo()).start(); 233 (new BinarySignedDemo()).start(); 234 235 // run separatly because it creates big (temporary) files 236 // (new BigSMimeMailDemo()).start(); 237 238 (new SigningCertificateDemo()).start(); 239 (new TripleWrappingDemo()).start(); 240 (new SignedReceiptDemo()).start(); 241 242 // run separatly (uses Swing Dialog) 243 // 244 // if (Utils.isClassAvailable("javax.swing.JOptionPane")) { 245 // (new SecurityLabelDemo()).start(); 246 // } 247 248 (new MLADemo()).start(); 249 250 251 // TSP demos (the IAIK TSP library must be in the classpath) 252 if ((Utils.isClassAvailable("iaik.tsp.TimeStampReq")) && (DemoUtil.getIaikProviderVersion() >= 3.14) ) { 253 (new demo.cms.tsp.TimeStampDemo()).start(); 254 } 255 256 // ECC demos (IAIK ECC provider must be in the classpath) 257 if ((Utils.isClassAvailable("iaik.security.ecc.provider.ECCProvider")) || 258 (Utils.isClassAvailable("iaik.security.ec.provider.ECCelerate"))) { 259 // add ECC provider 260 SecurityProvider securityProvider = ECCDemoUtil.installIaikEccProvider(); 261 // CMS 262 (new demo.cms.ecc.ECDSASignedDataDemo()).start(); 263 (new demo.cms.ecc.ECDSASignedDataOutputStreamDemo()).start(); 264 (new demo.cms.ecc.ECDHEnvelopedDataDemo()).start(); 265 if (DemoUtil.getIaikProviderVersion() >= 5.4) { 266 (new EckaEGAuthEnvelopedDataDemo()).start(); 267 } 268 if ((securityProvider.getClass().getName().equals("iaik.cms.ecc.ECCelerateProvider")) && 269 (ECCDemoUtil.getECCelerateVersion() > 6.02)) { 270 (new demo.cms.ecc.EdDSASignedDataDemo()).start(); 271 (new demo.cms.ecc.EdDSASignedDataOutputStreamDemo()).start(); 272 (new demo.cms.ecc.EdDHEnvelopedDataDemo()).start(); 273 (new demo.cms.ecc.EdDHAuthEnvelopedDataDemo()).start(); 274 (new demo.cms.ecc.EdDHAuthenticatedDataDemo()).start(); 275 } 276 // S/MIME 277 (new demo.smime.ecc.SMimeEccDemo()).start(); 278 if (DemoUtil.getIaikProviderVersion() > 3.13) { 279 (new demo.smime.ecc.SMimeEccSuiteBDemo()).start(); 280 } 281 if ((securityProvider.getClass().getName().equals("iaik.cms.ecc.ECCelerateProvider")) && 282 (DemoUtil.getIaikProviderVersion() > 5.62) && 283 (ECCDemoUtil.getECCelerateVersion() > 6.1)) { 284 (new demo.smime.ecc.SMimeV4EccDemo()).start(); 285 (new demo.smime.ecc.SimpleSMimeV4EcDemo()).start(); 286 (new demo.smime.ecc.SimpleSMimeV4EdDemo()).start(); 287 if ((jdkVersion != null) && (jdkVersion.compareTo("1.7") >= 0)) { 288 // EnvelopedData with GCM only available for JDK versions >= 1.7 289 (new SMimeV4BrainpoolDemo()).start(); 290 } 291 292 } 293 } 294 295 } 296 297 /** 298 * Performs all tests. 299 */ 300 public static void main(String arg[]) throws IOException { 301 302 DemoSMimeUtil.initDemos(); 303 304 try { 305 (new DemoAll()).start(); 306 System.out.println("All demos O.K.!!!"); 307 } catch(Exception ex) { 308 System.out.println("There were errors: " + ex.toString()); 309 ex.printStackTrace(); 310 } 311 312 // DemoUtil.waitKey(); 313 314 315 } 316}