AES, Test Vectors, Unit Testing

My aims for this week are:

  • Resources section for the website.
  • Write up information on AES for potential use in my final write up
  • Introduce unit testing to my project (use it to prove my AES implementation is FIPS-197 compliant).
  • Read up on motion vectors and expand my understanding of how these work.
    • Write up any findings
  • Start work on motion vector manipulation. 

In my previous two posts, I mentioned improvements to the website and the development of an AES cryptosystem.

Firstly, the website. I have added a resources section to upload aspects of my work as the project progresses. However, these resources will likely remain private until the completion of this project.

It turns out that my AES implementation had a bug in it! I found this when attempting to validate it against AES test vectors. This was a simple bug in the key expansion where an int was being treated as a signed int when it should have been an unsigned int.

My AES cryptosystem now validates against test vectors for 128-bit, 192-bit and 256-bit keys. In addition, unit tests have been written using Cunit to validate the cryptosystem.

Image not found

Web path: http://www.steganosaur.us/blog-aes-unit-test.png

Disk path: /static/http://www.steganosaur.us/blog-aes-unit-test.png

Using Page Bundles: false

Image not found

Web path: http://www.steganosaur.us/blog-aes-256-cbc-test-vectors.png

Disk path: /static/http://www.steganosaur.us/blog-aes-256-cbc-test-vectors.png

Using Page Bundles: false

I have also written up a small document on AES (which can be found in the resources section)., explaining exactly how the algorithm works, how it differs from Rijndael, and how the different block modes work. Although I only intend on using the CBC block mode for my project, I have documented how all of the main block modes (ECB, CBC, OFB, CFB) work. This document has been structured and written to be merged/adapted for inclusion in the final project report.

I intend to use the rest of this week to enhance my knowledge of motion vectors before attempting (again) to manipulate motion vectors during the transcode process. Last week I emailed a contributor of the FFmpeg project, and i have been advised to look at libavcodec/motion_est*.c files, this is where motion vectors are chosen - but first I need to read up a bit more on how they work.

Finally, I will investigate my cross-platform issues with audio distortion if I get the time. I have been advised that different floating-point representations on different systems may be a contributing factor. I should look at the configure file for FFmpeg and any compiler flags.

My progress and outlook for the rest of the week for the rest of the week can be summaries as folows:

  • Resources section for the website.
  • Write up information on AES for potential use in my final write up
  • Introduce unit testing to my project (use it to prove my AES implementation is FIPS-197 compliant).
  • Read up on motion vectors and expand my understanding of how these work.
    • Write up any findings
  • Start work on motion vector manipulation.