package tryanderror.encryption;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.*;
import static org.mockito.Matchers.isNotNull;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.net.URL;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.util.Collection;
import java.util.Enumeration;
import javax.crypto.Cipher;
import org.junit.Test;
public class Rsa {
@Test
public void generateAPublicAnAPrivateRsaKey() throws Exception {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.genKeyPair();
Key publicKey = kp.getPublic();
Key privateKey = kp.getPrivate();
KeyFactory fact = KeyFactory.getInstance("RSA");
RSAPublicKeySpec pub = fact.getKeySpec(kp.getPublic(),
RSAPublicKeySpec.class);
RSAPrivateKeySpec priv = fact.getKeySpec(kp.getPrivate(),
RSAPrivateKeySpec.class);
}
@Test
public void retrieveKeysFromAPkcs12File() throws Exception {
KeyStore keystore = java.security.KeyStore.getInstance("PKCS12");
File file = getFileFor("bundle.p12");
keystore.load(new FileInputStream(file), "secret".toCharArray());
for (Enumeration enums = keystore.aliases(); enums.hasMoreElements();) {
String alias = (String) enums.nextElement();
if (keystore.isKeyEntry(alias)) {
PrivateKey key = (PrivateKey) keystore.getKey(alias, "secret".toCharArray());
}
}
}
@Test
public void retriveKeyFromAPkcs7File() throws Exception {
File publicKeyFile = getFileFor("server.p7b");
FileInputStream fileInputStream = new FileInputStream(publicKeyFile);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
Collection collection = certificateFactory.generateCertificates(fileInputStream);
Certificate certificate = (Certificate) collection.iterator().next();
PublicKey publicKey = certificate.getPublicKey();
System.out.println(publicKey);
assertThat(publicKey, is(notNullValue()));
}
public void saveToFile(String fileName, BigInteger mod, BigInteger exp) throws IOException {
FileOutputStream out = new FileOutputStream(fileName);
BufferedOutputStream out2 = new BufferedOutputStream(out);
ObjectOutputStream oout = new ObjectOutputStream(out2);
try {
oout.writeObject(mod);
oout.writeObject(exp);
} catch (Exception e) {
throw new IOException("Unexpected error", e);
} finally {
oout.close();
}
}
@Test
public void testname() throws Exception {
KeyPair keys = KeyPairGenerator.getInstance("RSA").generateKeyPair();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, keys.getPublic());
byte[] rawData = "top secret".getBytes();
byte[] encrypted = cipher.doFinal(rawData);
cipher.init(Cipher.DECRYPT_MODE, keys.getPrivate());
byte[] decrypted = cipher.doFinal(encrypted);
String notASecretAnyMore = new String(decrypted);
}
private File getFileFor(String filename) {
URL url = getClass().getResource("/rsa_keys/server/"+filename);
File file = new File(url.getFile());
return file;
}
}