@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,699 @@
1
+ #include <node.h>
2
+ #include <node_buffer.h>
3
+ #include <v8.h>
4
+ #include <stdint.h>
5
+ #include <cstring>
6
+
7
+ extern "C" {
8
+ #include "argon2.h"
9
+ #include "bcrypt.h"
10
+ #include "blake.h"
11
+ #include "c11.h"
12
+ #include "cryptonight.h"
13
+ #include "cryptonight_dark.h"
14
+ #include "cryptonight_dark_lite.h"
15
+ #include "cryptonight_fast.h"
16
+ #include "cryptonight_lite.h"
17
+ #include "cryptonight_turtle.h"
18
+ #include "cryptonight_turtle_lite.h"
19
+ #include "cryptonight_soft_shell.h"
20
+ #include "fresh.h"
21
+ #include "fugue.h"
22
+ #include "groestl.h"
23
+ #include "hefty1.h"
24
+ #include "keccak.h"
25
+ #include "nist5.h"
26
+ #include "quark.h"
27
+ #include "qubit.h"
28
+ #include "scryptjane.h"
29
+ #include "scryptn.h"
30
+ #include "sha1.h"
31
+ #include "shavite3.h"
32
+ #include "skein.h"
33
+ #include "x11.h"
34
+ #include "x13.h"
35
+ #include "x15.h"
36
+ }
37
+
38
+ #include "boolberry.h"
39
+
40
+ using namespace node;
41
+ using namespace v8;
42
+
43
+ #if NODE_MAJOR_VERSION >= 4
44
+
45
+ #define DECLARE_INIT(x) \
46
+ void x(Local<Object> exports)
47
+
48
+ #define DECLARE_FUNC(x) \
49
+ void x(const FunctionCallbackInfo<Value>& args)
50
+
51
+ #define DECLARE_SCOPE \
52
+ v8::Isolate* isolate = args.GetIsolate();
53
+
54
+ #define SET_BUFFER_RETURN(x, len) \
55
+ args.GetReturnValue().Set(Buffer::Copy(isolate, x, len).ToLocalChecked());
56
+
57
+ #define SET_BOOLEAN_RETURN(x) \
58
+ args.GetReturnValue().Set(Boolean::New(isolate, x));
59
+
60
+ #define RETURN_EXCEPT(msg) \
61
+ do { \
62
+ isolate->ThrowException(Exception::Error(String::NewFromUtf8(isolate, msg).ToLocalChecked())); \
63
+ return; \
64
+ } while (0)
65
+
66
+ #else
67
+
68
+ #define DECLARE_INIT(x) \
69
+ void x(Handle<Object> exports)
70
+
71
+ #define DECLARE_FUNC(x) \
72
+ Handle<Value> x(const Arguments& args)
73
+
74
+ #define DECLARE_SCOPE \
75
+ HandleScope scope
76
+
77
+ #define SET_BUFFER_RETURN(x, len) \
78
+ do { \
79
+ Buffer* buff = Buffer::New(x, len); \
80
+ return scope.Close(buff->handle_); \
81
+ } while (0)
82
+
83
+ #define SET_BOOLEAN_RETURN(x) \
84
+ return scope.Close(Boolean::New(x));
85
+
86
+ #define RETURN_EXCEPT(msg) \
87
+ return ThrowException(Exception::Error(String::New(msg)))
88
+
89
+ #endif // NODE_MAJOR_VERSION
90
+
91
+ #define DECLARE_CALLBACK(name, hash, output_len) \
92
+ DECLARE_FUNC(name) { \
93
+ DECLARE_SCOPE; \
94
+ \
95
+ if (args.Length() < 1) \
96
+ RETURN_EXCEPT("You must provide one argument."); \
97
+ \
98
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(); \
99
+ \
100
+ if(!Buffer::HasInstance(target)) \
101
+ RETURN_EXCEPT("Argument should be a buffer object."); \
102
+ \
103
+ char * input = Buffer::Data(target); \
104
+ char output[32]; \
105
+ \
106
+ uint32_t input_len = Buffer::Length(target); \
107
+ \
108
+ hash(input, output, input_len); \
109
+ \
110
+ SET_BUFFER_RETURN(output, output_len); \
111
+ }
112
+
113
+ DECLARE_CALLBACK(bcrypt, bcrypt_hash, 32);
114
+ DECLARE_CALLBACK(blake, blake_hash, 32);
115
+ DECLARE_CALLBACK(c11, c11_hash, 32);
116
+ DECLARE_CALLBACK(fresh, fresh_hash, 32);
117
+ DECLARE_CALLBACK(fugue, fugue_hash, 32);
118
+ DECLARE_CALLBACK(groestl, groestl_hash, 32);
119
+ DECLARE_CALLBACK(groestlmyriad, groestlmyriad_hash, 32);
120
+ DECLARE_CALLBACK(hefty1, hefty1_hash, 32);
121
+ DECLARE_CALLBACK(keccak, keccak_hash, 32);
122
+ DECLARE_CALLBACK(nist5, nist5_hash, 32);
123
+ DECLARE_CALLBACK(quark, quark_hash, 32);
124
+ DECLARE_CALLBACK(qubit, qubit_hash, 32);
125
+ DECLARE_CALLBACK(sha1, sha1_hash, 32);
126
+ DECLARE_CALLBACK(shavite3, shavite3_hash, 32);
127
+ DECLARE_CALLBACK(skein, skein_hash, 32);
128
+ DECLARE_CALLBACK(x11, x11_hash, 32);
129
+ DECLARE_CALLBACK(x13, x13_hash, 32);
130
+ DECLARE_CALLBACK(x15, x15_hash, 32);
131
+
132
+
133
+ DECLARE_FUNC(scrypt) {
134
+ DECLARE_SCOPE;
135
+
136
+ if (args.Length() < 3)
137
+ RETURN_EXCEPT("You must provide buffer to hash, N value, and R value");
138
+
139
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
140
+
141
+ if(!Buffer::HasInstance(target))
142
+ RETURN_EXCEPT("Argument should be a buffer object.");
143
+
144
+ unsigned int nValue = args[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
145
+ unsigned int rValue = args[2]->Uint32Value(isolate->GetCurrentContext()).FromJust();
146
+
147
+ char * input = Buffer::Data(target);
148
+ char output[32];
149
+
150
+ uint32_t input_len = Buffer::Length(target);
151
+
152
+ scrypt_N_R_1_256(input, output, nValue, rValue, input_len);
153
+
154
+ SET_BUFFER_RETURN(output, 32);
155
+ }
156
+
157
+ DECLARE_FUNC(scryptn) {
158
+ DECLARE_SCOPE;
159
+
160
+ if (args.Length() < 2)
161
+ RETURN_EXCEPT("You must provide buffer to hash and N factor.");
162
+
163
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
164
+
165
+ if(!Buffer::HasInstance(target))
166
+ RETURN_EXCEPT("Argument should be a buffer object.");
167
+
168
+ unsigned int nFactor = args[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
169
+
170
+ char * input = Buffer::Data(target);
171
+ char output[32];
172
+
173
+ uint32_t input_len = Buffer::Length(target);
174
+
175
+ //unsigned int N = 1 << (getNfactor(input) + 1);
176
+ unsigned int N = 1 << nFactor;
177
+
178
+ scrypt_N_R_1_256(input, output, N, 1, input_len); //hardcode for now to R=1 for now
179
+
180
+ SET_BUFFER_RETURN(output, 32);
181
+ }
182
+
183
+ DECLARE_FUNC(scryptjane) {
184
+ DECLARE_SCOPE;
185
+
186
+ if (args.Length() < 5)
187
+ RETURN_EXCEPT("You must provide two argument: buffer, timestamp as number, and nChainStarTime as number, nMin, and nMax");
188
+
189
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
190
+
191
+ if(!Buffer::HasInstance(target))
192
+ RETURN_EXCEPT("First should be a buffer object.");
193
+
194
+ int timestamp = args[1]->Int32Value(isolate->GetCurrentContext()).FromJust();
195
+ int nChainStartTime = args[2]->Int32Value(isolate->GetCurrentContext()).FromJust();
196
+ int nMin = args[3]->Int32Value(isolate->GetCurrentContext()).FromJust();
197
+ int nMax = args[4]->Int32Value(isolate->GetCurrentContext()).FromJust();
198
+
199
+ char * input = Buffer::Data(target);
200
+ char output[32];
201
+
202
+ uint32_t input_len = Buffer::Length(target);
203
+
204
+ scryptjane_hash(input, input_len, (uint32_t *)output, GetNfactorJane(timestamp, nChainStartTime, nMin, nMax));
205
+
206
+ SET_BUFFER_RETURN(output, 32);
207
+ }
208
+
209
+ DECLARE_FUNC(cryptonight) {
210
+ DECLARE_SCOPE;
211
+
212
+ bool fast = false;
213
+ uint32_t cn_variant = 0;
214
+
215
+ if (args.Length() < 1)
216
+ RETURN_EXCEPT("You must provide one argument.");
217
+
218
+ if (args.Length() >= 2) {
219
+ if(args[1]->IsBoolean())
220
+ fast = args[1]->BooleanValue(isolate);
221
+ else if(args[1]->IsUint32())
222
+ cn_variant = args[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
223
+ else
224
+ RETURN_EXCEPT("Argument 2 should be a boolean or uint32_t");
225
+ }
226
+
227
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
228
+
229
+ if(!Buffer::HasInstance(target))
230
+ RETURN_EXCEPT("Argument should be a buffer object.");
231
+
232
+ char * input = Buffer::Data(target);
233
+ char output[32];
234
+
235
+ uint32_t input_len = Buffer::Length(target);
236
+
237
+ if(fast)
238
+ cryptonight_fast_hash(input, output, input_len);
239
+ else {
240
+ if (cn_variant > 0 && input_len < 43)
241
+ RETURN_EXCEPT("Argument must be 43 bytes for monero variant 1+");
242
+ cryptonight_hash(input, output, input_len, cn_variant);
243
+ }
244
+ SET_BUFFER_RETURN(output, 32);
245
+ }
246
+
247
+ DECLARE_FUNC(cryptonightdark) {
248
+ DECLARE_SCOPE;
249
+
250
+ bool fast = false;
251
+ uint32_t cn_variant = 0;
252
+
253
+ if (args.Length() < 1)
254
+ RETURN_EXCEPT("You must provide one argument.");
255
+
256
+ if (args.Length() >= 2) {
257
+ if(args[1]->IsBoolean())
258
+ fast = args[1]->BooleanValue(isolate);
259
+ else if(args[1]->IsUint32())
260
+ cn_variant = args[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
261
+ else
262
+ RETURN_EXCEPT("Argument 2 should be a boolean or uint32_t");
263
+ }
264
+
265
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
266
+
267
+ if(!Buffer::HasInstance(target))
268
+ RETURN_EXCEPT("Argument should be a buffer object.");
269
+
270
+ char * input = Buffer::Data(target);
271
+ char output[32];
272
+
273
+ uint32_t input_len = Buffer::Length(target);
274
+
275
+ if(fast)
276
+ cryptonightdark_fast_hash(input, output, input_len);
277
+ else {
278
+ if (cn_variant > 0 && input_len < 43)
279
+ RETURN_EXCEPT("Argument must be 43 bytes for monero variant 1+");
280
+ cryptonightdark_hash(input, output, input_len, cn_variant);
281
+ }
282
+ SET_BUFFER_RETURN(output, 32);
283
+ }
284
+
285
+ DECLARE_FUNC(cryptonightdarklite) {
286
+ DECLARE_SCOPE;
287
+
288
+ bool fast = false;
289
+ uint32_t cn_variant = 0;
290
+
291
+ if (args.Length() < 1)
292
+ RETURN_EXCEPT("You must provide one argument.");
293
+
294
+ if (args.Length() >= 2) {
295
+ if(args[1]->IsBoolean())
296
+ fast = args[1]->BooleanValue(isolate);
297
+ else if(args[1]->IsUint32())
298
+ cn_variant = args[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
299
+ else
300
+ RETURN_EXCEPT("Argument 2 should be a boolean or uint32_t");
301
+ }
302
+
303
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
304
+
305
+ if(!Buffer::HasInstance(target))
306
+ RETURN_EXCEPT("Argument should be a buffer object.");
307
+
308
+ char * input = Buffer::Data(target);
309
+ char output[32];
310
+
311
+ uint32_t input_len = Buffer::Length(target);
312
+
313
+ if(fast)
314
+ cryptonightdarklite_fast_hash(input, output, input_len);
315
+ else {
316
+ if (cn_variant > 0 && input_len < 43)
317
+ RETURN_EXCEPT("Argument must be 43 bytes for monero variant 1+");
318
+ cryptonightdarklite_hash(input, output, input_len, cn_variant);
319
+ }
320
+ SET_BUFFER_RETURN(output, 32);
321
+ }
322
+
323
+ DECLARE_FUNC(cryptonightlite) {
324
+ DECLARE_SCOPE;
325
+
326
+ bool fast = false;
327
+ uint32_t cn_variant = 0;
328
+
329
+ if (args.Length() < 1)
330
+ RETURN_EXCEPT("You must provide one argument.");
331
+
332
+ if (args.Length() >= 2) {
333
+ if(args[1]->IsBoolean())
334
+ fast = args[1]->BooleanValue(isolate);
335
+ else if(args[1]->IsUint32())
336
+ cn_variant = args[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
337
+ else
338
+ RETURN_EXCEPT("Argument 2 should be a boolean or uint32_t");
339
+ }
340
+
341
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
342
+
343
+ if(!Buffer::HasInstance(target))
344
+ RETURN_EXCEPT("Argument should be a buffer object.");
345
+
346
+ char * input = Buffer::Data(target);
347
+ char output[32];
348
+
349
+ uint32_t input_len = Buffer::Length(target);
350
+
351
+ if(fast)
352
+ cryptonightlite_fast_hash(input, output, input_len);
353
+ else {
354
+ if (cn_variant > 0 && input_len < 43)
355
+ RETURN_EXCEPT("Argument must be 43 bytes for monero variant 1+");
356
+ cryptonightlite_hash(input, output, input_len, cn_variant);
357
+ }
358
+ SET_BUFFER_RETURN(output, 32);
359
+ }
360
+
361
+ DECLARE_FUNC(cryptonightturtle) {
362
+ DECLARE_SCOPE;
363
+
364
+ bool fast = false;
365
+ uint32_t cn_variant = 0;
366
+
367
+ if (args.Length() < 1)
368
+ RETURN_EXCEPT("You must provide one argument.");
369
+
370
+ if (args.Length() >= 2) {
371
+ if(args[1]->IsBoolean())
372
+ fast = args[1]->BooleanValue(isolate);
373
+ else if(args[1]->IsUint32())
374
+ cn_variant = args[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
375
+ else
376
+ RETURN_EXCEPT("Argument 2 should be a boolean or uint32_t");
377
+ }
378
+
379
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
380
+
381
+ if(!Buffer::HasInstance(target))
382
+ RETURN_EXCEPT("Argument should be a buffer object.");
383
+
384
+ char * input = Buffer::Data(target);
385
+ char output[32];
386
+
387
+ uint32_t input_len = Buffer::Length(target);
388
+
389
+ if(fast)
390
+ cryptonightturtle_fast_hash(input, output, input_len);
391
+ else {
392
+ if (cn_variant > 0 && input_len < 43)
393
+ RETURN_EXCEPT("Argument must be 43 bytes for monero variant 1+");
394
+ cryptonightturtle_hash(input, output, input_len, cn_variant);
395
+ }
396
+ SET_BUFFER_RETURN(output, 32);
397
+ }
398
+
399
+ DECLARE_FUNC(cryptonightturtlelite) {
400
+ DECLARE_SCOPE;
401
+
402
+ bool fast = false;
403
+ uint32_t cn_variant = 0;
404
+
405
+ if (args.Length() < 1)
406
+ RETURN_EXCEPT("You must provide one argument.");
407
+
408
+ if (args.Length() >= 2) {
409
+ if(args[1]->IsBoolean())
410
+ fast = args[1]->BooleanValue(isolate);
411
+ else if(args[1]->IsUint32())
412
+ cn_variant = args[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
413
+ else
414
+ RETURN_EXCEPT("Argument 2 should be a boolean or uint32_t");
415
+ }
416
+
417
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
418
+
419
+ if(!Buffer::HasInstance(target))
420
+ RETURN_EXCEPT("Argument should be a buffer object.");
421
+
422
+ char * input = Buffer::Data(target);
423
+ char output[32];
424
+
425
+ uint32_t input_len = Buffer::Length(target);
426
+
427
+ if(fast)
428
+ cryptonightturtlelite_fast_hash(input, output, input_len);
429
+ else {
430
+ if (cn_variant > 0 && input_len < 43)
431
+ RETURN_EXCEPT("Argument must be 43 bytes for monero variant 1+");
432
+ cryptonightturtlelite_hash(input, output, input_len, cn_variant);
433
+ }
434
+ SET_BUFFER_RETURN(output, 32);
435
+ }
436
+
437
+ DECLARE_FUNC(cryptonightfast) {
438
+ DECLARE_SCOPE;
439
+
440
+ bool fast = false;
441
+ uint32_t cn_variant = 0;
442
+
443
+ if (args.Length() < 1)
444
+ RETURN_EXCEPT("You must provide one argument.");
445
+
446
+ if (args.Length() >= 2) {
447
+ if(args[1]->IsBoolean())
448
+ fast = args[1]->BooleanValue(isolate);
449
+ else if(args[1]->IsUint32())
450
+ cn_variant = args[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
451
+ else
452
+ RETURN_EXCEPT("Argument 2 should be a boolean or uint32_t");
453
+ }
454
+
455
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
456
+
457
+ if(!Buffer::HasInstance(target))
458
+ RETURN_EXCEPT("Argument should be a buffer object.");
459
+
460
+ char * input = Buffer::Data(target);
461
+ char output[32];
462
+
463
+ uint32_t input_len = Buffer::Length(target);
464
+
465
+ if(fast)
466
+ cryptonightfast_fast_hash(input, output, input_len);
467
+ else {
468
+ if (cn_variant > 0 && input_len < 43)
469
+ RETURN_EXCEPT("Argument must be 43 bytes for monero variant 1+");
470
+ cryptonightfast_hash(input, output, input_len, cn_variant);
471
+ }
472
+ SET_BUFFER_RETURN(output, 32);
473
+ }
474
+
475
+ DECLARE_FUNC(cryptonightsoftshell) {
476
+ DECLARE_SCOPE;
477
+
478
+ bool fast = false;
479
+ uint32_t cn_variant = 0;
480
+ uint32_t height = 0;
481
+
482
+ if (args.Length() < 1)
483
+ RETURN_EXCEPT("You must provide one argument.");
484
+
485
+ if (args.Length() >= 2) {
486
+ if(args[1]->IsBoolean())
487
+ fast = args[1]->BooleanValue(isolate);
488
+ else if(args[1]->IsUint32())
489
+ cn_variant = args[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
490
+ else
491
+ RETURN_EXCEPT("Argument 2 should be a boolean or uint32_t");
492
+ }
493
+
494
+ if (args.Length() >= 3) {
495
+ if (args[2]->IsUint32())
496
+ height = args[2]->Uint32Value(isolate->GetCurrentContext()).FromJust();
497
+ else
498
+ RETURN_EXCEPT("Argument 3 should be an uint32_t");
499
+ }
500
+
501
+ /* Default CN Soft Shell values */
502
+ uint32_t CN_SOFT_SHELL_MEMORY = 262144;
503
+ uint32_t CN_SOFT_SHELL_ITER = (CN_SOFT_SHELL_MEMORY / 2);
504
+ uint32_t CN_SOFT_SHELL_WINDOW = 2048;
505
+ uint32_t CN_SOFT_SHELL_MULTIPLIER = 3;
506
+
507
+ if (args.Length() >= 4) {
508
+ if (args[3]->IsUint32()) {
509
+ CN_SOFT_SHELL_MEMORY = args[3]->Uint32Value(isolate->GetCurrentContext()).FromJust();
510
+ CN_SOFT_SHELL_ITER = (CN_SOFT_SHELL_MEMORY / 2);
511
+ } else {
512
+ RETURN_EXCEPT("Argument 4 should be an uint32_t (scratchpad)");
513
+ }
514
+ }
515
+
516
+ if (args.Length() >= 5) {
517
+ if (args[4]->IsUint32())
518
+ CN_SOFT_SHELL_WINDOW = args[4]->Uint32Value(isolate->GetCurrentContext()).FromJust();
519
+ else
520
+ RETURN_EXCEPT("Argument 6 should be an uint32_t (window)");
521
+ }
522
+
523
+ if (args.Length() >= 6) {
524
+ if (args[5]->IsUint32())
525
+ CN_SOFT_SHELL_MULTIPLIER = args[5]->Uint32Value(isolate->GetCurrentContext()).FromJust();
526
+ else
527
+ RETURN_EXCEPT("Argument 6 should be an uint32_t (multiplier)");
528
+ }
529
+
530
+ uint32_t CN_SOFT_SHELL_PAD_MULTIPLIER = (CN_SOFT_SHELL_WINDOW / CN_SOFT_SHELL_MULTIPLIER);
531
+ uint32_t CN_SOFT_SHELL_ITER_MULTIPLIER = (CN_SOFT_SHELL_PAD_MULTIPLIER / 2);
532
+
533
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
534
+
535
+ uint32_t base_offset = (height % CN_SOFT_SHELL_WINDOW);
536
+ int32_t offset = (height % (CN_SOFT_SHELL_WINDOW * 2)) - (base_offset * 2);
537
+ if (offset < 0) {
538
+ offset = base_offset;
539
+ }
540
+
541
+ uint32_t scratchpad = CN_SOFT_SHELL_MEMORY + (static_cast<uint32_t>(offset) * CN_SOFT_SHELL_PAD_MULTIPLIER);
542
+ scratchpad = (static_cast<uint64_t>(scratchpad / 128)) * 128;
543
+ uint32_t iterations = CN_SOFT_SHELL_ITER + (static_cast<uint32_t>(offset) * CN_SOFT_SHELL_ITER_MULTIPLIER);
544
+
545
+ char * input = Buffer::Data(target);
546
+ char output[32];
547
+
548
+ uint32_t input_len = Buffer::Length(target);
549
+
550
+ if(fast)
551
+ cryptonight_soft_shell_fast_hash(input, output, input_len);
552
+ else {
553
+ if (cn_variant > 0 && input_len < 43)
554
+ RETURN_EXCEPT("Argument must be 43 bytes for monero variant 1+");
555
+ cryptonight_soft_shell_hash(input, output, input_len, cn_variant, scratchpad, iterations);
556
+ }
557
+ SET_BUFFER_RETURN(output, 32);
558
+ }
559
+
560
+ DECLARE_FUNC(chukwa) {
561
+ DECLARE_SCOPE;
562
+
563
+ // Chukwa Definitions
564
+ const uint32_t hashlen = 32; // The length of the resulting hash in bytes
565
+ const uint32_t saltlen = 16; // The length of our salt in bytes
566
+ const uint32_t threads = 1; // How many threads to use at once
567
+ const uint32_t iters = 3; // How many iterations we perform as part of our slow-hash
568
+ const uint32_t memory = 512; // This value is in KiB (0.5MB)
569
+
570
+ if (args.Length() < 1)
571
+ RETURN_EXCEPT("You must provide one argument.");
572
+
573
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
574
+
575
+ if(!Buffer::HasInstance(target))
576
+ RETURN_EXCEPT("Argument should be a buffer object.");
577
+
578
+ char * input = Buffer::Data(target);
579
+ char output[32];
580
+
581
+ uint32_t input_len = Buffer::Length(target);
582
+
583
+ uint8_t salt[saltlen];
584
+ std::memcpy(salt, input, sizeof(salt));
585
+
586
+ argon2id_hash_raw(iters, memory, threads, input, input_len, salt, saltlen, output, hashlen);
587
+
588
+ SET_BUFFER_RETURN(output, 32);
589
+ }
590
+
591
+ DECLARE_FUNC(chukwalite) {
592
+ DECLARE_SCOPE;
593
+
594
+ // Chukwa Definitions
595
+ const uint32_t hashlen = 32; // The length of the resulting hash in bytes
596
+ const uint32_t saltlen = 16; // The length of our salt in bytes
597
+ const uint32_t threads = 1; // How many threads to use at once
598
+ const uint32_t iters = 4; // How many iterations we perform as part of our slow-hash
599
+ const uint32_t memory = 256; // This value is in KiB (0.5MB)
600
+
601
+ if (args.Length() < 1)
602
+ RETURN_EXCEPT("You must provide one argument.");
603
+
604
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
605
+
606
+ if(!Buffer::HasInstance(target))
607
+ RETURN_EXCEPT("Argument should be a buffer object.");
608
+
609
+ char * input = Buffer::Data(target);
610
+ char output[32];
611
+
612
+ uint32_t input_len = Buffer::Length(target);
613
+
614
+ uint8_t salt[saltlen];
615
+ std::memcpy(salt, input, sizeof(salt));
616
+
617
+ argon2id_hash_raw(iters, memory, threads, input, input_len, salt, saltlen, output, hashlen);
618
+
619
+ SET_BUFFER_RETURN(output, 32);
620
+ }
621
+
622
+ DECLARE_FUNC(boolberry) {
623
+ DECLARE_SCOPE;
624
+
625
+ if (args.Length() < 2)
626
+ RETURN_EXCEPT("You must provide two arguments.");
627
+
628
+ Local<Object> target = args[0]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
629
+ Local<Object> target_spad = args[1]->ToObject(isolate->GetCurrentContext()).ToLocalChecked();
630
+ uint32_t height = 1;
631
+
632
+ if(!Buffer::HasInstance(target))
633
+ RETURN_EXCEPT("Argument 1 should be a buffer object.");
634
+
635
+ if(!Buffer::HasInstance(target_spad))
636
+ RETURN_EXCEPT("Argument 2 should be a buffer object.");
637
+
638
+ if(args.Length() >= 3) {
639
+ if(args[2]->IsUint32())
640
+ height = args[2]->Uint32Value(isolate->GetCurrentContext()).FromJust();
641
+ else
642
+ RETURN_EXCEPT("Argument 3 should be an unsigned integer.");
643
+ }
644
+
645
+ char * input = Buffer::Data(target);
646
+ char * scratchpad = Buffer::Data(target_spad);
647
+ char output[32];
648
+
649
+ uint32_t input_len = Buffer::Length(target);
650
+ uint64_t spad_len = Buffer::Length(target_spad);
651
+
652
+ boolberry_hash(input, input_len, scratchpad, spad_len, output, height);
653
+
654
+ SET_BUFFER_RETURN(output, 32);
655
+ }
656
+
657
+ DECLARE_INIT(init) {
658
+ NODE_SET_METHOD(exports, "bcrypt", bcrypt);
659
+ NODE_SET_METHOD(exports, "blake", blake);
660
+ NODE_SET_METHOD(exports, "boolberry", boolberry);
661
+ NODE_SET_METHOD(exports, "c11", c11);
662
+ NODE_SET_METHOD(exports, "cryptonight", cryptonight);
663
+ NODE_SET_METHOD(exports, "cryptonightdark", cryptonightdark);
664
+ NODE_SET_METHOD(exports, "cryptonight-dark", cryptonightdark);
665
+ NODE_SET_METHOD(exports, "cryptonightdarklite", cryptonightdarklite);
666
+ NODE_SET_METHOD(exports, "cryptonight-dark-lite", cryptonightdarklite);
667
+ NODE_SET_METHOD(exports, "cryptonightfast", cryptonightfast);
668
+ NODE_SET_METHOD(exports, "cryptonight-fast", cryptonightfast);
669
+ NODE_SET_METHOD(exports, "cryptonightlite", cryptonightlite);
670
+ NODE_SET_METHOD(exports, "cryptonight-lite", cryptonightlite);
671
+ NODE_SET_METHOD(exports, "cryptonightturtle", cryptonightturtle);
672
+ NODE_SET_METHOD(exports, "cryptonight-turtle", cryptonightturtle);
673
+ NODE_SET_METHOD(exports, "cryptonightturtlelite", cryptonightturtlelite);
674
+ NODE_SET_METHOD(exports, "cryptonight-turtle-lite", cryptonightturtlelite);
675
+ NODE_SET_METHOD(exports, "cryptonightsoftshell", cryptonightsoftshell);
676
+ NODE_SET_METHOD(exports, "cryptonight-soft-shell", cryptonightsoftshell);
677
+ NODE_SET_METHOD(exports, "chukwa", chukwa);
678
+ NODE_SET_METHOD(exports, "chukwa-lite", chukwalite);
679
+ NODE_SET_METHOD(exports, "fresh", fresh);
680
+ NODE_SET_METHOD(exports, "fugue", fugue);
681
+ NODE_SET_METHOD(exports, "groestl", groestl);
682
+ NODE_SET_METHOD(exports, "groestlmyriad", groestlmyriad);
683
+ NODE_SET_METHOD(exports, "hefty1", hefty1);
684
+ NODE_SET_METHOD(exports, "keccak", keccak);
685
+ NODE_SET_METHOD(exports, "nist5", nist5);
686
+ NODE_SET_METHOD(exports, "quark", quark);
687
+ NODE_SET_METHOD(exports, "qubit", qubit);
688
+ NODE_SET_METHOD(exports, "scrypt", scrypt);
689
+ NODE_SET_METHOD(exports, "scryptjane", scryptjane);
690
+ NODE_SET_METHOD(exports, "scryptn", scryptn);
691
+ NODE_SET_METHOD(exports, "sha1", sha1);
692
+ NODE_SET_METHOD(exports, "shavite3", shavite3);
693
+ NODE_SET_METHOD(exports, "skein", skein);
694
+ NODE_SET_METHOD(exports, "x11", x11);
695
+ NODE_SET_METHOD(exports, "x13", x13);
696
+ NODE_SET_METHOD(exports, "x15", x15);
697
+ }
698
+
699
+ NODE_MODULE(multihashing, init)