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/HMACwith3DESAuthenticatedDataDemo.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>HMACwith3DESwrap</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 HMACwith3DESwrap 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 HMACwith3DESAuthenticatedDataDemo extends AuthenticatedDataDemo { 091 092 /** 093 * Creates an HMACwith3DESAuthenticatedDataDemo 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 * HMACwith3DESwrap 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 HMACwith3DESAuthenticatedDataDemo() throws IOException, NoSuchAlgorithmException { 106 super((AlgorithmID)CMSAlgorithmID.cms_HMACwith3DES_wrap.clone(), 107 192); 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 HMACwith3DESAuthenticatedDataDemo()).start(); 121 System.out.println("\nReady!"); 122 DemoUtil.waitKey(); 123 } 124 } 125 126