1 /************************************************************************ 2 * Copyright (c) 2000-2006 The Apache Software Foundation. * 3 * All rights reserved. * 4 * ------------------------------------------------------------------- * 5 * Licensed under the Apache License, Version 2.0 (the "License"); you * 6 * may not use this file except in compliance with the License. You * 7 * may obtain a copy of the License at: * 8 * * 9 * http://www.apache.org/licenses/LICENSE-2.0 * 10 * * 11 * Unless required by applicable law or agreed to in writing, software * 12 * distributed under the License is distributed on an "AS IS" BASIS, * 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * 14 * implied. See the License for the specific language governing * 15 * permissions and limitations under the License. * 16 ***********************************************************************/ 17 18 package org.apache.james.security; 19 20 import java.security.Provider; 21 import java.security.Security; 22 23 import javax.activation.CommandMap; 24 import javax.activation.MailcapCommandMap; 25 26 /*** 27 * Security Providers initialization class. The first call of the init method 28 * will have the class loader do the job. This technique ensures proper 29 * initialization without the need of maintaining the 30 * <i>${java_home}/lib/security/java.security</i> file, that would otherwise 31 * need the addition of the following line: 32 * <code>security.provider.<i>n</i>=org.bouncycastle.jce.provider.BouncyCastleProvider</code>. 33 * 34 * The call also registers to the javamail's MailcapCommandMap the content 35 * handlers that are needed to work with s/mime mails. 36 * 37 */ 38 public class InitJCE { 39 private static String bouncyCastleProviderClassName = "org.bouncycastle.jce.provider.BouncyCastleProvider"; 40 private static boolean initialized = false; 41 42 /*** 43 * Method that registers the security provider BouncyCastle as a system 44 * security provider. The provider class is dinamically loaded on runtime so 45 * there is no need to include the bouncycastle jar in the James 46 * distribution. It can be downloaded and installed by the user if she needs 47 * it. 48 */ 49 public static void init() throws InstantiationException, IllegalAccessException, ClassNotFoundException { 50 if (!initialized) { 51 Security.addProvider((Provider)Class.forName(bouncyCastleProviderClassName).newInstance()); 52 53 MailcapCommandMap mailcap = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 54 55 mailcap.addMailcap("application/pkcs7-signature;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.pkcs7_signature"); 56 mailcap.addMailcap("application/pkcs7-mime;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.pkcs7_mime"); 57 mailcap.addMailcap("application/x-pkcs7-signature;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.x_pkcs7_signature"); 58 mailcap.addMailcap("application/x-pkcs7-mime;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.x_pkcs7_mime"); 59 mailcap.addMailcap("multipart/signed;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.multipart_signed"); 60 61 CommandMap.setDefaultCommandMap(mailcap); 62 63 initialized = true; 64 } else return; 65 } 66 }