Write a Java application that can be used to encrypt and sign a file to be sent by email. The sender knows the public key of the destination, and has a private key to sign the file. The application can also be used by the receiver to decrypt the file using his private key and to verify the signature using the public key of the sender. Design the application to be efficient (i.e., use a combination of public key crypto and symmteric key crypto). Design and implement your own application. Justify the use of key sizes, algorithms and modes.