import java.io.*;

import java.security.*;

class GeneraFirmaLRYS {
	public static void main(String [] args) {
		if(args.length != 1) {
			System.out.println("Sintaxis del programa: GeneraFirmaLRYS ArchivoaFirmar.txt");

		}

		else

			try {

				KeyPairGenerator
 genClave = KeyPairGenerator.getInstance("RSA");
				SecureRandom aleatorio = SecureRandom.getInstance("SHA1PRNG", "SUN");

				genClave.initialize(1024, aleatorio);

				KeyPair pardeClaves = genClave.generateKeyPair();

				PrivateKey privada = pardeClaves.getPrivate();

				PublicKey publica = pardeClaves.getPublic();

				Signature firma = Signature.getInstance("MD5withRSA");

				firma.initSign(privada);

				FileInputStream archivo = new FileInputStream(args[0]);

				BufferedInputStream buferEntrada = new BufferedInputStream(archivo);

				byte[] buffer = new byte[1024];

				int longitud;

				while(buferEntrada.available() != 0) {

					longitud = buferEntrada.read(buffer);

					firma.update(buffer, 0, longitud);

				}

				buferEntrada.close();

				byte[] firmaReal = firma.sign();

				FileOutputStream archivoFirma = new FileOutputStream("FirmaLRYS.bin");

				archivoFirma.write(firmaReal);

				archivoFirma.close();

				byte[] clave = publica.getEncoded();

				FileOutputStream clavePublica = new FileOutputStream("ClavePublicaLRYS.bin");

				clavePublica.write(clave);

				clavePublica.close();

			}

			catch(Exception e) {

				System.out.println("El error es " + e);

			}

	}

}