@leocuvee/wrkzcoin-multi-hashing 0.0.20

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.
Files changed (314) hide show
  1. package/.travis.yml +5 -0
  2. package/LICENSE +674 -0
  3. package/README.md +87 -0
  4. package/appveyor.yml +12 -0
  5. package/argon2/.gitattributes +10 -0
  6. package/argon2/.travis.yml +25 -0
  7. package/argon2/Argon2.sln +160 -0
  8. package/argon2/CHANGELOG.md +32 -0
  9. package/argon2/CMakeLists.txt +87 -0
  10. package/argon2/LICENSE +314 -0
  11. package/argon2/Makefile +196 -0
  12. package/argon2/README.md +297 -0
  13. package/argon2/appveyor.yml +40 -0
  14. package/argon2/argon2-specs.pdf +0 -0
  15. package/argon2/export.sh +7 -0
  16. package/argon2/include/argon2.h +427 -0
  17. package/argon2/latex/CMakeLists.txt +34 -0
  18. package/argon2/latex/IEEEtran.cls +6347 -0
  19. package/argon2/latex/Makefile +18 -0
  20. package/argon2/latex/argon2-specs.tex +920 -0
  21. package/argon2/latex/pics/argon2-par.pdf +0 -0
  22. package/argon2/latex/pics/compression.pdf +0 -0
  23. package/argon2/latex/pics/generic.pdf +0 -0
  24. package/argon2/latex/pics/power-distribution.jpg +0 -0
  25. package/argon2/latex/tradeoff.bib +822 -0
  26. package/argon2/libargon2.pc +16 -0
  27. package/argon2/man/CMakeLists.txt +8 -0
  28. package/argon2/man/argon2.1 +57 -0
  29. package/argon2/meson.build +16 -0
  30. package/argon2/meson_options.txt +1 -0
  31. package/argon2/src/CMakeLists.txt +147 -0
  32. package/argon2/src/argon2.c +452 -0
  33. package/argon2/src/argon2.pc.in +11 -0
  34. package/argon2/src/blake2/blake2-impl.h +156 -0
  35. package/argon2/src/blake2/blake2.h +89 -0
  36. package/argon2/src/blake2/blake2b.c +390 -0
  37. package/argon2/src/blake2/blamka-round-opt.h +471 -0
  38. package/argon2/src/blake2/blamka-round-ref.h +56 -0
  39. package/argon2/src/core.c +634 -0
  40. package/argon2/src/core.h +228 -0
  41. package/argon2/src/encoding.c +467 -0
  42. package/argon2/src/encoding.h +57 -0
  43. package/argon2/src/genkat.h +51 -0
  44. package/argon2/src/meson.build +68 -0
  45. package/argon2/src/opt.c +283 -0
  46. package/argon2/src/optimization/CMakeLists.txt +10 -0
  47. package/argon2/src/ref.c +194 -0
  48. package/argon2/src/thread.c +57 -0
  49. package/argon2/src/thread.h +67 -0
  50. package/argon2/tests/CMakeLists.txt +43 -0
  51. package/argon2/tests/bench.c +111 -0
  52. package/argon2/tests/genkat.c +207 -0
  53. package/argon2/tests/kats/argon2d +12304 -0
  54. package/argon2/tests/kats/argon2d.shasum +1 -0
  55. package/argon2/tests/kats/argon2d_v16 +12304 -0
  56. package/argon2/tests/kats/argon2d_v16.shasum +1 -0
  57. package/argon2/tests/kats/argon2i +12304 -0
  58. package/argon2/tests/kats/argon2i.shasum +1 -0
  59. package/argon2/tests/kats/argon2i_v16 +12304 -0
  60. package/argon2/tests/kats/argon2i_v16.shasum +1 -0
  61. package/argon2/tests/kats/argon2id +12304 -0
  62. package/argon2/tests/kats/argon2id.shasum +1 -0
  63. package/argon2/tests/kats/argon2id_v16 +12304 -0
  64. package/argon2/tests/kats/argon2id_v16.shasum +1 -0
  65. package/argon2/tests/kats/check-sums.ps1 +48 -0
  66. package/argon2/tests/kats/check-sums.sh +16 -0
  67. package/argon2/tests/kats/test.ps1 +132 -0
  68. package/argon2/tests/kats/test.sh +117 -0
  69. package/argon2/tests/meson.build +34 -0
  70. package/argon2/tests/test.c +289 -0
  71. package/argon2/tool/CMakeLists.txt +7 -0
  72. package/argon2/tool/main.c +339 -0
  73. package/argon2/tool/meson.build +8 -0
  74. package/argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj +226 -0
  75. package/argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj.filters +69 -0
  76. package/argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj +226 -0
  77. package/argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj.filters +69 -0
  78. package/argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj +225 -0
  79. package/argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters +66 -0
  80. package/argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj +239 -0
  81. package/argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj.filters +72 -0
  82. package/argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj +227 -0
  83. package/argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj.filters +69 -0
  84. package/argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj +226 -0
  85. package/argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj.filters +69 -0
  86. package/argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj +226 -0
  87. package/argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj.filters +69 -0
  88. package/argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj +225 -0
  89. package/argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters +66 -0
  90. package/argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj +227 -0
  91. package/argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj.filters +72 -0
  92. package/argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj +226 -0
  93. package/argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj.filters +69 -0
  94. package/bcrypt.c +566 -0
  95. package/bcrypt.h +14 -0
  96. package/binding.gyp +93 -0
  97. package/blake.c +17 -0
  98. package/blake.h +16 -0
  99. package/boolberry.cc +11 -0
  100. package/boolberry.h +6 -0
  101. package/build/Makefile +354 -0
  102. package/build/Release/.deps/Release/multihashing.node.d +1 -0
  103. package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/argon2.o.d +8 -0
  104. package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/blake2/blake2b.o.d +8 -0
  105. package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/core.o.d +10 -0
  106. package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/encoding.o.d +8 -0
  107. package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/ref.o.d +14 -0
  108. package/build/Release/.deps/Release/obj.target/multihashing/argon2/src/thread.o.d +5 -0
  109. package/build/Release/.deps/Release/obj.target/multihashing/bcrypt.o.d +4 -0
  110. package/build/Release/.deps/Release/obj.target/multihashing/blake.o.d +7 -0
  111. package/build/Release/.deps/Release/obj.target/multihashing/boolberry.o.d +12 -0
  112. package/build/Release/.deps/Release/obj.target/multihashing/c11.o.d +20 -0
  113. package/build/Release/.deps/Release/obj.target/multihashing/crypto/aesb.o.d +3 -0
  114. package/build/Release/.deps/Release/obj.target/multihashing/crypto/c_blake256.o.d +5 -0
  115. package/build/Release/.deps/Release/obj.target/multihashing/crypto/c_groestl.o.d +10 -0
  116. package/build/Release/.deps/Release/obj.target/multihashing/crypto/c_jh.o.d +9 -0
  117. package/build/Release/.deps/Release/obj.target/multihashing/crypto/c_keccak.o.d +7 -0
  118. package/build/Release/.deps/Release/obj.target/multihashing/crypto/c_skein.o.d +10 -0
  119. package/build/Release/.deps/Release/obj.target/multihashing/crypto/hash.o.d +7 -0
  120. package/build/Release/.deps/Release/obj.target/multihashing/crypto/oaes_lib.o.d +6 -0
  121. package/build/Release/.deps/Release/obj.target/multihashing/crypto/wild_keccak.o.d +8 -0
  122. package/build/Release/.deps/Release/obj.target/multihashing/cryptonight.o.d +18 -0
  123. package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_dark.o.d +18 -0
  124. package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_dark_lite.o.d +18 -0
  125. package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_fast.o.d +18 -0
  126. package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_lite.o.d +18 -0
  127. package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_soft_shell.o.d +18 -0
  128. package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_turtle.o.d +18 -0
  129. package/build/Release/.deps/Release/obj.target/multihashing/cryptonight_turtle_lite.o.d +18 -0
  130. package/build/Release/.deps/Release/obj.target/multihashing/fresh.o.d +10 -0
  131. package/build/Release/.deps/Release/obj.target/multihashing/fugue.o.d +7 -0
  132. package/build/Release/.deps/Release/obj.target/multihashing/groestl.o.d +8 -0
  133. package/build/Release/.deps/Release/obj.target/multihashing/hefty1.o.d +12 -0
  134. package/build/Release/.deps/Release/obj.target/multihashing/keccak.o.d +8 -0
  135. package/build/Release/.deps/Release/obj.target/multihashing/multihashing.o.d +155 -0
  136. package/build/Release/.deps/Release/obj.target/multihashing/nist5.o.d +12 -0
  137. package/build/Release/.deps/Release/obj.target/multihashing/quark.o.d +14 -0
  138. package/build/Release/.deps/Release/obj.target/multihashing/qubit.o.d +12 -0
  139. package/build/Release/.deps/Release/obj.target/multihashing/scryptjane.o.d +30 -0
  140. package/build/Release/.deps/Release/obj.target/multihashing/scryptn.o.d +6 -0
  141. package/build/Release/.deps/Release/obj.target/multihashing/sha1.o.d +24 -0
  142. package/build/Release/.deps/Release/obj.target/multihashing/sha3/aes_helper.o.d +5 -0
  143. package/build/Release/.deps/Release/obj.target/multihashing/sha3/hamsi.o.d +7 -0
  144. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_blake.o.d +6 -0
  145. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_bmw.o.d +6 -0
  146. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_cubehash.o.d +6 -0
  147. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_echo.o.d +7 -0
  148. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_fugue.o.d +6 -0
  149. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_groestl.o.d +6 -0
  150. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_hefty1.o.d +5 -0
  151. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_jh.o.d +6 -0
  152. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_keccak.o.d +6 -0
  153. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_luffa.o.d +6 -0
  154. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_shabal.o.d +6 -0
  155. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_shavite.o.d +7 -0
  156. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_simd.o.d +6 -0
  157. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_skein.o.d +6 -0
  158. package/build/Release/.deps/Release/obj.target/multihashing/sha3/sph_whirlpool.o.d +8 -0
  159. package/build/Release/.deps/Release/obj.target/multihashing/shavite3.o.d +7 -0
  160. package/build/Release/.deps/Release/obj.target/multihashing/skein.o.d +8 -0
  161. package/build/Release/.deps/Release/obj.target/multihashing/x11.o.d +20 -0
  162. package/build/Release/.deps/Release/obj.target/multihashing/x13.o.d +23 -0
  163. package/build/Release/.deps/Release/obj.target/multihashing/x15.o.d +26 -0
  164. package/build/Release/.deps/Release/obj.target/multihashing.node.d +1 -0
  165. package/build/Release/multihashing.node +0 -0
  166. package/build/binding.Makefile +6 -0
  167. package/build/multihashing.target.mk +255 -0
  168. package/c11.c +85 -0
  169. package/c11.h +17 -0
  170. package/crypto/aesb.c +177 -0
  171. package/crypto/c_blake256.c +326 -0
  172. package/crypto/c_blake256.h +43 -0
  173. package/crypto/c_groestl.c +360 -0
  174. package/crypto/c_groestl.h +56 -0
  175. package/crypto/c_jh.c +367 -0
  176. package/crypto/c_jh.h +20 -0
  177. package/crypto/c_keccak.c +112 -0
  178. package/crypto/c_keccak.h +26 -0
  179. package/crypto/c_skein.c +2036 -0
  180. package/crypto/c_skein.h +45 -0
  181. package/crypto/crypto.h +186 -0
  182. package/crypto/cryptonote_core/account.cpp +50 -0
  183. package/crypto/cryptonote_core/account.h +61 -0
  184. package/crypto/cryptonote_core/cryptonote_basic_impl.cpp +186 -0
  185. package/crypto/cryptonote_core/cryptonote_basic_impl.h +65 -0
  186. package/crypto/cryptonote_core/cryptonote_format_utils.cpp +766 -0
  187. package/crypto/cryptonote_core/cryptonote_format_utils.h +30 -0
  188. package/crypto/cryptonote_protocol/cryptonote_protocol_defs.h +152 -0
  189. package/crypto/groestl_tables.h +38 -0
  190. package/crypto/hash-ops.h +57 -0
  191. package/crypto/hash.c +24 -0
  192. package/crypto/hash.h +22 -0
  193. package/crypto/int-util.h +230 -0
  194. package/crypto/oaes_config.h +50 -0
  195. package/crypto/oaes_lib.c +1468 -0
  196. package/crypto/oaes_lib.h +215 -0
  197. package/crypto/skein_port.h +190 -0
  198. package/crypto/variant2_int_sqrt.h +168 -0
  199. package/crypto/wild_keccak.cpp +119 -0
  200. package/crypto/wild_keccak.h +168 -0
  201. package/cryptonight.c +300 -0
  202. package/cryptonight.h +17 -0
  203. package/cryptonight_dark.c +300 -0
  204. package/cryptonight_dark.h +17 -0
  205. package/cryptonight_dark_lite.c +300 -0
  206. package/cryptonight_dark_lite.h +17 -0
  207. package/cryptonight_fast.c +300 -0
  208. package/cryptonight_fast.h +17 -0
  209. package/cryptonight_lite.c +300 -0
  210. package/cryptonight_lite.h +17 -0
  211. package/cryptonight_soft_shell.c +298 -0
  212. package/cryptonight_soft_shell.h +17 -0
  213. package/cryptonight_turtle.c +300 -0
  214. package/cryptonight_turtle.h +17 -0
  215. package/cryptonight_turtle_lite.c +300 -0
  216. package/cryptonight_turtle_lite.h +17 -0
  217. package/fresh.c +42 -0
  218. package/fresh.h +16 -0
  219. package/fugue.c +12 -0
  220. package/fugue.h +16 -0
  221. package/groestl.c +40 -0
  222. package/groestl.h +17 -0
  223. package/hefty1.c +63 -0
  224. package/hefty1.h +16 -0
  225. package/index.js +1 -0
  226. package/keccak.c +14 -0
  227. package/keccak.h +16 -0
  228. package/leocuvee-wrkzcoin-multi-hashing-0.0.20.tgz +0 -0
  229. package/multihashing.cc +699 -0
  230. package/nist5.c +46 -0
  231. package/nist5.h +16 -0
  232. package/package.json +56 -0
  233. package/quark.c +210 -0
  234. package/quark.h +16 -0
  235. package/qubit.c +45 -0
  236. package/qubit.h +16 -0
  237. package/scryptjane/scrypt-jane-chacha.h +132 -0
  238. package/scryptjane/scrypt-jane-hash.h +48 -0
  239. package/scryptjane/scrypt-jane-hash_keccak.h +168 -0
  240. package/scryptjane/scrypt-jane-hash_sha256.h +135 -0
  241. package/scryptjane/scrypt-jane-mix_chacha-avx.h +340 -0
  242. package/scryptjane/scrypt-jane-mix_chacha-sse2.h +371 -0
  243. package/scryptjane/scrypt-jane-mix_chacha-ssse3.h +348 -0
  244. package/scryptjane/scrypt-jane-mix_chacha.h +69 -0
  245. package/scryptjane/scrypt-jane-mix_salsa-avx.h +381 -0
  246. package/scryptjane/scrypt-jane-mix_salsa-sse2.h +443 -0
  247. package/scryptjane/scrypt-jane-mix_salsa.h +70 -0
  248. package/scryptjane/scrypt-jane-pbkdf2.h +112 -0
  249. package/scryptjane/scrypt-jane-portable-x86.h +364 -0
  250. package/scryptjane/scrypt-jane-portable.h +281 -0
  251. package/scryptjane/scrypt-jane-romix-basic.h +67 -0
  252. package/scryptjane/scrypt-jane-romix-template.h +118 -0
  253. package/scryptjane/scrypt-jane-romix.h +27 -0
  254. package/scryptjane/scrypt-jane-salsa.h +106 -0
  255. package/scryptjane/scrypt-jane-test-vectors.h +261 -0
  256. package/scryptjane.c +223 -0
  257. package/scryptjane.h +36 -0
  258. package/scryptn.c +258 -0
  259. package/scryptn.h +16 -0
  260. package/sha1.c +65 -0
  261. package/sha1.h +16 -0
  262. package/sha256.h +440 -0
  263. package/sha3/aes_helper.c +392 -0
  264. package/sha3/hamsi.c +867 -0
  265. package/sha3/hamsi_helper.c +39648 -0
  266. package/sha3/md_helper.c +347 -0
  267. package/sha3/sph_blake.c +1114 -0
  268. package/sha3/sph_blake.h +327 -0
  269. package/sha3/sph_bmw.c +965 -0
  270. package/sha3/sph_bmw.h +328 -0
  271. package/sha3/sph_cubehash.c +723 -0
  272. package/sha3/sph_cubehash.h +292 -0
  273. package/sha3/sph_echo.c +1031 -0
  274. package/sha3/sph_echo.h +320 -0
  275. package/sha3/sph_fugue.c +1208 -0
  276. package/sha3/sph_fugue.h +81 -0
  277. package/sha3/sph_groestl.c +3119 -0
  278. package/sha3/sph_groestl.h +329 -0
  279. package/sha3/sph_hamsi.h +321 -0
  280. package/sha3/sph_hefty1.c +378 -0
  281. package/sha3/sph_hefty1.h +66 -0
  282. package/sha3/sph_jh.c +1116 -0
  283. package/sha3/sph_jh.h +298 -0
  284. package/sha3/sph_keccak.c +1824 -0
  285. package/sha3/sph_keccak.h +293 -0
  286. package/sha3/sph_luffa.c +1426 -0
  287. package/sha3/sph_luffa.h +296 -0
  288. package/sha3/sph_shabal.c +806 -0
  289. package/sha3/sph_shabal.h +344 -0
  290. package/sha3/sph_shavite.c +1764 -0
  291. package/sha3/sph_shavite.h +314 -0
  292. package/sha3/sph_simd.c +1799 -0
  293. package/sha3/sph_simd.h +309 -0
  294. package/sha3/sph_skein.c +1254 -0
  295. package/sha3/sph_skein.h +298 -0
  296. package/sha3/sph_types.h +1976 -0
  297. package/sha3/sph_whirlpool.c +3480 -0
  298. package/sha3/sph_whirlpool.h +209 -0
  299. package/shavite3.c +24 -0
  300. package/shavite3.h +16 -0
  301. package/skein.c +26 -0
  302. package/skein.h +16 -0
  303. package/stdint.h +259 -0
  304. package/tests/argon2-tests.js +16 -0
  305. package/tests/benchmark.js +36 -0
  306. package/tests/cryptonight-tests.js +189 -0
  307. package/tests/cryptonight_monero.js +53 -0
  308. package/tests/test.js +16 -0
  309. package/x11.c +85 -0
  310. package/x11.h +16 -0
  311. package/x13.c +97 -0
  312. package/x13.h +5 -0
  313. package/x15.c +106 -0
  314. package/x15.h +16 -0
