Assignment for week 7: The goal is to implement a simple tool for symmetric encryption of a file with OpenSSL. Deadline: October 26, 2022 (8:00 AM), maximum is 10 points. Create a simple program that encrypts and decrypts an arbitrary file with AES-128 in CBC mode (using OpenSSL library) with fixed key: 00112233445566778899aabbccddeeff (in hexa) and fixed IV: 00000000000000000000000000000008 (in hexa). Your submitted archive (zip or tar) should contain one C program (and Makefile). Hints: - File names (input, output) and command (encrypt, decrypt) should be taken from command line arguments. - To access the file, use C library functions (open/read/write). Do NOT use BIO abstraction in OpenSSL. You can use a preallocated file buffer for the whole file in memory; test files will not be bigger than 64 MiB. Expect that file access functions can fail (and it will fail in test scenarios). - Plaintext file can contain binary data (or it can be empty), do not expect only text there. - Properly handle errors. The file can be empty or not accessible; memory allocation can fail etc. - Do NOT use padding for encryption. The encrypted file MUST be the same size as the input. It means, that input file size must be aligned to cipher encryption blocks (see EVP_CIPHER_CTX_set_padding or OSSL_CIPHER_PARAM_PADDING params option). If the file is not properly aligned, fail the operation and print an error. - You can use new OpenSSL3 API, but it is not mandatory. The source code must be compilable on the provided virtual machine. You can also use aisa server (then you can use only OpenSSL1 compatible API).