package com.kryptnostic.utils;
import java.io.IOException;
import java.math.BigInteger;
import java.security.KeyManagementException;
import java.security.KeyPair;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import org.junit.Before;
import retrofit.client.Client;
import retrofit.client.OkClient;
import com.kryptnostic.kodex.v1.crypto.ciphers.Cypher;
import com.kryptnostic.kodex.v1.crypto.ciphers.PasswordCryptoService;
import com.kryptnostic.kodex.v1.crypto.keys.Keys;
import com.kryptnostic.kodex.v1.crypto.keys.Keystores;
import com.squareup.okhttp.OkHttpClient;
/**
* Provides some utilities for setting up AES encryption
*
* @author sinaiman
*
*/
public class SecurityConfigurationTestUtils extends SerializationTestUtils {
protected PasswordCryptoService passwordCryptoService;
protected KeyPair pair;
@Before
public void resetSecurity() throws ExecutionException {
this.passwordCryptoService = new PasswordCryptoService(
Cypher.AES_CTR_128,
new BigInteger( 130, new SecureRandom() ).toString( 32 ).toCharArray() );
this.loader.clear();
this.loader.put( PasswordCryptoService.class.getCanonicalName(), passwordCryptoService );
generateRsaKeyPair();
}
private void generateRsaKeyPair() {
try {
pair = Keys.generateRsaKeyPair( 4096 );
} catch ( NoSuchAlgorithmException e ) {
e.printStackTrace();
}
}
protected Client createHttpClient() {
OkHttpClient client = new OkHttpClient();
client.setReadTimeout( 0, TimeUnit.MILLISECONDS );
client.setConnectTimeout( 0, TimeUnit.MILLISECONDS );
SSLContext sslContext;
try {
sslContext = SSLContext.getInstance( "TLS" );
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( TrustManagerFactory
.getDefaultAlgorithm() );
trustManagerFactory.init( Keystores.loadKeystoreFromResource(
"security/rhizome.jks",
"rhizome".toCharArray() ) );
sslContext.init( null, trustManagerFactory.getTrustManagers(), null );
client.setSslSocketFactory( sslContext.getSocketFactory() );
} catch (
NoSuchAlgorithmException
| KeyManagementException
| KeyStoreException
| CertificateException
| IOException e ) {
e.printStackTrace();
}
return new OkClient( client );
}
}