public static void main(String[] args) {
		// Usage analysis on the inputs
		if (args.length != 5) {
			// Output correct usage instructions.
			usageInstruction();

			// Error termination of program.
			System.exit(args.length);
		}

		// Encryption or Decryption decision.
		try {
			if (args[0].equals("-e")) {

				// Generate cipher objects needed for encryption (AES) and
				// signing (RSA)
				try {
					AESCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
					RSACipher = Cipher.getInstance("RSA");
				} catch (GeneralSecurityException e) {
					System.out
							.println("Error in generating ciphers during encryption.");
					e.printStackTrace();
				}

				// Generated AES key for actual file encryption.
				try {
					AESKeyGen = KeyGenerator.getInstance("AES");
				} catch (GeneralSecurityException e) {
					System.out
							.println("Error in generating AES key generation during encryption.");
					e.printStackTrace();
				}
				AESKey = AESKeyGen.generateKey();

				// Function call to encrypt the plaintext file.
				startEncryption(args);
			} else if (args[0].equals("-d")) {

				// Generate cipher objects needed for decryption (AES) and
				// signature verification (RSA)
				try {
					AESCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
					RSACipher = Cipher.getInstance("RSA");
				} catch (GeneralSecurityException e) {
					System.out
							.println("Error in generating cipher objects during decryption.");
					e.printStackTrace();
				}

				// Function call to decrypt the ciphertext file.
				startDecryption(args);
			} else {
				// Output correct usage instructions.
				usageInstruction();
			}
		} catch (IndexOutOfBoundsException iobe) {
			usageInstruction();
		}

		finally {
			// Normal termination.
			System.exit(0);
		}
	} // End of main