
import java.io.File;
/**
 * Clase que crea los objetos necesarios para invocar la encriptacion de archivos usando el algoritmo AES
 * y llaves de tipo algoritmo RSA.
 * @author José Antonio Silva, Mario Ungemach, Jorge Mellings
 */
public class MainFEencrypt {
/**
 * objeto utilizado para almacenar el archivo de la llave AES que esta encriptada con llave publica RSA
 */
static File encryptedKeyFile;
/**
 * objeto utilizado para almacenar el archivo de la llave publica RSA
 */
static File publicKeyFile;
/**
 * objeto utilizado para almacenar el archivo que será encriptado con AES
 */
static File fileToEncrypt;
/**
 * objeto utilizado para almacenar el archivo encriptado con AES
 */
static File encryptedFile;
/**
 * objeto utilizado para invocar los metodos de encriptacion.
 */
static FileEncryption secure;

 /**
 * Constructor de la clase MainFEencrypt, crea los objetos
 * para desencriptar e invoca a la clase FileEncryption para utilizar los
 * metodos para realizar la encriptacion.
 * @param fTE archivo donde se lee la información del archivo a encriptar
 */
    MainFEencrypt (String fTE)
     {
        	        //archivo que guarda llave AES encriptada con llave publica RSA
		        encryptedKeyFile = new File("encryptedKeyFile.txt");
		        //archivo que guarda la llave RSA publica
                        publicKeyFile = new File("public.der");

                        //archivo a ser encriptado
			fileToEncrypt = new File(fTE);

                        //archivo resultante de encriptar fileToEncypt con AES
                        encryptedFile = new File("encryptedFile.txt");//out


			try{
                            //Creamos el objeto secure, con el cual invocaremos los metodos para
                        //encrypt y manejo de llaves
			secure = new FileEncryption();

                        //invocamos al metodo makeKey(), el cual generara la llave AES
			secure.makeKey();

                        //Invocamos el metodo saveKey, con el archivo que tiene la llave AES no encriptada
                        //y con la llave publica RSA para encriptar el archivo
			secure.saveKey(encryptedKeyFile, publicKeyFile);

                        //Invocamos el metodo encrypt el cual encripta el archivo con el algoritmo AES
                        //y el contenido encriptado lo guarda en el archivo encryptedFile
                        secure.encrypt(fileToEncrypt, encryptedFile);

		     }
			  catch
			  (Exception e)
        			{
             //Arroja la exepcion  en caso que ocurra un error al abrir o escribir en algun archivo
            //dentro del manejo con el objeto secure.
            e.printStackTrace();
			  }
    }
}
