/PureAES

Pure C implementation of AES-128/192/256 from scratch.

Primary LanguageCGNU General Public License v3.0GPL-3.0

PureAES

The goal for this project is to implement the Advanced Encryption Standard (a special case of Rijndael Cipher) for 128/192/256 bit key sizes in Pure C. Why Pure C? Because it's fast, portable and fun! (Well, maybe not fun for everyone, but definitely for me). This project is also my first cryptography project, so please don't judge me too harshly if I mess up something. I followed the specifications from FIPS 197 and used some test vectors from NIST. I also followed through some Abstract Number Theory, Abstract Algebra for the intuition behind working in the Galois Field or just Fields in general. The code is not optimized for speed or security, but rather for readability and simplicity. I hope you find it useful (probably not) and feel free to give me feedback or suggestions.

To implement later

  • Implement major block cipher mode of operations.
  • Utilize the Intel's AES-NI (AES New Instructions) to efficiency and protection from side channel attacks. Either employing the instrinsics or inline-assembly provided in GCC (GNU C Compiler) for the x86_x64 arch instruction set.

I hope to complete this before the end start of my semester.