update readme with SHA1

This commit is contained in:
David 2017-09-03 22:21:46 -04:00
parent 3d4d8ecb16
commit adbdc15a2d

View File

@ -1,19 +1,31 @@
# SHAmwow
Sometimes you just want to understand how an algorithm works, so you implement it yourself.
Sometimes you just want to understand how your hashing algorithms works, so you implement them yourself.
The sha2 function in shamwow.rb implements the SHA-256 hashing function in Ruby. shamwow_test.rb contains a few sanity tests for the right-rotate function and for SHA2 itself, testing against the output of the `Digest::SHA2.hexdigest` method in the Ruby standard library.
It should go without saying that this was just for fun, and you should never, ever, _ever_ roll your own cryptography primatives for any purpose other than education!
It should go without saying that this was just for fun, and you should never, ever roll-your-own cryptography primatives for any reasonable purpose!
## sha1
This was fun.
The sha1 function in `shamwow.rb` implements the SHA1 hashing function in Ruby, outputting the 160-bit hash as a hexadecimal string.
## Sources
### sources
* wikipedia's pseudocode breakdown: <https://en.wikipedia.org/wiki/SHA-1#Examples_and_pseudocode>
## sha2
The sha2 function in `shamwow.rb` implements the SHA-256 hashing function in Ruby, outputting the 256-bit hash as a hexadecimal string.
### Sources
* the actual spec: <http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf>
* wikipedia's pseudocode breakdown: <https://en.wikipedia.org/wiki/SHA-2#Pseudocode>
* a JS implementation that helped as I was debugging some boneheaded mistakes: <http://www.movable-type.co.uk/scripts/sha256.html>
## Tests
`shamwow_test.rb` contains a few sanity tests for the bit-rotation functions and for the hashes themselves, testing against the output of the `Digest` gem in the standard library.
## Obligatory
[![ShamWOW](https://img.youtube.com/vi/F3lrhPeK6gU/0.jpg)](https://www.youtube.com/watch?v=F3lrhPeK6gU)