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}