rubysl-digest 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +0 -1
  3. data/.travis.yml +7 -0
  4. data/README.md +2 -2
  5. data/Rakefile +0 -1
  6. data/ext/rubysl/digest/bubblebabble/.gitignore +2 -0
  7. data/ext/rubysl/digest/bubblebabble/bubblebabble.c +147 -0
  8. data/ext/rubysl/digest/bubblebabble/bubblebabble.h +2 -0
  9. data/ext/rubysl/digest/bubblebabble/depend +3 -0
  10. data/ext/rubysl/digest/bubblebabble/extconf.h +4 -0
  11. data/ext/rubysl/digest/bubblebabble/extconf.rb +6 -0
  12. data/ext/rubysl/digest/defs.h +19 -0
  13. data/ext/rubysl/digest/digest.c +660 -0
  14. data/ext/rubysl/digest/digest.h +32 -0
  15. data/ext/rubysl/digest/extconf.rb +10 -0
  16. data/ext/rubysl/digest/md5/.gitignore +2 -0
  17. data/ext/rubysl/digest/md5/extconf.rb +29 -0
  18. data/ext/rubysl/digest/md5/md5.c +422 -0
  19. data/ext/rubysl/digest/md5/md5.h +80 -0
  20. data/ext/rubysl/digest/md5/md5init.c +40 -0
  21. data/ext/rubysl/digest/md5/md5ossl.c +9 -0
  22. data/ext/rubysl/digest/md5/md5ossl.h +13 -0
  23. data/ext/rubysl/digest/rmd160/.gitignore +2 -0
  24. data/ext/rubysl/digest/rmd160/extconf.rb +28 -0
  25. data/ext/rubysl/digest/rmd160/rmd160.c +457 -0
  26. data/ext/rubysl/digest/rmd160/rmd160.h +56 -0
  27. data/ext/rubysl/digest/rmd160/rmd160init.c +40 -0
  28. data/ext/rubysl/digest/rmd160/rmd160ossl.c +8 -0
  29. data/ext/rubysl/digest/rmd160/rmd160ossl.h +19 -0
  30. data/ext/rubysl/digest/sha1/.gitignore +2 -0
  31. data/ext/rubysl/digest/sha1/extconf.rb +28 -0
  32. data/ext/rubysl/digest/sha1/sha1.c +269 -0
  33. data/ext/rubysl/digest/sha1/sha1.h +39 -0
  34. data/ext/rubysl/digest/sha1/sha1init.c +40 -0
  35. data/ext/rubysl/digest/sha1/sha1ossl.c +10 -0
  36. data/ext/rubysl/digest/sha1/sha1ossl.h +20 -0
  37. data/ext/rubysl/digest/sha2/.gitignore +2 -0
  38. data/ext/rubysl/digest/sha2/extconf.rb +24 -0
  39. data/ext/rubysl/digest/sha2/sha2.c +919 -0
  40. data/ext/rubysl/digest/sha2/sha2.h +109 -0
  41. data/ext/rubysl/digest/sha2/sha2init.c +52 -0
  42. data/lib/digest/bubblebabble.rb +1 -0
  43. data/lib/digest/hmac.rb +302 -0
  44. data/lib/digest/md5.rb +23 -0
  45. data/lib/digest/rmd160.rb +1 -0
  46. data/lib/digest/sha1.rb +23 -0
  47. data/lib/digest/sha2.rb +74 -0
  48. data/lib/digest.rb +1 -0
  49. data/lib/rubysl/digest/digest.rb +88 -0
  50. data/lib/{rubysl-digest → rubysl/digest}/version.rb +1 -1
  51. data/lib/rubysl/digest.rb +2 -0
  52. data/rubysl-digest.gemspec +25 -17
  53. data/spec/hexencode_spec.rb +30 -0
  54. data/spec/md5/append_spec.rb +6 -0
  55. data/spec/md5/block_length_spec.rb +11 -0
  56. data/spec/md5/digest_bang_spec.rb +12 -0
  57. data/spec/md5/digest_length_spec.rb +11 -0
  58. data/spec/md5/digest_spec.rb +31 -0
  59. data/spec/md5/equal_spec.rb +37 -0
  60. data/spec/md5/file_spec.rb +42 -0
  61. data/spec/md5/hexdigest_bang_spec.rb +13 -0
  62. data/spec/md5/hexdigest_spec.rb +31 -0
  63. data/spec/md5/inspect_spec.rb +11 -0
  64. data/spec/md5/length_spec.rb +7 -0
  65. data/spec/md5/reset_spec.rb +14 -0
  66. data/spec/md5/shared/constants.rb +16 -0
  67. data/spec/md5/shared/length.rb +8 -0
  68. data/spec/md5/shared/sample.rb +15 -0
  69. data/spec/md5/shared/update.rb +7 -0
  70. data/spec/md5/size_spec.rb +7 -0
  71. data/spec/md5/to_s_spec.rb +21 -0
  72. data/spec/md5/update_spec.rb +6 -0
  73. data/spec/sha1/digest_spec.rb +19 -0
  74. data/spec/sha1/file_spec.rb +42 -0
  75. data/spec/sha1/shared/constants.rb +16 -0
  76. data/spec/sha256/append_spec.rb +6 -0
  77. data/spec/sha256/block_length_spec.rb +11 -0
  78. data/spec/sha256/digest_bang_spec.rb +12 -0
  79. data/spec/sha256/digest_length_spec.rb +11 -0
  80. data/spec/sha256/digest_spec.rb +31 -0
  81. data/spec/sha256/equal_spec.rb +36 -0
  82. data/spec/sha256/file_spec.rb +42 -0
  83. data/spec/sha256/hexdigest_bang_spec.rb +13 -0
  84. data/spec/sha256/hexdigest_spec.rb +31 -0
  85. data/spec/sha256/inspect_spec.rb +11 -0
  86. data/spec/sha256/length_spec.rb +7 -0
  87. data/spec/sha256/reset_spec.rb +14 -0
  88. data/spec/sha256/shared/constants.rb +16 -0
  89. data/spec/sha256/shared/length.rb +8 -0
  90. data/spec/sha256/shared/update.rb +7 -0
  91. data/spec/sha256/size_spec.rb +7 -0
  92. data/spec/sha256/to_s_spec.rb +20 -0
  93. data/spec/sha256/update_spec.rb +6 -0
  94. data/spec/sha384/append_spec.rb +6 -0
  95. data/spec/sha384/block_length_spec.rb +11 -0
  96. data/spec/sha384/digest_bang_spec.rb +12 -0
  97. data/spec/sha384/digest_length_spec.rb +11 -0
  98. data/spec/sha384/digest_spec.rb +31 -0
  99. data/spec/sha384/equal_spec.rb +36 -0
  100. data/spec/sha384/file_spec.rb +42 -0
  101. data/spec/sha384/hexdigest_bang_spec.rb +13 -0
  102. data/spec/sha384/hexdigest_spec.rb +31 -0
  103. data/spec/sha384/inspect_spec.rb +11 -0
  104. data/spec/sha384/length_spec.rb +7 -0
  105. data/spec/sha384/reset_spec.rb +14 -0
  106. data/spec/sha384/shared/constants.rb +17 -0
  107. data/spec/sha384/shared/length.rb +8 -0
  108. data/spec/sha384/shared/update.rb +7 -0
  109. data/spec/sha384/size_spec.rb +7 -0
  110. data/spec/sha384/to_s_spec.rb +20 -0
  111. data/spec/sha384/update_spec.rb +6 -0
  112. data/spec/sha512/append_spec.rb +6 -0
  113. data/spec/sha512/block_length_spec.rb +11 -0
  114. data/spec/sha512/digest_bang_spec.rb +12 -0
  115. data/spec/sha512/digest_length_spec.rb +11 -0
  116. data/spec/sha512/digest_spec.rb +31 -0
  117. data/spec/sha512/equal_spec.rb +36 -0
  118. data/spec/sha512/file_spec.rb +42 -0
  119. data/spec/sha512/hexdigest_bang_spec.rb +13 -0
  120. data/spec/sha512/hexdigest_spec.rb +31 -0
  121. data/spec/sha512/inspect_spec.rb +11 -0
  122. data/spec/sha512/length_spec.rb +7 -0
  123. data/spec/sha512/reset_spec.rb +14 -0
  124. data/spec/sha512/shared/constants.rb +16 -0
  125. data/spec/sha512/shared/length.rb +8 -0
  126. data/spec/sha512/shared/update.rb +7 -0
  127. data/spec/sha512/size_spec.rb +7 -0
  128. data/spec/sha512/to_s_spec.rb +20 -0
  129. data/spec/sha512/update_spec.rb +6 -0
  130. metadata +283 -88
  131. data/lib/rubysl-digest.rb +0 -7
