@leocuvee/turtlecoin-utils 0.0.14

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 (132) hide show
  1. package/.github/workflows/ci.yml +27 -0
  2. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  3. package/.idea/inspectionProfiles/Project_Default.xml +7 -0
  4. package/.idea/misc.xml +6 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/turtlecoin-utils.iml +12 -0
  7. package/.idea/vcs.xml +6 -0
  8. package/.travis.yml +11 -0
  9. package/CONTRIBUTING.md +3 -0
  10. package/LICENSE +674 -0
  11. package/README.md +203 -0
  12. package/config.json +7 -0
  13. package/docs/.nojekyll +0 -0
  14. package/docs/CNAME +1 -0
  15. package/docs/assets/css/main.css +2321 -0
  16. package/docs/assets/images/icons.png +0 -0
  17. package/docs/assets/images/icons@2x.png +0 -0
  18. package/docs/assets/images/widgets.png +0 -0
  19. package/docs/assets/images/widgets@2x.png +0 -0
  20. package/docs/assets/js/main.js +1 -0
  21. package/docs/assets/js/search.js +3 -0
  22. package/docs/classes/address.html +964 -0
  23. package/docs/classes/addressprefix.html +431 -0
  24. package/docs/classes/block.html +965 -0
  25. package/docs/classes/blocktemplate.html +695 -0
  26. package/docs/classes/cryptonote.html +1137 -0
  27. package/docs/classes/ed25519.keypair.html +400 -0
  28. package/docs/classes/ed25519.keys.html +373 -0
  29. package/docs/classes/extranoncetag.extranoncedata.html +454 -0
  30. package/docs/classes/extranoncetag.extranoncepaymentid.html +453 -0
  31. package/docs/classes/extranoncetag.iextranonce.html +347 -0
  32. package/docs/classes/extratag.extramergedmining.html +494 -0
  33. package/docs/classes/extratag.extranonce.html +530 -0
  34. package/docs/classes/extratag.extrapadding.html +456 -0
  35. package/docs/classes/extratag.extrapublickey.html +460 -0
  36. package/docs/classes/extratag.iextratag.html +355 -0
  37. package/docs/classes/levinpacket.html +674 -0
  38. package/docs/classes/levinpayloads.handshake.html +731 -0
  39. package/docs/classes/levinpayloads.ilevinpayload.html +318 -0
  40. package/docs/classes/levinpayloads.liteblock.html +494 -0
  41. package/docs/classes/levinpayloads.missingtransactions.html +494 -0
  42. package/docs/classes/levinpayloads.newblock.html +540 -0
  43. package/docs/classes/levinpayloads.newtransactions.html +402 -0
  44. package/docs/classes/levinpayloads.peerentry.html +610 -0
  45. package/docs/classes/levinpayloads.ping.html +450 -0
  46. package/docs/classes/levinpayloads.rawblock.html +344 -0
  47. package/docs/classes/levinpayloads.requestchain.html +402 -0
  48. package/docs/classes/levinpayloads.requestgetobjects.html +448 -0
  49. package/docs/classes/levinpayloads.requesttxpool.html +402 -0
  50. package/docs/classes/levinpayloads.responsechain.html +494 -0
  51. package/docs/classes/levinpayloads.responsegetobjects.html +540 -0
  52. package/docs/classes/levinpayloads.timedsync.html +540 -0
  53. package/docs/classes/multisig.html +930 -0
  54. package/docs/classes/multisigmessage.html +694 -0
  55. package/docs/classes/parentblock.html +347 -0
  56. package/docs/classes/transaction.html +925 -0
  57. package/docs/classes/transactioninputs.coinbaseinput.html +390 -0
  58. package/docs/classes/transactioninputs.itransactioninput.html +321 -0
  59. package/docs/classes/transactioninputs.keyinput.html +459 -0
  60. package/docs/classes/transactionoutputs.itransactionoutput.html +317 -0
  61. package/docs/classes/transactionoutputs.keyoutput.html +422 -0
  62. package/docs/enums/extranoncetag.noncetagtype.html +246 -0
  63. package/docs/enums/extratag.extratagtype.html +280 -0
  64. package/docs/enums/levinprotocol.commandtype.html +391 -0
  65. package/docs/enums/transactioninputs.inputtype.html +246 -0
  66. package/docs/enums/transactionoutputs.outputtype.html +229 -0
  67. package/docs/globals.html +238 -0
  68. package/docs/index.html +271 -0
  69. package/docs/interfaces/interfaces.config.html +590 -0
  70. package/docs/interfaces/interfaces.daemonblocktemplateresponse.html +323 -0
  71. package/docs/interfaces/interfaces.generatedinput.html +304 -0
  72. package/docs/interfaces/interfaces.generatedoutput.html +285 -0
  73. package/docs/interfaces/interfaces.inputkeys.html +304 -0
  74. package/docs/interfaces/interfaces.ipreparedtransaction.html +268 -0
  75. package/docs/interfaces/interfaces.output.html +399 -0
  76. package/docs/interfaces/interfaces.preparedringsignature.html +377 -0
  77. package/docs/interfaces/interfaces.preparedtransaction.html +329 -0
  78. package/docs/interfaces/interfaces.randomoutput.html +285 -0
  79. package/docs/interfaces/interfaces.transactionrecipient.html +285 -0
  80. package/docs/interfaces/multisiginterfaces.partialkeyimage.html +277 -0
  81. package/docs/interfaces/multisiginterfaces.partialsigningkey.html +277 -0
  82. package/docs/modules/ed25519.html +195 -0
  83. package/docs/modules/extranoncetag.html +208 -0
  84. package/docs/modules/extratag.html +216 -0
  85. package/docs/modules/interfaces.html +231 -0
  86. package/docs/modules/levinpayloads.html +247 -0
  87. package/docs/modules/levinprotocol.html +191 -0
  88. package/docs/modules/multisiginterfaces.html +195 -0
  89. package/docs/modules/transactioninputs.html +208 -0
  90. package/docs/modules/transactionoutputs.html +204 -0
  91. package/index.d.ts +417 -0
  92. package/index.js +1508 -0
  93. package/lib/base58.js +220 -0
  94. package/lib/biginteger.js +1591 -0
  95. package/lib/blocktemplate.js +408 -0
  96. package/lib/crypto.js +19698 -0
  97. package/lib/mnemonic.js +1204 -0
  98. package/lib/nacl-fast-cn.js +608 -0
  99. package/lib/ringsigs.js +24262 -0
  100. package/lib/sha3.js +477 -0
  101. package/package.json +58 -0
  102. package/src/Address.ts +433 -0
  103. package/src/AddressPrefix.ts +117 -0
  104. package/src/Block.ts +556 -0
  105. package/src/BlockTemplate.ts +289 -0
  106. package/src/Common.ts +105 -0
  107. package/src/Config.ts +66 -0
  108. package/src/CryptoNote.ts +1072 -0
  109. package/src/LevinPacket.ts +366 -0
  110. package/src/Multisig.ts +600 -0
  111. package/src/MultisigMessage.ts +374 -0
  112. package/src/ParentBlock.ts +39 -0
  113. package/src/Transaction.ts +628 -0
  114. package/src/Types/ED25519.ts +187 -0
  115. package/src/Types/IExtraNonce.ts +225 -0
  116. package/src/Types/IExtraTag.ts +507 -0
  117. package/src/Types/ITransaction.ts +230 -0
  118. package/src/Types/ITransactionInput.ts +190 -0
  119. package/src/Types/ITransactionOutput.ts +108 -0
  120. package/src/Types/LevinPayloads.ts +1576 -0
  121. package/src/Types/MultisigInterfaces.ts +65 -0
  122. package/src/Types/PortableStorage.ts +289 -0
  123. package/src/Types.ts +36 -0
  124. package/src/index.ts +36 -0
  125. package/test/template.json +6 -0
  126. package/test/test.js +1457 -0
  127. package/tests/blocktemplate.json +6 -0
  128. package/tests/tests.js +215 -0
  129. package/tsconfig.json +15 -0
  130. package/tslint.json +36 -0
  131. package/typedoc.json +10 -0
  132. package/webpack.config.js +15 -0