@@ -0,0 +1,347 @@
1
+ /* $Id: md_helper.c 216 2010-06-08 09:46:57Z tp $ */
2
+ /*
3
+ * This file contains some functions which implement the external data
4
+ * handling and padding for Merkle-Damgard hash functions which follow
5
+ * the conventions set out by MD4 (little-endian) or SHA-1 (big-endian).
6
+ *
7
+ * API: this file is meant to be included, not compiled as a stand-alone
8
+ * file. Some macros must be defined:
9
+ * RFUN name for the round function
10
+ * HASH "short name" for the hash function
11
+ * BE32 defined for big-endian, 32-bit based (e.g. SHA-1)
12
+ * LE32 defined for little-endian, 32-bit based (e.g. MD5)
13
+ * BE64 defined for big-endian, 64-bit based (e.g. SHA-512)
14
+ * LE64 defined for little-endian, 64-bit based (no example yet)
15
+ * PW01 if defined, append 0x01 instead of 0x80 (for Tiger)
16
+ * BLEN if defined, length of a message block (in bytes)
17
+ * PLW1 if defined, length is defined on one 64-bit word only (for Tiger)
18
+ * PLW4 if defined, length is defined on four 64-bit words (for WHIRLPOOL)
19
+ * SVAL if defined, reference to the context state information
20
+ *
21
+ * BLEN is used when a message block is not 16 (32-bit or 64-bit) words:
22
+ * this is used for instance for Tiger, which works on 64-bit words but
23
+ * uses 512-bit message blocks (eight 64-bit words). PLW1 and PLW4 are
24
+ * ignored if 32-bit words are used; if 64-bit words are used and PLW1 is
25
+ * set, then only one word (64 bits) will be used to encode the input
26
+ * message length (in bits), otherwise two words will be used (as in
27
+ * SHA-384 and SHA-512). If 64-bit words are used and PLW4 is defined (but
28
+ * not PLW1), four 64-bit words will be used to encode the message length
29
+ * (in bits). Note that regardless of those settings, only 64-bit message
30
+ * lengths are supported (in bits): messages longer than 2 Exabytes will be
31
+ * improperly hashed (this is unlikely to happen soon: 2 Exabytes is about
32
+ * 2 millions Terabytes, which is huge).
33
+ *
34
+ * If CLOSE_ONLY is defined, then this file defines only the sph_XXX_close()
35
+ * function. This is used for Tiger2, which is identical to Tiger except
36
+ * when it comes to the padding (Tiger2 uses the standard 0x80 byte instead
37
+ * of the 0x01 from original Tiger).
38
+ *
39
+ * The RFUN function is invoked with two arguments, the first pointing to
40
+ * aligned data (as a "const void *"), the second being state information
41
+ * from the context structure. By default, this state information is the
42
+ * "val" field from the context, and this field is assumed to be an array
43
+ * of words ("sph_u32" or "sph_u64", depending on BE32/LE32/BE64/LE64).
44
+ * from the context structure. The "val" field can have any type, except
45
+ * for the output encoding which assumes that it is an array of "sph_u32"
46
+ * values. By defining NO_OUTPUT, this last step is deactivated; the
47
+ * includer code is then responsible for writing out the hash result. When
48
+ * NO_OUTPUT is defined, the third parameter to the "close()" function is
49
+ * ignored.
50
+ *
51
+ * ==========================(LICENSE BEGIN)============================
52
+ *
53
+ * Copyright (c) 2007-2010 Projet RNRT SAPHIR
54
+ *
55
+ * Permission is hereby granted, free of charge, to any person obtaining
56
+ * a copy of this software and associated documentation files (the
57
+ * "Software"), to deal in the Software without restriction, including
58
+ * without limitation the rights to use, copy, modify, merge, publish,
59
+ * distribute, sublicense, and/or sell copies of the Software, and to
60
+ * permit persons to whom the Software is furnished to do so, subject to
61
+ * the following conditions:
62
+ *
63
+ * The above copyright notice and this permission notice shall be
64
+ * included in all copies or substantial portions of the Software.
65
+ *
66
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
67
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
68
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
69
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
70
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
71
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
72
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
73
+ *
74
+ * ===========================(LICENSE END)=============================
75
+ *
76
+ * @author Thomas Pornin <thomas.pornin@cryptolog.com>
77
+ */
78
+
79
+
80
+ #ifdef _MSC_VER
81
+ #pragma warning (disable: 4146)
82
+ #endif
83
+
84
+ #undef SPH_XCAT
85
+ #define SPH_XCAT(a, b) SPH_XCAT_(a, b)
86
+ #undef SPH_XCAT_
87
+ #define SPH_XCAT_(a, b) a ## b
88
+
89
+ #undef SPH_BLEN
90
+ #undef SPH_WLEN
91
+ #if defined BE64 || defined LE64
92
+ #define SPH_BLEN 128U
93
+ #define SPH_WLEN 8U
94
+ #else
95
+ #define SPH_BLEN 64U
96
+ #define SPH_WLEN 4U
97
+ #endif
98
+
99
+ #ifdef BLEN
100
+ #undef SPH_BLEN
101
+ #define SPH_BLEN BLEN
102
+ #endif
103
+
104
+ #undef SPH_MAXPAD
105
+ #if defined PLW1
106
+ #define SPH_MAXPAD (SPH_BLEN - SPH_WLEN)
107
+ #elif defined PLW4
108
+ #define SPH_MAXPAD (SPH_BLEN - (SPH_WLEN << 2))
109
+ #else
110
+ #define SPH_MAXPAD (SPH_BLEN - (SPH_WLEN << 1))
111
+ #endif
112
+
113
+ #undef SPH_VAL
114
+ #undef SPH_NO_OUTPUT
115
+ #ifdef SVAL
116
+ #define SPH_VAL SVAL
117
+ #define SPH_NO_OUTPUT 1
118
+ #else
119
+ #define SPH_VAL sc->val
120
+ #endif
121
+
122
+ #ifndef CLOSE_ONLY
123
+
124
+ #ifdef SPH_UPTR
125
+ static void
126
+ SPH_XCAT(HASH, _short)(void *cc, const void *data, size_t len)
127
+ #else
128
+ void
129
+ SPH_XCAT(sph_, HASH)(void *cc, const void *data, size_t len)
130
+ #endif
131
+ {
132
+ SPH_XCAT(sph_, SPH_XCAT(HASH, _context)) *sc;
133
+ unsigned current;
134
+
135
+ sc = cc;
136
+ #if SPH_64
137
+ current = (unsigned)sc->count & (SPH_BLEN - 1U);
138
+ #else
139
+ current = (unsigned)sc->count_low & (SPH_BLEN - 1U);
140
+ #endif
141
+ while (len > 0) {
142
+ unsigned clen;
143
+ #if !SPH_64
144
+ sph_u32 clow, clow2;
145
+ #endif
146
+
147
+ clen = SPH_BLEN - current;
148
+ if (clen > len)
149
+ clen = len;
150
+ memcpy(sc->buf + current, data, clen);
151
+ data = (const unsigned char *)data + clen;
152
+ current += clen;
153
+ len -= clen;
154
+ if (current == SPH_BLEN) {
155
+ RFUN(sc->buf, SPH_VAL);
156
+ current = 0;
157
+ }
158
+ #if SPH_64
159
+ sc->count += clen;
160
+ #else
161
+ clow = sc->count_low;
162
+ clow2 = SPH_T32(clow + clen);
163
+ sc->count_low = clow2;
164
+ if (clow2 < clow)
165
+ sc->count_high ++;
166
+ #endif
167
+ }
168
+ }
169
+
170
+ #ifdef SPH_UPTR
171
+ void
172
+ SPH_XCAT(sph_, HASH)(void *cc, const void *data, size_t len)
173
+ {
174
+ SPH_XCAT(sph_, SPH_XCAT(HASH, _context)) *sc;
175
+ unsigned current;
176
+ size_t orig_len;
177
+ #if !SPH_64
178
+ sph_u32 clow, clow2;
179
+ #endif
180
+
181
+ if (len < (2 * SPH_BLEN)) {
182
+ SPH_XCAT(HASH, _short)(cc, data, len);
183
+ return;
184
+ }
185
+ sc = cc;
186
+ #if SPH_64
187
+ current = (unsigned)sc->count & (SPH_BLEN - 1U);
188
+ #else
189
+ current = (unsigned)sc->count_low & (SPH_BLEN - 1U);
190
+ #endif
191
+ if (current > 0) {
192
+ unsigned t;
193
+
194
+ t = SPH_BLEN - current;
195
+ SPH_XCAT(HASH, _short)(cc, data, t);
196
+ data = (const unsigned char *)data + t;
197
+ len -= t;
198
+ }
199
+ #if !SPH_UNALIGNED
200
+ if (((SPH_UPTR)data & (SPH_WLEN - 1U)) != 0) {
201
+ SPH_XCAT(HASH, _short)(cc, data, len);
202
+ return;
203
+ }
204
+ #endif
205
+ orig_len = len;
206
+ while (len >= SPH_BLEN) {
207
+ RFUN(data, SPH_VAL);
208
+ len -= SPH_BLEN;
209
+ data = (const unsigned char *)data + SPH_BLEN;
210
+ }
211
+ if (len > 0)
212
+ memcpy(sc->buf, data, len);
213
+ #if SPH_64
214
+ sc->count += (sph_u64)orig_len;
215
+ #else
216
+ clow = sc->count_low;
217
+ clow2 = SPH_T32(clow + orig_len);
218
+ sc->count_low = clow2;
219
+ if (clow2 < clow)
220
+ sc->count_high ++;
221
+ /*
222
+ * This code handles the improbable situation where "size_t" is
223
+ * greater than 32 bits, and yet we do not have a 64-bit type.
224
+ */
225
+ orig_len >>= 12;
226
+ orig_len >>= 10;
227
+ orig_len >>= 10;
228
+ sc->count_high += orig_len;
229
+ #endif
230
+ }
231
+ #endif
232
+
233
+ #endif
234
+
235
+ /*
236
+ * Perform padding and produce result. The context is NOT reinitialized
237
+ * by this function.
238
+ */
239
+ static void
240
+ SPH_XCAT(HASH, _addbits_and_close)(void *cc,
241
+ unsigned ub, unsigned n, void *dst, unsigned rnum)
242
+ {
243
+ SPH_XCAT(sph_, SPH_XCAT(HASH, _context)) *sc;
244
+ unsigned current, u;
245
+ #if !SPH_64
246
+ sph_u32 low, high;
247
+ #endif
248
+
249
+ sc = cc;
250
+ #if SPH_64
251
+ current = (unsigned)sc->count & (SPH_BLEN - 1U);
252
+ #else
253
+ current = (unsigned)sc->count_low & (SPH_BLEN - 1U);
254
+ #endif
255
+ #ifdef PW01
256
+ sc->buf[current ++] = (0x100 | (ub & 0xFF)) >> (8 - n);
257
+ #else
258
+ {
259
+ unsigned z;
260
+
261
+ z = 0x80 >> n;
262
+ sc->buf[current ++] = ((ub & -z) | z) & 0xFF;
263
+ }
264
+ #endif
265
+ if (current > SPH_MAXPAD) {
266
+ memset(sc->buf + current, 0, SPH_BLEN - current);
267
+ RFUN(sc->buf, SPH_VAL);
268
+ memset(sc->buf, 0, SPH_MAXPAD);
269
+ } else {
270
+ memset(sc->buf + current, 0, SPH_MAXPAD - current);
271
+ }
272
+ #if defined BE64
273
+ #if defined PLW1
274
+ sph_enc64be_aligned(sc->buf + SPH_MAXPAD,
275
+ SPH_T64(sc->count << 3) + (sph_u64)n);
276
+ #elif defined PLW4
277
+ memset(sc->buf + SPH_MAXPAD, 0, 2 * SPH_WLEN);
278
+ sph_enc64be_aligned(sc->buf + SPH_MAXPAD + 2 * SPH_WLEN,
279
+ sc->count >> 61);
280
+ sph_enc64be_aligned(sc->buf + SPH_MAXPAD + 3 * SPH_WLEN,
281
+ SPH_T64(sc->count << 3) + (sph_u64)n);
282
+ #else
283
+ sph_enc64be_aligned(sc->buf + SPH_MAXPAD, sc->count >> 61);
284
+ sph_enc64be_aligned(sc->buf + SPH_MAXPAD + SPH_WLEN,
285
+ SPH_T64(sc->count << 3) + (sph_u64)n);
286
+ #endif
287
+ #elif defined LE64
288
+ #if defined PLW1
289
+ sph_enc64le_aligned(sc->buf + SPH_MAXPAD,
290
+ SPH_T64(sc->count << 3) + (sph_u64)n);
291
+ #elif defined PLW1
292
+ sph_enc64le_aligned(sc->buf + SPH_MAXPAD,
293
+ SPH_T64(sc->count << 3) + (sph_u64)n);
294
+ sph_enc64le_aligned(sc->buf + SPH_MAXPAD + SPH_WLEN, sc->count >> 61);
295
+ memset(sc->buf + SPH_MAXPAD + 2 * SPH_WLEN, 0, 2 * SPH_WLEN);
296
+ #else
297
+ sph_enc64le_aligned(sc->buf + SPH_MAXPAD,
298
+ SPH_T64(sc->count << 3) + (sph_u64)n);
299
+ sph_enc64le_aligned(sc->buf + SPH_MAXPAD + SPH_WLEN, sc->count >> 61);
300
+ #endif
301
+ #else
302
+ #if SPH_64
303
+ #ifdef BE32
304
+ sph_enc64be_aligned(sc->buf + SPH_MAXPAD,
305
+ SPH_T64(sc->count << 3) + (sph_u64)n);
306
+ #else
307
+ sph_enc64le_aligned(sc->buf + SPH_MAXPAD,
308
+ SPH_T64(sc->count << 3) + (sph_u64)n);
309
+ #endif
310
+ #else
311
+ low = sc->count_low;
312
+ high = SPH_T32((sc->count_high << 3) | (low >> 29));
313
+ low = SPH_T32(low << 3) + (sph_u32)n;
314
+ #ifdef BE32
315
+ sph_enc32be(sc->buf + SPH_MAXPAD, high);
316
+ sph_enc32be(sc->buf + SPH_MAXPAD + SPH_WLEN, low);
317
+ #else
318
+ sph_enc32le(sc->buf + SPH_MAXPAD, low);
319
+ sph_enc32le(sc->buf + SPH_MAXPAD + SPH_WLEN, high);
320
+ #endif
321
+ #endif
322
+ #endif
323
+ RFUN(sc->buf, SPH_VAL);
324
+ #ifdef SPH_NO_OUTPUT
325
+ (void)dst;
326
+ (void)rnum;
327
+ (void)u;
328
+ #else
329
+ for (u = 0; u < rnum; u ++) {
330
+ #if defined BE64
331
+ sph_enc64be((unsigned char *)dst + 8 * u, sc->val[u]);
332
+ #elif defined LE64
333
+ sph_enc64le((unsigned char *)dst + 8 * u, sc->val[u]);
334
+ #elif defined BE32
335
+ sph_enc32be((unsigned char *)dst + 4 * u, sc->val[u]);
336
+ #else
337
+ sph_enc32le((unsigned char *)dst + 4 * u, sc->val[u]);
338
+ #endif
339
+ }
340
+ #endif
341
+ }
342
+
343
+ static void
344
+ SPH_XCAT(HASH, _close)(void *cc, void *dst, unsigned rnum)
345
+ {
346
+ SPH_XCAT(HASH, _addbits_and_close)(cc, 0, 0, dst, rnum);
347
+ }