ccxt-look 1.81.50

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 (264) hide show
  1. package/.cache/eslintcache +1 -0
  2. package/.dockerignore +6 -0
  3. package/.eslintignore +1 -0
  4. package/.gitattributes +5 -0
  5. package/.readthedocs.yaml +16 -0
  6. package/CONTRIBUTING.md +1049 -0
  7. package/LICENSE.txt +21 -0
  8. package/README.md +537 -0
  9. package/SECURITY.md +5 -0
  10. package/build/cleanup-old-tags.js +94 -0
  11. package/build/countries.js +256 -0
  12. package/build/export-exchanges.js +520 -0
  13. package/build/fs.js +51 -0
  14. package/build/transpile.js +1772 -0
  15. package/build/vss.js +78 -0
  16. package/ccxt.browser.js +7 -0
  17. package/ccxt.d.ts +692 -0
  18. package/ccxt.js +171 -0
  19. package/cleanup.sh +2 -0
  20. package/composer-install.sh +20 -0
  21. package/dist/ccxt.browser.js +208383 -0
  22. package/gource.sh +3 -0
  23. package/index.html +7 -0
  24. package/js/.eslintrc +87 -0
  25. package/js/aax.js +2686 -0
  26. package/js/ascendex.js +2584 -0
  27. package/js/base/.eslintrc.js +43 -0
  28. package/js/base/Exchange.js +2371 -0
  29. package/js/base/Precise.js +283 -0
  30. package/js/base/errorHierarchy.js +47 -0
  31. package/js/base/errors.js +55 -0
  32. package/js/base/functions/crypto.js +158 -0
  33. package/js/base/functions/encode.js +118 -0
  34. package/js/base/functions/generic.js +270 -0
  35. package/js/base/functions/misc.js +138 -0
  36. package/js/base/functions/number.js +329 -0
  37. package/js/base/functions/platform.js +38 -0
  38. package/js/base/functions/string.js +21 -0
  39. package/js/base/functions/throttle.js +79 -0
  40. package/js/base/functions/time.js +210 -0
  41. package/js/base/functions/type.js +66 -0
  42. package/js/base/functions.js +28 -0
  43. package/js/bequant.js +32 -0
  44. package/js/bibox.js +1407 -0
  45. package/js/bigone.js +1366 -0
  46. package/js/binance.js +5652 -0
  47. package/js/binancecoinm.js +46 -0
  48. package/js/binanceus.js +46 -0
  49. package/js/binanceusdm.js +49 -0
  50. package/js/bit2c.js +535 -0
  51. package/js/bitbank.js +842 -0
  52. package/js/bitbay.js +16 -0
  53. package/js/bitbns.js +1073 -0
  54. package/js/bitcoincom.js +15 -0
  55. package/js/bitfinex.js +1433 -0
  56. package/js/bitfinex2.js +2025 -0
  57. package/js/bitflyer.js +840 -0
  58. package/js/bitforex.js +614 -0
  59. package/js/bitget.js +2397 -0
  60. package/js/bithumb.js +980 -0
  61. package/js/bitmart.js +2516 -0
  62. package/js/bitmex.js +1809 -0
  63. package/js/bitopro.js +1443 -0
  64. package/js/bitpanda.js +1782 -0
  65. package/js/bitrue.js +1747 -0
  66. package/js/bitso.js +1062 -0
  67. package/js/bitstamp.js +1757 -0
  68. package/js/bitstamp1.js +343 -0
  69. package/js/bittrex.js +1876 -0
  70. package/js/bitvavo.js +1579 -0
  71. package/js/bkex.js +1233 -0
  72. package/js/bl3p.js +346 -0
  73. package/js/blockchaincom.js +969 -0
  74. package/js/btcalpha.js +680 -0
  75. package/js/btcbox.js +477 -0
  76. package/js/btcmarkets.js +1022 -0
  77. package/js/btctradeua.js +466 -0
  78. package/js/btcturk.js +734 -0
  79. package/js/buda.js +946 -0
  80. package/js/bw.js +1265 -0
  81. package/js/bybit.js +3372 -0
  82. package/js/bytetrade.js +1336 -0
  83. package/js/cdax.js +1646 -0
  84. package/js/cex.js +1410 -0
  85. package/js/coinbase.js +1342 -0
  86. package/js/coinbaseprime.js +31 -0
  87. package/js/coinbasepro.js +1466 -0
  88. package/js/coincheck.js +755 -0
  89. package/js/coinex.js +3400 -0
  90. package/js/coinfalcon.js +880 -0
  91. package/js/coinmate.js +794 -0
  92. package/js/coinone.js +816 -0
  93. package/js/coinspot.js +345 -0
  94. package/js/crex24.js +1636 -0
  95. package/js/cryptocom.js +1832 -0
  96. package/js/currencycom.js +1748 -0
  97. package/js/delta.js +1547 -0
  98. package/js/deribit.js +2148 -0
  99. package/js/digifinex.js +1585 -0
  100. package/js/eqonex.js +1660 -0
  101. package/js/exmo.js +1670 -0
  102. package/js/fairdesk.js +1231 -0
  103. package/js/flowbtc.js +35 -0
  104. package/js/fmfwio.js +34 -0
  105. package/js/ftx.js +2751 -0
  106. package/js/ftxus.js +38 -0
  107. package/js/gateio.js +4174 -0
  108. package/js/gemini.js +1397 -0
  109. package/js/hitbtc.js +1343 -0
  110. package/js/hitbtc3.js +2329 -0
  111. package/js/hollaex.js +1486 -0
  112. package/js/huobi.js +5706 -0
  113. package/js/huobijp.js +1710 -0
  114. package/js/huobipro.js +18 -0
  115. package/js/idex.js +1439 -0
  116. package/js/independentreserve.js +649 -0
  117. package/js/indodax.js +742 -0
  118. package/js/itbit.js +722 -0
  119. package/js/kraken.js +2179 -0
  120. package/js/kucoin.js +2571 -0
  121. package/js/kucoinfutures.js +1771 -0
  122. package/js/kuna.js +809 -0
  123. package/js/latoken.js +1445 -0
  124. package/js/lbank.js +760 -0
  125. package/js/liquid.js +1432 -0
  126. package/js/luno.js +873 -0
  127. package/js/lykke.js +1147 -0
  128. package/js/mercado.js +771 -0
  129. package/js/mexc.js +3151 -0
  130. package/js/ndax.js +2233 -0
  131. package/js/novadax.js +1318 -0
  132. package/js/oceanex.js +816 -0
  133. package/js/okcoin.js +3841 -0
  134. package/js/okex.js +16 -0
  135. package/js/okex5.js +16 -0
  136. package/js/okx.js +4795 -0
  137. package/js/paymium.js +498 -0
  138. package/js/phemex.js +2957 -0
  139. package/js/poloniex.js +1674 -0
  140. package/js/probit.js +1346 -0
  141. package/js/qtrade.js +1588 -0
  142. package/js/ripio.js +1061 -0
  143. package/js/static_dependencies/BN/bn.js +3526 -0
  144. package/js/static_dependencies/README.md +1 -0
  145. package/js/static_dependencies/crypto-js/crypto-js.js +5988 -0
  146. package/js/static_dependencies/elliptic/lib/elliptic/curve/base.js +375 -0
  147. package/js/static_dependencies/elliptic/lib/elliptic/curve/edwards.js +433 -0
  148. package/js/static_dependencies/elliptic/lib/elliptic/curve/index.js +8 -0
  149. package/js/static_dependencies/elliptic/lib/elliptic/curve/mont.js +180 -0
  150. package/js/static_dependencies/elliptic/lib/elliptic/curve/short.js +938 -0
  151. package/js/static_dependencies/elliptic/lib/elliptic/curves.js +204 -0
  152. package/js/static_dependencies/elliptic/lib/elliptic/ec/index.js +240 -0
  153. package/js/static_dependencies/elliptic/lib/elliptic/ec/key.js +119 -0
  154. package/js/static_dependencies/elliptic/lib/elliptic/ec/signature.js +24 -0
  155. package/js/static_dependencies/elliptic/lib/elliptic/eddsa/index.js +145 -0
  156. package/js/static_dependencies/elliptic/lib/elliptic/eddsa/key.js +100 -0
  157. package/js/static_dependencies/elliptic/lib/elliptic/eddsa/signature.js +65 -0
  158. package/js/static_dependencies/elliptic/lib/elliptic/precomputed/secp256k1.js +780 -0
  159. package/js/static_dependencies/elliptic/lib/elliptic/utils.js +214 -0
  160. package/js/static_dependencies/elliptic/lib/elliptic.js +22 -0
  161. package/js/static_dependencies/elliptic/lib/hmac-drbg/hmac-drbg.js +114 -0
  162. package/js/static_dependencies/fetch-ponyfill/fetch-node.js +39 -0
  163. package/js/static_dependencies/node-fetch/index.js +1564 -0
  164. package/js/static_dependencies/node-rsa/NodeRSA.js +223 -0
  165. package/js/static_dependencies/node-rsa/asn1/ber/errors.js +13 -0
  166. package/js/static_dependencies/node-rsa/asn1/ber/index.js +21 -0
  167. package/js/static_dependencies/node-rsa/asn1/ber/reader.js +262 -0
  168. package/js/static_dependencies/node-rsa/asn1/ber/types.js +36 -0
  169. package/js/static_dependencies/node-rsa/asn1/index.js +17 -0
  170. package/js/static_dependencies/node-rsa/encryptEngines/js.js +34 -0
  171. package/js/static_dependencies/node-rsa/formats/components.js +71 -0
  172. package/js/static_dependencies/node-rsa/formats/formats.js +31 -0
  173. package/js/static_dependencies/node-rsa/formats/pkcs1.js +148 -0
  174. package/js/static_dependencies/node-rsa/formats/pkcs8.js +187 -0
  175. package/js/static_dependencies/node-rsa/libs/jsbn.js +1252 -0
  176. package/js/static_dependencies/node-rsa/libs/rsa.js +147 -0
  177. package/js/static_dependencies/node-rsa/schemes/pkcs1.js +176 -0
  178. package/js/static_dependencies/node-rsa/schemes/schemes.js +21 -0
  179. package/js/static_dependencies/node-rsa/utils.js +98 -0
  180. package/js/static_dependencies/qs/formats.js +18 -0
  181. package/js/static_dependencies/qs/index.js +11 -0
  182. package/js/static_dependencies/qs/parse.js +242 -0
  183. package/js/static_dependencies/qs/stringify.js +269 -0
  184. package/js/static_dependencies/qs/utils.js +230 -0
  185. package/js/stex.js +1925 -0
  186. package/js/test/.eslintrc.js +42 -0
  187. package/js/test/Exchange/test.balance.js +61 -0
  188. package/js/test/Exchange/test.borrowRate.js +32 -0
  189. package/js/test/Exchange/test.currency.js +52 -0
  190. package/js/test/Exchange/test.fetchBalance.js +23 -0
  191. package/js/test/Exchange/test.fetchBorrowInterest.js +59 -0
  192. package/js/test/Exchange/test.fetchBorrowRate.js +32 -0
  193. package/js/test/Exchange/test.fetchBorrowRates.js +28 -0
  194. package/js/test/Exchange/test.fetchClosedOrders.js +32 -0
  195. package/js/test/Exchange/test.fetchCurrencies.js +35 -0
  196. package/js/test/Exchange/test.fetchDeposits.js +31 -0
  197. package/js/test/Exchange/test.fetchFundingFees.js +19 -0
  198. package/js/test/Exchange/test.fetchFundingRateHistory.js +40 -0
  199. package/js/test/Exchange/test.fetchL2OrderBook.js +23 -0
  200. package/js/test/Exchange/test.fetchLedger.js +42 -0
  201. package/js/test/Exchange/test.fetchLeverageTiers.js +33 -0
  202. package/js/test/Exchange/test.fetchMarketLeverageTiers.js +22 -0
  203. package/js/test/Exchange/test.fetchMarkets.js +33 -0
  204. package/js/test/Exchange/test.fetchMyTrades.js +42 -0
  205. package/js/test/Exchange/test.fetchOHLCV.js +46 -0
  206. package/js/test/Exchange/test.fetchOpenOrders.js +36 -0
  207. package/js/test/Exchange/test.fetchOrderBook.js +25 -0
  208. package/js/test/Exchange/test.fetchOrderBooks.js +35 -0
  209. package/js/test/Exchange/test.fetchOrders.js +41 -0
  210. package/js/test/Exchange/test.fetchPositions.js +47 -0
  211. package/js/test/Exchange/test.fetchStatus.js +35 -0
  212. package/js/test/Exchange/test.fetchTicker.js +38 -0
  213. package/js/test/Exchange/test.fetchTickers.js +49 -0
  214. package/js/test/Exchange/test.fetchTrades.js +39 -0
  215. package/js/test/Exchange/test.fetchTradingFee.js +18 -0
  216. package/js/test/Exchange/test.fetchTradingFees.js +22 -0
  217. package/js/test/Exchange/test.fetchTransactions.js +31 -0
  218. package/js/test/Exchange/test.fetchWithdrawals.js +31 -0
  219. package/js/test/Exchange/test.ledgerItem.js +46 -0
  220. package/js/test/Exchange/test.leverageTier.js +33 -0
  221. package/js/test/Exchange/test.loadMarkets.js +35 -0
  222. package/js/test/Exchange/test.market.js +129 -0
  223. package/js/test/Exchange/test.ohlcv.js +33 -0
  224. package/js/test/Exchange/test.order.js +62 -0
  225. package/js/test/Exchange/test.orderbook.js +61 -0
  226. package/js/test/Exchange/test.position.js +21 -0
  227. package/js/test/Exchange/test.throttle.js +94 -0
  228. package/js/test/Exchange/test.ticker.js +95 -0
  229. package/js/test/Exchange/test.trade.js +68 -0
  230. package/js/test/Exchange/test.tradingFee.js +34 -0
  231. package/js/test/Exchange/test.transaction.js +35 -0
  232. package/js/test/base/.eslintrc +38 -0
  233. package/js/test/base/functions/test.crypto.js +110 -0
  234. package/js/test/base/functions/test.datetime.js +62 -0
  235. package/js/test/base/functions/test.generic.js +152 -0
  236. package/js/test/base/functions/test.number.js +362 -0
  237. package/js/test/base/functions/test.time.js +56 -0
  238. package/js/test/base/functions/test.type.js +53 -0
  239. package/js/test/base/test.base.js +193 -0
  240. package/js/test/errors/test.InsufficientFunds.js +86 -0
  241. package/js/test/errors/test.InvalidNonce.js +64 -0
  242. package/js/test/errors/test.InvalidOrder.js +35 -0
  243. package/js/test/errors/test.OrderNotFound.js +39 -0
  244. package/js/test/test.js +426 -0
  245. package/js/test/test.timeout_hang.js +12 -0
  246. package/js/therock.js +1431 -0
  247. package/js/tidebit.js +632 -0
  248. package/js/tidex.js +939 -0
  249. package/js/timex.js +1283 -0
  250. package/js/upbit.js +1622 -0
  251. package/js/vcc.js +1353 -0
  252. package/js/wavesexchange.js +2185 -0
  253. package/js/wazirx.js +732 -0
  254. package/js/whitebit.js +1352 -0
  255. package/js/woo.js +1577 -0
  256. package/js/xena.js +1948 -0
  257. package/js/yobit.js +1129 -0
  258. package/js/zaif.js +647 -0
  259. package/js/zb.js +4088 -0
  260. package/js/zipmex.js +40 -0
  261. package/js/zonda.js +1497 -0
  262. package/multilang.sh +159 -0
  263. package/package.json +591 -0
  264. package/postinstall.js +103 -0