@@ -0,0 +1,457 @@
1
+ /* $NetBSD: rmd160.c,v 1.1.1.1 2001/03/06 11:21:05 agc Exp $ */
2
+ /* $RoughId: rmd160.c,v 1.2 2001/07/13 19:49:10 knu Exp $ */
3
+ /* $Id: rmd160.c 11708 2007-02-12 23:01:19Z shyouhei $ */
4
+
5
+ /********************************************************************\
6
+ *
7
+ * FILE: rmd160.c
8
+ *
9
+ * CONTENTS: A sample C-implementation of the RIPEMD-160
10
+ * hash-function.
11
+ * TARGET: any computer with an ANSI C compiler
12
+ *
13
+ * AUTHOR: Antoon Bosselaers, ESAT-COSIC
14
+ * (Arranged for libc by Todd C. Miller)
15
+ * DATE: 1 March 1996
16
+ * VERSION: 1.0
17
+ *
18
+ * Copyright (c) Katholieke Universiteit Leuven
19
+ * 1996, All Rights Reserved
20
+ *
21
+ \********************************************************************/
22
+
23
+ #include "rmd160.h"
24
+
25
+ #ifndef lint
26
+ /* __RCSID("$NetBSD: rmd160.c,v 1.1.1.1 2001/03/06 11:21:05 agc Exp $"); */
27
+ #endif /* not lint */
28
+
29
+ /* header files */
30
+
31
+ #ifdef HAVE_SYS_ENDIAN_H_
32
+ #include <sys/endian.h>
33
+ #endif
34
+
35
+ #ifdef HAVE_MACHINE_ENDIAN_H_
36
+ #include <machine/endian.h>
37
+ #endif
38
+
39
+ /* #include "namespace.h" */
40
+
41
+ #include <assert.h>
42
+ #include <stdio.h>
43
+ #include <stdlib.h>
44
+ #include <string.h>
45
+
46
+ #ifndef _DIAGASSERT
47
+ #define _DIAGASSERT(cond) assert(cond)
48
+ #endif
49
+
50
+
51
+ /********************************************************************/
52
+
53
+ /* macro definitions */
54
+
55
+ /* collect four bytes into one word: */
56
+ #define BYTES_TO_DWORD(strptr) \
57
+ (((uint32_t) *((strptr)+3) << 24) | \
58
+ ((uint32_t) *((strptr)+2) << 16) | \
59
+ ((uint32_t) *((strptr)+1) << 8) | \
60
+ ((uint32_t) *(strptr)))
61
+
62
+ /* ROL(x, n) cyclically rotates x over n bits to the left */
63
+ /* x must be of an unsigned 32 bits type and 0 <= n < 32. */
64
+ #define ROL(x, n) (((x) << (n)) | ((x) >> (32-(n))))
65
+
66
+ /* the three basic functions F(), G() and H() */
67
+ #define F(x, y, z) ((x) ^ (y) ^ (z))
68
+ #define G(x, y, z) (((x) & (y)) | (~(x) & (z)))
69
+ #define H(x, y, z) (((x) | ~(y)) ^ (z))
70
+ #define I(x, y, z) (((x) & (z)) | ((y) & ~(z)))
71
+ #define J(x, y, z) ((x) ^ ((y) | ~(z)))
72
+
73
+ /* the eight basic operations FF() through III() */
74
+ #define FF(a, b, c, d, e, x, s) { \
75
+ (a) += F((b), (c), (d)) + (x); \
76
+ (a) = ROL((a), (s)) + (e); \
77
+ (c) = ROL((c), 10); \
78
+ }
79
+ #define GG(a, b, c, d, e, x, s) { \
80
+ (a) += G((b), (c), (d)) + (x) + 0x5a827999U; \
81
+ (a) = ROL((a), (s)) + (e); \
82
+ (c) = ROL((c), 10); \
83
+ }
84
+ #define HH(a, b, c, d, e, x, s) { \
85
+ (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1U; \
86
+ (a) = ROL((a), (s)) + (e); \
87
+ (c) = ROL((c), 10); \
88
+ }
89
+ #define II(a, b, c, d, e, x, s) { \
90
+ (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcU; \
91
+ (a) = ROL((a), (s)) + (e); \
92
+ (c) = ROL((c), 10); \
93
+ }
94
+ #define JJ(a, b, c, d, e, x, s) { \
95
+ (a) += J((b), (c), (d)) + (x) + 0xa953fd4eU; \
96
+ (a) = ROL((a), (s)) + (e); \
97
+ (c) = ROL((c), 10); \
98
+ }
99
+ #define FFF(a, b, c, d, e, x, s) { \
100
+ (a) += F((b), (c), (d)) + (x); \
101
+ (a) = ROL((a), (s)) + (e); \
102
+ (c) = ROL((c), 10); \
103
+ }
104
+ #define GGG(a, b, c, d, e, x, s) { \
105
+ (a) += G((b), (c), (d)) + (x) + 0x7a6d76e9U; \
106
+ (a) = ROL((a), (s)) + (e); \
107
+ (c) = ROL((c), 10); \
108
+ }
109
+ #define HHH(a, b, c, d, e, x, s) { \
110
+ (a) += H((b), (c), (d)) + (x) + 0x6d703ef3U; \
111
+ (a) = ROL((a), (s)) + (e); \
112
+ (c) = ROL((c), 10); \
113
+ }
114
+ #define III(a, b, c, d, e, x, s) { \
115
+ (a) += I((b), (c), (d)) + (x) + 0x5c4dd124U; \
116
+ (a) = ROL((a), (s)) + (e); \
117
+ (c) = ROL((c), 10); \
118
+ }
119
+ #define JJJ(a, b, c, d, e, x, s) { \
120
+ (a) += J((b), (c), (d)) + (x) + 0x50a28be6U; \
121
+ (a) = ROL((a), (s)) + (e); \
122
+ (c) = ROL((c), 10); \
123
+ }
124
+
125
+ /********************************************************************/
126
+
127
+ void
128
+ RMD160_Init(RMD160_CTX *context)
129
+ {
130
+
131
+ _DIAGASSERT(context != NULL);
132
+
133
+ /* ripemd-160 initialization constants */
134
+ context->state[0] = 0x67452301U;
135
+ context->state[1] = 0xefcdab89U;
136
+ context->state[2] = 0x98badcfeU;
137
+ context->state[3] = 0x10325476U;
138
+ context->state[4] = 0xc3d2e1f0U;
139
+ context->length[0] = context->length[1] = 0;
140
+ context->buflen = 0;
141
+ }
142
+
143
+ /********************************************************************/
144
+
145
+ void
146
+ RMD160_Transform(uint32_t state[5], const uint32_t block[16])
147
+ {
148
+ uint32_t aa, bb, cc, dd, ee;
149
+ uint32_t aaa, bbb, ccc, ddd, eee;
150
+
151
+ _DIAGASSERT(state != NULL);
152
+ _DIAGASSERT(block != NULL);
153
+
154
+ aa = aaa = state[0];
155
+ bb = bbb = state[1];
156
+ cc = ccc = state[2];
157
+ dd = ddd = state[3];
158
+ ee = eee = state[4];
159
+
160
+ /* round 1 */
161
+ FF(aa, bb, cc, dd, ee, block[ 0], 11);
162
+ FF(ee, aa, bb, cc, dd, block[ 1], 14);
163
+ FF(dd, ee, aa, bb, cc, block[ 2], 15);
164
+ FF(cc, dd, ee, aa, bb, block[ 3], 12);
165
+ FF(bb, cc, dd, ee, aa, block[ 4], 5);
166
+ FF(aa, bb, cc, dd, ee, block[ 5], 8);
167
+ FF(ee, aa, bb, cc, dd, block[ 6], 7);
168
+ FF(dd, ee, aa, bb, cc, block[ 7], 9);
169
+ FF(cc, dd, ee, aa, bb, block[ 8], 11);
170
+ FF(bb, cc, dd, ee, aa, block[ 9], 13);
171
+ FF(aa, bb, cc, dd, ee, block[10], 14);
172
+ FF(ee, aa, bb, cc, dd, block[11], 15);
173
+ FF(dd, ee, aa, bb, cc, block[12], 6);
174
+ FF(cc, dd, ee, aa, bb, block[13], 7);
175
+ FF(bb, cc, dd, ee, aa, block[14], 9);
176
+ FF(aa, bb, cc, dd, ee, block[15], 8);
177
+
178
+ /* round 2 */
179
+ GG(ee, aa, bb, cc, dd, block[ 7], 7);
180
+ GG(dd, ee, aa, bb, cc, block[ 4], 6);
181
+ GG(cc, dd, ee, aa, bb, block[13], 8);
182
+ GG(bb, cc, dd, ee, aa, block[ 1], 13);
183
+ GG(aa, bb, cc, dd, ee, block[10], 11);
184
+ GG(ee, aa, bb, cc, dd, block[ 6], 9);
185
+ GG(dd, ee, aa, bb, cc, block[15], 7);
186
+ GG(cc, dd, ee, aa, bb, block[ 3], 15);
187
+ GG(bb, cc, dd, ee, aa, block[12], 7);
188
+ GG(aa, bb, cc, dd, ee, block[ 0], 12);
189
+ GG(ee, aa, bb, cc, dd, block[ 9], 15);
190
+ GG(dd, ee, aa, bb, cc, block[ 5], 9);
191
+ GG(cc, dd, ee, aa, bb, block[ 2], 11);
192
+ GG(bb, cc, dd, ee, aa, block[14], 7);
193
+ GG(aa, bb, cc, dd, ee, block[11], 13);
194
+ GG(ee, aa, bb, cc, dd, block[ 8], 12);
195
+
196
+ /* round 3 */
197
+ HH(dd, ee, aa, bb, cc, block[ 3], 11);
198
+ HH(cc, dd, ee, aa, bb, block[10], 13);
199
+ HH(bb, cc, dd, ee, aa, block[14], 6);
200
+ HH(aa, bb, cc, dd, ee, block[ 4], 7);
201
+ HH(ee, aa, bb, cc, dd, block[ 9], 14);
202
+ HH(dd, ee, aa, bb, cc, block[15], 9);
203
+ HH(cc, dd, ee, aa, bb, block[ 8], 13);
204
+ HH(bb, cc, dd, ee, aa, block[ 1], 15);
205
+ HH(aa, bb, cc, dd, ee, block[ 2], 14);
206
+ HH(ee, aa, bb, cc, dd, block[ 7], 8);
207
+ HH(dd, ee, aa, bb, cc, block[ 0], 13);
208
+ HH(cc, dd, ee, aa, bb, block[ 6], 6);
209
+ HH(bb, cc, dd, ee, aa, block[13], 5);
210
+ HH(aa, bb, cc, dd, ee, block[11], 12);
211
+ HH(ee, aa, bb, cc, dd, block[ 5], 7);
212
+ HH(dd, ee, aa, bb, cc, block[12], 5);
213
+
214
+ /* round 4 */
215
+ II(cc, dd, ee, aa, bb, block[ 1], 11);
216
+ II(bb, cc, dd, ee, aa, block[ 9], 12);
217
+ II(aa, bb, cc, dd, ee, block[11], 14);
218
+ II(ee, aa, bb, cc, dd, block[10], 15);
219
+ II(dd, ee, aa, bb, cc, block[ 0], 14);
220
+ II(cc, dd, ee, aa, bb, block[ 8], 15);
221
+ II(bb, cc, dd, ee, aa, block[12], 9);
222
+ II(aa, bb, cc, dd, ee, block[ 4], 8);
223
+ II(ee, aa, bb, cc, dd, block[13], 9);
224
+ II(dd, ee, aa, bb, cc, block[ 3], 14);
225
+ II(cc, dd, ee, aa, bb, block[ 7], 5);
226
+ II(bb, cc, dd, ee, aa, block[15], 6);
227
+ II(aa, bb, cc, dd, ee, block[14], 8);
228
+ II(ee, aa, bb, cc, dd, block[ 5], 6);
229
+ II(dd, ee, aa, bb, cc, block[ 6], 5);
230
+ II(cc, dd, ee, aa, bb, block[ 2], 12);
231
+
232
+ /* round 5 */
233
+ JJ(bb, cc, dd, ee, aa, block[ 4], 9);
234
+ JJ(aa, bb, cc, dd, ee, block[ 0], 15);
235
+ JJ(ee, aa, bb, cc, dd, block[ 5], 5);
236
+ JJ(dd, ee, aa, bb, cc, block[ 9], 11);
237
+ JJ(cc, dd, ee, aa, bb, block[ 7], 6);
238
+ JJ(bb, cc, dd, ee, aa, block[12], 8);
239
+ JJ(aa, bb, cc, dd, ee, block[ 2], 13);
240
+ JJ(ee, aa, bb, cc, dd, block[10], 12);
241
+ JJ(dd, ee, aa, bb, cc, block[14], 5);
242
+ JJ(cc, dd, ee, aa, bb, block[ 1], 12);
243
+ JJ(bb, cc, dd, ee, aa, block[ 3], 13);
244
+ JJ(aa, bb, cc, dd, ee, block[ 8], 14);
245
+ JJ(ee, aa, bb, cc, dd, block[11], 11);
246
+ JJ(dd, ee, aa, bb, cc, block[ 6], 8);
247
+ JJ(cc, dd, ee, aa, bb, block[15], 5);
248
+ JJ(bb, cc, dd, ee, aa, block[13], 6);
249
+
250
+ /* parallel round 1 */
251
+ JJJ(aaa, bbb, ccc, ddd, eee, block[ 5], 8);
252
+ JJJ(eee, aaa, bbb, ccc, ddd, block[14], 9);
253
+ JJJ(ddd, eee, aaa, bbb, ccc, block[ 7], 9);
254
+ JJJ(ccc, ddd, eee, aaa, bbb, block[ 0], 11);
255
+ JJJ(bbb, ccc, ddd, eee, aaa, block[ 9], 13);
256
+ JJJ(aaa, bbb, ccc, ddd, eee, block[ 2], 15);
257
+ JJJ(eee, aaa, bbb, ccc, ddd, block[11], 15);
258
+ JJJ(ddd, eee, aaa, bbb, ccc, block[ 4], 5);
259
+ JJJ(ccc, ddd, eee, aaa, bbb, block[13], 7);
260
+ JJJ(bbb, ccc, ddd, eee, aaa, block[ 6], 7);
261
+ JJJ(aaa, bbb, ccc, ddd, eee, block[15], 8);
262
+ JJJ(eee, aaa, bbb, ccc, ddd, block[ 8], 11);
263
+ JJJ(ddd, eee, aaa, bbb, ccc, block[ 1], 14);
264
+ JJJ(ccc, ddd, eee, aaa, bbb, block[10], 14);
265
+ JJJ(bbb, ccc, ddd, eee, aaa, block[ 3], 12);
266
+ JJJ(aaa, bbb, ccc, ddd, eee, block[12], 6);
267
+
268
+ /* parallel round 2 */
269
+ III(eee, aaa, bbb, ccc, ddd, block[ 6], 9);
270
+ III(ddd, eee, aaa, bbb, ccc, block[11], 13);
271
+ III(ccc, ddd, eee, aaa, bbb, block[ 3], 15);
272
+ III(bbb, ccc, ddd, eee, aaa, block[ 7], 7);
273
+ III(aaa, bbb, ccc, ddd, eee, block[ 0], 12);
274
+ III(eee, aaa, bbb, ccc, ddd, block[13], 8);
275
+ III(ddd, eee, aaa, bbb, ccc, block[ 5], 9);
276
+ III(ccc, ddd, eee, aaa, bbb, block[10], 11);
277
+ III(bbb, ccc, ddd, eee, aaa, block[14], 7);
278
+ III(aaa, bbb, ccc, ddd, eee, block[15], 7);
279
+ III(eee, aaa, bbb, ccc, ddd, block[ 8], 12);
280
+ III(ddd, eee, aaa, bbb, ccc, block[12], 7);
281
+ III(ccc, ddd, eee, aaa, bbb, block[ 4], 6);
282
+ III(bbb, ccc, ddd, eee, aaa, block[ 9], 15);
283
+ III(aaa, bbb, ccc, ddd, eee, block[ 1], 13);
284
+ III(eee, aaa, bbb, ccc, ddd, block[ 2], 11);
285
+
286
+ /* parallel round 3 */
287
+ HHH(ddd, eee, aaa, bbb, ccc, block[15], 9);
288
+ HHH(ccc, ddd, eee, aaa, bbb, block[ 5], 7);
289
+ HHH(bbb, ccc, ddd, eee, aaa, block[ 1], 15);
290
+ HHH(aaa, bbb, ccc, ddd, eee, block[ 3], 11);
291
+ HHH(eee, aaa, bbb, ccc, ddd, block[ 7], 8);
292
+ HHH(ddd, eee, aaa, bbb, ccc, block[14], 6);
293
+ HHH(ccc, ddd, eee, aaa, bbb, block[ 6], 6);
294
+ HHH(bbb, ccc, ddd, eee, aaa, block[ 9], 14);
295
+ HHH(aaa, bbb, ccc, ddd, eee, block[11], 12);
296
+ HHH(eee, aaa, bbb, ccc, ddd, block[ 8], 13);
297
+ HHH(ddd, eee, aaa, bbb, ccc, block[12], 5);
298
+ HHH(ccc, ddd, eee, aaa, bbb, block[ 2], 14);
299
+ HHH(bbb, ccc, ddd, eee, aaa, block[10], 13);
300
+ HHH(aaa, bbb, ccc, ddd, eee, block[ 0], 13);
301
+ HHH(eee, aaa, bbb, ccc, ddd, block[ 4], 7);
302
+ HHH(ddd, eee, aaa, bbb, ccc, block[13], 5);
303
+
304
+ /* parallel round 4 */
305
+ GGG(ccc, ddd, eee, aaa, bbb, block[ 8], 15);
306
+ GGG(bbb, ccc, ddd, eee, aaa, block[ 6], 5);
307
+ GGG(aaa, bbb, ccc, ddd, eee, block[ 4], 8);
308
+ GGG(eee, aaa, bbb, ccc, ddd, block[ 1], 11);
309
+ GGG(ddd, eee, aaa, bbb, ccc, block[ 3], 14);
310
+ GGG(ccc, ddd, eee, aaa, bbb, block[11], 14);
311
+ GGG(bbb, ccc, ddd, eee, aaa, block[15], 6);
312
+ GGG(aaa, bbb, ccc, ddd, eee, block[ 0], 14);
313
+ GGG(eee, aaa, bbb, ccc, ddd, block[ 5], 6);
314
+ GGG(ddd, eee, aaa, bbb, ccc, block[12], 9);
315
+ GGG(ccc, ddd, eee, aaa, bbb, block[ 2], 12);
316
+ GGG(bbb, ccc, ddd, eee, aaa, block[13], 9);
317
+ GGG(aaa, bbb, ccc, ddd, eee, block[ 9], 12);
318
+ GGG(eee, aaa, bbb, ccc, ddd, block[ 7], 5);
319
+ GGG(ddd, eee, aaa, bbb, ccc, block[10], 15);
320
+ GGG(ccc, ddd, eee, aaa, bbb, block[14], 8);
321
+
322
+ /* parallel round 5 */
323
+ FFF(bbb, ccc, ddd, eee, aaa, block[12] , 8);
324
+ FFF(aaa, bbb, ccc, ddd, eee, block[15] , 5);
325
+ FFF(eee, aaa, bbb, ccc, ddd, block[10] , 12);
326
+ FFF(ddd, eee, aaa, bbb, ccc, block[ 4] , 9);
327
+ FFF(ccc, ddd, eee, aaa, bbb, block[ 1] , 12);
328
+ FFF(bbb, ccc, ddd, eee, aaa, block[ 5] , 5);
329
+ FFF(aaa, bbb, ccc, ddd, eee, block[ 8] , 14);
330
+ FFF(eee, aaa, bbb, ccc, ddd, block[ 7] , 6);
331
+ FFF(ddd, eee, aaa, bbb, ccc, block[ 6] , 8);
332
+ FFF(ccc, ddd, eee, aaa, bbb, block[ 2] , 13);
333
+ FFF(bbb, ccc, ddd, eee, aaa, block[13] , 6);
334
+ FFF(aaa, bbb, ccc, ddd, eee, block[14] , 5);
335
+ FFF(eee, aaa, bbb, ccc, ddd, block[ 0] , 15);
336
+ FFF(ddd, eee, aaa, bbb, ccc, block[ 3] , 13);
337
+ FFF(ccc, ddd, eee, aaa, bbb, block[ 9] , 11);
338
+ FFF(bbb, ccc, ddd, eee, aaa, block[11] , 11);
339
+
340
+ /* combine results */
341
+ ddd += cc + state[1]; /* final result for state[0] */
342
+ state[1] = state[2] + dd + eee;
343
+ state[2] = state[3] + ee + aaa;
344
+ state[3] = state[4] + aa + bbb;
345
+ state[4] = state[0] + bb + ccc;
346
+ state[0] = ddd;
347
+ }
348
+
349
+ /********************************************************************/
350
+
351
+ void
352
+ RMD160_Update(RMD160_CTX *context, const uint8_t *data, size_t nbytes)
353
+ {
354
+ uint32_t X[16];
355
+ uint32_t ofs = 0;
356
+ uint32_t i;
357
+ #ifdef WORDS_BIGENDIAN
358
+ uint32_t j;
359
+ #endif
360
+
361
+ _DIAGASSERT(context != NULL);
362
+ _DIAGASSERT(data != NULL);
363
+
364
+ /* update length[] */
365
+ if (context->length[0] + nbytes < context->length[0])
366
+ context->length[1]++; /* overflow to msb of length */
367
+ context->length[0] += nbytes;
368
+
369
+ (void)memset(X, 0, sizeof(X));
370
+
371
+ if ( context->buflen + nbytes < 64 )
372
+ {
373
+ (void)memcpy(context->bbuffer + context->buflen, data, nbytes);
374
+ context->buflen += nbytes;
375
+ }
376
+ else
377
+ {
378
+ /* process first block */
379
+ ofs = 64 - context->buflen;
380
+ (void)memcpy(context->bbuffer + context->buflen, data, ofs);
381
+ #ifndef WORDS_BIGENDIAN
382
+ (void)memcpy(X, context->bbuffer, sizeof(X));
383
+ #else
384
+ for (j=0; j < 16; j++)
385
+ X[j] = BYTES_TO_DWORD(context->bbuffer + (4 * j));
386
+ #endif
387
+ RMD160_Transform(context->state, X);
388
+ nbytes -= ofs;
389
+
390
+ /* process remaining complete blocks */
391
+ for (i = 0; i < (nbytes >> 6); i++) {
392
+ #ifndef WORDS_BIGENDIAN
393
+ (void)memcpy(X, data + (64 * i) + ofs, sizeof(X));
394
+ #else
395
+ for (j=0; j < 16; j++)
396
+ X[j] = BYTES_TO_DWORD(data + (64 * i) + (4 * j) + ofs);
397
+ #endif
398
+ RMD160_Transform(context->state, X);
399
+ }
400
+
401
+ /*
402
+ * Put last bytes from data into context's buffer
403
+ */
404
+ context->buflen = nbytes & 63;
405
+ memcpy(context->bbuffer, data + (64 * i) + ofs, context->buflen);
406
+ }
407
+ }
408
+
409
+ /********************************************************************/
410
+
411
+ void
412
+ RMD160_Finish(RMD160_CTX *context, uint8_t digest[20])
413
+ {
414
+ uint32_t i;
415
+ uint32_t X[16];
416
+ #ifdef WORDS_BIGENDIAN
417
+ uint32_t j;
418
+ #endif
419
+
420
+ _DIAGASSERT(digest != NULL);
421
+ _DIAGASSERT(context != NULL);
422
+
423
+ /* append the bit m_n == 1 */
424
+ context->bbuffer[context->buflen] = (uint8_t)'\200';
425
+
426
+ (void)memset(context->bbuffer + context->buflen + 1, 0,
427
+ 63 - context->buflen);
428
+ #ifndef WORDS_BIGENDIAN
429
+ (void)memcpy(X, context->bbuffer, sizeof(X));
430
+ #else
431
+ for (j=0; j < 16; j++)
432
+ X[j] = BYTES_TO_DWORD(context->bbuffer + (4 * j));
433
+ #endif
434
+ if ((context->buflen) > 55) {
435
+ /* length goes to next block */
436
+ RMD160_Transform(context->state, X);
437
+ (void)memset(X, 0, sizeof(X));
438
+ }
439
+
440
+ /* append length in bits */
441
+ X[14] = context->length[0] << 3;
442
+ X[15] = (context->length[0] >> 29) |
443
+ (context->length[1] << 3);
444
+ RMD160_Transform(context->state, X);
445
+
446
+ if (digest != NULL) {
447
+ for (i = 0; i < 20; i += 4) {
448
+ /* extracts the 8 least significant bits. */
449
+ digest[i] = context->state[i>>2];
450
+ digest[i + 1] = (context->state[i>>2] >> 8);
451
+ digest[i + 2] = (context->state[i>>2] >> 16);
452
+ digest[i + 3] = (context->state[i>>2] >> 24);
453
+ }
454
+ }
455
+ }
456
+
457
+ /************************ end of file rmd160.c **********************/
@@ -0,0 +1,56 @@
1
+ /* $NetBSD: rmd160.h,v 1.2 2000/07/07 10:47:06 ad Exp $ */
2
+ /* $RoughId: rmd160.h,v 1.3 2002/02/24 08:14:31 knu Exp $ */
3
+ /* $Id: rmd160.h 11708 2007-02-12 23:01:19Z shyouhei $ */
4
+
5
+ /********************************************************************\
6
+ *
7
+ * FILE: rmd160.h
8
+ *
9
+ * CONTENTS: Header file for a sample C-implementation of the
10
+ * RIPEMD-160 hash-function.
11
+ * TARGET: any computer with an ANSI C compiler
12
+ *
13
+ * AUTHOR: Antoon Bosselaers, ESAT-COSIC
14
+ * DATE: 1 March 1996
15
+ * VERSION: 1.0
16
+ *
17
+ * Copyright (c) Katholieke Universiteit Leuven
18
+ * 1996, All Rights Reserved
19
+ *
20
+ \********************************************************************/
21
+
22
+ /*
23
+ * from OpenBSD: rmd160.h,v 1.4 1999/08/16 09:59:04 millert Exp
24
+ */
25
+
26
+ #ifndef _RMD160_H_
27
+ #define _RMD160_H_
28
+
29
+ #include "defs.h"
30
+
31
+ typedef struct {
32
+ uint32_t state[5]; /* state (ABCDE) */
33
+ uint32_t length[2]; /* number of bits */
34
+ uint8_t bbuffer[64]; /* overflow buffer */
35
+ uint32_t buflen; /* number of chars in bbuffer */
36
+ } RMD160_CTX;
37
+
38
+ #ifdef RUBY
39
+ #define RMD160_Init rb_Digest_RMD160_Init
40
+ #define RMD160_Transform rb_Digest_RMD160_Transform
41
+ #define RMD160_Update rb_Digest_RMD160_Update
42
+ #define RMD160_Finish rb_Digest_RMD160_Finish
43
+ #endif
44
+
45
+ __BEGIN_DECLS
46
+ void RMD160_Init _((RMD160_CTX *));
47
+ void RMD160_Transform _((uint32_t[5], const uint32_t[16]));
48
+ void RMD160_Update _((RMD160_CTX *, const uint8_t *, size_t));
49
+ void RMD160_Finish _((RMD160_CTX *, uint8_t[20]));
50
+ __END_DECLS
51
+
52
+ #define RMD160_BLOCK_LENGTH 64
53
+ #define RMD160_DIGEST_LENGTH 20
54
+ #define RMD160_DIGEST_STRING_LENGTH (RMD160_DIGEST_LENGTH * 2 + 1)
55
+
56
+ #endif /* !_RMD160_H_ */
@@ -0,0 +1,40 @@
1
+ /* $RoughId: rmd160init.c,v 1.3 2001/07/13 20:00:43 knu Exp $ */
2
+ /* $Id: rmd160init.c 19020 2008-09-01 07:48:53Z nobu $ */
3
+
4
+ #include "digest.h"
5
+ #if defined(HAVE_OPENSSL_RIPEMD_H)
6
+ #include "rmd160ossl.h"
7
+ #else
8
+ #include "rmd160.h"
9
+ #endif
10
+
11
+ static const rb_digest_metadata_t rmd160 = {
12
+ RUBY_DIGEST_API_VERSION,
13
+ RMD160_DIGEST_LENGTH,
14
+ RMD160_BLOCK_LENGTH,
15
+ sizeof(RMD160_CTX),
16
+ (rb_digest_hash_init_func_t)RMD160_Init,
17
+ (rb_digest_hash_update_func_t)RMD160_Update,
18
+ (rb_digest_hash_finish_func_t)RMD160_Finish,
19
+ };
20
+
21
+ /*
22
+ * A class for calculating message digests using RIPEMD-160
23
+ * cryptographic hash function, designed by Hans Dobbertin, Antoon
24
+ * Bosselaers, and Bart Preneel.
25
+ */
26
+ void
27
+ Init_rmd160()
28
+ {
29
+ VALUE mDigest, cDigest_Base, cDigest_RMD160;
30
+
31
+ rb_require("digest");
32
+
33
+ mDigest = rb_path2class("Digest");
34
+ cDigest_Base = rb_path2class("Digest::Base");
35
+
36
+ cDigest_RMD160 = rb_define_class_under(mDigest, "RMD160", cDigest_Base);
37
+
38
+ rb_ivar_set(cDigest_RMD160, rb_intern("metadata"),
39
+ Data_Wrap_Struct(rb_cObject, 0, 0, (void *)&rmd160));
40
+ }
@@ -0,0 +1,8 @@
1
+ /* $Id: rmd160ossl.c 11902 2007-02-27 10:08:39Z knu $ */
2
+
3
+ #include "defs.h"
4
+ #include "rmd160ossl.h"
5
+
6
+ void RMD160_Finish(RMD160_CTX *ctx, char *buf) {
7
+ RIPEMD160_Final((unsigned char *)buf, ctx);
8
+ }
@@ -0,0 +1,19 @@
1
+ /* $Id: rmd160ossl.h 11708 2007-02-12 23:01:19Z shyouhei $ */
2
+
3
+ #ifndef RMD160OSSL_H_INCLUDED
4
+ #define RMD160OSSL_H_INCLUDED
5
+
6
+ #include <stddef.h>
7
+ #include <openssl/ripemd.h>
8
+
9
+ #define RMD160_CTX RIPEMD160_CTX
10
+
11
+ #define RMD160_Init RIPEMD160_Init
12
+ #define RMD160_Update RIPEMD160_Update
13
+
14
+ #define RMD160_BLOCK_LENGTH RIPEMD160_CBLOCK
15
+ #define RMD160_DIGEST_LENGTH RIPEMD160_DIGEST_LENGTH
16
+
17
+ void RMD160_Finish(RMD160_CTX *ctx, char *buf);
18
+
19
+ #endif
@@ -0,0 +1,2 @@
1
+ Makefile
2
+ *.log
@@ -0,0 +1,28 @@
1
+ # $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $
2
+ # $Id$
3
+
4
+ require "mkmf"
5
+
6
+ $defs << "-DHAVE_CONFIG_H"
7
+ $INCFLAGS << " -I$(srcdir)/.."
8
+
9
+ $objs = [ "sha1init.#{$OBJEXT}" ]
10
+
11
+ dir_config("openssl")
12
+
13
+ if !with_config("bundled-sha1") &&
14
+ have_library("crypto") && have_header("openssl/sha.h")
15
+ $objs << "sha1ossl.#{$OBJEXT}"
16
+ else
17
+ $objs << "sha1.#{$OBJEXT}"
18
+ end
19
+
20
+ have_header("sys/cdefs.h")
21
+
22
+ have_header("inttypes.h")
23
+
24
+ have_header("unistd.h")
25
+
26
+ $preload = %w[digest]
27
+
28
+ create_makefile("digest/sha1/sha1")