Mhash library wrapper for Ruby.
You need mhash libray installed.
$ sudo apt-get install libmhash-dev
# cd /usr/ports/security/mhash
# make install
Tested with Ruby:
- 1.8.7
- 1.9.2
- 1.9.3
- 2.0.0
- 2.1.0
You have to setup rubygems.
gem install mhash
or in Gemfile (Bundler):
gem 'mhash'
git clone https://github.com/TibshoOT/ruby-mhash.git
cd ruby-mhash/etx/mhash
[edit source files]
ruby extconf.rb
make
irb -r ./mhash.so
[test it !]
[pull request]
These are implemented hashes with their methods:
Hash name (default bit-length) | digest method | hexdigest method |
---|---|---|
CRC32 | Mhash.crc32("a simple test !") | Mhash.crc32!("a simple test !") |
MD5 (128) | Mhash.md5("a simple test !") | Mhash.md5!("a simple test !") |
SHA1 | Mhash.sha1("a simple test !") | Mhash.sha1!("a simple test !") |
HAVAL256 | Mhash.haval256("a simple test !") | Mhash.haval256!("a simple test !") |
RIPEMD160 | Mhash.ripemd160("a simple test !") | Mhash.ripemd160!("a simple test !") |
TIGER192 | Mhash.tiger192("a simple test !") | Mhash.tiger192!("a simple test !") |
GOST (512) | Mhash.gost("a simple test !") | Mhash.gost!("a simple test !") |
CRC32B | Mhash.crc32b("a simple test !") | Mhash.crc32b!("a simple test !") |
HAVAL224 | Mhash.haval224("a simple test !") | Mhash.haval224!("a simple test !") |
HAVAL192 | Mhash.haval192("a simple test !") | Mhash.haval192!("a simple test !") |
HAVAL160 | Mhash.haval160("a simple test !") | Mhash.haval160!("a simple test !") |
HAVAL128 | Mhash.haval128("a simple test !") | Mhash.haval128!("a simple test !") |
TIGER128 | Mhash.tiger128("a simple test !") | Mhash.tiger128!("a simple test !") |
TIGER160 | Mhash.tiger160("a simple test !") | Mhash.tiger160!("a simple test !") |
MD4 (128) | Mhash.md4("a simple test !") | Mhash.md4!("a simple test !") |
SHA256 | Mhash.sha256("a simple test !") | Mhash.sha256!("a simple test !") |
ADLER32 | Mhash.adler32("a simple test !") | Mhash.adler32!("a simple test !") |
SHA224 | Mhash.sha224("a simple test !") | Mhash.sha224!("a simple test !") |
SHA512 | Mhash.sha512("a simple test !") | Mhash.sha512!("a simple test !") |
SHA384 | Mhash.sha384("a simple test !") | Mhash.sha384!("a simple test !") |
WHIRLPOOL (512) | Mhash.whirlpool("a simple test !") | Mhash.whirlpool!("a simple test !") |
RIPEMD128 | Mhash.ripemd128("a simple test !") | Mhash.ripemd128!("a simple test !") |
RIPEMD256 | Mhash.ripemd256("a simple test !") | Mhash.ripemd256!("a simple test !") |
RIPEMD320 | Mhash.ripemd320("a simple test !") | Mhash.ripemd320!("a simple test !") |
SNEFRU128 | Mhash.snefru128("a simple test !") | Mhash.snefru128!("a simple test !") |
SNEFRU256 | Mhash.snefru256("a simple test !") | Mhash.snefru256!("a simple test !") |
MD2 (128) | Mhash.md2("a simple test !") | Mhash.md2!("a simple test !") |
You can find all available hashes doing this:
require 'mhash'
Mhash.constants
=> [:MHASH_CRC32, :MHASH_MD5, :MHASH_SHA1, :MHASH_HAVAL256, :MHASH_RIPEMD160,
:MHASH_TIGER192, :MHASH_GOST, :MHASH_CRC32B, :MHASH_HAVAL224, :MHASH_HAVAL192,
:MHASH_HAVAL160, :MHASH_HAVAL128, :MHASH_TIGER128, :MHASH_TIGER160, :MHASH_MD4,
:MHASH_SHA256, :MHASH_ADLER32, :MHASH_SHA224, :MHASH_SHA512, :MHASH_SHA384,
:MHASH_WHIRLPOOL, :MHASH_RIPEMD128, :MHASH_RIPEMD256, :MHASH_RIPEMD320,
:MHASH_SNEFRU128, :MHASH_SNEFRU256, :MHASH_MD2, :VERSION]
If you just want to have a nibble digest:
require 'mhash'
hash = Mhash.gost("Hello\n\n")
puts hash
=> "\x89\r\x02\xF9*\xF7\xD7V\x82\xD4\xC3\x15\xEC\xA2\xF5\x8E~\x9E\xD0\x8D\xFC\xF1\xC0O\xC4\x16\xB0HOE\x1D\x8D"
If you want an hexdigest:
require 'mhash'
# Using gost nibble digest as previously:
hash = Mhash.gost("Hello\n\n").unpack("H*").first
puts hash
=> "890d02f92af7d75682d4c315eca2f58e7e9ed08dfcf1c04fc416b0484f451d8d"
# Using ! methods:
hash = Mhash.gost!("Hello\n\n")
puts hash
=> "890d02f92af7d75682d4c315eca2f58e7e9ed08dfcf1c04fc416b0484f451d8d"
Open an issue ;)