Assignment for week 8: The goal is to study and use OpenSSL API on two tasks - generate an RSA key pair and use I/O (BIO) abstraction.. Deadline: November 2, 2022 (8:00 AM), maximum is 5+5 points. Write two programs using OpenSSL library on Linux. 1) Create a program that generates 4096 bit RSA key with public exponent 65537 and print private and public output to the screen (in any form you want, but PEM is preferred). Hints: - You can use OpenSSL3 API, then see example 9 and adapt it to RSA. - If you want to stay with OpenSSL1, use RSA_generate_key_ex() function. - Use PEM_read/write_PrivateKey or BIO based PEM_read/write_bio_PrivateKey (the same for public key). - Use OpenSSL documentation and man pages for functions description. 2) Create a program that decodes string below from BASE64 encoding, then decrypts it, and prints the plaintext to the standard output. The ciphertext is BASE64 encoded, encrypted by AES-128 cipher in CBC mode with padding. The ciphertext is defined by this C array: const char *ENC = "d21y+1uAWqh5juGqJL2snNINI58SV3PTpZWaM4cC6QfJMyndZ7HQS5yl5Zy36RXk\n" "C5rsqlOdWXT8neXXcE8+U+l7I17j7Ytn/9p3UFHT1raYlZFAWgvXNyqymU2NlMWm\n" "cjMmKqqxJ7pWHzFzKGdrTABxRFTuzWg3yWKK+dd7XtQnW2CUxlorF7qPG5vj1WEX\n" "bDfBc4u02hRyS04okGBqsSYpn2BmOJ8XbeKaPmTu1pSytouJuMB5LrVdT9evklDY\n" "3SH+tCcM26aCduGVHwakTnB6sU61JeIL/d8kC68nZsYoL6u4LZppCJSVnGgQgSNs\n" "TVUXaJfauOTjjbvPFPm1x+NJJy7hVXjHX/kElwNXCmE="; The KEY is "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff" and IV is "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f" (in C string notation). Hints: - You should use BIO abstraction, notably BIO_f_cipher() and BIO_f_base64() pushed to the BIO stack and then use BIO_read(). - The plaintext is ASCIIart image, so you can print it directly to terminal. Your submitted archive should contain *two* C programs above and Makefiles. The source code must be compilable on the provided virtual machine or on aisa server.