@@ -0,0 +1,145 @@
1
+ 'use strict';
2
+
3
+ var curves = require('../curves');
4
+ var utils = require('../utils');
5
+ var assert = utils.assert;
6
+ var parseBytes = utils.parseBytes;
7
+ var KeyPair = require('./key');
8
+ var Signature = require('./signature');
9
+ const BN = require ('../../../../BN/bn.js')
10
+ const { byteArrayToWordArray } = require ('../../../../../base/functions/encode')
11
+ const CryptoJS = require('../../../../crypto-js/crypto-js');
12
+
13
+
14
+ function EDDSA(curveName) {
15
+ assert(curveName === 'ed25519', 'only tested with ed25519 so far');
16
+
17
+ if (!(this instanceof EDDSA))
18
+ return new EDDSA(curveName);
19
+
20
+ var curve = curves[curveName].curve;
21
+ this.curve = curve;
22
+ this.g = curve.g;
23
+ this.g.precompute(curve.n.bitLength() + 1);
24
+
25
+ this.pointClass = curve.point().constructor;
26
+ this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
27
+ //this.hash = hash.sha512;
28
+ }
29
+
30
+ module.exports = EDDSA;
31
+
32
+ /**
33
+ * @param {Array|String} message - message bytes
34
+ * @param {Array|String|KeyPair} secret - secret bytes or a keypair
35
+ * @returns {Signature} - signature
36
+ */
37
+ EDDSA.prototype.sign = function sign(message, secret) {
38
+ message = parseBytes(message);
39
+ var key = this.keyFromSecret(secret);
40
+ var r = this.hashInt(key.secret (), message);
41
+ var R = this.g.mul(r);
42
+ var Rencoded = this.encodePoint(R);
43
+ var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
44
+ s_ = s_.mul (key.priv ())
45
+ var S = r.add(s_).umod(this.curve.n);
46
+ return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
47
+ };
48
+
49
+ /**
50
+ * @param {Array|String} message - message bytes
51
+ * @param {Array|String|KeyPair} secret - secret bytes or a keypair
52
+ * @returns {Signature} - signature
53
+ */
54
+ EDDSA.prototype.signModified = function sign(message, secret) {
55
+ message = parseBytes(message);
56
+ var key = this.keyFromSecret(secret);
57
+ // convert between curve25519 and ed25519 keys
58
+ const secretLE = new BN (key.secret (), 16, 'le')
59
+ const pubKey = this.encodePoint (this.g.mul (secretLE))
60
+ const signBit = pubKey[31] & 0x80
61
+ var r = this.hashInt (key.secret (), message)
62
+ var R = this.g.mul(r);
63
+ var Rencoded = this.encodePoint (R);
64
+ let s_ = this.hashInt (Rencoded, pubKey, message)
65
+ s_ = s_.mul (secretLE)
66
+ var S = r.add(s_).umod(this.curve.n);
67
+ var Sencoded = S.toArray ('le', 32)
68
+ Sencoded[31] |= signBit
69
+ return this.makeSignature({ R: R, S: S, Rencoded: Rencoded, Sencoded: Sencoded });
70
+ };
71
+
72
+
73
+ /**
74
+ * @param {Array} message - message bytes
75
+ * @param {Array|String|Signature} sig - sig bytes
76
+ * @param {Array|String|Point|KeyPair} pub - public key
77
+ * @returns {Boolean} - true if public key matches sig of message
78
+ */
79
+ EDDSA.prototype.verify = function verify(message, sig, pub) {
80
+ message = parseBytes(message);
81
+ sig = this.makeSignature(sig);
82
+ var key = this.keyFromPublic(pub);
83
+ var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
84
+ var SG = this.g.mul(sig.S());
85
+ var RplusAh = sig.R().add(key.pub().mul(h));
86
+ return RplusAh.eq(SG);
87
+ };
88
+
89
+ EDDSA.prototype.hashInt = function hashInt() {
90
+ let toHash = Array.from (arguments).reduce ((a, b) => a.concat (b))
91
+ toHash = byteArrayToWordArray (toHash)
92
+ const digest = CryptoJS['SHA512'] (toHash).toString (CryptoJS.enc.Hex)
93
+ return utils.intFromLE(digest).umod(this.curve.n);
94
+ };
95
+
96
+ EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
97
+ return KeyPair.fromPublic(this, pub);
98
+ };
99
+
100
+ EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
101
+ return KeyPair.fromSecret(this, secret);
102
+ };
103
+
104
+ EDDSA.prototype.makeSignature = function makeSignature(sig) {
105
+ if (sig instanceof Signature)
106
+ return sig;
107
+ return new Signature(this, sig);
108
+ };
109
+
110
+ /**
111
+ * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
112
+ *
113
+ * EDDSA defines methods for encoding and decoding points and integers. These are
114
+ * helper convenience methods, that pass along to utility functions implied
115
+ * parameters.
116
+ *
117
+ */
118
+ EDDSA.prototype.encodePoint = function encodePoint(point) {
119
+ var enc = point.getY().toArray('le', this.encodingLength);
120
+ enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
121
+ return enc;
122
+ };
123
+
124
+ EDDSA.prototype.decodePoint = function decodePoint(bytes) {
125
+ bytes = utils.parseBytes(bytes);
126
+
127
+ var lastIx = bytes.length - 1;
128
+ var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
129
+ var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
130
+
131
+ var y = utils.intFromLE(normed);
132
+ return this.curve.pointFromY(y, xIsOdd);
133
+ };
134
+
135
+ EDDSA.prototype.encodeInt = function encodeInt(num) {
136
+ return num.toArray('le', this.encodingLength);
137
+ };
138
+
139
+ EDDSA.prototype.decodeInt = function decodeInt(bytes) {
140
+ return utils.intFromLE(bytes);
141
+ };
142
+
143
+ EDDSA.prototype.isPoint = function isPoint(val) {
144
+ return val instanceof this.pointClass;
145
+ };
@@ -0,0 +1,100 @@
1
+ 'use strict';
2
+
3
+ var utils = require('../utils');
4
+ var assert = utils.assert;
5
+ var parseBytes = utils.parseBytes;
6
+ var cachedProperty = utils.cachedProperty;
7
+
8
+ /**
9
+ * @param {EDDSA} eddsa - instance
10
+ * @param {Object} params - public/private key parameters
11
+ *
12
+ * @param {Array<Byte>} [params.secret] - secret seed bytes
13
+ * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
14
+ * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
15
+ *
16
+ */
17
+ function KeyPair(eddsa, params) {
18
+ this.eddsa = eddsa;
19
+ this._secret = parseBytes(params.secret);
20
+ if (eddsa.isPoint(params.pub))
21
+ this._pub = params.pub;
22
+ else
23
+ this._pubBytes = parseBytes(params.pub);
24
+ }
25
+
26
+ KeyPair.fromPublic = function fromPublic(eddsa, pub) {
27
+ if (pub instanceof KeyPair)
28
+ return pub;
29
+ return new KeyPair(eddsa, { pub: pub });
30
+ };
31
+
32
+ KeyPair.fromSecret = function fromSecret(eddsa, secret) {
33
+ if (secret instanceof KeyPair)
34
+ return secret;
35
+ return new KeyPair(eddsa, { secret: secret });
36
+ };
37
+
38
+ KeyPair.prototype.secret = function secret() {
39
+ return this._secret;
40
+ };
41
+
42
+ cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
43
+ return this.eddsa.encodePoint(this.pub());
44
+ });
45
+
46
+ cachedProperty(KeyPair, 'pub', function pub() {
47
+ if (this._pubBytes)
48
+ return this.eddsa.decodePoint(this._pubBytes);
49
+ return this.eddsa.g.mul(this.priv());
50
+ });
51
+
52
+ cachedProperty(KeyPair, 'privBytes', function privBytes() {
53
+ var eddsa = this.eddsa;
54
+ var hash = this.hash();
55
+ var lastIx = eddsa.encodingLength - 1;
56
+
57
+ var a = hash.slice(0, eddsa.encodingLength);
58
+ a[0] &= 248;
59
+ a[lastIx] &= 127;
60
+ a[lastIx] |= 64;
61
+
62
+ return a;
63
+ });
64
+
65
+ cachedProperty(KeyPair, 'priv', function priv() {
66
+ return this.eddsa.decodeInt(this.privBytes());
67
+ });
68
+
69
+ cachedProperty(KeyPair, 'hash', function hash() {
70
+ return this.eddsa.hash().update(this.secret()).digest();
71
+ });
72
+
73
+ cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
74
+ return this.hash().slice(this.eddsa.encodingLength);
75
+ });
76
+
77
+ KeyPair.prototype.sign = function sign(message) {
78
+ assert(this._secret, 'KeyPair can only verify');
79
+ return this.eddsa.sign(message, this);
80
+ };
81
+
82
+ KeyPair.prototype.signModified = function sign(message) {
83
+ assert(this._secret, 'KeyPair can only verify');
84
+ return this.eddsa.signModified(message, this);
85
+ };
86
+
87
+ KeyPair.prototype.verify = function verify(message, sig) {
88
+ return this.eddsa.verify(message, sig, this);
89
+ };
90
+
91
+ KeyPair.prototype.getSecret = function getSecret(enc) {
92
+ assert(this._secret, 'KeyPair is public only');
93
+ return utils.encode(this.secret(), enc);
94
+ };
95
+
96
+ KeyPair.prototype.getPublic = function getPublic(enc) {
97
+ return utils.encode(this.pubBytes(), enc);
98
+ };
99
+
100
+ module.exports = KeyPair;
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ var BN = require('../../../../BN/bn');
4
+ var utils = require('../utils');
5
+ var assert = utils.assert;
6
+ var cachedProperty = utils.cachedProperty;
7
+ var parseBytes = utils.parseBytes;
8
+
9
+ /**
10
+ * @param {EDDSA} eddsa - eddsa instance
11
+ * @param {Array<Bytes>|Object} sig -
12
+ * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
13
+ * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
14
+ * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
15
+ * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
16
+ */
17
+ function Signature(eddsa, sig) {
18
+ this.eddsa = eddsa;
19
+
20
+ if (typeof sig !== 'object')
21
+ sig = parseBytes(sig);
22
+
23
+ if (Array.isArray(sig)) {
24
+ sig = {
25
+ R: sig.slice(0, eddsa.encodingLength),
26
+ S: sig.slice(eddsa.encodingLength)
27
+ };
28
+ }
29
+
30
+ assert(sig.R && sig.S, 'Signature without R or S');
31
+
32
+ if (eddsa.isPoint(sig.R))
33
+ this._R = sig.R;
34
+ if (sig.S instanceof BN)
35
+ this._S = sig.S;
36
+
37
+ this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
38
+ this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
39
+ }
40
+
41
+ cachedProperty(Signature, 'S', function S() {
42
+ return this.eddsa.decodeInt(this.Sencoded());
43
+ });
44
+
45
+ cachedProperty(Signature, 'R', function R() {
46
+ return this.eddsa.decodePoint(this.Rencoded());
47
+ });
48
+
49
+ cachedProperty(Signature, 'Rencoded', function Rencoded() {
50
+ return this.eddsa.encodePoint(this.R());
51
+ });
52
+
53
+ cachedProperty(Signature, 'Sencoded', function Sencoded() {
54
+ return this.eddsa.encodeInt(this.S());
55
+ });
56
+
57
+ Signature.prototype.toBytes = function toBytes() {
58
+ return this.Rencoded().concat(this.Sencoded());
59
+ };
60
+
61
+ Signature.prototype.toHex = function toHex() {
62
+ return utils.encode(this.toBytes(), 'hex').toUpperCase();
63
+ };
64
+
65
+ module.exports = Signature;