@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
package/sha256.h ADDED
@@ -0,0 +1,440 @@
1
+ #ifndef SHA256_H
2
+ #define SHA256_H
3
+
4
+ #if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
5
+ #include "stdint.h"
6
+ #else
7
+ #include <stdint.h>
8
+ #endif
9
+
10
+ #include <string.h>
11
+
12
+ static __inline uint32_t
13
+ be32dec(const void *pp)
14
+ {
15
+ const uint8_t *p = (uint8_t const *)pp;
16
+
17
+ return ((uint32_t)(p[3]) + ((uint32_t)(p[2]) << 8) +
18
+ ((uint32_t)(p[1]) << 16) + ((uint32_t)(p[0]) << 24));
19
+ }
20
+
21
+ static __inline void
22
+ be32enc(void *pp, uint32_t x)
23
+ {
24
+ uint8_t * p = (uint8_t *)pp;
25
+
26
+ p[3] = x & 0xff;
27
+ p[2] = (x >> 8) & 0xff;
28
+ p[1] = (x >> 16) & 0xff;
29
+ p[0] = (x >> 24) & 0xff;
30
+ }
31
+
32
+ static __inline uint32_t
33
+ le32dec(const void *pp)
34
+ {
35
+ const uint8_t *p = (uint8_t const *)pp;
36
+
37
+ return ((uint32_t)(p[0]) + ((uint32_t)(p[1]) << 8) +
38
+ ((uint32_t)(p[2]) << 16) + ((uint32_t)(p[3]) << 24));
39
+ }
40
+
41
+ static __inline void
42
+ le32enc(void *pp, uint32_t x)
43
+ {
44
+ uint8_t * p = (uint8_t *)pp;
45
+
46
+ p[0] = x & 0xff;
47
+ p[1] = (x >> 8) & 0xff;
48
+ p[2] = (x >> 16) & 0xff;
49
+ p[3] = (x >> 24) & 0xff;
50
+ }
51
+
52
+
53
+ typedef struct SHA256Context {
54
+ uint32_t state[8];
55
+ uint32_t count[2];
56
+ unsigned char buf[64];
57
+ } SHA256_CTX;
58
+
59
+ typedef struct HMAC_SHA256Context {
60
+ SHA256_CTX ictx;
61
+ SHA256_CTX octx;
62
+ } HMAC_SHA256_CTX;
63
+
64
+ /*
65
+ * Encode a length len/4 vector of (uint32_t) into a length len vector of
66
+ * (unsigned char) in big-endian form. Assumes len is a multiple of 4.
67
+ */
68
+ static void
69
+ be32enc_vect(unsigned char *dst, const uint32_t *src, size_t len)
70
+ {
71
+ size_t i;
72
+
73
+ for (i = 0; i < len / 4; i++)
74
+ be32enc(dst + i * 4, src[i]);
75
+ }
76
+
77
+ /*
78
+ * Decode a big-endian length len vector of (unsigned char) into a length
79
+ * len/4 vector of (uint32_t). Assumes len is a multiple of 4.
80
+ */
81
+ static void
82
+ be32dec_vect(uint32_t *dst, const unsigned char *src, size_t len)
83
+ {
84
+ size_t i;
85
+
86
+ for (i = 0; i < len / 4; i++)
87
+ dst[i] = be32dec(src + i * 4);
88
+ }
89
+
90
+ /* Elementary functions used by SHA256 */
91
+ #define Ch(x, y, z) ((x & (y ^ z)) ^ z)
92
+ #define Maj(x, y, z) ((x & (y | z)) | (y & z))
93
+ #define SHR(x, n) (x >> n)
94
+ #define ROTR(x, n) ((x >> n) | (x << (32 - n)))
95
+ #define S0(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22))
96
+ #define S1(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25))
97
+ #define s0(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3))
98
+ #define s1(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10))
99
+
100
+ /* SHA256 round function */
101
+ #define RND(a, b, c, d, e, f, g, h, k) \
102
+ t0 = h + S1(e) + Ch(e, f, g) + k; \
103
+ t1 = S0(a) + Maj(a, b, c); \
104
+ d += t0; \
105
+ h = t0 + t1;
106
+
107
+ /* Adjusted round function for rotating state */
108
+ #define RNDr(S, W, i, k) \
109
+ RND(S[(64 - i) % 8], S[(65 - i) % 8], \
110
+ S[(66 - i) % 8], S[(67 - i) % 8], \
111
+ S[(68 - i) % 8], S[(69 - i) % 8], \
112
+ S[(70 - i) % 8], S[(71 - i) % 8], \
113
+ W[i] + k)
114
+
115
+ /*
116
+ * SHA256 block compression function. The 256-bit state is transformed via
117
+ * the 512-bit input block to produce a new state.
118
+ */
119
+ static void
120
+ SHA256_Transform(uint32_t * state, const unsigned char block[64])
121
+ {
122
+ uint32_t W[64];
123
+ uint32_t S[8];
124
+ uint32_t t0, t1;
125
+ int i;
126
+
127
+ /* 1. Prepare message schedule W. */
128
+ be32dec_vect(W, block, 64);
129
+ for (i = 16; i < 64; i++)
130
+ W[i] = s1(W[i - 2]) + W[i - 7] + s0(W[i - 15]) + W[i - 16];
131
+
132
+ /* 2. Initialize working variables. */
133
+ memcpy(S, state, 32);
134
+
135
+ /* 3. Mix. */
136
+ RNDr(S, W, 0, 0x428a2f98);
137
+ RNDr(S, W, 1, 0x71374491);
138
+ RNDr(S, W, 2, 0xb5c0fbcf);
139
+ RNDr(S, W, 3, 0xe9b5dba5);
140
+ RNDr(S, W, 4, 0x3956c25b);
141
+ RNDr(S, W, 5, 0x59f111f1);
142
+ RNDr(S, W, 6, 0x923f82a4);
143
+ RNDr(S, W, 7, 0xab1c5ed5);
144
+ RNDr(S, W, 8, 0xd807aa98);
145
+ RNDr(S, W, 9, 0x12835b01);
146
+ RNDr(S, W, 10, 0x243185be);
147
+ RNDr(S, W, 11, 0x550c7dc3);
148
+ RNDr(S, W, 12, 0x72be5d74);
149
+ RNDr(S, W, 13, 0x80deb1fe);
150
+ RNDr(S, W, 14, 0x9bdc06a7);
151
+ RNDr(S, W, 15, 0xc19bf174);
152
+ RNDr(S, W, 16, 0xe49b69c1);
153
+ RNDr(S, W, 17, 0xefbe4786);
154
+ RNDr(S, W, 18, 0x0fc19dc6);
155
+ RNDr(S, W, 19, 0x240ca1cc);
156
+ RNDr(S, W, 20, 0x2de92c6f);
157
+ RNDr(S, W, 21, 0x4a7484aa);
158
+ RNDr(S, W, 22, 0x5cb0a9dc);
159
+ RNDr(S, W, 23, 0x76f988da);
160
+ RNDr(S, W, 24, 0x983e5152);
161
+ RNDr(S, W, 25, 0xa831c66d);
162
+ RNDr(S, W, 26, 0xb00327c8);
163
+ RNDr(S, W, 27, 0xbf597fc7);
164
+ RNDr(S, W, 28, 0xc6e00bf3);
165
+ RNDr(S, W, 29, 0xd5a79147);
166
+ RNDr(S, W, 30, 0x06ca6351);
167
+ RNDr(S, W, 31, 0x14292967);
168
+ RNDr(S, W, 32, 0x27b70a85);
169
+ RNDr(S, W, 33, 0x2e1b2138);
170
+ RNDr(S, W, 34, 0x4d2c6dfc);
171
+ RNDr(S, W, 35, 0x53380d13);
172
+ RNDr(S, W, 36, 0x650a7354);
173
+ RNDr(S, W, 37, 0x766a0abb);
174
+ RNDr(S, W, 38, 0x81c2c92e);
175
+ RNDr(S, W, 39, 0x92722c85);
176
+ RNDr(S, W, 40, 0xa2bfe8a1);
177
+ RNDr(S, W, 41, 0xa81a664b);
178
+ RNDr(S, W, 42, 0xc24b8b70);
179
+ RNDr(S, W, 43, 0xc76c51a3);
180
+ RNDr(S, W, 44, 0xd192e819);
181
+ RNDr(S, W, 45, 0xd6990624);
182
+ RNDr(S, W, 46, 0xf40e3585);
183
+ RNDr(S, W, 47, 0x106aa070);
184
+ RNDr(S, W, 48, 0x19a4c116);
185
+ RNDr(S, W, 49, 0x1e376c08);
186
+ RNDr(S, W, 50, 0x2748774c);
187
+ RNDr(S, W, 51, 0x34b0bcb5);
188
+ RNDr(S, W, 52, 0x391c0cb3);
189
+ RNDr(S, W, 53, 0x4ed8aa4a);
190
+ RNDr(S, W, 54, 0x5b9cca4f);
191
+ RNDr(S, W, 55, 0x682e6ff3);
192
+ RNDr(S, W, 56, 0x748f82ee);
193
+ RNDr(S, W, 57, 0x78a5636f);
194
+ RNDr(S, W, 58, 0x84c87814);
195
+ RNDr(S, W, 59, 0x8cc70208);
196
+ RNDr(S, W, 60, 0x90befffa);
197
+ RNDr(S, W, 61, 0xa4506ceb);
198
+ RNDr(S, W, 62, 0xbef9a3f7);
199
+ RNDr(S, W, 63, 0xc67178f2);
200
+
201
+ /* 4. Mix local working variables into global state */
202
+ for (i = 0; i < 8; i++)
203
+ state[i] += S[i];
204
+
205
+ /* Clean the stack. */
206
+ memset(W, 0, 256);
207
+ memset(S, 0, 32);
208
+ t0 = t1 = 0;
209
+ }
210
+
211
+ static unsigned char PAD[64] = {
212
+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
213
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
214
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
215
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
216
+ };
217
+
218
+ /* SHA-256 initialization. Begins a SHA-256 operation. */
219
+ static void
220
+ SHA256_Init(SHA256_CTX * ctx)
221
+ {
222
+
223
+ /* Zero bits processed so far */
224
+ ctx->count[0] = ctx->count[1] = 0;
225
+
226
+ /* Magic initialization constants */
227
+ ctx->state[0] = 0x6A09E667;
228
+ ctx->state[1] = 0xBB67AE85;
229
+ ctx->state[2] = 0x3C6EF372;
230
+ ctx->state[3] = 0xA54FF53A;
231
+ ctx->state[4] = 0x510E527F;
232
+ ctx->state[5] = 0x9B05688C;
233
+ ctx->state[6] = 0x1F83D9AB;
234
+ ctx->state[7] = 0x5BE0CD19;
235
+ }
236
+
237
+ /* Add bytes into the hash */
238
+ static void
239
+ SHA256_Update(SHA256_CTX * ctx, const void *in, size_t len)
240
+ {
241
+ uint32_t bitlen[2];
242
+ uint32_t r;
243
+ const unsigned char *src = in;
244
+
245
+ /* Number of bytes left in the buffer from previous updates */
246
+ r = (ctx->count[1] >> 3) & 0x3f;
247
+
248
+ /* Convert the length into a number of bits */
249
+ bitlen[1] = ((uint32_t)len) << 3;
250
+ bitlen[0] = (uint32_t)(len >> 29);
251
+
252
+ /* Update number of bits */
253
+ if ((ctx->count[1] += bitlen[1]) < bitlen[1])
254
+ ctx->count[0]++;
255
+ ctx->count[0] += bitlen[0];
256
+
257
+ /* Handle the case where we don't need to perform any transforms */
258
+ if (len < 64 - r) {
259
+ memcpy(&ctx->buf[r], src, len);
260
+ return;
261
+ }
262
+
263
+ /* Finish the current block */
264
+ memcpy(&ctx->buf[r], src, 64 - r);
265
+ SHA256_Transform(ctx->state, ctx->buf);
266
+ src += 64 - r;
267
+ len -= 64 - r;
268
+
269
+ /* Perform complete blocks */
270
+ while (len >= 64) {
271
+ SHA256_Transform(ctx->state, src);
272
+ src += 64;
273
+ len -= 64;
274
+ }
275
+
276
+ /* Copy left over data into buffer */
277
+ memcpy(ctx->buf, src, len);
278
+ }
279
+
280
+ /* Add padding and terminating bit-count. */
281
+ static void
282
+ SHA256_Pad(SHA256_CTX * ctx)
283
+ {
284
+ unsigned char len[8];
285
+ uint32_t r, plen;
286
+
287
+ /*
288
+ * Convert length to a vector of bytes -- we do this now rather
289
+ * than later because the length will change after we pad.
290
+ */
291
+ be32enc_vect(len, ctx->count, 8);
292
+
293
+ /* Add 1--64 bytes so that the resulting length is 56 mod 64 */
294
+ r = (ctx->count[1] >> 3) & 0x3f;
295
+ plen = (r < 56) ? (56 - r) : (120 - r);
296
+ SHA256_Update(ctx, PAD, (size_t)plen);
297
+
298
+ /* Add the terminating bit-count */
299
+ SHA256_Update(ctx, len, 8);
300
+ }
301
+
302
+ /*
303
+ * SHA-256 finalization. Pads the input data, exports the hash value,
304
+ * and clears the context state.
305
+ */
306
+ static void
307
+ SHA256_Final(unsigned char digest[32], SHA256_CTX * ctx)
308
+ {
309
+
310
+ /* Add padding */
311
+ SHA256_Pad(ctx);
312
+
313
+ /* Write the hash */
314
+ be32enc_vect(digest, ctx->state, 32);
315
+
316
+ /* Clear the context state */
317
+ memset((void *)ctx, 0, sizeof(*ctx));
318
+ }
319
+
320
+ /* Initialize an HMAC-SHA256 operation with the given key. */
321
+ static void
322
+ HMAC_SHA256_Init(HMAC_SHA256_CTX * ctx, const void * _K, size_t Klen)
323
+ {
324
+ unsigned char pad[64];
325
+ unsigned char khash[32];
326
+ const unsigned char * K = _K;
327
+ size_t i;
328
+
329
+ /* If Klen > 64, the key is really SHA256(K). */
330
+ if (Klen > 64) {
331
+ SHA256_Init(&ctx->ictx);
332
+ SHA256_Update(&ctx->ictx, K, Klen);
333
+ SHA256_Final(khash, &ctx->ictx);
334
+ K = khash;
335
+ Klen = 32;
336
+ }
337
+
338
+ /* Inner SHA256 operation is SHA256(K xor [block of 0x36] || data). */
339
+ SHA256_Init(&ctx->ictx);
340
+ memset(pad, 0x36, 64);
341
+ for (i = 0; i < Klen; i++)
342
+ pad[i] ^= K[i];
343
+ SHA256_Update(&ctx->ictx, pad, 64);
344
+
345
+ /* Outer SHA256 operation is SHA256(K xor [block of 0x5c] || hash). */
346
+ SHA256_Init(&ctx->octx);
347
+ memset(pad, 0x5c, 64);
348
+ for (i = 0; i < Klen; i++)
349
+ pad[i] ^= K[i];
350
+ SHA256_Update(&ctx->octx, pad, 64);
351
+
352
+ /* Clean the stack. */
353
+ memset(khash, 0, 32);
354
+ }
355
+
356
+ /* Add bytes to the HMAC-SHA256 operation. */
357
+ static void
358
+ HMAC_SHA256_Update(HMAC_SHA256_CTX * ctx, const void *in, size_t len)
359
+ {
360
+
361
+ /* Feed data to the inner SHA256 operation. */
362
+ SHA256_Update(&ctx->ictx, in, len);
363
+ }
364
+
365
+ /* Finish an HMAC-SHA256 operation. */
366
+ static void
367
+ HMAC_SHA256_Final(unsigned char digest[32], HMAC_SHA256_CTX * ctx)
368
+ {
369
+ unsigned char ihash[32];
370
+
371
+ /* Finish the inner SHA256 operation. */
372
+ SHA256_Final(ihash, &ctx->ictx);
373
+
374
+ /* Feed the inner hash to the outer SHA256 operation. */
375
+ SHA256_Update(&ctx->octx, ihash, 32);
376
+
377
+ /* Finish the outer SHA256 operation. */
378
+ SHA256_Final(digest, &ctx->octx);
379
+
380
+ /* Clean the stack. */
381
+ memset(ihash, 0, 32);
382
+ }
383
+
384
+ /**
385
+ * PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, c, buf, dkLen):
386
+ * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and
387
+ * write the output to buf. The value dkLen must be at most 32 * (2^32 - 1).
388
+ */
389
+ static void
390
+ PBKDF2_SHA256(const uint8_t * passwd, size_t passwdlen, const uint8_t * salt,
391
+ size_t saltlen, uint64_t c, uint8_t * buf, size_t dkLen)
392
+ {
393
+ HMAC_SHA256_CTX PShctx, hctx;
394
+ size_t i;
395
+ uint8_t ivec[4];
396
+ uint8_t U[32];
397
+ uint8_t T[32];
398
+ uint64_t j;
399
+ int k;
400
+ size_t clen;
401
+
402
+ /* Compute HMAC state after processing P and S. */
403
+ HMAC_SHA256_Init(&PShctx, passwd, passwdlen);
404
+ HMAC_SHA256_Update(&PShctx, salt, saltlen);
405
+
406
+ /* Iterate through the blocks. */
407
+ for (i = 0; i * 32 < dkLen; i++) {
408
+ /* Generate INT(i + 1). */
409
+ be32enc(ivec, (uint32_t)(i + 1));
410
+
411
+ /* Compute U_1 = PRF(P, S || INT(i)). */
412
+ memcpy(&hctx, &PShctx, sizeof(HMAC_SHA256_CTX));
413
+ HMAC_SHA256_Update(&hctx, ivec, 4);
414
+ HMAC_SHA256_Final(U, &hctx);
415
+
416
+ /* T_i = U_1 ... */
417
+ memcpy(T, U, 32);
418
+
419
+ for (j = 2; j <= c; j++) {
420
+ /* Compute U_j. */
421
+ HMAC_SHA256_Init(&hctx, passwd, passwdlen);
422
+ HMAC_SHA256_Update(&hctx, U, 32);
423
+ HMAC_SHA256_Final(U, &hctx);
424
+
425
+ /* ... xor U_j ... */
426
+ for (k = 0; k < 32; k++)
427
+ T[k] ^= U[k];
428
+ }
429
+
430
+ /* Copy as many bytes as necessary into buf. */
431
+ clen = dkLen - i * 32;
432
+ if (clen > 32)
433
+ clen = 32;
434
+ memcpy(&buf[i * 32], T, clen);
435
+ }
436
+
437
+ /* Clean PShctx, since we never called _Final on it. */
438
+ memset(&PShctx, 0, sizeof(HMAC_SHA256_CTX));
439
+ }
440
+ #endif