ray 0.0.1 → 0.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (188) hide show
  1. data/.gemtest +0 -0
  2. data/.yardopts +4 -0
  3. data/README.md +17 -21
  4. data/Rakefile +18 -139
  5. data/VERSION +1 -1
  6. data/ext/audio.cpp +723 -0
  7. data/ext/{color.c → color.cpp} +25 -13
  8. data/ext/drawable.cpp +91 -0
  9. data/ext/event.cpp +460 -0
  10. data/ext/extconf.rb +5 -104
  11. data/ext/font.cpp +190 -0
  12. data/ext/image.cpp +733 -0
  13. data/ext/input.cpp +74 -0
  14. data/ext/ray.cpp +168 -0
  15. data/ext/ray.hpp +356 -0
  16. data/ext/{rect.c → rect.cpp} +51 -37
  17. data/ext/shader.cpp +169 -0
  18. data/ext/shape.cpp +409 -0
  19. data/ext/sprite.cpp +306 -0
  20. data/ext/text.cpp +181 -0
  21. data/ext/vector.cpp +215 -0
  22. data/guide.md +619 -0
  23. data/lib/ray/audio.rb +0 -41
  24. data/lib/ray/color.rb +32 -10
  25. data/lib/ray/drawable.rb +16 -0
  26. data/lib/ray/dsl/event_listener.rb +25 -2
  27. data/lib/ray/dsl/event_runner.rb +33 -5
  28. data/lib/ray/dsl/event_translator.rb +66 -30
  29. data/lib/ray/dsl/handler.rb +3 -2
  30. data/lib/ray/dsl/matcher.rb +58 -14
  31. data/lib/ray/font.rb +38 -96
  32. data/lib/ray/font_set.rb +8 -8
  33. data/lib/ray/game.rb +87 -66
  34. data/lib/ray/helper.rb +105 -10
  35. data/lib/ray/image.rb +150 -24
  36. data/lib/ray/image_set.rb +3 -1
  37. data/lib/ray/input.rb +10 -0
  38. data/lib/ray/music_set.rb +5 -3
  39. data/lib/ray/ray.rb +21 -9
  40. data/lib/ray/rect.rb +48 -7
  41. data/lib/ray/rmagick.rb +41 -0
  42. data/lib/ray/scene.rb +99 -43
  43. data/lib/ray/scene_list.rb +67 -0
  44. data/lib/ray/shape.rb +132 -0
  45. data/lib/ray/sound_set.rb +4 -2
  46. data/lib/ray/sprite.rb +49 -111
  47. data/lib/ray/text.rb +101 -0
  48. data/lib/ray/text_helper.rb +37 -0
  49. data/lib/ray/turtle.rb +215 -0
  50. data/lib/ray/vector.rb +226 -0
  51. data/samples/audio/spacial.rb +44 -0
  52. data/samples/hello_world/hello.rb +9 -13
  53. data/samples/hello_world/hello_dsl.rb +8 -12
  54. data/samples/hello_world/text.rb +15 -0
  55. data/samples/opengl/binding.rb +38 -0
  56. data/samples/opengl/image.rb +32 -0
  57. data/samples/opengl/opengl.rb +34 -0
  58. data/samples/opengl/shader.rb +42 -0
  59. data/samples/pong/pong.rb +14 -10
  60. data/samples/run_scene.rb +53 -0
  61. data/samples/shaders/scene.rb +40 -0
  62. data/samples/shaders/shaders.rb +42 -0
  63. data/samples/shaders/shape.rb +34 -0
  64. data/samples/sokoban/sokoban.rb +18 -18
  65. data/samples/test/actual_scene.rb +41 -0
  66. data/samples/test/scene_riot.rb +39 -0
  67. data/samples/test/scene_spec.rb +32 -0
  68. data/samples/test/scene_test_unit.rb +25 -0
  69. data/samples/turtle/byzantium.rb +45 -0
  70. data/samples/turtle/hilbert.rb +48 -0
  71. data/samples/turtle/koch.rb +55 -0
  72. data/samples/turtle/mandala.rb +61 -0
  73. data/samples/turtle/tree.rb +57 -0
  74. data/test/audio_test.rb +69 -0
  75. data/test/color_test.rb +77 -0
  76. data/test/drawable_test.rb +19 -0
  77. data/test/dsl_test.rb +93 -0
  78. data/test/font_test.rb +57 -0
  79. data/test/helpers.rb +94 -0
  80. data/test/image_test.rb +82 -0
  81. data/test/ray_test.rb +25 -0
  82. data/test/rect_test.rb +121 -0
  83. data/{spec → test}/res/VeraMono.ttf +0 -0
  84. data/{spec → test}/res/aqua.bmp +0 -0
  85. data/{spec → test}/res/aqua.png +0 -0
  86. data/{spec → test}/res/aqua2.bmp +0 -0
  87. data/{spec → test}/res/not_a_jpeg.jpeg +0 -0
  88. data/{spec → test}/res/pop.wav +0 -0
  89. data/test/resource_set_test.rb +99 -0
  90. data/test/run_all.rb +7 -0
  91. data/test/shape_test.rb +101 -0
  92. data/test/sprite_test.rb +89 -0
  93. data/test/text_test.rb +78 -0
  94. data/test/turtle_test.rb +176 -0
  95. data/test/vector_test.rb +111 -0
  96. data/yard_ext.rb +0 -28
  97. metadata +95 -139
  98. data/.gitignore +0 -23
  99. data/.gitmodules +0 -3
  100. data/.rspec +0 -3
  101. data/ext/audio.c +0 -473
  102. data/ext/event.c +0 -557
  103. data/ext/font.c +0 -287
  104. data/ext/image.c +0 -933
  105. data/ext/joystick.c +0 -145
  106. data/ext/ray.c +0 -489
  107. data/ext/ray.h +0 -245
  108. data/ext/ray_osx.m +0 -161
  109. data/lib/ray/joystick.rb +0 -30
  110. data/psp/SDL_psp_main.c +0 -84
  111. data/psp/bigdecimal/README +0 -60
  112. data/psp/bigdecimal/bigdecimal.c +0 -4697
  113. data/psp/bigdecimal/bigdecimal.h +0 -216
  114. data/psp/bigdecimal/lib/bigdecimal/jacobian.rb +0 -85
  115. data/psp/bigdecimal/lib/bigdecimal/ludcmp.rb +0 -84
  116. data/psp/bigdecimal/lib/bigdecimal/math.rb +0 -235
  117. data/psp/bigdecimal/lib/bigdecimal/newton.rb +0 -77
  118. data/psp/bigdecimal/lib/bigdecimal/util.rb +0 -65
  119. data/psp/digest/bubblebabble/bubblebabble.c +0 -142
  120. data/psp/digest/defs.h +0 -20
  121. data/psp/digest/digest.c +0 -643
  122. data/psp/digest/digest.h +0 -32
  123. data/psp/digest/lib/digest.rb +0 -50
  124. data/psp/digest/lib/md5.rb +0 -27
  125. data/psp/digest/lib/sha1.rb +0 -27
  126. data/psp/digest/md5/md5.c +0 -420
  127. data/psp/digest/md5/md5.h +0 -80
  128. data/psp/digest/md5/md5init.c +0 -40
  129. data/psp/digest/rmd160/rmd160.c +0 -457
  130. data/psp/digest/rmd160/rmd160.h +0 -56
  131. data/psp/digest/rmd160/rmd160init.c +0 -40
  132. data/psp/digest/sha1/sha1.c +0 -269
  133. data/psp/digest/sha1/sha1.h +0 -39
  134. data/psp/digest/sha1/sha1init.c +0 -40
  135. data/psp/digest/sha2/lib/sha2.rb +0 -73
  136. data/psp/digest/sha2/sha2.c +0 -919
  137. data/psp/digest/sha2/sha2.h +0 -109
  138. data/psp/digest/sha2/sha2init.c +0 -52
  139. data/psp/enumerator/enumerator.c +0 -298
  140. data/psp/etc/etc.c +0 -559
  141. data/psp/ext.c +0 -289
  142. data/psp/fcntl/fcntl.c +0 -187
  143. data/psp/lib/rbconfig.rb +0 -178
  144. data/psp/nkf/lib/kconv.rb +0 -367
  145. data/psp/nkf/nkf-utf8/config.h +0 -88
  146. data/psp/nkf/nkf-utf8/nkf.c +0 -6040
  147. data/psp/nkf/nkf-utf8/utf8tbl.c +0 -8500
  148. data/psp/nkf/nkf-utf8/utf8tbl.h +0 -34
  149. data/psp/nkf/nkf.c +0 -654
  150. data/psp/socket/addrinfo.h +0 -173
  151. data/psp/socket/getaddrinfo.c +0 -676
  152. data/psp/socket/getnameinfo.c +0 -270
  153. data/psp/socket/pspsocket.c +0 -71
  154. data/psp/socket/pspsocket.h +0 -28
  155. data/psp/socket/socket.c +0 -4662
  156. data/psp/socket/sockport.h +0 -76
  157. data/psp/stringio/stringio.c +0 -1306
  158. data/psp/strscan/strscan.c +0 -1320
  159. data/psp/syck/bytecode.c +0 -1166
  160. data/psp/syck/emitter.c +0 -1242
  161. data/psp/syck/gram.c +0 -1894
  162. data/psp/syck/gram.h +0 -79
  163. data/psp/syck/handler.c +0 -174
  164. data/psp/syck/implicit.c +0 -2990
  165. data/psp/syck/node.c +0 -408
  166. data/psp/syck/rubyext.c +0 -2367
  167. data/psp/syck/syck.c +0 -504
  168. data/psp/syck/syck.h +0 -456
  169. data/psp/syck/token.c +0 -2725
  170. data/psp/syck/yaml2byte.c +0 -257
  171. data/psp/syck/yamlbyte.h +0 -170
  172. data/psp/thread/thread.c +0 -1175
  173. data/psp/zlib/zlib.c +0 -3547
  174. data/script.rb +0 -10
  175. data/spec/ray/audio_spec.rb +0 -146
  176. data/spec/ray/color_spec.rb +0 -57
  177. data/spec/ray/event_spec.rb +0 -80
  178. data/spec/ray/font_spec.rb +0 -93
  179. data/spec/ray/image_set_spec.rb +0 -48
  180. data/spec/ray/image_spec.rb +0 -162
  181. data/spec/ray/joystick_spec.rb +0 -21
  182. data/spec/ray/matcher_spec.rb +0 -50
  183. data/spec/ray/ray_spec.rb +0 -88
  184. data/spec/ray/rect_spec.rb +0 -154
  185. data/spec/ray/resource_set_spec.rb +0 -105
  186. data/spec/ray/sprite_spec.rb +0 -163
  187. data/spec/spec.opts +0 -4
  188. data/spec/spec_helper.rb +0 -8
