001    // Copyright (C) 2002 IAIK
002    // https://jce.iaik.tugraz.at
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    // Redistribution and use in source and binary forms, with or without
011    // modification, are permitted provided that the following conditions
012    // are met:
013    // 1. Redistributions of source code must retain the above copyright
014    //    notice, this list of conditions and the following disclaimer.
015    // 2. Redistributions in binary form must reproduce the above copyright
016    //    notice, this list of conditions and the following disclaimer in the
017    //    documentation and/or other materials provided with the distribution.
018    //
019    // THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
020    // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
021    // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
022    // ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
023    // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
024    // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
025    // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
026    // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
027    // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
028    // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
029    // SUCH DAMAGE.
030    
031    // Copyright (C) 2002 IAIK
032    // https://sic.tech/
033    //
034    // Copyright (C) 2003 - 2025 Stiftung Secure Information and 
035    //                           Communication Technologies SIC
036    // https://sic.tech/
037    //
038    // All rights reserved.
039    //
040    // This source is provided for inspection purposes and recompilation only,
041    // unless specified differently in a contract with IAIK. This source has to
042    // be kept in strict confidence and must not be disclosed to any third party
043    // under any circumstances. Redistribution in source and binary forms, with
044    // or without modification, are <not> permitted in any case!
045    //
046    // THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
047    // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
048    // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
049    // ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
050    // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
051    // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
052    // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
053    // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
054    // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
055    // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
056    // SUCH DAMAGE.
057    //
058    // $Header: /IAIK-CMS/current/src/demo/cms/signedData/CertListDemo.java 17    12.02.25 17:58 Dbratko $
059    // $Revision: 17 $
060    //
061    
062    package demo.cms.signedData;
063    
064    import iaik.cms.CMSCertList;
065    import iaik.security.provider.IAIK;
066    import iaik.x509.X509Certificate;
067    
068    import java.io.FileInputStream;
069    import java.io.IOException;
070    
071    import demo.DemoUtil;
072    
073    /**
074     * Reads a CMS (PKCS#7) certifcate list from a file.
075     * <p>
076     * When starting the test, you have to specify
077     * the file name holding the <code>CMSCertList</code> to be parsed:
078     * <pre>
079     * java demo.cms.CertListDemo &lt;file name&gt;
080     * </pre>
081     *
082     * @see iaik.cms.CMSCertList
083     */
084    public class CertListDemo {
085    
086      /**
087       * Reads a CMS (PKCS#7) certificate chain from a file and dumps the certificates
088       * stored inside.
089       * <p>
090       * Usage:
091       * <p><code>
092       * java demo.cms.CertListDemo &lt;file name&gt;
093       * </code><p>
094       *
095       * @param arg the name of the file holding the certificate chain
096       */
097      public static void main(String arg[]) {
098    
099            IAIK.addAsJDK14Provider(true);
100         
101        if (arg.length != 1) {
102          
103          System.out.println("Usage: java demo.cms.CertListDemo <CMS-certificate-chain-file>");
104          
105        } else {
106          
107          FileInputStream fis = null;
108          try {
109            fis = new FileInputStream(arg[0]);
110            CMSCertList cmsCertList = new CMSCertList(fis);
111            X509Certificate[] certs = cmsCertList.getX509Certificates();
112    
113            for (int i = 0; i < certs.length; i++) {
114               System.out.println(certs[i]);
115            }   
116    
117          } catch (Exception ex) {
118            System.out.println("Error reading certificates: "+ ex.toString());
119          } finally {
120            if (fis != null) {
121              try {
122                fis.close();
123              } catch (IOException ex) {
124                // ignore
125              } 
126            }    
127          }
128          
129        }
130        System.out.println();
131        DemoUtil.waitKey();
132      }     
133    }