001 /** 002 * Copyright 2005-2011 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.ksb.security.admin; 017 018 import java.io.IOException; 019 import java.security.GeneralSecurityException; 020 import java.security.KeyPair; 021 import java.security.KeyPairGenerator; 022 import java.security.KeyStore; 023 import java.security.PrivateKey; 024 import java.security.cert.Certificate; 025 026 import org.kuali.rice.ksb.security.admin.service.impl.JavaSecurityManagementServiceImpl; 027 028 /** 029 * This is a mock class used by the KSB test harness to supplant the {@link JavaSecurityManagementServiceImpl} class 030 * 031 * @author Kuali Rice Team (rice.collab@kuali.org) 032 * 033 */ 034 public class MockJavaSecurityManagementServiceImpl extends JavaSecurityManagementServiceImpl implements MockJavaSecurityManagementService { 035 036 private static final String FAKE_KEYSTORE_ALIAS = "test_keystore_alias"; 037 private static final String FAKE_KEYSTORE_PASSWORD = "test_keystore_pass"; 038 039 private KeyStore moduleKeyStore; 040 private PrivateKey modulePrivateKey; 041 042 @Override 043 public void afterPropertiesSet() throws Exception { 044 // method is empty in order to override operation of JavaSecurityManagementServiceImpl.afterPropertiesSet() 045 } 046 047 private void setUpService() { 048 try { 049 KeyPairGenerator keyGen = KeyPairGenerator.getInstance(CLIENT_KEY_GENERATOR_ALGORITHM); 050 // SecureRandom random = SecureRandom.getInstance(CLIENT_SECURE_RANDOM_ALGORITHM); 051 keyGen.initialize(CLIENT_KEY_PAIR_KEY_SIZE); 052 // keyGen.initialize(new RSAKeyGenParameterSpec(512,RSAKeyGenParameterSpec.F0)); 053 KeyPair pair = keyGen.generateKeyPair(); 054 055 this.modulePrivateKey = pair.getPrivate(); 056 Certificate cert = generateCertificate(pair, getModuleKeyStoreAlias()); 057 this.moduleKeyStore = generateKeyStore(cert, pair.getPrivate(), getModuleKeyStoreAlias(), getModuleKeyStorePassword()); 058 } catch (GeneralSecurityException e) { 059 e.printStackTrace(); 060 } catch (IOException e) { 061 e.printStackTrace(); 062 } 063 } 064 065 @Override 066 public String getModuleKeyStoreLocation() { 067 throw new RuntimeException("KeyStoreLocation should not be needed in unit tests"); 068 } 069 070 @Override 071 public String getModuleKeyStoreAlias() { 072 return FAKE_KEYSTORE_ALIAS; 073 } 074 075 @Override 076 public String getModuleKeyStorePassword() { 077 return FAKE_KEYSTORE_PASSWORD; 078 } 079 080 @Override 081 public KeyStore getModuleKeyStore() { 082 if (this.moduleKeyStore == null) { 083 setUpService(); 084 } 085 return this.moduleKeyStore; 086 } 087 088 @Override 089 public PrivateKey getModulePrivateKey() { 090 if (this.modulePrivateKey == null) { 091 setUpService(); 092 } 093 return this.modulePrivateKey; 094 } 095 096 }