package/lib/sha3.js ADDED
@@ -0,0 +1,477 @@
1
+ // Copyright (c) 2015, emn178@gmail.com (https://github.com/emn178/js-sha3)
2
+ // Copyright (c) 2018, The TurtleCoin Developers
3
+ //
4
+ // Please see the included LICENSE file for more information.
5
+
6
+ 'use strict'
7
+
8
+ var HEX_CHARS = '0123456789abcdef'.split('')
9
+ var SHAKE_PADDING = [31, 7936, 2031616, 520093696]
10
+ var KECCAK_PADDING = [1, 256, 65536, 16777216]
11
+ var PADDING = [6, 1536, 393216, 100663296]
12
+ var SHIFT = [0, 8, 16, 24]
13
+ var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,
14
+ 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,
15
+ 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,
16
+ 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,
17
+ 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
18
+ var BITS = [224, 256, 384, 512]
19
+ var SHAKE_BITS = [128, 256]
20
+ var OUTPUT_TYPES = ['hex', 'buffer', 'array']
21
+
22
+ var createOutputMethod = function (bits, padding, outputType) {
23
+ return function (message) {
24
+ return new Keccak(bits, padding, bits).update(message)[outputType]()
25
+ }
26
+ }
27
+
28
+ var createShakeOutputMethod = function (bits, padding, outputType) {
29
+ return function (message, outputBits) {
30
+ return new Keccak(bits, padding, outputBits).update(message)[outputType]()
31
+ }
32
+ }
33
+
34
+ var createMethod = function (bits, padding) {
35
+ var method = createOutputMethod(bits, padding, 'hex')
36
+ method.create = function () {
37
+ return new Keccak(bits, padding, bits)
38
+ }
39
+ method.update = function (message) {
40
+ return method.create().update(message)
41
+ }
42
+ for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
43
+ var type = OUTPUT_TYPES[i]
44
+ method[type] = createOutputMethod(bits, padding, type)
45
+ }
46
+ return method
47
+ }
48
+
49
+ var createShakeMethod = function (bits, padding) {
50
+ var method = createShakeOutputMethod(bits, padding, 'hex')
51
+ method.create = function (outputBits) {
52
+ return new Keccak(bits, padding, outputBits)
53
+ }
54
+ method.update = function (message, outputBits) {
55
+ return method.create(outputBits).update(message)
56
+ }
57
+ for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
58
+ var type = OUTPUT_TYPES[i]
59
+ method[type] = createShakeOutputMethod(bits, padding, type)
60
+ }
61
+ return method
62
+ }
63
+
64
+ var algorithms = [
65
+ { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },
66
+ { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },
67
+ { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod }
68
+ ]
69
+
70
+ var Sha3 = {}
71
+
72
+ for (var i = 0; i < algorithms.length; ++i) {
73
+ var algorithm = algorithms[i]
74
+ var bits = algorithm.bits
75
+ for (var j = 0; j < bits.length; ++j) {
76
+ var method = algorithm.createMethod(bits[j], algorithm.padding)
77
+ Sha3[algorithm.name + '_' + bits[j]] = method
78
+ }
79
+ }
80
+
81
+ function Keccak (bits, padding, outputBits) {
82
+ this.blocks = []
83
+ this.s = []
84
+ this.padding = padding
85
+ this.outputBits = outputBits
86
+ this.reset = true
87
+ this.block = 0
88
+ this.start = 0
89
+ this.blockCount = (1600 - (bits << 1)) >> 5
90
+ this.byteCount = this.blockCount << 2
91
+ this.outputBlocks = outputBits >> 5
92
+ this.extraBytes = (outputBits & 31) >> 3
93
+
94
+ for (var i = 0; i < 50; ++i) {
95
+ this.s[i] = 0
96
+ }
97
+ };
98
+
99
+ Keccak.prototype.update = function (message) {
100
+ var notString = typeof (message) !== 'string'
101
+ if (notString && message.constructor === ArrayBuffer) {
102
+ message = new Uint8Array(message)
103
+ }
104
+ var length = message.length
105
+ var blocks = this.blocks
106
+ var byteCount = this.byteCount
107
+ var blockCount = this.blockCount
108
+ var index = 0
109
+ var s = this.s
110
+ var i
111
+ var code
112
+
113
+ while (index < length) {
114
+ if (this.reset) {
115
+ this.reset = false
116
+ blocks[0] = this.block
117
+ for (i = 1; i < blockCount + 1; ++i) {
118
+ blocks[i] = 0
119
+ }
120
+ }
121
+ if (notString) {
122
+ for (i = this.start; index < length && i < byteCount; ++index) {
123
+ blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]
124
+ }
125
+ } else {
126
+ for (i = this.start; index < length && i < byteCount; ++index) {
127
+ code = message.charCodeAt(index)
128
+ if (code < 0x80) {
129
+ blocks[i >> 2] |= code << SHIFT[i++ & 3]
130
+ } else if (code < 0x800) {
131
+ blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]
132
+ blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]
133
+ } else if (code < 0xd800 || code >= 0xe000) {
134
+ blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]
135
+ blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]
136
+ blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]
137
+ } else {
138
+ code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff))
139
+ blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]
140
+ blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]
141
+ blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]
142
+ blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]
143
+ }
144
+ }
145
+ }
146
+ this.lastByteIndex = i
147
+ if (i >= byteCount) {
148
+ this.start = i - byteCount
149
+ this.block = blocks[blockCount]
150
+ for (i = 0; i < blockCount; ++i) {
151
+ s[i] ^= blocks[i]
152
+ }
153
+ f(s)
154
+ this.reset = true
155
+ } else {
156
+ this.start = i
157
+ }
158
+ }
159
+ return this
160
+ }
161
+
162
+ Keccak.prototype.finalize = function () {
163
+ var blocks = this.blocks
164
+ var i = this.lastByteIndex
165
+ var blockCount = this.blockCount
166
+ var s = this.s
167
+ blocks[i >> 2] |= this.padding[i & 3]
168
+ if (this.lastByteIndex === this.byteCount) {
169
+ blocks[0] = blocks[blockCount]
170
+ for (i = 1; i < blockCount + 1; ++i) {
171
+ blocks[i] = 0
172
+ }
173
+ }
174
+ blocks[blockCount - 1] |= 0x80000000
175
+ for (i = 0; i < blockCount; ++i) {
176
+ s[i] ^= blocks[i]
177
+ }
178
+ f(s)
179
+ }
180
+
181
+ Keccak.prototype.toString = Keccak.prototype.hex = function () {
182
+ this.finalize()
183
+
184
+ var blockCount = this.blockCount
185
+ var s = this.s
186
+ var outputBlocks = this.outputBlocks
187
+ var extraBytes = this.extraBytes
188
+ var i = 0
189
+ var j = 0
190
+ var hex = ''
191
+ var block
192
+ while (j < outputBlocks) {
193
+ for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
194
+ block = s[i]
195
+ hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +
196
+ HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +
197
+ HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +
198
+ HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F]
199
+ }
200
+ if (j % blockCount === 0) {
201
+ f(s)
202
+ }
203
+ }
204
+ if (extraBytes) {
205
+ block = s[i]
206
+ if (extraBytes > 0) {
207
+ hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F]
208
+ }
209
+ if (extraBytes > 1) {
210
+ hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F]
211
+ }
212
+ if (extraBytes > 2) {
213
+ hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F]
214
+ }
215
+ }
216
+ return hex
217
+ }
218
+
219
+ Keccak.prototype.buffer = function () {
220
+ this.finalize()
221
+
222
+ var blockCount = this.blockCount
223
+ var s = this.s
224
+ var outputBlocks = this.outputBlocks
225
+ var extraBytes = this.extraBytes
226
+ var i = 0
227
+ var j = 0
228
+ var bytes = this.outputBits >> 3
229
+ var buffer
230
+ if (extraBytes) {
231
+ buffer = new ArrayBuffer((outputBlocks + 1) << 2)
232
+ } else {
233
+ buffer = new ArrayBuffer(bytes)
234
+ }
235
+ var array = new Uint32Array(buffer)
236
+ while (j < outputBlocks) {
237
+ for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
238
+ array[j] = s[i]
239
+ }
240
+ if (j % blockCount === 0) {
241
+ f(s)
242
+ }
243
+ }
244
+ if (extraBytes) {
245
+ array[i] = s[i]
246
+ buffer = buffer.slice(0, bytes)
247
+ }
248
+ return buffer
249
+ }
250
+
251
+ Keccak.prototype.digest = Keccak.prototype.array = function () {
252
+ this.finalize()
253
+
254
+ var blockCount = this.blockCount
255
+ var s = this.s
256
+ var outputBlocks = this.outputBlocks
257
+ var extraBytes = this.extraBytes
258
+ var i = 0
259
+ var j = 0
260
+ var array = []
261
+ var offset
262
+ var block
263
+ while (j < outputBlocks) {
264
+ for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
265
+ offset = j << 2
266
+ block = s[i]
267
+ array[offset] = block & 0xFF
268
+ array[offset + 1] = (block >> 8) & 0xFF
269
+ array[offset + 2] = (block >> 16) & 0xFF
270
+ array[offset + 3] = (block >> 24) & 0xFF
271
+ }
272
+ if (j % blockCount === 0) {
273
+ f(s)
274
+ }
275
+ }
276
+ if (extraBytes) {
277
+ offset = j << 2
278
+ block = s[i]
279
+ if (extraBytes > 0) {
280
+ array[offset] = block & 0xFF
281
+ }
282
+ if (extraBytes > 1) {
283
+ array[offset + 1] = (block >> 8) & 0xFF
284
+ }
285
+ if (extraBytes > 2) {
286
+ array[offset + 2] = (block >> 16) & 0xFF
287
+ }
288
+ }
289
+ return array
290
+ }
291
+
292
+ var f = function (s) {
293
+ var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,
294
+ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,
295
+ b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,
296
+ b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49
297
+ for (n = 0; n < 48; n += 2) {
298
+ c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
299
+ c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
300
+ c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
301
+ c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
302
+ c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
303
+ c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
304
+ c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
305
+ c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
306
+ c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
307
+ c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
308
+
309
+ h = c8 ^ ((c2 << 1) | (c3 >>> 31))
310
+ l = c9 ^ ((c3 << 1) | (c2 >>> 31))
311
+ s[0] ^= h
312
+ s[1] ^= l
313
+ s[10] ^= h
314
+ s[11] ^= l
315
+ s[20] ^= h
316
+ s[21] ^= l
317
+ s[30] ^= h
318
+ s[31] ^= l
319
+ s[40] ^= h
320
+ s[41] ^= l
321
+ h = c0 ^ ((c4 << 1) | (c5 >>> 31))
322
+ l = c1 ^ ((c5 << 1) | (c4 >>> 31))
323
+ s[2] ^= h
324
+ s[3] ^= l
325
+ s[12] ^= h
326
+ s[13] ^= l
327
+ s[22] ^= h
328
+ s[23] ^= l
329
+ s[32] ^= h
330
+ s[33] ^= l
331
+ s[42] ^= h
332
+ s[43] ^= l
333
+ h = c2 ^ ((c6 << 1) | (c7 >>> 31))
334
+ l = c3 ^ ((c7 << 1) | (c6 >>> 31))
335
+ s[4] ^= h
336
+ s[5] ^= l
337
+ s[14] ^= h
338
+ s[15] ^= l
339
+ s[24] ^= h
340
+ s[25] ^= l
341
+ s[34] ^= h
342
+ s[35] ^= l
343
+ s[44] ^= h
344
+ s[45] ^= l
345
+ h = c4 ^ ((c8 << 1) | (c9 >>> 31))
346
+ l = c5 ^ ((c9 << 1) | (c8 >>> 31))
347
+ s[6] ^= h
348
+ s[7] ^= l
349
+ s[16] ^= h
350
+ s[17] ^= l
351
+ s[26] ^= h
352
+ s[27] ^= l
353
+ s[36] ^= h
354
+ s[37] ^= l
355
+ s[46] ^= h
356
+ s[47] ^= l
357
+ h = c6 ^ ((c0 << 1) | (c1 >>> 31))
358
+ l = c7 ^ ((c1 << 1) | (c0 >>> 31))
359
+ s[8] ^= h
360
+ s[9] ^= l
361
+ s[18] ^= h
362
+ s[19] ^= l
363
+ s[28] ^= h
364
+ s[29] ^= l
365
+ s[38] ^= h
366
+ s[39] ^= l
367
+ s[48] ^= h
368
+ s[49] ^= l
369
+
370
+ b0 = s[0]
371
+ b1 = s[1]
372
+ b32 = (s[11] << 4) | (s[10] >>> 28)
373
+ b33 = (s[10] << 4) | (s[11] >>> 28)
374
+ b14 = (s[20] << 3) | (s[21] >>> 29)
375
+ b15 = (s[21] << 3) | (s[20] >>> 29)
376
+ b46 = (s[31] << 9) | (s[30] >>> 23)
377
+ b47 = (s[30] << 9) | (s[31] >>> 23)
378
+ b28 = (s[40] << 18) | (s[41] >>> 14)
379
+ b29 = (s[41] << 18) | (s[40] >>> 14)
380
+ b20 = (s[2] << 1) | (s[3] >>> 31)
381
+ b21 = (s[3] << 1) | (s[2] >>> 31)
382
+ b2 = (s[13] << 12) | (s[12] >>> 20)
383
+ b3 = (s[12] << 12) | (s[13] >>> 20)
384
+ b34 = (s[22] << 10) | (s[23] >>> 22)
385
+ b35 = (s[23] << 10) | (s[22] >>> 22)
386
+ b16 = (s[33] << 13) | (s[32] >>> 19)
387
+ b17 = (s[32] << 13) | (s[33] >>> 19)
388
+ b48 = (s[42] << 2) | (s[43] >>> 30)
389
+ b49 = (s[43] << 2) | (s[42] >>> 30)
390
+ b40 = (s[5] << 30) | (s[4] >>> 2)
391
+ b41 = (s[4] << 30) | (s[5] >>> 2)
392
+ b22 = (s[14] << 6) | (s[15] >>> 26)
393
+ b23 = (s[15] << 6) | (s[14] >>> 26)
394
+ b4 = (s[25] << 11) | (s[24] >>> 21)
395
+ b5 = (s[24] << 11) | (s[25] >>> 21)
396
+ b36 = (s[34] << 15) | (s[35] >>> 17)
397
+ b37 = (s[35] << 15) | (s[34] >>> 17)
398
+ b18 = (s[45] << 29) | (s[44] >>> 3)
399
+ b19 = (s[44] << 29) | (s[45] >>> 3)
400
+ b10 = (s[6] << 28) | (s[7] >>> 4)
401
+ b11 = (s[7] << 28) | (s[6] >>> 4)
402
+ b42 = (s[17] << 23) | (s[16] >>> 9)
403
+ b43 = (s[16] << 23) | (s[17] >>> 9)
404
+ b24 = (s[26] << 25) | (s[27] >>> 7)
405
+ b25 = (s[27] << 25) | (s[26] >>> 7)
406
+ b6 = (s[36] << 21) | (s[37] >>> 11)
407
+ b7 = (s[37] << 21) | (s[36] >>> 11)
408
+ b38 = (s[47] << 24) | (s[46] >>> 8)
409
+ b39 = (s[46] << 24) | (s[47] >>> 8)
410
+ b30 = (s[8] << 27) | (s[9] >>> 5)
411
+ b31 = (s[9] << 27) | (s[8] >>> 5)
412
+ b12 = (s[18] << 20) | (s[19] >>> 12)
413
+ b13 = (s[19] << 20) | (s[18] >>> 12)
414
+ b44 = (s[29] << 7) | (s[28] >>> 25)
415
+ b45 = (s[28] << 7) | (s[29] >>> 25)
416
+ b26 = (s[38] << 8) | (s[39] >>> 24)
417
+ b27 = (s[39] << 8) | (s[38] >>> 24)
418
+ b8 = (s[48] << 14) | (s[49] >>> 18)
419
+ b9 = (s[49] << 14) | (s[48] >>> 18)
420
+
421
+ s[0] = b0 ^ (~b2 & b4)
422
+ s[1] = b1 ^ (~b3 & b5)
423
+ s[10] = b10 ^ (~b12 & b14)
424
+ s[11] = b11 ^ (~b13 & b15)
425
+ s[20] = b20 ^ (~b22 & b24)
426
+ s[21] = b21 ^ (~b23 & b25)
427
+ s[30] = b30 ^ (~b32 & b34)
428
+ s[31] = b31 ^ (~b33 & b35)
429
+ s[40] = b40 ^ (~b42 & b44)
430
+ s[41] = b41 ^ (~b43 & b45)
431
+ s[2] = b2 ^ (~b4 & b6)
432
+ s[3] = b3 ^ (~b5 & b7)
433
+ s[12] = b12 ^ (~b14 & b16)
434
+ s[13] = b13 ^ (~b15 & b17)
435
+ s[22] = b22 ^ (~b24 & b26)
436
+ s[23] = b23 ^ (~b25 & b27)
437
+ s[32] = b32 ^ (~b34 & b36)
438
+ s[33] = b33 ^ (~b35 & b37)
439
+ s[42] = b42 ^ (~b44 & b46)
440
+ s[43] = b43 ^ (~b45 & b47)
441
+ s[4] = b4 ^ (~b6 & b8)
442
+ s[5] = b5 ^ (~b7 & b9)
443
+ s[14] = b14 ^ (~b16 & b18)
444
+ s[15] = b15 ^ (~b17 & b19)
445
+ s[24] = b24 ^ (~b26 & b28)
446
+ s[25] = b25 ^ (~b27 & b29)
447
+ s[34] = b34 ^ (~b36 & b38)
448
+ s[35] = b35 ^ (~b37 & b39)
449
+ s[44] = b44 ^ (~b46 & b48)
450
+ s[45] = b45 ^ (~b47 & b49)
451
+ s[6] = b6 ^ (~b8 & b0)
452
+ s[7] = b7 ^ (~b9 & b1)
453
+ s[16] = b16 ^ (~b18 & b10)
454
+ s[17] = b17 ^ (~b19 & b11)
455
+ s[26] = b26 ^ (~b28 & b20)
456
+ s[27] = b27 ^ (~b29 & b21)
457
+ s[36] = b36 ^ (~b38 & b30)
458
+ s[37] = b37 ^ (~b39 & b31)
459
+ s[46] = b46 ^ (~b48 & b40)
460
+ s[47] = b47 ^ (~b49 & b41)
461
+ s[8] = b8 ^ (~b0 & b2)
462
+ s[9] = b9 ^ (~b1 & b3)
463
+ s[18] = b18 ^ (~b10 & b12)
464
+ s[19] = b19 ^ (~b11 & b13)
465
+ s[28] = b28 ^ (~b20 & b22)
466
+ s[29] = b29 ^ (~b21 & b23)
467
+ s[38] = b38 ^ (~b30 & b32)
468
+ s[39] = b39 ^ (~b31 & b33)
469
+ s[48] = b48 ^ (~b40 & b42)
470
+ s[49] = b49 ^ (~b41 & b43)
471
+
472
+ s[0] ^= RC[n]
473
+ s[1] ^= RC[n + 1]
474
+ }
475
+ }
476
+
477
+ module.exports = Sha3
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@leocuvee/turtlecoin-utils",
3
+ "version": "0.0.14",
4
+ "description": "A Node.js collection of utilities useful for DeroGold and WRKZCoin developers",
5
+ "main": "index.js",
6
+ "types": "index.d.ts",
7
+ "scripts": {
8
+ "test": "npm install && standard && node tests/tests.js"
9
+ },
10
+ "keywords": [
11
+ "TurtleCoin",
12
+ "Utilities"
13
+ ],
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/derogold/turtlecoin-utils.git"
17
+ },
18
+ "author": "Brandon Lehmann <brandonlehmann@gmail.com>",
19
+ "contributors": [
20
+ {
21
+ "name": "zpalmtree",
22
+ "email": "22151537+zpalmtree@users.noreply.github.com"
23
+ },
24
+ {
25
+ "name": "Leo Stehlik - not associated with any crypto"
26
+ }
27
+ ],
28
+ "license": "GPL-3.0",
29
+ "optionalDependencies": {
30
+ "turtlecoin-crypto": "^1.0.0"
31
+ },
32
+ "dependencies": {
33
+ "crc": "^3.8.0",
34
+ "get-random-values": "^1.2.0",
35
+ "numeral": "^2.0.6",
36
+ "secure-random-string": "^1.1.0",
37
+ "varint": "^5.0.0"
38
+ },
39
+ "standard": {
40
+ "ignore": [
41
+ "lib/crypto.js",
42
+ "lib/nacl-fast-cn.js",
43
+ "lib/ringsigs.js"
44
+ ]
45
+ },
46
+ "devDependencies": {
47
+ "standard": "^12.0.1"
48
+ },
49
+ "directories": {
50
+ "doc": "docs",
51
+ "lib": "lib",
52
+ "test": "tests"
53
+ },
54
+ "bugs": {
55
+ "url": "https://github.com/derogold/turtlecoin-utils/issues"
56
+ },
57
+ "homepage": "https://github.com/derogold/turtlecoin-utils.git#readme"
58
+ }