The last week wasn’t that productive, although I still learned a lot, mainly theory, about different hashing techniques. Did you know what are “nothing up my sleeve numbers” or Chaitin-Kolmogorov random numbers? Anyway, after looking more closely at the MD5 algorithm and consultation with my boss, we decided in the middle of the week that I should rather focus on SHA1 algorithm for now. The reason is simple, the later seems to be more implementation friendly and require less memory as well as other hardware resources.
By the end of the week I have finished the hardest (for me) part which was… not the actual hashing operation. The most difficult task turned out to be the padding procedure (people who know a bit about hashing know what is it for). There are some nasty details that need to be taken care of, like appending a single ‘1’ bit at the end or creating an extra block full of zeros if the file_size modulo 512 is higher than 447. Except for some flaws in the design that were connected with too “software” thinking and could decrease performance (not functionality though) this part was finished, but… I had to remove it. We agreed that because of its complexity it would be easier and more efficient to take care of the padding in software and just provide the hashing module with properly formatted data.
Plan for the next week is to finish (like completely, including testbenches and real-life testing) the whole SHA1 module.