summaryrefslogtreecommitdiffstats
path: root/node_modules/elliptic/README.md
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
commite06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch)
tree55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/elliptic/README.md
downloadwebsite_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip
api, login, auth
Diffstat (limited to 'node_modules/elliptic/README.md')
-rw-r--r--node_modules/elliptic/README.md238
1 files changed, 238 insertions, 0 deletions
diff --git a/node_modules/elliptic/README.md b/node_modules/elliptic/README.md
new file mode 100644
index 0000000..96219e5
--- /dev/null
+++ b/node_modules/elliptic/README.md
@@ -0,0 +1,238 @@
+# Elliptic [![Build Status](https://secure.travis-ci.org/indutny/elliptic.png)](http://travis-ci.org/indutny/elliptic) [![Coverage Status](https://coveralls.io/repos/indutny/elliptic/badge.svg?branch=master&service=github)](https://coveralls.io/github/indutny/elliptic?branch=master) [![Code Climate](https://codeclimate.com/github/indutny/elliptic/badges/gpa.svg)](https://codeclimate.com/github/indutny/elliptic)
+
+[![Saucelabs Test Status](https://saucelabs.com/browser-matrix/gh-indutny-elliptic.svg)](https://saucelabs.com/u/gh-indutny-elliptic)
+
+Fast elliptic-curve cryptography in a plain javascript implementation.
+
+NOTE: Please take a look at http://safecurves.cr.yp.to/ before choosing a curve
+for your cryptography operations.
+
+## Incentive
+
+ECC is much slower than regular RSA cryptography, the JS implementations are
+even more slower.
+
+## Benchmarks
+
+```bash
+$ node benchmarks/index.js
+Benchmarking: sign
+elliptic#sign x 262 ops/sec ±0.51% (177 runs sampled)
+eccjs#sign x 55.91 ops/sec ±0.90% (144 runs sampled)
+------------------------
+Fastest is elliptic#sign
+========================
+Benchmarking: verify
+elliptic#verify x 113 ops/sec ±0.50% (166 runs sampled)
+eccjs#verify x 48.56 ops/sec ±0.36% (125 runs sampled)
+------------------------
+Fastest is elliptic#verify
+========================
+Benchmarking: gen
+elliptic#gen x 294 ops/sec ±0.43% (176 runs sampled)
+eccjs#gen x 62.25 ops/sec ±0.63% (129 runs sampled)
+------------------------
+Fastest is elliptic#gen
+========================
+Benchmarking: ecdh
+elliptic#ecdh x 136 ops/sec ±0.85% (156 runs sampled)
+------------------------
+Fastest is elliptic#ecdh
+========================
+```
+
+## API
+
+### ECDSA
+
+```javascript
+var EC = require('elliptic').ec;
+
+// Create and initialize EC context
+// (better do it once and reuse it)
+var ec = new EC('secp256k1');
+
+// Generate keys
+var key = ec.genKeyPair();
+
+// Sign the message's hash (input must be an array, or a hex-string)
+var msgHash = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
+var signature = key.sign(msgHash);
+
+// Export DER encoded signature in Array
+var derSign = signature.toDER();
+
+// Verify signature
+console.log(key.verify(msgHash, derSign));
+
+// CHECK WITH NO PRIVATE KEY
+
+var pubPoint = key.getPublic();
+var x = pubPoint.getX();
+var y = pubPoint.getY();
+
+// Public Key MUST be either:
+// 1) '04' + hex string of x + hex string of y; or
+// 2) object with two hex string properties (x and y); or
+// 3) object with two buffer properties (x and y)
+var pub = pubPoint.encode('hex'); // case 1
+var pub = { x: x.toString('hex'), y: y.toString('hex') }; // case 2
+var pub = { x: x.toBuffer(), y: y.toBuffer() }; // case 3
+var pub = { x: x.toArrayLike(Buffer), y: y.toArrayLike(Buffer) }; // case 3
+
+// Import public key
+var key = ec.keyFromPublic(pub, 'hex');
+
+// Signature MUST be either:
+// 1) DER-encoded signature as hex-string; or
+// 2) DER-encoded signature as buffer; or
+// 3) object with two hex-string properties (r and s); or
+// 4) object with two buffer properties (r and s)
+
+var signature = '3046022100...'; // case 1
+var signature = new Buffer('...'); // case 2
+var signature = { r: 'b1fc...', s: '9c42...' }; // case 3
+
+// Verify signature
+console.log(key.verify(msgHash, signature));
+```
+
+### EdDSA
+
+```javascript
+var EdDSA = require('elliptic').eddsa;
+
+// Create and initialize EdDSA context
+// (better do it once and reuse it)
+var ec = new EdDSA('ed25519');
+
+// Create key pair from secret
+var key = ec.keyFromSecret('693e3c...'); // hex string, array or Buffer
+
+// Sign the message's hash (input must be an array, or a hex-string)
+var msgHash = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
+var signature = key.sign(msgHash).toHex();
+
+// Verify signature
+console.log(key.verify(msgHash, signature));
+
+// CHECK WITH NO PRIVATE KEY
+
+// Import public key
+var pub = '0a1af638...';
+var key = ec.keyFromPublic(pub, 'hex');
+
+// Verify signature
+var signature = '70bed1...';
+console.log(key.verify(msgHash, signature));
+```
+
+### ECDH
+
+```javascript
+var EC = require('elliptic').ec;
+var ec = new EC('curve25519');
+
+// Generate keys
+var key1 = ec.genKeyPair();
+var key2 = ec.genKeyPair();
+
+var shared1 = key1.derive(key2.getPublic());
+var shared2 = key2.derive(key1.getPublic());
+
+console.log('Both shared secrets are BN instances');
+console.log(shared1.toString(16));
+console.log(shared2.toString(16));
+```
+
+three and more members:
+```javascript
+var EC = require('elliptic').ec;
+var ec = new EC('curve25519');
+
+var A = ec.genKeyPair();
+var B = ec.genKeyPair();
+var C = ec.genKeyPair();
+
+var AB = A.getPublic().mul(B.getPrivate())
+var BC = B.getPublic().mul(C.getPrivate())
+var CA = C.getPublic().mul(A.getPrivate())
+
+var ABC = AB.mul(C.getPrivate())
+var BCA = BC.mul(A.getPrivate())
+var CAB = CA.mul(B.getPrivate())
+
+console.log(ABC.getX().toString(16))
+console.log(BCA.getX().toString(16))
+console.log(CAB.getX().toString(16))
+```
+
+NOTE: `.derive()` returns a [BN][1] instance.
+
+## Supported curves
+
+Elliptic.js support following curve types:
+
+* Short Weierstrass
+* Montgomery
+* Edwards
+* Twisted Edwards
+
+Following curve 'presets' are embedded into the library:
+
+* `secp256k1`
+* `p192`
+* `p224`
+* `p256`
+* `p384`
+* `p521`
+* `curve25519`
+* `ed25519`
+
+NOTE: That `curve25519` could not be used for ECDSA, use `ed25519` instead.
+
+### Implementation details
+
+ECDSA is using deterministic `k` value generation as per [RFC6979][0]. Most of
+the curve operations are performed on non-affine coordinates (either projective
+or extended), various windowing techniques are used for different cases.
+
+All operations are performed in reduction context using [bn.js][1], hashing is
+provided by [hash.js][2]
+
+### Related projects
+
+* [eccrypto][3]: isomorphic implementation of ECDSA, ECDH and ECIES for both
+ browserify and node (uses `elliptic` for browser and [secp256k1-node][4] for
+ node)
+
+#### LICENSE
+
+This software is licensed under the MIT License.
+
+Copyright Fedor Indutny, 2014.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+[0]: http://tools.ietf.org/html/rfc6979
+[1]: https://github.com/indutny/bn.js
+[2]: https://github.com/indutny/hash.js
+[3]: https://github.com/bitchan/eccrypto
+[4]: https://github.com/wanderer/secp256k1-node