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/DemoSMimeUtil.java 8 12.02.25 17:58 Dbratko $
059 // $Revision: 8 $
060 //
061
062 package demo;
063
064 import java.util.Properties;
065
066 import javax.activation.CommandMap;
067 import javax.activation.MailcapCommandMap;
068 import javax.mail.Session;
069
070
071 /**
072 * Some basic utility methods used by the S/MIME demos.
073 */
074 public class DemoSMimeUtil extends DemoUtil {
075
076 /**
077 * Mail session.
078 */
079 private static Session session_;
080
081 /**
082 * Default constructor.
083 */
084 DemoSMimeUtil() {
085 // empty
086 }
087
088 /** Perform a some initial setup to allow the demos to work */
089 public synchronized static void initDemos() {
090 initDemos(true);
091 }
092
093 /**
094 * Perform a some initial setup to allow the demos to work
095 *
096 * @param quickStart whether to init the random generator with a
097 * (not strong) seed for quick start (ONLY FOR
098 * DEMO PURPOSES; NOT FOR PRODUCTION ENVIRONMENT!)
099 */
100 public synchronized static void initDemos(boolean quickStart) {
101
102 if( initialized_ ) {
103 return;
104 }
105 initialized_ = true;
106 for( int i=0; i<GREETING.length; i++ ) {
107 System.out.println(GREETING[i]);
108 }
109
110 /*
111 * Before installing the IAIK provider load classes from activation.jar and mail.jar
112 * to avoid problems due to a bug in the jar file verification mechanism of
113 * some JDKs (some version of activation.jar and mail.jar may be signed which
114 * may cause a CastException during jar file verification by some buggy JDKs).
115 */
116 registerMailCapEntries();
117
118 // create Session object
119 session_ = getSession();
120
121 initRandom(quickStart);
122 addIaikProvider();
123 }
124
125 /**
126 * Registers the IAIK content handlers for the mailcap command map.
127 */
128 public static void registerMailCapEntries() {
129 MailcapCommandMap mc = (MailcapCommandMap)CommandMap.getDefaultCommandMap();
130 mc.addMailcap("multipart/signed;; x-java-content-handler=iaik.smime.signed_content");
131 mc.addMailcap("application/x-pkcs7-signature;; x-java-content-handler=iaik.smime.signed_content");
132 mc.addMailcap("application/x-pkcs7-mime;; x-java-content-handler=iaik.smime.encrypted_content");
133 mc.addMailcap("application/pkcs7-signature;; x-java-content-handler=iaik.smime.signed_content");
134 mc.addMailcap("application/pkcs7-mime;; x-java-content-handler=iaik.smime.encrypted_content");
135 mc.addMailcap("application/x-pkcs10;; x-java-content-handler=iaik.smime.pkcs10_content");
136 mc.addMailcap("application/pkcs10;; x-java-content-handler=iaik.smime.pkcs10_content");
137 CommandMap.setDefaultCommandMap(mc);
138 }
139
140 /**
141 * Adds the IAIK S/MIME content handlers to the given MailcapCommandMap.
142 *
143 * @param mc the MailcapCommandMap to which to add the content handlers
144 *
145 * @return the MailcapCommandMap to which the content handlers have been added
146 */
147 public static CommandMap addContentHandlers(MailcapCommandMap mc) {
148 mc.addMailcap("multipart/signed;; x-java-content-handler=iaik.smime.signed_content");
149 mc.addMailcap("application/x-pkcs7-signature;; x-java-content-handler=iaik.smime.signed_content");
150 mc.addMailcap("application/x-pkcs7-mime;; x-java-content-handler=iaik.smime.encrypted_content");
151 mc.addMailcap("application/pkcs7-signature;; x-java-content-handler=iaik.smime.signed_content");
152 mc.addMailcap("application/pkcs7-mime;; x-java-content-handler=iaik.smime.encrypted_content");
153 mc.addMailcap("application/x-pkcs10;; x-java-content-handler=iaik.smime.pkcs10_content");
154 mc.addMailcap("application/pkcs10;; x-java-content-handler=iaik.smime.pkcs10_content");
155 return mc;
156 }
157
158
159 /**
160 * Returns (the default) mail session object.
161 *
162 * @return (the default) session object.
163 */
164 public static Session getSession() {
165 if (session_ == null) {
166 // create some properties and get the default Session
167 Properties props = new Properties();
168 props.put("mail.smtp.host", "mailhost");
169 //props.put("mail.debug", "true");
170 session_ = Session.getDefaultInstance(props, null);
171 }
172 return session_;
173 }
174
175 /**
176 * Returns a mail session object for the given mailhost.
177 *
178 * @param mailhost the mailhost to be used
179 *
180 * @return a mail session object for the given mailhost.
181 */
182 public static Session getSession(String mailhost) {
183 // create some properties and get the default Session
184 Properties props = new Properties();
185 props.put("mail.smtp.host", mailhost);
186 //props.put("mail.debug", "true");
187 Session session = Session.getInstance(props, null);
188 return session;
189 }
190
191
192
193 }