mhash 1.1 → 1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +170 -35
- data/ext/mhash/module_definitions.c +6 -0
- data/ext/mhash/module_functions.c +29 -2
- data/ext/mhash/module_functions.h +6 -0
- data/lib/mhash.rb +1 -1
- data/mhash.gemspec +1 -1
- metadata +3 -3
data/README.md
CHANGED
@@ -30,7 +30,11 @@ You have to setup rubygems.
|
|
30
30
|
|
31
31
|
gem install mhash
|
32
32
|
|
33
|
-
or
|
33
|
+
or in Gemfile (Bundler):
|
34
|
+
|
35
|
+
gem 'mhash'
|
36
|
+
|
37
|
+
## Development/Debug
|
34
38
|
|
35
39
|
git clone https://github.com/TibshoOT/ruby-mhash.git
|
36
40
|
cd ruby-mhash/etx/mhash
|
@@ -39,58 +43,189 @@ or for development:
|
|
39
43
|
make
|
40
44
|
irb -r ./mhash.so
|
41
45
|
[test it !]
|
46
|
+
[pull request]
|
42
47
|
|
43
48
|
|
44
49
|
## Documentation
|
45
50
|
|
46
|
-
|
47
|
-
|
48
|
-
|
51
|
+
These are implemented hashes with their methods:
|
52
|
+
|
53
|
+
<table>
|
54
|
+
<tr>
|
55
|
+
<th>Cipher (Mhash contanst)</th>
|
56
|
+
<th>digest method</th>
|
57
|
+
<th>hexdigest method</th>
|
58
|
+
</tr>
|
59
|
+
<tr>
|
60
|
+
<th>CRC32</th>
|
61
|
+
<td>Mhash.crc32("a simple test !")</td>
|
62
|
+
<td>Mhash.crc32!("a simple test !")</td>
|
63
|
+
</tr>
|
64
|
+
<tr>
|
65
|
+
<th>MD5</th>
|
66
|
+
<td>Mhash.md5("a simple test !")</td>
|
67
|
+
<td>Mhash.md5!("a simple test !")</td>
|
68
|
+
</tr>
|
69
|
+
<tr>
|
70
|
+
<th>SHA1</th>
|
71
|
+
<td>Mhash.sha1("a simple test !")</td>
|
72
|
+
<td>Mhash.sha1!("a simple test !")</td>
|
73
|
+
</tr>
|
74
|
+
<tr>
|
75
|
+
<th>HAVAL256</th>
|
76
|
+
<td>Mhash.haval256("a simple test !")</td>
|
77
|
+
<td>Mhash.haval256!("a simple test !")</td>
|
78
|
+
</tr>
|
79
|
+
<tr>
|
80
|
+
<th>RIPEMD160</th>
|
81
|
+
<td>Mhash.ripemd160("a simple test !")</td>
|
82
|
+
<td>Mhash.ripemd160!("a simple test !")</td>
|
83
|
+
</tr>
|
84
|
+
<tr>
|
85
|
+
<th>TIGER192</th>
|
86
|
+
<td>Mhash.tiger192("a simple test !")</td>
|
87
|
+
<td>Mhash.tiger192!("a simple test !")</td>
|
88
|
+
</tr>
|
89
|
+
<tr>
|
90
|
+
<th>GOST</th>
|
91
|
+
<td>Mhash.gost("a simple test !")</td>
|
92
|
+
<td>Mhash.gost!("a simple test !")</td>
|
93
|
+
</tr>
|
94
|
+
<tr>
|
95
|
+
<th>CRC32B</th>
|
96
|
+
<td>Mhash.crc32b("a simple test !")</td>
|
97
|
+
<td>Mhash.crc32b!("a simple test !")</td>
|
98
|
+
</tr>
|
99
|
+
<tr>
|
100
|
+
<th>HAVAL224</th>
|
101
|
+
<td>Mhash.haval224("a simple test !")</td>
|
102
|
+
<td>Mhash.haval224!("a simple test !")</td>
|
103
|
+
</tr>
|
104
|
+
<tr>
|
105
|
+
<th>HAVAL192</th>
|
106
|
+
<td>Mhash.haval192("a simple test !")</td>
|
107
|
+
<td>Mhash.haval192!("a simple test !")</td>
|
108
|
+
</tr>
|
109
|
+
<tr>
|
110
|
+
<th>HAVAL160</th>
|
111
|
+
<td>Mhash.haval160("a simple test !")</td>
|
112
|
+
<td>Mhash.haval160!("a simple test !")</td>
|
113
|
+
</tr>
|
114
|
+
<tr>
|
115
|
+
<th>HAVAL128</th>
|
116
|
+
<td>Mhash.haval128("a simple test !")</td>
|
117
|
+
<td>Mhash.haval128!("a simple test !")</td>
|
118
|
+
</tr>
|
119
|
+
<tr>
|
120
|
+
<th>TIGER128</th>
|
121
|
+
<td>Mhash.tiger128("a simple test !")</td>
|
122
|
+
<td>Mhash.tiger128!("a simple test !")</td>
|
123
|
+
</tr>
|
124
|
+
<tr>
|
125
|
+
<th>TIGER160</th>
|
126
|
+
<td>Mhash.tiger160("a simple test !")</td>
|
127
|
+
<td>Mhash.tiger160!("a simple test !")</td>
|
128
|
+
</tr>
|
129
|
+
<tr>
|
130
|
+
<th>SHA256</th>
|
131
|
+
<td>Mhash.sha256("a simple test !")</td>
|
132
|
+
<td>Mhash.sha256!("a simple test !")</td>
|
133
|
+
</tr>
|
134
|
+
<tr>
|
135
|
+
<th>ADLER32</th>
|
136
|
+
<td>Mhash.adler32("a simple test !")</td>
|
137
|
+
<td>Mhash.adler32!("a simple test !")</td>
|
138
|
+
</tr>
|
139
|
+
<tr>
|
140
|
+
<th>SHA224</th>
|
141
|
+
<td>Mhash.sha224("a simple test !")</td>
|
142
|
+
<td>Mhash.sha224!("a simple test !")</td>
|
143
|
+
</tr>
|
144
|
+
<tr>
|
145
|
+
<th>SHA512</th>
|
146
|
+
<td>Mhash.sha512("a simple test !")</td>
|
147
|
+
<td>Mhash.sha512!("a simple test !")</td>
|
148
|
+
</tr>
|
149
|
+
<tr>
|
150
|
+
<th>SHA384</th>
|
151
|
+
<td>Mhash.sha384("a simple test !")</td>
|
152
|
+
<td>Mhash.sha384!("a simple test !")</td>
|
153
|
+
</tr>
|
154
|
+
<tr>
|
155
|
+
<th>WHIRLPOOL</th>
|
156
|
+
<td>Mhash.whirlpool("a simple test !")</td>
|
157
|
+
<td>Mhash.whirlpool!("a simple test !")</td>
|
158
|
+
</tr>
|
159
|
+
<tr>
|
160
|
+
<th>RIPEMD128</th>
|
161
|
+
<td>Mhash.ripemd128("a simple test !")</td>
|
162
|
+
<td>Mhash.ripemd128!("a simple test !")</td>
|
163
|
+
</tr>
|
164
|
+
<tr>
|
165
|
+
<th>RIPEMD256</th>
|
166
|
+
<td>Mhash.ripemd256("a simple test !")</td>
|
167
|
+
<td>Mhash.ripemd256!("a simple test !")</td>
|
168
|
+
</tr>
|
169
|
+
<tr>
|
170
|
+
<th>RIPEMD320</th>
|
171
|
+
<td>Mhash.ripemd320("a simple test !")</td>
|
172
|
+
<td>Mhash.ripemd320!("a simple test !")</td>
|
173
|
+
</tr>
|
174
|
+
<tr>
|
175
|
+
<th>SNEFRU128</th>
|
176
|
+
<td>Mhash.snefru128("a simple test !")</td>
|
177
|
+
<td>Mhash.snefru128!("a simple test !")</td>
|
178
|
+
</tr>
|
179
|
+
<tr>
|
180
|
+
<th>SNEFRU256</th>
|
181
|
+
<td>Mhash.snefru256("a simple test !")</td>
|
182
|
+
<td>Mhash.snefru256!("a simple test !")</td>
|
183
|
+
</tr>
|
184
|
+
</table>
|
185
|
+
|
186
|
+
### Examples
|
187
|
+
|
188
|
+
You can find all available hashes doing this:
|
49
189
|
|
50
190
|
```ruby
|
51
191
|
|
52
192
|
require 'mhash'
|
53
193
|
|
54
|
-
Mhash.
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
Mhash.gost("this is a test !")
|
62
|
-
Mhash.crc32b("this is a test !")
|
63
|
-
Mhash.haval224("this is a test !")
|
64
|
-
Mhash.haval192("this is a test !")
|
65
|
-
Mhash.haval160("this is a test !")
|
66
|
-
Mhash.haval128("this is a test !")
|
67
|
-
Mhash.tiger128("this is a test !")
|
68
|
-
Mhash.tiger160("this is a test !")
|
69
|
-
Mhash.sha256("this is a test !")
|
70
|
-
Mhash.adler32("this is a test !")
|
71
|
-
Mhash.sha224("this is a test !")
|
72
|
-
Mhash.sha512("this is a test !")
|
73
|
-
Mhash.sha384("this is a test !")
|
74
|
-
Mhash.whirlpool("this is a test !")
|
75
|
-
Mhash.ripemd128("this is a test !")
|
76
|
-
Mhash.ripemd256("this is a test !")
|
77
|
-
Mhash.ripemd320("this is a test !")
|
78
|
-
Mhash.snefru128("this is a test !")
|
79
|
-
Mhash.snefru256("this is a test !")
|
80
|
-
|
194
|
+
Mhash.constant
|
195
|
+
=> [:MHASH_CRC32, :MHASH_MD5, :MHASH_SHA1, :MHASH_HAVAL256, :MHASH_RIPEMD160,
|
196
|
+
:MHASH_TIGER192, :MHASH_GOST, :MHASH_CRC32B, :MHASH_HAVAL224, :MHASH_HAVAL192,
|
197
|
+
:MHASH_HAVAL160, :MHASH_HAVAL128, :MHASH_TIGER128, :MHASH_TIGER160, :MHASH_SHA256,
|
198
|
+
:MHASH_ADLER32, :MHASH_SHA224, :MHASH_SHA512, :MHASH_SHA384, :MHASH_WHIRLPOOL,
|
199
|
+
:MHASH_RIPEMD128, :MHASH_RIPEMD256, :MHASH_RIPEMD320, :MHASH_SNEFRU128,
|
200
|
+
:MHASH_SNEFRU256, :VERSION]
|
81
201
|
```
|
82
202
|
|
83
|
-
|
203
|
+
If you just want to have a nibble digest:
|
84
204
|
|
85
205
|
```ruby
|
86
206
|
|
87
207
|
require 'mhash'
|
88
208
|
|
89
|
-
hash = Mhash.gost("
|
90
|
-
|
209
|
+
hash = Mhash.gost("Hello\n\n")
|
210
|
+
puts hash
|
211
|
+
=> "\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"
|
91
212
|
```
|
92
213
|
|
93
|
-
|
214
|
+
If you want an hexdigest:
|
215
|
+
|
216
|
+
```ruby
|
217
|
+
|
218
|
+
require 'mhash'
|
219
|
+
|
220
|
+
# Using gost nibble digest as previously:
|
221
|
+
hash = Mhash.gost("Hello\n\n").unpack("H*").first
|
222
|
+
puts hash
|
223
|
+
=> "890d02f92af7d75682d4c315eca2f58e7e9ed08dfcf1c04fc416b0484f451d8d"
|
224
|
+
# Using ! methods:
|
225
|
+
hash = Mhash.gost!("Hello\n\n")
|
226
|
+
puts hash
|
227
|
+
=> "890d02f92af7d75682d4c315eca2f58e7e9ed08dfcf1c04fc416b0484f451d8d"
|
228
|
+
```
|
94
229
|
|
95
230
|
## Want a feature ? Problem ?
|
96
231
|
|
@@ -18,6 +18,7 @@ void mhash_define_consts(VALUE *m_mhash)
|
|
18
18
|
rb_define_const(*m_mhash, "MHASH_HAVAL128", INT2NUM(13));
|
19
19
|
rb_define_const(*m_mhash, "MHASH_TIGER128", INT2NUM(14));
|
20
20
|
rb_define_const(*m_mhash, "MHASH_TIGER160", INT2NUM(15));
|
21
|
+
rb_define_const(*m_mhash, "MHASH_MD4", INT2NUM(16));
|
21
22
|
rb_define_const(*m_mhash, "MHASH_SHA256", INT2NUM(17));
|
22
23
|
rb_define_const(*m_mhash, "MHASH_ADLER32", INT2NUM(18));
|
23
24
|
rb_define_const(*m_mhash, "MHASH_SHA224", INT2NUM(19));
|
@@ -29,6 +30,7 @@ void mhash_define_consts(VALUE *m_mhash)
|
|
29
30
|
rb_define_const(*m_mhash, "MHASH_RIPEMD320", INT2NUM(25));
|
30
31
|
rb_define_const(*m_mhash, "MHASH_SNEFRU128", INT2NUM(26));
|
31
32
|
rb_define_const(*m_mhash, "MHASH_SNEFRU256", INT2NUM(27));
|
33
|
+
rb_define_const(*m_mhash, "MHASH_MD2", INT2NUM(28));
|
32
34
|
}
|
33
35
|
|
34
36
|
void mhash_define_functions(VALUE *m_mhash)
|
@@ -63,6 +65,8 @@ void mhash_define_functions(VALUE *m_mhash)
|
|
63
65
|
rb_define_module_function(*m_mhash, "tiger128!", mhash_rb_tiger128_hex, 1);
|
64
66
|
rb_define_module_function(*m_mhash, "tiger160", mhash_rb_tiger160, 1);
|
65
67
|
rb_define_module_function(*m_mhash, "tiger160!", mhash_rb_tiger160_hex, 1);
|
68
|
+
rb_define_module_function(*m_mhash, "md4", mhash_rb_md4, 1);
|
69
|
+
rb_define_module_function(*m_mhash, "md4!", mhash_rb_md4_hex, 1);
|
66
70
|
rb_define_module_function(*m_mhash, "sha256", mhash_rb_sha256, 1);
|
67
71
|
rb_define_module_function(*m_mhash, "sha256!", mhash_rb_sha256_hex, 1);
|
68
72
|
rb_define_module_function(*m_mhash, "adler32", mhash_rb_adler32, 1);
|
@@ -85,4 +89,6 @@ void mhash_define_functions(VALUE *m_mhash)
|
|
85
89
|
rb_define_module_function(*m_mhash, "snefru128!", mhash_rb_snefru128_hex, 1);
|
86
90
|
rb_define_module_function(*m_mhash, "snefru256", mhash_rb_snefru256, 1);
|
87
91
|
rb_define_module_function(*m_mhash, "snefru256!", mhash_rb_snefru256_hex, 1);
|
92
|
+
rb_define_module_function(*m_mhash, "md2", mhash_rb_md2, 1);
|
93
|
+
rb_define_module_function(*m_mhash, "md2!", mhash_rb_md2_hex, 1);
|
88
94
|
}
|
@@ -61,7 +61,6 @@ VALUE mhash_rb_crc32_hex(VALUE self, VALUE data_to_hash)
|
|
61
61
|
return (hash);
|
62
62
|
}
|
63
63
|
|
64
|
-
|
65
64
|
VALUE mhash_rb_md5(VALUE self, VALUE data_to_hash)
|
66
65
|
{
|
67
66
|
return (mhash_rb_digest(self, INT2NUM(1), data_to_hash));
|
@@ -76,7 +75,6 @@ VALUE mhash_rb_md5_hex(VALUE self, VALUE data_to_hash)
|
|
76
75
|
return (hash);
|
77
76
|
}
|
78
77
|
|
79
|
-
|
80
78
|
VALUE mhash_rb_sha1(VALUE self, VALUE data_to_hash)
|
81
79
|
{
|
82
80
|
return (mhash_rb_digest(self, INT2NUM(2), data_to_hash));
|
@@ -161,6 +159,7 @@ VALUE mhash_rb_crc32b_hex(VALUE self, VALUE data_to_hash)
|
|
161
159
|
data_to_hash));
|
162
160
|
return (hash);
|
163
161
|
}
|
162
|
+
|
164
163
|
VALUE mhash_rb_haval224(VALUE self, VALUE data_to_hash)
|
165
164
|
{
|
166
165
|
return (mhash_rb_digest(self, INT2NUM(10), data_to_hash));
|
@@ -245,6 +244,20 @@ VALUE mhash_rb_tiger160_hex(VALUE self, VALUE data_to_hash)
|
|
245
244
|
return (hash);
|
246
245
|
}
|
247
246
|
|
247
|
+
VALUE mhash_rb_md4(VALUE self, VALUE data_to_hash)
|
248
|
+
{
|
249
|
+
return (mhash_rb_digest(self, INT2NUM(16), data_to_hash));
|
250
|
+
}
|
251
|
+
|
252
|
+
VALUE mhash_rb_md4_hex(VALUE self, VALUE data_to_hash)
|
253
|
+
{
|
254
|
+
VALUE hash;
|
255
|
+
|
256
|
+
hash = mhash_rb_hexdigest(self, mhash_rb_digest(self, INT2NUM(16),
|
257
|
+
data_to_hash));
|
258
|
+
return (hash);
|
259
|
+
}
|
260
|
+
|
248
261
|
VALUE mhash_rb_sha256(VALUE self, VALUE data_to_hash)
|
249
262
|
{
|
250
263
|
return (mhash_rb_digest(self, INT2NUM(17), data_to_hash));
|
@@ -398,3 +411,17 @@ VALUE mhash_rb_snefru256_hex(VALUE self, VALUE data_to_hash)
|
|
398
411
|
data_to_hash));
|
399
412
|
return (hash);
|
400
413
|
}
|
414
|
+
|
415
|
+
VALUE mhash_rb_md2(VALUE self, VALUE data_to_hash)
|
416
|
+
{
|
417
|
+
return (mhash_rb_digest(self, INT2NUM(28), data_to_hash));
|
418
|
+
}
|
419
|
+
|
420
|
+
VALUE mhash_rb_md2_hex(VALUE self, VALUE data_to_hash)
|
421
|
+
{
|
422
|
+
VALUE hash;
|
423
|
+
|
424
|
+
hash = mhash_rb_hexdigest(self, mhash_rb_digest(self, INT2NUM(28),
|
425
|
+
data_to_hash));
|
426
|
+
return (hash);
|
427
|
+
}
|
@@ -46,6 +46,9 @@
|
|
46
46
|
VALUE mhash_rb_tiger160(VALUE self, VALUE data_to_hash);
|
47
47
|
VALUE mhash_rb_tiger160_hex(VALUE self, VALUE data_to_hash);
|
48
48
|
|
49
|
+
VALUE mhash_rb_md4(VALUE self, VALUE data_to_hash);
|
50
|
+
VALUE mhash_rb_md4_hex(VALUE self, VALUE data_to_hash);
|
51
|
+
|
49
52
|
VALUE mhash_rb_sha256(VALUE self, VALUE data_to_hash);
|
50
53
|
VALUE mhash_rb_sha256_hex(VALUE self, VALUE data_to_hash);
|
51
54
|
|
@@ -79,4 +82,7 @@
|
|
79
82
|
VALUE mhash_rb_snefru256(VALUE self, VALUE data_to_hash);
|
80
83
|
VALUE mhash_rb_snefru256_hex(VALUE self, VALUE data_to_hash);
|
81
84
|
|
85
|
+
VALUE mhash_rb_md2(VALUE self, VALUE data_to_hash);
|
86
|
+
VALUE mhash_rb_md2_hex(VALUE self, VALUE data_to_hash);
|
87
|
+
|
82
88
|
#endif
|
data/lib/mhash.rb
CHANGED
data/mhash.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.files = `git ls-files`.split("\n")
|
11
11
|
gem.extensions = ["ext/mhash/extconf.rb"]
|
12
12
|
gem.require_paths = ["lib", "ext"]
|
13
|
-
gem.version = "1.
|
13
|
+
gem.version = "1.2"
|
14
14
|
gem.extra_rdoc_files = ["LICENSE.txt"]
|
15
15
|
gem.licenses = ["BSD"]
|
16
16
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mhash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.2'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-08 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Mhash library extension for Ruby
|
15
15
|
email:
|
@@ -58,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
58
58
|
version: '0'
|
59
59
|
requirements: []
|
60
60
|
rubyforge_project:
|
61
|
-
rubygems_version: 1.8.
|
61
|
+
rubygems_version: 1.8.24
|
62
62
|
signing_key:
|
63
63
|
specification_version: 3
|
64
64
|
summary: Mhash library extension for Ruby
|