Programming Project 3
Requirement: In this project you will implement HMAC (Keyed-hash Message Authentication Code) using SHA-512 as the building block. HMAC with key K of a input message M can be expressed as:
where is the key padded out to block size, which is 1024 bits when we use SHA-512. Here, opad, ipad are specified padding constants, which is specified as follows:
ipad:00110110 (36 in hexidecimal) repeated by 1024/8=128 times;
opad:01011100 (5C in hexidecimal) repeated by 1024/8=128 times.
We can describe the HMAC algorithm as follows:
1. Append zeros to the end of K to create a b-bit string (e.g., if K is of length 160 bits, and b = 1024 bits, then K will be appended with 864 bits of zeros to the end of K).
2. XOR (bitwise exclusive-or ) with ipad to produce b-bit block Si.
3. Append input message M to Si.
4. Apply hash to the stream generated in step 3.
5. XOR with opad to produce the b-bit block So.
6. Append the hash output from step 4 to So.
7. Apply hash to the stream generated in step 6 to produce the output of HMAC.
After computing the HMAC with key K of an input message M, print it on the screen in hexadecimal format, also store the HMAC output in the output file. Your program should take three arguments: an input file name, an output HMAC file, and a key. For example, you may use the following command to compute an HMAC for the file "text1", with the HMAC output stored in the file text1-hmac, using the key hmac123456: HMAC_gen text1 text1-hmac hmac123456.
If you want to use a longer key, like a key more than 512 bits, it is recommended that you put the key in a file. (Optional: you can use SHA-512 to hash the key entered in the command line to get a longer key to be used in the HMAC algorithm).
You do not need to implement SHA-512 yourself. For an implementation of SHA-512, you can use an existing crypto library, Crypto++ (C++) in this project, which is installed on the virtual machine. While you are using the built-in SHA-512 functions provided by Crypto++ library, you are required to implement HMAC yourself in this program assignment. The tutorial about how to use the SHA-512 function of Crypto++ library is provided in the end of this document.
You can find 5 test files: MSG1, MSG2, MSG3, text1, and hw2.pdf.gz. Please copy all those files to your directory.
Tutorial to use the SHA-512 function in the crypto library Crypto++:
1. In order to use the crypto library, in your C++ source program (e.g., [url removed, login to view]), you need to include the right library files, and use the right namespace as follows.
2. How to compile your source program:
g++ -o test1 -L. [url removed, login to view] -lcryptopp
-L. : search library file in current directory and the specified directories.
-lcryptopp : link CryptoPP library.
Here, [url removed, login to view] is the source cpp file name to be compiled.
3. The tool function to perform SHA-512 is illustrated as follows.
string sha_digest(string & plain)
StringSource(plain, true, new HashFilter(hash, new StringSink(sha512digest) ) );
4. Using the following function call to compute the hash output of the input message:
string output512digest = sha_digest(plain)
Here, plain is the input message stored in a string.
Bu iş için 12 freelancer ortalamada $86 teklif veriyor
I am very proficient in c and c++. I have 16 years c++ developing experience now, and have worked for more than 7 years. My work is online game developing, and mainly focus on server side, using c++ under Linux environ Daha Fazla
Hello! Please check my reviews to know a bit about me and my work. Thank you!
Hi! I'm a senior software engineer and I'm familiar with this kind of projects as I've done quite a lot of them in here. I can deliver your code (including comments) very quickly. Thank you for considering me.
I am working with C++ for some time now. It is not my first language but in my first one (python) I have experiance with hash functions. If you will chose me I guarantee you a well written code that is made with high a Daha Fazla
hi , i am an experienced C,C++ programmer and developed codes in windows , linux and mac os x platforms using IDEs like Visual studio, Eclipse, Codeblocks . u can visit my profile to view my related tasks.
I have been working as a software for more than one and half year on C++ and having good knowledge of algorithms and data structures and good problem solving skills.