Assignment for week 6: The goal is to work with a standard (RFC) document and implement test vectors in OpenSSL. Deadline: October 19, 2022 (8:00 AM), maximum is 10 points. Download and study IETF RFC-6070 document PKCS #5: Password-Based Key Derivation Function 2 (PBKDF2) Test Vectors. Write a C Linux program (with support of OpenSSL cryptographic library) that will compute and verify all 6 PBKDF2-SHA1 test vectors described it the RFC document. For each vector print result; stop the program if a test-vector fails. You can use OpenSSL 1.1.x or new EVP KDF provider for OpenSSL3 3.0.x. Then run the same tests (the same input parameters) but switch to PBKDF2-SHA256 and set output key length to 32 bytes. Print derived keys to the screen in hexadecimal format. Of course, the output will differ from the original vectors. Do not validate it in this case - results will be compared during marking. Your submitted archive (zip or tar) should contain one C program (and Makefile) that checks all 6 RFC-6070 vectors and then run all tests mentioned above. The output must contain at least 6 hexadecimal strings (keys) for the PBKDF2-SHA256 variant. The source code must be compilable on the provided virtual machine. (If you use 1.1.x compatible code, then also on aisa server.) Optional bonus +1 point if you implement both API variants (OpenSSL 1.1.x and EVP KDF provider in OpenSSL 3; run each vector twice for both variants). Hints: - start with 3_pbkdf_openssl[3] example (no need to reinvent the wheel) - code quality matters; compiler warnings means points down (-Wall option will be used in Makefile) - "spaghetti" code means at least 2 points down (do not repeat code and use struct/arrays) - use CRYPTO_memcmp from OpenSSL to compare binary data - you can find PBKDF2-SHA256 vectors output on the internet too (just not in RFC) Example of hexadecimal output (additional info is optional): Derived key using 1. vector PBKDF2-SHA256 (P="password", S="salt", c=1, dkLen=32) 12 0f b6 cf fc f8 b3 2c 43 e7 22 52 56 c4 f8 37 a8 65 48 c9 2c cc 35 48 08 05 98 7c b7 0b e1 7b ...