@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.
- package/.github/workflows/ci.yml +27 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/inspectionProfiles/Project_Default.xml +7 -0
- package/.idea/misc.xml +6 -0
- package/.idea/modules.xml +8 -0
- package/.idea/turtlecoin-utils.iml +12 -0
- package/.idea/vcs.xml +6 -0
- package/.travis.yml +11 -0
- package/CONTRIBUTING.md +3 -0
- package/LICENSE +674 -0
- package/README.md +203 -0
- package/config.json +7 -0
- package/docs/.nojekyll +0 -0
- package/docs/CNAME +1 -0
- package/docs/assets/css/main.css +2321 -0
- package/docs/assets/images/icons.png +0 -0
- package/docs/assets/images/icons@2x.png +0 -0
- package/docs/assets/images/widgets.png +0 -0
- package/docs/assets/images/widgets@2x.png +0 -0
- package/docs/assets/js/main.js +1 -0
- package/docs/assets/js/search.js +3 -0
- package/docs/classes/address.html +964 -0
- package/docs/classes/addressprefix.html +431 -0
- package/docs/classes/block.html +965 -0
- package/docs/classes/blocktemplate.html +695 -0
- package/docs/classes/cryptonote.html +1137 -0
- package/docs/classes/ed25519.keypair.html +400 -0
- package/docs/classes/ed25519.keys.html +373 -0
- package/docs/classes/extranoncetag.extranoncedata.html +454 -0
- package/docs/classes/extranoncetag.extranoncepaymentid.html +453 -0
- package/docs/classes/extranoncetag.iextranonce.html +347 -0
- package/docs/classes/extratag.extramergedmining.html +494 -0
- package/docs/classes/extratag.extranonce.html +530 -0
- package/docs/classes/extratag.extrapadding.html +456 -0
- package/docs/classes/extratag.extrapublickey.html +460 -0
- package/docs/classes/extratag.iextratag.html +355 -0
- package/docs/classes/levinpacket.html +674 -0
- package/docs/classes/levinpayloads.handshake.html +731 -0
- package/docs/classes/levinpayloads.ilevinpayload.html +318 -0
- package/docs/classes/levinpayloads.liteblock.html +494 -0
- package/docs/classes/levinpayloads.missingtransactions.html +494 -0
- package/docs/classes/levinpayloads.newblock.html +540 -0
- package/docs/classes/levinpayloads.newtransactions.html +402 -0
- package/docs/classes/levinpayloads.peerentry.html +610 -0
- package/docs/classes/levinpayloads.ping.html +450 -0
- package/docs/classes/levinpayloads.rawblock.html +344 -0
- package/docs/classes/levinpayloads.requestchain.html +402 -0
- package/docs/classes/levinpayloads.requestgetobjects.html +448 -0
- package/docs/classes/levinpayloads.requesttxpool.html +402 -0
- package/docs/classes/levinpayloads.responsechain.html +494 -0
- package/docs/classes/levinpayloads.responsegetobjects.html +540 -0
- package/docs/classes/levinpayloads.timedsync.html +540 -0
- package/docs/classes/multisig.html +930 -0
- package/docs/classes/multisigmessage.html +694 -0
- package/docs/classes/parentblock.html +347 -0
- package/docs/classes/transaction.html +925 -0
- package/docs/classes/transactioninputs.coinbaseinput.html +390 -0
- package/docs/classes/transactioninputs.itransactioninput.html +321 -0
- package/docs/classes/transactioninputs.keyinput.html +459 -0
- package/docs/classes/transactionoutputs.itransactionoutput.html +317 -0
- package/docs/classes/transactionoutputs.keyoutput.html +422 -0
- package/docs/enums/extranoncetag.noncetagtype.html +246 -0
- package/docs/enums/extratag.extratagtype.html +280 -0
- package/docs/enums/levinprotocol.commandtype.html +391 -0
- package/docs/enums/transactioninputs.inputtype.html +246 -0
- package/docs/enums/transactionoutputs.outputtype.html +229 -0
- package/docs/globals.html +238 -0
- package/docs/index.html +271 -0
- package/docs/interfaces/interfaces.config.html +590 -0
- package/docs/interfaces/interfaces.daemonblocktemplateresponse.html +323 -0
- package/docs/interfaces/interfaces.generatedinput.html +304 -0
- package/docs/interfaces/interfaces.generatedoutput.html +285 -0
- package/docs/interfaces/interfaces.inputkeys.html +304 -0
- package/docs/interfaces/interfaces.ipreparedtransaction.html +268 -0
- package/docs/interfaces/interfaces.output.html +399 -0
- package/docs/interfaces/interfaces.preparedringsignature.html +377 -0
- package/docs/interfaces/interfaces.preparedtransaction.html +329 -0
- package/docs/interfaces/interfaces.randomoutput.html +285 -0
- package/docs/interfaces/interfaces.transactionrecipient.html +285 -0
- package/docs/interfaces/multisiginterfaces.partialkeyimage.html +277 -0
- package/docs/interfaces/multisiginterfaces.partialsigningkey.html +277 -0
- package/docs/modules/ed25519.html +195 -0
- package/docs/modules/extranoncetag.html +208 -0
- package/docs/modules/extratag.html +216 -0
- package/docs/modules/interfaces.html +231 -0
- package/docs/modules/levinpayloads.html +247 -0
- package/docs/modules/levinprotocol.html +191 -0
- package/docs/modules/multisiginterfaces.html +195 -0
- package/docs/modules/transactioninputs.html +208 -0
- package/docs/modules/transactionoutputs.html +204 -0
- package/index.d.ts +417 -0
- package/index.js +1508 -0
- package/lib/base58.js +220 -0
- package/lib/biginteger.js +1591 -0
- package/lib/blocktemplate.js +408 -0
- package/lib/crypto.js +19698 -0
- package/lib/mnemonic.js +1204 -0
- package/lib/nacl-fast-cn.js +608 -0
- package/lib/ringsigs.js +24262 -0
- package/lib/sha3.js +477 -0
- package/package.json +58 -0
- package/src/Address.ts +433 -0
- package/src/AddressPrefix.ts +117 -0
- package/src/Block.ts +556 -0
- package/src/BlockTemplate.ts +289 -0
- package/src/Common.ts +105 -0
- package/src/Config.ts +66 -0
- package/src/CryptoNote.ts +1072 -0
- package/src/LevinPacket.ts +366 -0
- package/src/Multisig.ts +600 -0
- package/src/MultisigMessage.ts +374 -0
- package/src/ParentBlock.ts +39 -0
- package/src/Transaction.ts +628 -0
- package/src/Types/ED25519.ts +187 -0
- package/src/Types/IExtraNonce.ts +225 -0
- package/src/Types/IExtraTag.ts +507 -0
- package/src/Types/ITransaction.ts +230 -0
- package/src/Types/ITransactionInput.ts +190 -0
- package/src/Types/ITransactionOutput.ts +108 -0
- package/src/Types/LevinPayloads.ts +1576 -0
- package/src/Types/MultisigInterfaces.ts +65 -0
- package/src/Types/PortableStorage.ts +289 -0
- package/src/Types.ts +36 -0
- package/src/index.ts +36 -0
- package/test/template.json +6 -0
- package/test/test.js +1457 -0
- package/tests/blocktemplate.json +6 -0
- package/tests/tests.js +215 -0
- package/tsconfig.json +15 -0
- package/tslint.json +36 -0
- package/typedoc.json +10 -0
- 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
|
+
}
|