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/authenticatedData/HMACwithAESAuthenticatedDataDemo.java 8 12.02.25 17:58 Dbratko $
059 // $Revision: 8 $
060
061 package demo.cms.authenticatedData;
062
063 import iaik.asn1.structures.AlgorithmID;
064 import iaik.cms.CMSAlgorithmID;
065
066 import java.io.IOException;
067 import java.security.NoSuchAlgorithmException;
068
069 import demo.DemoUtil;
070
071 /**
072 * Demonstrates the usage of class {@link iaik.cms.AuthenticatedDataStream} and
073 * {@link iaik.cms.AuthenticatedData} for recipient-specific protecting the
074 * integrity of a message using the CMS type AuthenticatedData with the
075 * <code>HMACwithAESwrap</code> algorithm for wrapping the HMAC key.
076 * <p>
077 *
078 * <b>Attention:</b> This demo uses Static-Static Diffie-Hellman as key management
079 * technique for providing origin authentication. The mac key is wrapped by
080 * using the HMACwithAESwrap algorithm as specified by RFC 3537.
081 * <p>
082 * This demo requires that you have <code>iaik_esdh.jar</code>
083 * (or <code>iaik_jce_full.jar</code>) in your classpath.
084 * You can download it from <a href="https://sic.tech/products/core-crypto-toolkits/jca-jce/" target="_blank">
085 * https://sic.tech/products/core-crypto-toolkits/jca-jce/</a>.
086 *
087 * @see iaik.cms.AuthenticatedDataStream
088 * @see iaik.cms.AuthenticatedData
089 */
090 public class HMACwithAESAuthenticatedDataDemo extends AuthenticatedDataDemo {
091
092 /**
093 * Creates an HMACwithAESAuthenticatedDataDemo and setups the demo certificates.
094 * <br>
095 * Keys and certificates are retrieved from the demo KeyStore ("cms.keystore")
096 * file which has to be located in your current working directory and may be
097 * created by running {@link demo.keystore.SetupCMSKeyStore
098 * SetupCMSKeyStore}.
099 * <br>
100 * HMACwithAESwrap is used as key wrap algorithm.
101 *
102 * @throws IOException if an file read error occurs
103 * @throws NoSuchAlgorithmException if no implementation for the requested key wrap algorithm is available
104 */
105 public HMACwithAESAuthenticatedDataDemo() throws IOException, NoSuchAlgorithmException {
106 super((AlgorithmID)CMSAlgorithmID.cms_HMACwithAES_wrap.clone(),
107 128);
108 }
109
110 /**
111 * Main method.
112 *
113 * @throws IOException
114 * if an I/O error occurs when reading required keys
115 * and certificates from files
116 */
117 public static void main(String argv[]) throws Exception {
118
119 DemoUtil.initDemos();
120 (new HMACwithAESAuthenticatedDataDemo()).start();
121 System.out.println("\nReady!");
122 DemoUtil.waitKey();
123 }
124 }
125
126