@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
@@ -0,0 +1,608 @@
1
+ // Implementation derived from TweetNaCl version 20140427.
2
+ // See for details: http://tweetNACL.cr.yp.to/
3
+ //
4
+ // Copyright (c) 2014, Dmitry Chestnykh and Devi Mandiri
5
+ // Copyright (c) 2017, luigi1111
6
+ // Copyright (c) 2018, The TurtleCoin Developers
7
+ //
8
+ // Please see the included LICENSE file for more information.
9
+
10
+ 'use strict'
11
+
12
+ var gf = function (init) {
13
+ var i; var r = new Float64Array(16)
14
+ if (init) for (i = 0; i < init.length; i++) r[i] = init[i]
15
+ return r
16
+ }
17
+
18
+ // Pluggable, initialized in high-level API below.
19
+ var randombytes = function (/* x, n */) { throw new Error('no PRNG') }
20
+
21
+ var _0 = new Uint8Array(16)
22
+ var _9 = new Uint8Array(32); _9[0] = 9
23
+
24
+ var gf0 = gf()
25
+
26
+ var gf1 = gf([1])
27
+
28
+ var _121665 = gf([0xdb41, 1])
29
+
30
+ var D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203])
31
+
32
+ var D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406])
33
+
34
+ var X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169])
35
+
36
+ var Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666])
37
+
38
+ var I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83])
39
+
40
+ function vn (x, xi, y, yi, n) {
41
+ var i; var d = 0
42
+ for (i = 0; i < n; i++) d |= x[xi + i] ^ y[yi + i]
43
+ return (1 & ((d - 1) >>> 8)) - 1
44
+ }
45
+
46
+ function crypto_verify_16 (x, xi, y, yi) {
47
+ return vn(x, xi, y, yi, 16)
48
+ }
49
+
50
+ function crypto_verify_32 (x, xi, y, yi) {
51
+ return vn(x, xi, y, yi, 32)
52
+ }
53
+
54
+ function set25519 (r, a) {
55
+ var i
56
+ for (i = 0; i < 16; i++) r[i] = a[i] | 0
57
+ }
58
+
59
+ function car25519 (o) {
60
+ var i; var v; var c = 1
61
+ for (i = 0; i < 16; i++) {
62
+ v = o[i] + c + 65535
63
+ c = Math.floor(v / 65536)
64
+ o[i] = v - c * 65536
65
+ }
66
+ o[0] += c - 1 + 37 * (c - 1)
67
+ }
68
+
69
+ function sel25519 (p, q, b) {
70
+ var t; var c = ~(b - 1)
71
+ for (var i = 0; i < 16; i++) {
72
+ t = c & (p[i] ^ q[i])
73
+ p[i] ^= t
74
+ q[i] ^= t
75
+ }
76
+ }
77
+
78
+ function pack25519 (o, n) {
79
+ var i, j, b
80
+ var m = gf(); var t = gf()
81
+ for (i = 0; i < 16; i++) t[i] = n[i]
82
+ car25519(t)
83
+ car25519(t)
84
+ car25519(t)
85
+ for (j = 0; j < 2; j++) {
86
+ m[0] = t[0] - 0xffed
87
+ for (i = 1; i < 15; i++) {
88
+ m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1)
89
+ m[i - 1] &= 0xffff
90
+ }
91
+ m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1)
92
+ b = (m[15] >> 16) & 1
93
+ m[14] &= 0xffff
94
+ sel25519(t, m, 1 - b)
95
+ }
96
+ for (i = 0; i < 16; i++) {
97
+ o[2 * i] = t[i] & 0xff
98
+ o[2 * i + 1] = t[i] >> 8
99
+ }
100
+ }
101
+
102
+ function neq25519 (a, b) {
103
+ var c = new Uint8Array(32); var d = new Uint8Array(32)
104
+ pack25519(c, a)
105
+ pack25519(d, b)
106
+ return crypto_verify_32(c, 0, d, 0)
107
+ }
108
+
109
+ function par25519 (a) {
110
+ var d = new Uint8Array(32)
111
+ pack25519(d, a)
112
+ return d[0] & 1
113
+ }
114
+
115
+ function unpack25519 (o, n) {
116
+ var i
117
+ for (i = 0; i < 16; i++) o[i] = n[2 * i] + (n[2 * i + 1] << 8)
118
+ o[15] &= 0x7fff
119
+ }
120
+
121
+ function A (o, a, b) {
122
+ for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]
123
+ }
124
+
125
+ function Z (o, a, b) {
126
+ for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]
127
+ }
128
+
129
+ function M (o, a, b) {
130
+ var v; var c
131
+
132
+ var t0 = 0; var t1 = 0; var t2 = 0; var t3 = 0; var t4 = 0; var t5 = 0; var t6 = 0; var t7 = 0
133
+
134
+ var t8 = 0; var t9 = 0; var t10 = 0; var t11 = 0; var t12 = 0; var t13 = 0; var t14 = 0; var t15 = 0
135
+
136
+ var t16 = 0; var t17 = 0; var t18 = 0; var t19 = 0; var t20 = 0; var t21 = 0; var t22 = 0; var t23 = 0
137
+
138
+ var t24 = 0; var t25 = 0; var t26 = 0; var t27 = 0; var t28 = 0; var t29 = 0; var t30 = 0
139
+
140
+ var b0 = b[0]; var b1 = b[1]; var b2 = b[2]; var b3 = b[3]; var b4 = b[4]; var b5 = b[5]
141
+
142
+ var b6 = b[6]; var b7 = b[7]; var b8 = b[8]; var b9 = b[9]; var b10 = b[10]
143
+
144
+ var b11 = b[11]; var b12 = b[12]; var b13 = b[13]; var b14 = b[14]; var b15 = b[15]
145
+
146
+ v = a[0]
147
+ t0 += v * b0; t1 += v * b1; t2 += v * b2; t3 += v * b3
148
+ t4 += v * b4; t5 += v * b5; t6 += v * b6; t7 += v * b7
149
+ t8 += v * b8; t9 += v * b9; t10 += v * b10; t11 += v * b11
150
+ t12 += v * b12; t13 += v * b13; t14 += v * b14; t15 += v * b15
151
+ v = a[1]
152
+ t1 += v * b0; t2 += v * b1; t3 += v * b2; t4 += v * b3
153
+ t5 += v * b4; t6 += v * b5; t7 += v * b6; t8 += v * b7
154
+ t9 += v * b8; t10 += v * b9; t11 += v * b10; t12 += v * b11
155
+ t13 += v * b12; t14 += v * b13; t15 += v * b14; t16 += v * b15
156
+ v = a[2]
157
+ t2 += v * b0; t3 += v * b1; t4 += v * b2; t5 += v * b3
158
+ t6 += v * b4; t7 += v * b5; t8 += v * b6; t9 += v * b7
159
+ t10 += v * b8; t11 += v * b9; t12 += v * b10; t13 += v * b11
160
+ t14 += v * b12; t15 += v * b13; t16 += v * b14; t17 += v * b15
161
+ v = a[3]
162
+ t3 += v * b0; t4 += v * b1; t5 += v * b2; t6 += v * b3
163
+ t7 += v * b4; t8 += v * b5; t9 += v * b6; t10 += v * b7
164
+ t11 += v * b8; t12 += v * b9; t13 += v * b10; t14 += v * b11
165
+ t15 += v * b12; t16 += v * b13; t17 += v * b14; t18 += v * b15
166
+ v = a[4]
167
+ t4 += v * b0; t5 += v * b1; t6 += v * b2; t7 += v * b3
168
+ t8 += v * b4; t9 += v * b5; t10 += v * b6; t11 += v * b7
169
+ t12 += v * b8; t13 += v * b9; t14 += v * b10; t15 += v * b11
170
+ t16 += v * b12; t17 += v * b13; t18 += v * b14; t19 += v * b15
171
+ v = a[5]
172
+ t5 += v * b0; t6 += v * b1; t7 += v * b2; t8 += v * b3
173
+ t9 += v * b4; t10 += v * b5; t11 += v * b6; t12 += v * b7
174
+ t13 += v * b8; t14 += v * b9; t15 += v * b10; t16 += v * b11
175
+ t17 += v * b12; t18 += v * b13; t19 += v * b14; t20 += v * b15
176
+ v = a[6]
177
+ t6 += v * b0; t7 += v * b1; t8 += v * b2; t9 += v * b3
178
+ t10 += v * b4; t11 += v * b5; t12 += v * b6; t13 += v * b7
179
+ t14 += v * b8; t15 += v * b9; t16 += v * b10; t17 += v * b11
180
+ t18 += v * b12; t19 += v * b13; t20 += v * b14; t21 += v * b15
181
+ v = a[7]
182
+ t7 += v * b0; t8 += v * b1; t9 += v * b2; t10 += v * b3
183
+ t11 += v * b4; t12 += v * b5; t13 += v * b6; t14 += v * b7
184
+ t15 += v * b8; t16 += v * b9; t17 += v * b10; t18 += v * b11
185
+ t19 += v * b12; t20 += v * b13; t21 += v * b14; t22 += v * b15
186
+ v = a[8]
187
+ t8 += v * b0; t9 += v * b1; t10 += v * b2; t11 += v * b3
188
+ t12 += v * b4; t13 += v * b5; t14 += v * b6; t15 += v * b7
189
+ t16 += v * b8; t17 += v * b9; t18 += v * b10; t19 += v * b11
190
+ t20 += v * b12; t21 += v * b13; t22 += v * b14; t23 += v * b15
191
+ v = a[9]
192
+ t9 += v * b0; t10 += v * b1; t11 += v * b2; t12 += v * b3
193
+ t13 += v * b4; t14 += v * b5; t15 += v * b6; t16 += v * b7
194
+ t17 += v * b8; t18 += v * b9; t19 += v * b10; t20 += v * b11
195
+ t21 += v * b12; t22 += v * b13; t23 += v * b14; t24 += v * b15
196
+ v = a[10]
197
+ t10 += v * b0; t11 += v * b1; t12 += v * b2; t13 += v * b3
198
+ t14 += v * b4; t15 += v * b5; t16 += v * b6; t17 += v * b7
199
+ t18 += v * b8; t19 += v * b9; t20 += v * b10; t21 += v * b11
200
+ t22 += v * b12; t23 += v * b13; t24 += v * b14; t25 += v * b15
201
+ v = a[11]
202
+ t11 += v * b0; t12 += v * b1; t13 += v * b2; t14 += v * b3
203
+ t15 += v * b4; t16 += v * b5; t17 += v * b6; t18 += v * b7
204
+ t19 += v * b8; t20 += v * b9; t21 += v * b10; t22 += v * b11
205
+ t23 += v * b12; t24 += v * b13; t25 += v * b14; t26 += v * b15
206
+ v = a[12]
207
+ t12 += v * b0; t13 += v * b1; t14 += v * b2; t15 += v * b3
208
+ t16 += v * b4; t17 += v * b5; t18 += v * b6; t19 += v * b7
209
+ t20 += v * b8; t21 += v * b9; t22 += v * b10; t23 += v * b11
210
+ t24 += v * b12; t25 += v * b13; t26 += v * b14; t27 += v * b15
211
+ v = a[13]
212
+ t13 += v * b0; t14 += v * b1; t15 += v * b2; t16 += v * b3
213
+ t17 += v * b4; t18 += v * b5; t19 += v * b6; t20 += v * b7
214
+ t21 += v * b8; t22 += v * b9; t23 += v * b10; t24 += v * b11
215
+ t25 += v * b12; t26 += v * b13; t27 += v * b14; t28 += v * b15
216
+ v = a[14]
217
+ t14 += v * b0; t15 += v * b1; t16 += v * b2; t17 += v * b3
218
+ t18 += v * b4; t19 += v * b5; t20 += v * b6; t21 += v * b7
219
+ t22 += v * b8; t23 += v * b9; t24 += v * b10; t25 += v * b11
220
+ t26 += v * b12; t27 += v * b13; t28 += v * b14; t29 += v * b15
221
+ v = a[15]
222
+ t15 += v * b0; t16 += v * b1; t17 += v * b2; t18 += v * b3
223
+ t19 += v * b4; t20 += v * b5; t21 += v * b6; t22 += v * b7
224
+ t23 += v * b8; t24 += v * b9; t25 += v * b10; t26 += v * b11
225
+ t27 += v * b12; t28 += v * b13; t29 += v * b14; t30 += v * b15
226
+
227
+ t0 += 38 * t16; t1 += 38 * t17; t2 += 38 * t18; t3 += 38 * t19
228
+ t4 += 38 * t20; t5 += 38 * t21; t6 += 38 * t22; t7 += 38 * t23
229
+ t8 += 38 * t24; t9 += 38 * t25; t10 += 38 * t26; t11 += 38 * t27
230
+ t12 += 38 * t28; t13 += 38 * t29; t14 += 38 * t30 // t15 left as is
231
+
232
+ // first car
233
+ c = 1
234
+ v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536
235
+ v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536
236
+ v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536
237
+ v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536
238
+ v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536
239
+ v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536
240
+ v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536
241
+ v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536
242
+ v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536
243
+ v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536
244
+ v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536
245
+ v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536
246
+ v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536
247
+ v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536
248
+ v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536
249
+ v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536
250
+ t0 += c - 1 + 37 * (c - 1)
251
+
252
+ // second car
253
+ c = 1
254
+ v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536
255
+ v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536
256
+ v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536
257
+ v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536
258
+ v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536
259
+ v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536
260
+ v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536
261
+ v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536
262
+ v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536
263
+ v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536
264
+ v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536
265
+ v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536
266
+ v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536
267
+ v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536
268
+ v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536
269
+ v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536
270
+ t0 += c - 1 + 37 * (c - 1)
271
+
272
+ o[0] = t0
273
+ o[1] = t1
274
+ o[2] = t2
275
+ o[3] = t3
276
+ o[4] = t4
277
+ o[5] = t5
278
+ o[6] = t6
279
+ o[7] = t7
280
+ o[8] = t8
281
+ o[9] = t9
282
+ o[10] = t10
283
+ o[11] = t11
284
+ o[12] = t12
285
+ o[13] = t13
286
+ o[14] = t14
287
+ o[15] = t15
288
+ }
289
+
290
+ function S (o, a) {
291
+ M(o, a, a)
292
+ }
293
+
294
+ function inv25519 (o, i) {
295
+ var c = gf()
296
+ var a
297
+ for (a = 0; a < 16; a++) c[a] = i[a]
298
+ for (a = 253; a >= 0; a--) {
299
+ S(c, c)
300
+ if (a !== 2 && a !== 4) M(c, c, i)
301
+ }
302
+ for (a = 0; a < 16; a++) o[a] = c[a]
303
+ }
304
+
305
+ function pow2523 (o, i) {
306
+ var c = gf()
307
+ var a
308
+ for (a = 0; a < 16; a++) c[a] = i[a]
309
+ for (a = 250; a >= 0; a--) {
310
+ S(c, c)
311
+ if (a !== 1) M(c, c, i)
312
+ }
313
+ for (a = 0; a < 16; a++) o[a] = c[a]
314
+ }
315
+
316
+ function add (p, q) {
317
+ var a = gf(); var b = gf(); var c = gf()
318
+
319
+ var d = gf(); var e = gf(); var f = gf()
320
+
321
+ var g = gf(); var h = gf(); var t = gf()
322
+
323
+ Z(a, p[1], p[0])
324
+ Z(t, q[1], q[0])
325
+ M(a, a, t)
326
+ A(b, p[0], p[1])
327
+ A(t, q[0], q[1])
328
+ M(b, b, t)
329
+ M(c, p[3], q[3])
330
+ M(c, c, D2)
331
+ M(d, p[2], q[2])
332
+ A(d, d, d)
333
+ Z(e, b, a)
334
+ Z(f, d, c)
335
+ A(g, d, c)
336
+ A(h, b, a)
337
+
338
+ M(p[0], e, f)
339
+ M(p[1], h, g)
340
+ M(p[2], g, f)
341
+ M(p[3], e, h)
342
+ }
343
+
344
+ function cswap (p, q, b) {
345
+ var i
346
+ for (i = 0; i < 4; i++) {
347
+ sel25519(p[i], q[i], b)
348
+ }
349
+ }
350
+
351
+ function pack (r, p) {
352
+ var tx = gf(); var ty = gf(); var zi = gf()
353
+ inv25519(zi, p[2])
354
+ M(tx, p[0], zi)
355
+ M(ty, p[1], zi)
356
+ pack25519(r, ty)
357
+ r[31] ^= par25519(tx) << 7
358
+ }
359
+
360
+ function scalarmult (p, q, s) {
361
+ var b, i
362
+ set25519(p[0], gf0)
363
+ set25519(p[1], gf1)
364
+ set25519(p[2], gf1)
365
+ set25519(p[3], gf0)
366
+ for (i = 255; i >= 0; --i) {
367
+ b = (s[(i / 8) | 0] >> (i & 7)) & 1
368
+ cswap(p, q, b)
369
+ add(q, p)
370
+ add(p, p)
371
+ cswap(p, q, b)
372
+ }
373
+ }
374
+
375
+ function scalarbase (p, s) {
376
+ var q = [gf(), gf(), gf(), gf()]
377
+ set25519(q[0], X)
378
+ set25519(q[1], Y)
379
+ set25519(q[2], gf1)
380
+ M(q[3], X, Y)
381
+ scalarmult(p, q, s)
382
+ }
383
+
384
+ // new functions for CN - scalar operations are handled externally
385
+ // this only handles curve operations, except for Hp()
386
+
387
+ // why do we negate points when unpacking them???
388
+ function ge_neg (pub) {
389
+ pub[31] ^= 0x80
390
+ }
391
+
392
+ // res = s*G
393
+ function ge_scalarmult_base (s) {
394
+ var p = [gf(), gf(), gf(), gf()]
395
+ scalarbase(p, s)
396
+ var pk = new Uint8Array(32)
397
+ pack(pk, p)
398
+ return pk
399
+ }
400
+
401
+ // res = s*P
402
+ function ge_scalarmult (P, s) {
403
+ var p = [gf(), gf(), gf(), gf()]
404
+
405
+ var upk = [gf(), gf(), gf(), gf()]
406
+
407
+ var res = new Uint8Array(32)
408
+ ge_neg(P)
409
+ if (unpackneg(upk, P) !== 0) throw 'non-0 error on point decode'
410
+ scalarmult(p, upk, s)
411
+ pack(res, p)
412
+ return res
413
+ }
414
+
415
+ // res = c*P + r*G
416
+ function ge_double_scalarmult_base_vartime (c, P, r) {
417
+ var uP = [gf(), gf(), gf(), gf()]
418
+
419
+ var cP = [gf(), gf(), gf(), gf()]
420
+
421
+ var rG = [gf(), gf(), gf(), gf()]
422
+
423
+ var res = new Uint8Array(32)
424
+ ge_neg(P)
425
+ if (unpackneg(uP, P) !== 0) throw 'non-0 error on point decode'
426
+ scalarmult(cP, uP, c)
427
+ scalarbase(rG, r)
428
+ add(rG, cP)
429
+ pack(res, rG)
430
+ return res
431
+ }
432
+
433
+ // name changed to reflect not using precomp; res = r*Pb + c*I
434
+ function ge_double_scalarmult_postcomp_vartime (r, Pb, c, I) {
435
+ var uPb = [gf(), gf(), gf(), gf()]
436
+
437
+ var uI = [gf(), gf(), gf(), gf()]
438
+
439
+ var cI = [gf(), gf(), gf(), gf()]
440
+
441
+ var rPb = [gf(), gf(), gf(), gf()]
442
+
443
+ var res = new Uint8Array(32)
444
+ ge_neg(Pb)
445
+ if (unpackneg(uPb, Pb) !== 0) throw 'non-0 error on point decode'
446
+ scalarmult(rPb, uPb, r)
447
+ ge_neg(I)
448
+ if (unpackneg(uI, I) !== 0) throw 'non-0 error on point decode'
449
+ scalarmult(cI, uI, c)
450
+ add(rPb, cI)
451
+ pack(res, rPb)
452
+ return res
453
+ }
454
+
455
+ // res = P + Q
456
+ function ge_add (P, Q) {
457
+ var uP = [gf(), gf(), gf(), gf()]
458
+
459
+ var uQ = [gf(), gf(), gf(), gf()]
460
+
461
+ var res = new Uint8Array(32)
462
+ ge_neg(P)
463
+ ge_neg(Q)
464
+ if (unpackneg(uP, P) !== 0) throw 'non-0 error on point decode'
465
+ if (unpackneg(uQ, Q) !== 0) throw 'non-0 error on point decode'
466
+ add(uP, uQ)
467
+ pack(res, uP)
468
+ return res
469
+ }
470
+
471
+ var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10])
472
+
473
+ function modL (r, x) {
474
+ var carry, i, j, k
475
+ for (i = 63; i >= 32; --i) {
476
+ carry = 0
477
+ for (j = i - 32, k = i - 12; j < k; ++j) {
478
+ x[j] += carry - 16 * x[i] * L[j - (i - 32)]
479
+ carry = (x[j] + 128) >> 8
480
+ x[j] -= carry * 256
481
+ }
482
+ x[j] += carry
483
+ x[i] = 0
484
+ }
485
+ carry = 0
486
+ for (j = 0; j < 32; j++) {
487
+ x[j] += carry - (x[31] >> 4) * L[j]
488
+ carry = x[j] >> 8
489
+ x[j] &= 255
490
+ }
491
+ for (j = 0; j < 32; j++) x[j] -= carry * L[j]
492
+ for (i = 0; i < 32; i++) {
493
+ x[i + 1] += x[i] >> 8
494
+ r[i] = x[i] & 255
495
+ }
496
+ }
497
+
498
+ function reduce (r) {
499
+ var x = new Float64Array(64); var i
500
+ for (i = 0; i < 64; i++) x[i] = r[i]
501
+ for (i = 0; i < 64; i++) r[i] = 0
502
+ modL(r, x)
503
+ }
504
+
505
+ function unpackneg (r, p) {
506
+ var t = gf(); var chk = gf(); var num = gf()
507
+
508
+ var den = gf(); var den2 = gf(); var den4 = gf()
509
+
510
+ var den6 = gf()
511
+
512
+ set25519(r[2], gf1)
513
+ unpack25519(r[1], p)
514
+ S(num, r[1])
515
+ M(den, num, D)
516
+ Z(num, num, r[2])
517
+ A(den, r[2], den)
518
+
519
+ S(den2, den)
520
+ S(den4, den2)
521
+ M(den6, den4, den2)
522
+ M(t, den6, num)
523
+ M(t, t, den)
524
+
525
+ pow2523(t, t)
526
+ M(t, t, num)
527
+ M(t, t, den)
528
+ M(t, t, den)
529
+ M(r[0], t, den)
530
+
531
+ S(chk, r[0])
532
+ M(chk, chk, den)
533
+ if (neq25519(chk, num)) M(r[0], r[0], I)
534
+
535
+ S(chk, r[0])
536
+ M(chk, chk, den)
537
+ if (neq25519(chk, num)) return -1
538
+
539
+ if (par25519(r[0]) === (p[31] >> 7)) Z(r[0], gf0, r[0])
540
+
541
+ M(r[3], r[0], r[1])
542
+ return 0
543
+ }
544
+
545
+ const NACL = {}
546
+
547
+ NACL.ll = {
548
+ geScalarmultBase: ge_scalarmult_base,
549
+ ge_scalarmult_base: ge_scalarmult_base,
550
+
551
+ geScalarmult: ge_scalarmult,
552
+ ge_scalarmult: ge_scalarmult,
553
+
554
+ geDoubleScalarmultBaseVartime: ge_double_scalarmult_base_vartime,
555
+ ge_double_scalarmult_base_vartime: ge_double_scalarmult_base_vartime,
556
+
557
+ geAdd: ge_add,
558
+ ge_add: ge_add,
559
+
560
+ geDoubleScalarmultPostcompVartime: ge_double_scalarmult_postcomp_vartime,
561
+ ge_double_scalarmult_postcomp_vartime: ge_double_scalarmult_postcomp_vartime
562
+ }
563
+
564
+ /* High-level API */
565
+
566
+ function cleanup (arr) {
567
+ for (var i = 0; i < arr.length; i++) arr[i] = 0
568
+ }
569
+
570
+ NACL.randomBytes = function (n) {
571
+ var b = new Uint8Array(n)
572
+ randombytes(b, n)
573
+ return b
574
+ }
575
+
576
+ NACL.setPRNG = function (fn) {
577
+ randombytes = fn
578
+ };
579
+
580
+ (function () {
581
+ // Initialize PRNG if environment provides CSPRNG.
582
+ // If not, methods calling randombytes will throw.
583
+ var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null
584
+ if (crypto && crypto.getRandomValues) {
585
+ // Browsers.
586
+ var QUOTA = 65536
587
+ NACL.setPRNG(function (x, n) {
588
+ var i; var v = new Uint8Array(n)
589
+ for (i = 0; i < n; i += QUOTA) {
590
+ crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)))
591
+ }
592
+ for (i = 0; i < n; i++) x[i] = v[i]
593
+ cleanup(v)
594
+ })
595
+ } else if (typeof require !== 'undefined') {
596
+ // Node.js.
597
+ crypto = require('crypto')
598
+ if (crypto && crypto.randomBytes) {
599
+ NACL.setPRNG(function (x, n) {
600
+ var i; var v = crypto.randomBytes(n)
601
+ for (i = 0; i < n; i++) x[i] = v[i]
602
+ cleanup(v)
603
+ })
604
+ }
605
+ }
606
+ })()
607
+
608
+ module.exports = NACL