@@ -1,80 +0,0 @@
1
- /*
2
- Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
3
-
4
- This software is provided 'as-is', without any express or implied
5
- warranty. In no event will the authors be held liable for any damages
6
- arising from the use of this software.
7
-
8
- Permission is granted to anyone to use this software for any purpose,
9
- including commercial applications, and to alter it and redistribute it
10
- freely, subject to the following restrictions:
11
-
12
- 1. The origin of this software must not be misrepresented; you must not
13
- claim that you wrote the original software. If you use this software
14
- in a product, an acknowledgment in the product documentation would be
15
- appreciated but is not required.
16
- 2. Altered source versions must be plainly marked as such, and must not be
17
- misrepresented as being the original software.
18
- 3. This notice may not be removed or altered from any source distribution.
19
-
20
- L. Peter Deutsch
21
- ghost@aladdin.com
22
-
23
- */
24
- /*
25
- Independent implementation of MD5 (RFC 1321).
26
-
27
- This code implements the MD5 Algorithm defined in RFC 1321.
28
- It is derived directly from the text of the RFC and not from the
29
- reference implementation.
30
-
31
- The original and principal author of md5.h is L. Peter Deutsch
32
- <ghost@aladdin.com>. Other authors are noted in the change history
33
- that follows (in reverse chronological order):
34
-
35
- 1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
36
- 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
37
- added conditionalization for C++ compilation from Martin
38
- Purschke <purschke@bnl.gov>.
39
- 1999-05-03 lpd Original version.
40
- */
41
-
42
- /* $OrigId: md5.h,v 1.2 2001/03/26 08:57:14 matz Exp $ */
43
- /* $RoughId: md5.h,v 1.3 2002/02/24 08:14:31 knu Exp $ */
44
- /* $Id: md5.h 11708 2007-02-12 23:01:19Z shyouhei $ */
45
-
46
- #ifndef MD5_INCLUDED
47
- # define MD5_INCLUDED
48
-
49
- #include "../defs.h"
50
-
51
- /*
52
- * This code has some adaptations for the Ghostscript environment, but it
53
- * will compile and run correctly in any environment with 8-bit chars and
54
- * 32-bit ints. Specifically, it assumes that if the following are
55
- * defined, they have the same meaning as in Ghostscript: P1, P2, P3.
56
- */
57
-
58
- /* Define the state of the MD5 Algorithm. */
59
- typedef struct md5_state_s {
60
- uint32_t count[2]; /* message length in bits, lsw first */
61
- uint32_t state[4]; /* digest buffer */
62
- uint8_t buffer[64]; /* accumulate block */
63
- } MD5_CTX;
64
-
65
- #ifdef RUBY
66
- /* avoid name clash */
67
- #define MD5_Init rb_Digest_MD5_Init
68
- #define MD5_Update rb_Digest_MD5_Update
69
- #define MD5_Finish rb_Digest_MD5_Finish
70
- #endif
71
-
72
- void MD5_Init _((MD5_CTX *pms));
73
- void MD5_Update _((MD5_CTX *pms, const uint8_t *data, size_t nbytes));
74
- void MD5_Finish _((MD5_CTX *pms, uint8_t *digest));
75
-
76
- #define MD5_BLOCK_LENGTH 64
77
- #define MD5_DIGEST_LENGTH 16
78
- #define MD5_DIGEST_STRING_LENGTH (MD5_DIGEST_LENGTH * 2 + 1)
79
-
80
- #endif /* MD5_INCLUDED */
@@ -1,40 +0,0 @@
1
- /* $RoughId: md5init.c,v 1.2 2001/07/13 19:49:10 knu Exp $ */
2
- /* $Id: md5init.c 11708 2007-02-12 23:01:19Z shyouhei $ */
3
-
4
- #include "../digest.h"
5
- #if defined(HAVE_OPENSSL_MD5_H)
6
- #include "md5ossl.h"
7
- #else
8
- #include "md5.h"
9
- #endif
10
-
11
- static rb_digest_metadata_t md5 = {
12
- RUBY_DIGEST_API_VERSION,
13
- MD5_DIGEST_LENGTH,
14
- MD5_BLOCK_LENGTH,
15
- sizeof(MD5_CTX),
16
- (rb_digest_hash_init_func_t)MD5_Init,
17
- (rb_digest_hash_update_func_t)MD5_Update,
18
- (rb_digest_hash_finish_func_t)MD5_Finish,
19
- };
20
-
21
- /*
22
- * A class for calculating message digests using the MD5
23
- * Message-Digest Algorithm by RSA Data Security, Inc., described in
24
- * RFC1321.
25
- */
26
- void
27
- Init_md5()
28
- {
29
- VALUE mDigest, cDigest_Base, cDigest_MD5;
30
-
31
- // rb_require("digest"); (Commenting this avoids strange errors)
32
-
33
- mDigest = rb_path2class("Digest");
34
- cDigest_Base = rb_path2class("Digest::Base");
35
-
36
- cDigest_MD5 = rb_define_class_under(mDigest, "MD5", cDigest_Base);
37
-
38
- rb_ivar_set(cDigest_MD5, rb_intern("metadata"),
39
- Data_Wrap_Struct(rb_cObject, 0, 0, &md5));
40
- }
@@ -1,457 +0,0 @@
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 **********************/