package com.rs.tools;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;

/**
 * A class to generate a simple 1024 bit RSA pair
 * 
 * @author Nikki
 */
public class RSAKeyGen {

	public static void main(String[] args) {
		try {
			KeyFactory factory = KeyFactory.getInstance("RSA");
			KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
			keyGen.initialize(1024);
			KeyPair keypair = keyGen.genKeyPair();
			PrivateKey privateKey = keypair.getPrivate();
			PublicKey publicKey = keypair.getPublic();

			RSAPrivateKeySpec privSpec = factory.getKeySpec(privateKey, RSAPrivateKeySpec.class);

			writeKey("rsapriv", privSpec.getModulus(), privSpec.getPrivateExponent());

			RSAPublicKeySpec pubSpec = factory.getKeySpec(publicKey, RSAPublicKeySpec.class);

			writeKey("rsapub", pubSpec.getModulus(), pubSpec.getPublicExponent());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void writeKey(String file, BigInteger modulus, BigInteger exponent) {
		try {
			BufferedWriter writer = new BufferedWriter(new FileWriter(file));
			writer.write("private static final BigInteger RSA_MODULUS = new BigInteger(\"" + modulus.toString() + "\");");
			writer.newLine();
			writer.newLine();
			writer.write("private static final BigInteger RSA_EXPONENT = new BigInteger(\"" + exponent.toString() + "\");");
			writer.newLine();
			writer.flush();
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}