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.
- package/.cache/eslintcache +1 -0
- package/.dockerignore +6 -0
- package/.eslintignore +1 -0
- package/.gitattributes +5 -0
- package/.readthedocs.yaml +16 -0
- package/CONTRIBUTING.md +1049 -0
- package/LICENSE.txt +21 -0
- package/README.md +537 -0
- package/SECURITY.md +5 -0
- package/build/cleanup-old-tags.js +94 -0
- package/build/countries.js +256 -0
- package/build/export-exchanges.js +520 -0
- package/build/fs.js +51 -0
- package/build/transpile.js +1772 -0
- package/build/vss.js +78 -0
- package/ccxt.browser.js +7 -0
- package/ccxt.d.ts +692 -0
- package/ccxt.js +171 -0
- package/cleanup.sh +2 -0
- package/composer-install.sh +20 -0
- package/dist/ccxt.browser.js +208383 -0
- package/gource.sh +3 -0
- package/index.html +7 -0
- package/js/.eslintrc +87 -0
- package/js/aax.js +2686 -0
- package/js/ascendex.js +2584 -0
- package/js/base/.eslintrc.js +43 -0
- package/js/base/Exchange.js +2371 -0
- package/js/base/Precise.js +283 -0
- package/js/base/errorHierarchy.js +47 -0
- package/js/base/errors.js +55 -0
- package/js/base/functions/crypto.js +158 -0
- package/js/base/functions/encode.js +118 -0
- package/js/base/functions/generic.js +270 -0
- package/js/base/functions/misc.js +138 -0
- package/js/base/functions/number.js +329 -0
- package/js/base/functions/platform.js +38 -0
- package/js/base/functions/string.js +21 -0
- package/js/base/functions/throttle.js +79 -0
- package/js/base/functions/time.js +210 -0
- package/js/base/functions/type.js +66 -0
- package/js/base/functions.js +28 -0
- package/js/bequant.js +32 -0
- package/js/bibox.js +1407 -0
- package/js/bigone.js +1366 -0
- package/js/binance.js +5652 -0
- package/js/binancecoinm.js +46 -0
- package/js/binanceus.js +46 -0
- package/js/binanceusdm.js +49 -0
- package/js/bit2c.js +535 -0
- package/js/bitbank.js +842 -0
- package/js/bitbay.js +16 -0
- package/js/bitbns.js +1073 -0
- package/js/bitcoincom.js +15 -0
- package/js/bitfinex.js +1433 -0
- package/js/bitfinex2.js +2025 -0
- package/js/bitflyer.js +840 -0
- package/js/bitforex.js +614 -0
- package/js/bitget.js +2397 -0
- package/js/bithumb.js +980 -0
- package/js/bitmart.js +2516 -0
- package/js/bitmex.js +1809 -0
- package/js/bitopro.js +1443 -0
- package/js/bitpanda.js +1782 -0
- package/js/bitrue.js +1747 -0
- package/js/bitso.js +1062 -0
- package/js/bitstamp.js +1757 -0
- package/js/bitstamp1.js +343 -0
- package/js/bittrex.js +1876 -0
- package/js/bitvavo.js +1579 -0
- package/js/bkex.js +1233 -0
- package/js/bl3p.js +346 -0
- package/js/blockchaincom.js +969 -0
- package/js/btcalpha.js +680 -0
- package/js/btcbox.js +477 -0
- package/js/btcmarkets.js +1022 -0
- package/js/btctradeua.js +466 -0
- package/js/btcturk.js +734 -0
- package/js/buda.js +946 -0
- package/js/bw.js +1265 -0
- package/js/bybit.js +3372 -0
- package/js/bytetrade.js +1336 -0
- package/js/cdax.js +1646 -0
- package/js/cex.js +1410 -0
- package/js/coinbase.js +1342 -0
- package/js/coinbaseprime.js +31 -0
- package/js/coinbasepro.js +1466 -0
- package/js/coincheck.js +755 -0
- package/js/coinex.js +3400 -0
- package/js/coinfalcon.js +880 -0
- package/js/coinmate.js +794 -0
- package/js/coinone.js +816 -0
- package/js/coinspot.js +345 -0
- package/js/crex24.js +1636 -0
- package/js/cryptocom.js +1832 -0
- package/js/currencycom.js +1748 -0
- package/js/delta.js +1547 -0
- package/js/deribit.js +2148 -0
- package/js/digifinex.js +1585 -0
- package/js/eqonex.js +1660 -0
- package/js/exmo.js +1670 -0
- package/js/fairdesk.js +1231 -0
- package/js/flowbtc.js +35 -0
- package/js/fmfwio.js +34 -0
- package/js/ftx.js +2751 -0
- package/js/ftxus.js +38 -0
- package/js/gateio.js +4174 -0
- package/js/gemini.js +1397 -0
- package/js/hitbtc.js +1343 -0
- package/js/hitbtc3.js +2329 -0
- package/js/hollaex.js +1486 -0
- package/js/huobi.js +5706 -0
- package/js/huobijp.js +1710 -0
- package/js/huobipro.js +18 -0
- package/js/idex.js +1439 -0
- package/js/independentreserve.js +649 -0
- package/js/indodax.js +742 -0
- package/js/itbit.js +722 -0
- package/js/kraken.js +2179 -0
- package/js/kucoin.js +2571 -0
- package/js/kucoinfutures.js +1771 -0
- package/js/kuna.js +809 -0
- package/js/latoken.js +1445 -0
- package/js/lbank.js +760 -0
- package/js/liquid.js +1432 -0
- package/js/luno.js +873 -0
- package/js/lykke.js +1147 -0
- package/js/mercado.js +771 -0
- package/js/mexc.js +3151 -0
- package/js/ndax.js +2233 -0
- package/js/novadax.js +1318 -0
- package/js/oceanex.js +816 -0
- package/js/okcoin.js +3841 -0
- package/js/okex.js +16 -0
- package/js/okex5.js +16 -0
- package/js/okx.js +4795 -0
- package/js/paymium.js +498 -0
- package/js/phemex.js +2957 -0
- package/js/poloniex.js +1674 -0
- package/js/probit.js +1346 -0
- package/js/qtrade.js +1588 -0
- package/js/ripio.js +1061 -0
- package/js/static_dependencies/BN/bn.js +3526 -0
- package/js/static_dependencies/README.md +1 -0
- package/js/static_dependencies/crypto-js/crypto-js.js +5988 -0
- package/js/static_dependencies/elliptic/lib/elliptic/curve/base.js +375 -0
- package/js/static_dependencies/elliptic/lib/elliptic/curve/edwards.js +433 -0
- package/js/static_dependencies/elliptic/lib/elliptic/curve/index.js +8 -0
- package/js/static_dependencies/elliptic/lib/elliptic/curve/mont.js +180 -0
- package/js/static_dependencies/elliptic/lib/elliptic/curve/short.js +938 -0
- package/js/static_dependencies/elliptic/lib/elliptic/curves.js +204 -0
- package/js/static_dependencies/elliptic/lib/elliptic/ec/index.js +240 -0
- package/js/static_dependencies/elliptic/lib/elliptic/ec/key.js +119 -0
- package/js/static_dependencies/elliptic/lib/elliptic/ec/signature.js +24 -0
- package/js/static_dependencies/elliptic/lib/elliptic/eddsa/index.js +145 -0
- package/js/static_dependencies/elliptic/lib/elliptic/eddsa/key.js +100 -0
- package/js/static_dependencies/elliptic/lib/elliptic/eddsa/signature.js +65 -0
- package/js/static_dependencies/elliptic/lib/elliptic/precomputed/secp256k1.js +780 -0
- package/js/static_dependencies/elliptic/lib/elliptic/utils.js +214 -0
- package/js/static_dependencies/elliptic/lib/elliptic.js +22 -0
- package/js/static_dependencies/elliptic/lib/hmac-drbg/hmac-drbg.js +114 -0
- package/js/static_dependencies/fetch-ponyfill/fetch-node.js +39 -0
- package/js/static_dependencies/node-fetch/index.js +1564 -0
- package/js/static_dependencies/node-rsa/NodeRSA.js +223 -0
- package/js/static_dependencies/node-rsa/asn1/ber/errors.js +13 -0
- package/js/static_dependencies/node-rsa/asn1/ber/index.js +21 -0
- package/js/static_dependencies/node-rsa/asn1/ber/reader.js +262 -0
- package/js/static_dependencies/node-rsa/asn1/ber/types.js +36 -0
- package/js/static_dependencies/node-rsa/asn1/index.js +17 -0
- package/js/static_dependencies/node-rsa/encryptEngines/js.js +34 -0
- package/js/static_dependencies/node-rsa/formats/components.js +71 -0
- package/js/static_dependencies/node-rsa/formats/formats.js +31 -0
- package/js/static_dependencies/node-rsa/formats/pkcs1.js +148 -0
- package/js/static_dependencies/node-rsa/formats/pkcs8.js +187 -0
- package/js/static_dependencies/node-rsa/libs/jsbn.js +1252 -0
- package/js/static_dependencies/node-rsa/libs/rsa.js +147 -0
- package/js/static_dependencies/node-rsa/schemes/pkcs1.js +176 -0
- package/js/static_dependencies/node-rsa/schemes/schemes.js +21 -0
- package/js/static_dependencies/node-rsa/utils.js +98 -0
- package/js/static_dependencies/qs/formats.js +18 -0
- package/js/static_dependencies/qs/index.js +11 -0
- package/js/static_dependencies/qs/parse.js +242 -0
- package/js/static_dependencies/qs/stringify.js +269 -0
- package/js/static_dependencies/qs/utils.js +230 -0
- package/js/stex.js +1925 -0
- package/js/test/.eslintrc.js +42 -0
- package/js/test/Exchange/test.balance.js +61 -0
- package/js/test/Exchange/test.borrowRate.js +32 -0
- package/js/test/Exchange/test.currency.js +52 -0
- package/js/test/Exchange/test.fetchBalance.js +23 -0
- package/js/test/Exchange/test.fetchBorrowInterest.js +59 -0
- package/js/test/Exchange/test.fetchBorrowRate.js +32 -0
- package/js/test/Exchange/test.fetchBorrowRates.js +28 -0
- package/js/test/Exchange/test.fetchClosedOrders.js +32 -0
- package/js/test/Exchange/test.fetchCurrencies.js +35 -0
- package/js/test/Exchange/test.fetchDeposits.js +31 -0
- package/js/test/Exchange/test.fetchFundingFees.js +19 -0
- package/js/test/Exchange/test.fetchFundingRateHistory.js +40 -0
- package/js/test/Exchange/test.fetchL2OrderBook.js +23 -0
- package/js/test/Exchange/test.fetchLedger.js +42 -0
- package/js/test/Exchange/test.fetchLeverageTiers.js +33 -0
- package/js/test/Exchange/test.fetchMarketLeverageTiers.js +22 -0
- package/js/test/Exchange/test.fetchMarkets.js +33 -0
- package/js/test/Exchange/test.fetchMyTrades.js +42 -0
- package/js/test/Exchange/test.fetchOHLCV.js +46 -0
- package/js/test/Exchange/test.fetchOpenOrders.js +36 -0
- package/js/test/Exchange/test.fetchOrderBook.js +25 -0
- package/js/test/Exchange/test.fetchOrderBooks.js +35 -0
- package/js/test/Exchange/test.fetchOrders.js +41 -0
- package/js/test/Exchange/test.fetchPositions.js +47 -0
- package/js/test/Exchange/test.fetchStatus.js +35 -0
- package/js/test/Exchange/test.fetchTicker.js +38 -0
- package/js/test/Exchange/test.fetchTickers.js +49 -0
- package/js/test/Exchange/test.fetchTrades.js +39 -0
- package/js/test/Exchange/test.fetchTradingFee.js +18 -0
- package/js/test/Exchange/test.fetchTradingFees.js +22 -0
- package/js/test/Exchange/test.fetchTransactions.js +31 -0
- package/js/test/Exchange/test.fetchWithdrawals.js +31 -0
- package/js/test/Exchange/test.ledgerItem.js +46 -0
- package/js/test/Exchange/test.leverageTier.js +33 -0
- package/js/test/Exchange/test.loadMarkets.js +35 -0
- package/js/test/Exchange/test.market.js +129 -0
- package/js/test/Exchange/test.ohlcv.js +33 -0
- package/js/test/Exchange/test.order.js +62 -0
- package/js/test/Exchange/test.orderbook.js +61 -0
- package/js/test/Exchange/test.position.js +21 -0
- package/js/test/Exchange/test.throttle.js +94 -0
- package/js/test/Exchange/test.ticker.js +95 -0
- package/js/test/Exchange/test.trade.js +68 -0
- package/js/test/Exchange/test.tradingFee.js +34 -0
- package/js/test/Exchange/test.transaction.js +35 -0
- package/js/test/base/.eslintrc +38 -0
- package/js/test/base/functions/test.crypto.js +110 -0
- package/js/test/base/functions/test.datetime.js +62 -0
- package/js/test/base/functions/test.generic.js +152 -0
- package/js/test/base/functions/test.number.js +362 -0
- package/js/test/base/functions/test.time.js +56 -0
- package/js/test/base/functions/test.type.js +53 -0
- package/js/test/base/test.base.js +193 -0
- package/js/test/errors/test.InsufficientFunds.js +86 -0
- package/js/test/errors/test.InvalidNonce.js +64 -0
- package/js/test/errors/test.InvalidOrder.js +35 -0
- package/js/test/errors/test.OrderNotFound.js +39 -0
- package/js/test/test.js +426 -0
- package/js/test/test.timeout_hang.js +12 -0
- package/js/therock.js +1431 -0
- package/js/tidebit.js +632 -0
- package/js/tidex.js +939 -0
- package/js/timex.js +1283 -0
- package/js/upbit.js +1622 -0
- package/js/vcc.js +1353 -0
- package/js/wavesexchange.js +2185 -0
- package/js/wazirx.js +732 -0
- package/js/whitebit.js +1352 -0
- package/js/woo.js +1577 -0
- package/js/xena.js +1948 -0
- package/js/yobit.js +1129 -0
- package/js/zaif.js +647 -0
- package/js/zb.js +4088 -0
- package/js/zipmex.js +40 -0
- package/js/zonda.js +1497 -0
- package/multilang.sh +159 -0
- package/package.json +591 -0
- 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;
|