/* See LICENSE for licensing and NOTICE for copyright. */
package org.cryptacular.bean;
import java.io.File;
import java.security.Key;
import java.security.interfaces.RSAPrivateKey;
import javax.crypto.SecretKey;
import org.cryptacular.FailListener;
import org.cryptacular.io.FileResource;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
/**
* Unit test for {@link KeyStoreBasedKeyFactoryBean}.
*
* @author Middleware Services
*/
@Listeners(FailListener.class)
public class KeyStoreBasedKeyFactoryBeanTest
{
private static final String KS_PATH = "src/test/resources/keystores/";
@DataProvider(name = "keys")
public Object[][] getKeys()
{
return
new Object[][] {
{
KS_PATH + "factory-bean.jceks",
"JCEKS",
"aes256",
"AES",
32,
},
{
KS_PATH + "factory-bean.jceks",
"JCEKS",
"rsa2048",
"RSA",
2048,
},
};
}
@Test(dataProvider = "keys")
public void testNewInstance(
final String keyStorePath,
final String keyStoreType,
final String alias,
final String expectedAlg,
final int expectedSize)
throws Exception
{
final KeyStoreFactoryBean keyStoreFactory = new KeyStoreFactoryBean();
keyStoreFactory.setResource(new FileResource(new File(keyStorePath)));
keyStoreFactory.setPassword("vtcrypt");
keyStoreFactory.setType(keyStoreType);
final KeyStoreBasedKeyFactoryBean secretKeyFactory = new KeyStoreBasedKeyFactoryBean();
secretKeyFactory.setKeyStore(keyStoreFactory.newInstance());
secretKeyFactory.setAlias(alias);
secretKeyFactory.setPassword("vtcrypt");
final Key key = secretKeyFactory.newInstance();
assertEquals(key.getAlgorithm(), expectedAlg);
if (key instanceof SecretKey) {
assertEquals(key.getEncoded().length, expectedSize);
} else if (key instanceof RSAPrivateKey) {
assertEquals(((RSAPrivateKey) key).getModulus().bitLength(), expectedSize);
}
}
}