The aes* files just provide an implementation of AES. You should not
need to look at these files to do the assignment.

cbcmac.* implements a rudimentary version of basic CBC-MAC. Messages are
padded out to a multiple of the block length by appending sufficiently
many 0-bytes. Real-world implementations of (secure versions of) CBC-MAC
properly handle arbitrary length messages, but we don't bother with this here.

mac.c contains wrapper code for an application running on a server that
receives a 2-block message, computes the (basic) CBC-MAC for that message,
and returns the result.

vrfy.c contains wrapper code for an application running on a server that
receives a message and a tag, verifies whether the tag is correct, and
returns 1 or 0 accordingly. Note that messages having an arbitrary number
of blocks are accepted here. NOTE: You do not need to interact with the
verification routine in order to successfully carry out an attack, but it
allows you to check your answer.

sample.* contains code (in C, Ruby, and Python) demonstrating how to
send a message to the server to obtain a tag (computed using mac.c and
an unknown key k), and how to send a message/tag pair to the server for
verification (relative to the same key k). You can use the file test-msg.txt
for testing this code.

As in the previous assignment, the code above relies on the oracle.* files
to handle networking. You do not need to understand how these files work
for this assignment, you just need to be able to use them.

msg.txt is the message you need to forge a tag on.
