first commit
This commit is contained in:
21
node_modules/ecc-jsbn/LICENSE
generated
vendored
Executable file
21
node_modules/ecc-jsbn/LICENSE
generated
vendored
Executable file
@@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Jeremie Miller
|
||||
|
||||
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.
|
8
node_modules/ecc-jsbn/README.md
generated
vendored
Executable file
8
node_modules/ecc-jsbn/README.md
generated
vendored
Executable file
@@ -0,0 +1,8 @@
|
||||
ecc-jsbn
|
||||
========
|
||||
|
||||
ECC package based on [jsbn](https://github.com/andyperlitch/jsbn) from [Tom Wu](http://www-cs-students.stanford.edu/~tjw/).
|
||||
|
||||
This is a subset of the same interface as the [node compiled module](https://github.com/quartzjer/ecc), but works in the browser too.
|
||||
|
||||
Also uses point compression now from [https://github.com/kaielvin](https://github.com/kaielvin/jsbn-ec-point-compression).
|
58
node_modules/ecc-jsbn/index.js
generated
vendored
Executable file
58
node_modules/ecc-jsbn/index.js
generated
vendored
Executable file
@@ -0,0 +1,58 @@
|
||||
var crypto = require("crypto");
|
||||
var BigInteger = require("jsbn").BigInteger;
|
||||
var ECPointFp = require("./lib/ec.js").ECPointFp;
|
||||
var Buffer = require("safer-buffer").Buffer;
|
||||
exports.ECCurves = require("./lib/sec.js");
|
||||
|
||||
// zero prepad
|
||||
function unstupid(hex,len)
|
||||
{
|
||||
return (hex.length >= len) ? hex : unstupid("0"+hex,len);
|
||||
}
|
||||
|
||||
exports.ECKey = function(curve, key, isPublic)
|
||||
{
|
||||
var priv;
|
||||
var c = curve();
|
||||
var n = c.getN();
|
||||
var bytes = Math.floor(n.bitLength()/8);
|
||||
|
||||
if(key)
|
||||
{
|
||||
if(isPublic)
|
||||
{
|
||||
var curve = c.getCurve();
|
||||
// var x = key.slice(1,bytes+1); // skip the 04 for uncompressed format
|
||||
// var y = key.slice(bytes+1);
|
||||
// this.P = new ECPointFp(curve,
|
||||
// curve.fromBigInteger(new BigInteger(x.toString("hex"), 16)),
|
||||
// curve.fromBigInteger(new BigInteger(y.toString("hex"), 16)));
|
||||
this.P = curve.decodePointHex(key.toString("hex"));
|
||||
}else{
|
||||
if(key.length != bytes) return false;
|
||||
priv = new BigInteger(key.toString("hex"), 16);
|
||||
}
|
||||
}else{
|
||||
var n1 = n.subtract(BigInteger.ONE);
|
||||
var r = new BigInteger(crypto.randomBytes(n.bitLength()));
|
||||
priv = r.mod(n1).add(BigInteger.ONE);
|
||||
this.P = c.getG().multiply(priv);
|
||||
}
|
||||
if(this.P)
|
||||
{
|
||||
// var pubhex = unstupid(this.P.getX().toBigInteger().toString(16),bytes*2)+unstupid(this.P.getY().toBigInteger().toString(16),bytes*2);
|
||||
// this.PublicKey = Buffer.from("04"+pubhex,"hex");
|
||||
this.PublicKey = Buffer.from(c.getCurve().encodeCompressedPointHex(this.P),"hex");
|
||||
}
|
||||
if(priv)
|
||||
{
|
||||
this.PrivateKey = Buffer.from(unstupid(priv.toString(16),bytes*2),"hex");
|
||||
this.deriveSharedSecret = function(key)
|
||||
{
|
||||
if(!key || !key.P) return false;
|
||||
var S = key.P.multiply(priv);
|
||||
return Buffer.from(unstupid(S.getX().toBigInteger().toString(16),bytes*2),"hex");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
40
node_modules/ecc-jsbn/lib/LICENSE-jsbn
generated
vendored
Executable file
40
node_modules/ecc-jsbn/lib/LICENSE-jsbn
generated
vendored
Executable file
@@ -0,0 +1,40 @@
|
||||
Licensing
|
||||
---------
|
||||
|
||||
This software is covered under the following copyright:
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003-2005 Tom Wu
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* 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" AND WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
|
||||
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
|
||||
* THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
|
||||
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* In addition, the following condition applies:
|
||||
*
|
||||
* All redistributions must retain an intact copy of this copyright notice
|
||||
* and disclaimer.
|
||||
*/
|
||||
|
||||
Address all questions regarding this license to:
|
||||
|
||||
Tom Wu
|
||||
tjw@cs.Stanford.EDU
|
561
node_modules/ecc-jsbn/lib/ec.js
generated
vendored
Executable file
561
node_modules/ecc-jsbn/lib/ec.js
generated
vendored
Executable file
@@ -0,0 +1,561 @@
|
||||
// Basic Javascript Elliptic Curve implementation
|
||||
// Ported loosely from BouncyCastle's Java EC code
|
||||
// Only Fp curves implemented for now
|
||||
|
||||
// Requires jsbn.js and jsbn2.js
|
||||
var BigInteger = require('jsbn').BigInteger
|
||||
var Barrett = BigInteger.prototype.Barrett
|
||||
|
||||
// ----------------
|
||||
// ECFieldElementFp
|
||||
|
||||
// constructor
|
||||
function ECFieldElementFp(q,x) {
|
||||
this.x = x;
|
||||
// TODO if(x.compareTo(q) >= 0) error
|
||||
this.q = q;
|
||||
}
|
||||
|
||||
function feFpEquals(other) {
|
||||
if(other == this) return true;
|
||||
return (this.q.equals(other.q) && this.x.equals(other.x));
|
||||
}
|
||||
|
||||
function feFpToBigInteger() {
|
||||
return this.x;
|
||||
}
|
||||
|
||||
function feFpNegate() {
|
||||
return new ECFieldElementFp(this.q, this.x.negate().mod(this.q));
|
||||
}
|
||||
|
||||
function feFpAdd(b) {
|
||||
return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q));
|
||||
}
|
||||
|
||||
function feFpSubtract(b) {
|
||||
return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q));
|
||||
}
|
||||
|
||||
function feFpMultiply(b) {
|
||||
return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q));
|
||||
}
|
||||
|
||||
function feFpSquare() {
|
||||
return new ECFieldElementFp(this.q, this.x.square().mod(this.q));
|
||||
}
|
||||
|
||||
function feFpDivide(b) {
|
||||
return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q));
|
||||
}
|
||||
|
||||
ECFieldElementFp.prototype.equals = feFpEquals;
|
||||
ECFieldElementFp.prototype.toBigInteger = feFpToBigInteger;
|
||||
ECFieldElementFp.prototype.negate = feFpNegate;
|
||||
ECFieldElementFp.prototype.add = feFpAdd;
|
||||
ECFieldElementFp.prototype.subtract = feFpSubtract;
|
||||
ECFieldElementFp.prototype.multiply = feFpMultiply;
|
||||
ECFieldElementFp.prototype.square = feFpSquare;
|
||||
ECFieldElementFp.prototype.divide = feFpDivide;
|
||||
|
||||
// ----------------
|
||||
// ECPointFp
|
||||
|
||||
// constructor
|
||||
function ECPointFp(curve,x,y,z) {
|
||||
this.curve = curve;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
// Projective coordinates: either zinv == null or z * zinv == 1
|
||||
// z and zinv are just BigIntegers, not fieldElements
|
||||
if(z == null) {
|
||||
this.z = BigInteger.ONE;
|
||||
}
|
||||
else {
|
||||
this.z = z;
|
||||
}
|
||||
this.zinv = null;
|
||||
//TODO: compression flag
|
||||
}
|
||||
|
||||
function pointFpGetX() {
|
||||
if(this.zinv == null) {
|
||||
this.zinv = this.z.modInverse(this.curve.q);
|
||||
}
|
||||
var r = this.x.toBigInteger().multiply(this.zinv);
|
||||
this.curve.reduce(r);
|
||||
return this.curve.fromBigInteger(r);
|
||||
}
|
||||
|
||||
function pointFpGetY() {
|
||||
if(this.zinv == null) {
|
||||
this.zinv = this.z.modInverse(this.curve.q);
|
||||
}
|
||||
var r = this.y.toBigInteger().multiply(this.zinv);
|
||||
this.curve.reduce(r);
|
||||
return this.curve.fromBigInteger(r);
|
||||
}
|
||||
|
||||
function pointFpEquals(other) {
|
||||
if(other == this) return true;
|
||||
if(this.isInfinity()) return other.isInfinity();
|
||||
if(other.isInfinity()) return this.isInfinity();
|
||||
var u, v;
|
||||
// u = Y2 * Z1 - Y1 * Z2
|
||||
u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q);
|
||||
if(!u.equals(BigInteger.ZERO)) return false;
|
||||
// v = X2 * Z1 - X1 * Z2
|
||||
v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q);
|
||||
return v.equals(BigInteger.ZERO);
|
||||
}
|
||||
|
||||
function pointFpIsInfinity() {
|
||||
if((this.x == null) && (this.y == null)) return true;
|
||||
return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO);
|
||||
}
|
||||
|
||||
function pointFpNegate() {
|
||||
return new ECPointFp(this.curve, this.x, this.y.negate(), this.z);
|
||||
}
|
||||
|
||||
function pointFpAdd(b) {
|
||||
if(this.isInfinity()) return b;
|
||||
if(b.isInfinity()) return this;
|
||||
|
||||
// u = Y2 * Z1 - Y1 * Z2
|
||||
var u = b.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(b.z)).mod(this.curve.q);
|
||||
// v = X2 * Z1 - X1 * Z2
|
||||
var v = b.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(b.z)).mod(this.curve.q);
|
||||
|
||||
if(BigInteger.ZERO.equals(v)) {
|
||||
if(BigInteger.ZERO.equals(u)) {
|
||||
return this.twice(); // this == b, so double
|
||||
}
|
||||
return this.curve.getInfinity(); // this = -b, so infinity
|
||||
}
|
||||
|
||||
var THREE = new BigInteger("3");
|
||||
var x1 = this.x.toBigInteger();
|
||||
var y1 = this.y.toBigInteger();
|
||||
var x2 = b.x.toBigInteger();
|
||||
var y2 = b.y.toBigInteger();
|
||||
|
||||
var v2 = v.square();
|
||||
var v3 = v2.multiply(v);
|
||||
var x1v2 = x1.multiply(v2);
|
||||
var zu2 = u.square().multiply(this.z);
|
||||
|
||||
// x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
|
||||
var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.q);
|
||||
// y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
|
||||
var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.q);
|
||||
// z3 = v^3 * z1 * z2
|
||||
var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.q);
|
||||
|
||||
return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);
|
||||
}
|
||||
|
||||
function pointFpTwice() {
|
||||
if(this.isInfinity()) return this;
|
||||
if(this.y.toBigInteger().signum() == 0) return this.curve.getInfinity();
|
||||
|
||||
// TODO: optimized handling of constants
|
||||
var THREE = new BigInteger("3");
|
||||
var x1 = this.x.toBigInteger();
|
||||
var y1 = this.y.toBigInteger();
|
||||
|
||||
var y1z1 = y1.multiply(this.z);
|
||||
var y1sqz1 = y1z1.multiply(y1).mod(this.curve.q);
|
||||
var a = this.curve.a.toBigInteger();
|
||||
|
||||
// w = 3 * x1^2 + a * z1^2
|
||||
var w = x1.square().multiply(THREE);
|
||||
if(!BigInteger.ZERO.equals(a)) {
|
||||
w = w.add(this.z.square().multiply(a));
|
||||
}
|
||||
w = w.mod(this.curve.q);
|
||||
//this.curve.reduce(w);
|
||||
// x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
|
||||
var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.q);
|
||||
// y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
|
||||
var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.square().multiply(w)).mod(this.curve.q);
|
||||
// z3 = 8 * (y1 * z1)^3
|
||||
var z3 = y1z1.square().multiply(y1z1).shiftLeft(3).mod(this.curve.q);
|
||||
|
||||
return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);
|
||||
}
|
||||
|
||||
// Simple NAF (Non-Adjacent Form) multiplication algorithm
|
||||
// TODO: modularize the multiplication algorithm
|
||||
function pointFpMultiply(k) {
|
||||
if(this.isInfinity()) return this;
|
||||
if(k.signum() == 0) return this.curve.getInfinity();
|
||||
|
||||
var e = k;
|
||||
var h = e.multiply(new BigInteger("3"));
|
||||
|
||||
var neg = this.negate();
|
||||
var R = this;
|
||||
|
||||
var i;
|
||||
for(i = h.bitLength() - 2; i > 0; --i) {
|
||||
R = R.twice();
|
||||
|
||||
var hBit = h.testBit(i);
|
||||
var eBit = e.testBit(i);
|
||||
|
||||
if (hBit != eBit) {
|
||||
R = R.add(hBit ? this : neg);
|
||||
}
|
||||
}
|
||||
|
||||
return R;
|
||||
}
|
||||
|
||||
// Compute this*j + x*k (simultaneous multiplication)
|
||||
function pointFpMultiplyTwo(j,x,k) {
|
||||
var i;
|
||||
if(j.bitLength() > k.bitLength())
|
||||
i = j.bitLength() - 1;
|
||||
else
|
||||
i = k.bitLength() - 1;
|
||||
|
||||
var R = this.curve.getInfinity();
|
||||
var both = this.add(x);
|
||||
while(i >= 0) {
|
||||
R = R.twice();
|
||||
if(j.testBit(i)) {
|
||||
if(k.testBit(i)) {
|
||||
R = R.add(both);
|
||||
}
|
||||
else {
|
||||
R = R.add(this);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(k.testBit(i)) {
|
||||
R = R.add(x);
|
||||
}
|
||||
}
|
||||
--i;
|
||||
}
|
||||
|
||||
return R;
|
||||
}
|
||||
|
||||
ECPointFp.prototype.getX = pointFpGetX;
|
||||
ECPointFp.prototype.getY = pointFpGetY;
|
||||
ECPointFp.prototype.equals = pointFpEquals;
|
||||
ECPointFp.prototype.isInfinity = pointFpIsInfinity;
|
||||
ECPointFp.prototype.negate = pointFpNegate;
|
||||
ECPointFp.prototype.add = pointFpAdd;
|
||||
ECPointFp.prototype.twice = pointFpTwice;
|
||||
ECPointFp.prototype.multiply = pointFpMultiply;
|
||||
ECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo;
|
||||
|
||||
// ----------------
|
||||
// ECCurveFp
|
||||
|
||||
// constructor
|
||||
function ECCurveFp(q,a,b) {
|
||||
this.q = q;
|
||||
this.a = this.fromBigInteger(a);
|
||||
this.b = this.fromBigInteger(b);
|
||||
this.infinity = new ECPointFp(this, null, null);
|
||||
this.reducer = new Barrett(this.q);
|
||||
}
|
||||
|
||||
function curveFpGetQ() {
|
||||
return this.q;
|
||||
}
|
||||
|
||||
function curveFpGetA() {
|
||||
return this.a;
|
||||
}
|
||||
|
||||
function curveFpGetB() {
|
||||
return this.b;
|
||||
}
|
||||
|
||||
function curveFpEquals(other) {
|
||||
if(other == this) return true;
|
||||
return(this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b));
|
||||
}
|
||||
|
||||
function curveFpGetInfinity() {
|
||||
return this.infinity;
|
||||
}
|
||||
|
||||
function curveFpFromBigInteger(x) {
|
||||
return new ECFieldElementFp(this.q, x);
|
||||
}
|
||||
|
||||
function curveReduce(x) {
|
||||
this.reducer.reduce(x);
|
||||
}
|
||||
|
||||
// for now, work with hex strings because they're easier in JS
|
||||
function curveFpDecodePointHex(s) {
|
||||
switch(parseInt(s.substr(0,2), 16)) { // first byte
|
||||
case 0:
|
||||
return this.infinity;
|
||||
case 2:
|
||||
case 3:
|
||||
// point compression not supported yet
|
||||
return null;
|
||||
case 4:
|
||||
case 6:
|
||||
case 7:
|
||||
var len = (s.length - 2) / 2;
|
||||
var xHex = s.substr(2, len);
|
||||
var yHex = s.substr(len+2, len);
|
||||
|
||||
return new ECPointFp(this,
|
||||
this.fromBigInteger(new BigInteger(xHex, 16)),
|
||||
this.fromBigInteger(new BigInteger(yHex, 16)));
|
||||
|
||||
default: // unsupported
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function curveFpEncodePointHex(p) {
|
||||
if (p.isInfinity()) return "00";
|
||||
var xHex = p.getX().toBigInteger().toString(16);
|
||||
var yHex = p.getY().toBigInteger().toString(16);
|
||||
var oLen = this.getQ().toString(16).length;
|
||||
if ((oLen % 2) != 0) oLen++;
|
||||
while (xHex.length < oLen) {
|
||||
xHex = "0" + xHex;
|
||||
}
|
||||
while (yHex.length < oLen) {
|
||||
yHex = "0" + yHex;
|
||||
}
|
||||
return "04" + xHex + yHex;
|
||||
}
|
||||
|
||||
ECCurveFp.prototype.getQ = curveFpGetQ;
|
||||
ECCurveFp.prototype.getA = curveFpGetA;
|
||||
ECCurveFp.prototype.getB = curveFpGetB;
|
||||
ECCurveFp.prototype.equals = curveFpEquals;
|
||||
ECCurveFp.prototype.getInfinity = curveFpGetInfinity;
|
||||
ECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger;
|
||||
ECCurveFp.prototype.reduce = curveReduce;
|
||||
//ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex;
|
||||
ECCurveFp.prototype.encodePointHex = curveFpEncodePointHex;
|
||||
|
||||
// from: https://github.com/kaielvin/jsbn-ec-point-compression
|
||||
ECCurveFp.prototype.decodePointHex = function(s)
|
||||
{
|
||||
var yIsEven;
|
||||
switch(parseInt(s.substr(0,2), 16)) { // first byte
|
||||
case 0:
|
||||
return this.infinity;
|
||||
case 2:
|
||||
yIsEven = false;
|
||||
case 3:
|
||||
if(yIsEven == undefined) yIsEven = true;
|
||||
var len = s.length - 2;
|
||||
var xHex = s.substr(2, len);
|
||||
var x = this.fromBigInteger(new BigInteger(xHex,16));
|
||||
var alpha = x.multiply(x.square().add(this.getA())).add(this.getB());
|
||||
var beta = alpha.sqrt();
|
||||
|
||||
if (beta == null) throw "Invalid point compression";
|
||||
|
||||
var betaValue = beta.toBigInteger();
|
||||
if (betaValue.testBit(0) != yIsEven)
|
||||
{
|
||||
// Use the other root
|
||||
beta = this.fromBigInteger(this.getQ().subtract(betaValue));
|
||||
}
|
||||
return new ECPointFp(this,x,beta);
|
||||
case 4:
|
||||
case 6:
|
||||
case 7:
|
||||
var len = (s.length - 2) / 2;
|
||||
var xHex = s.substr(2, len);
|
||||
var yHex = s.substr(len+2, len);
|
||||
|
||||
return new ECPointFp(this,
|
||||
this.fromBigInteger(new BigInteger(xHex, 16)),
|
||||
this.fromBigInteger(new BigInteger(yHex, 16)));
|
||||
|
||||
default: // unsupported
|
||||
return null;
|
||||
}
|
||||
}
|
||||
ECCurveFp.prototype.encodeCompressedPointHex = function(p)
|
||||
{
|
||||
if (p.isInfinity()) return "00";
|
||||
var xHex = p.getX().toBigInteger().toString(16);
|
||||
var oLen = this.getQ().toString(16).length;
|
||||
if ((oLen % 2) != 0) oLen++;
|
||||
while (xHex.length < oLen)
|
||||
xHex = "0" + xHex;
|
||||
var yPrefix;
|
||||
if(p.getY().toBigInteger().isEven()) yPrefix = "02";
|
||||
else yPrefix = "03";
|
||||
|
||||
return yPrefix + xHex;
|
||||
}
|
||||
|
||||
|
||||
ECFieldElementFp.prototype.getR = function()
|
||||
{
|
||||
if(this.r != undefined) return this.r;
|
||||
|
||||
this.r = null;
|
||||
var bitLength = this.q.bitLength();
|
||||
if (bitLength > 128)
|
||||
{
|
||||
var firstWord = this.q.shiftRight(bitLength - 64);
|
||||
if (firstWord.intValue() == -1)
|
||||
{
|
||||
this.r = BigInteger.ONE.shiftLeft(bitLength).subtract(this.q);
|
||||
}
|
||||
}
|
||||
return this.r;
|
||||
}
|
||||
ECFieldElementFp.prototype.modMult = function(x1,x2)
|
||||
{
|
||||
return this.modReduce(x1.multiply(x2));
|
||||
}
|
||||
ECFieldElementFp.prototype.modReduce = function(x)
|
||||
{
|
||||
if (this.getR() != null)
|
||||
{
|
||||
var qLen = q.bitLength();
|
||||
while (x.bitLength() > (qLen + 1))
|
||||
{
|
||||
var u = x.shiftRight(qLen);
|
||||
var v = x.subtract(u.shiftLeft(qLen));
|
||||
if (!this.getR().equals(BigInteger.ONE))
|
||||
{
|
||||
u = u.multiply(this.getR());
|
||||
}
|
||||
x = u.add(v);
|
||||
}
|
||||
while (x.compareTo(q) >= 0)
|
||||
{
|
||||
x = x.subtract(q);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
x = x.mod(q);
|
||||
}
|
||||
return x;
|
||||
}
|
||||
ECFieldElementFp.prototype.sqrt = function()
|
||||
{
|
||||
if (!this.q.testBit(0)) throw "unsupported";
|
||||
|
||||
// p mod 4 == 3
|
||||
if (this.q.testBit(1))
|
||||
{
|
||||
var z = new ECFieldElementFp(this.q,this.x.modPow(this.q.shiftRight(2).add(BigInteger.ONE),this.q));
|
||||
return z.square().equals(this) ? z : null;
|
||||
}
|
||||
|
||||
// p mod 4 == 1
|
||||
var qMinusOne = this.q.subtract(BigInteger.ONE);
|
||||
|
||||
var legendreExponent = qMinusOne.shiftRight(1);
|
||||
if (!(this.x.modPow(legendreExponent, this.q).equals(BigInteger.ONE)))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var u = qMinusOne.shiftRight(2);
|
||||
var k = u.shiftLeft(1).add(BigInteger.ONE);
|
||||
|
||||
var Q = this.x;
|
||||
var fourQ = modDouble(modDouble(Q));
|
||||
|
||||
var U, V;
|
||||
do
|
||||
{
|
||||
var P;
|
||||
do
|
||||
{
|
||||
P = new BigInteger(this.q.bitLength(), new SecureRandom());
|
||||
}
|
||||
while (P.compareTo(this.q) >= 0
|
||||
|| !(P.multiply(P).subtract(fourQ).modPow(legendreExponent, this.q).equals(qMinusOne)));
|
||||
|
||||
var result = this.lucasSequence(P, Q, k);
|
||||
U = result[0];
|
||||
V = result[1];
|
||||
|
||||
if (this.modMult(V, V).equals(fourQ))
|
||||
{
|
||||
// Integer division by 2, mod q
|
||||
if (V.testBit(0))
|
||||
{
|
||||
V = V.add(q);
|
||||
}
|
||||
|
||||
V = V.shiftRight(1);
|
||||
|
||||
return new ECFieldElementFp(q,V);
|
||||
}
|
||||
}
|
||||
while (U.equals(BigInteger.ONE) || U.equals(qMinusOne));
|
||||
|
||||
return null;
|
||||
}
|
||||
ECFieldElementFp.prototype.lucasSequence = function(P,Q,k)
|
||||
{
|
||||
var n = k.bitLength();
|
||||
var s = k.getLowestSetBit();
|
||||
|
||||
var Uh = BigInteger.ONE;
|
||||
var Vl = BigInteger.TWO;
|
||||
var Vh = P;
|
||||
var Ql = BigInteger.ONE;
|
||||
var Qh = BigInteger.ONE;
|
||||
|
||||
for (var j = n - 1; j >= s + 1; --j)
|
||||
{
|
||||
Ql = this.modMult(Ql, Qh);
|
||||
|
||||
if (k.testBit(j))
|
||||
{
|
||||
Qh = this.modMult(Ql, Q);
|
||||
Uh = this.modMult(Uh, Vh);
|
||||
Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));
|
||||
Vh = this.modReduce(Vh.multiply(Vh).subtract(Qh.shiftLeft(1)));
|
||||
}
|
||||
else
|
||||
{
|
||||
Qh = Ql;
|
||||
Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql));
|
||||
Vh = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));
|
||||
Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1)));
|
||||
}
|
||||
}
|
||||
|
||||
Ql = this.modMult(Ql, Qh);
|
||||
Qh = this.modMult(Ql, Q);
|
||||
Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql));
|
||||
Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));
|
||||
Ql = this.modMult(Ql, Qh);
|
||||
|
||||
for (var j = 1; j <= s; ++j)
|
||||
{
|
||||
Uh = this.modMult(Uh, Vl);
|
||||
Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1)));
|
||||
Ql = this.modMult(Ql, Ql);
|
||||
}
|
||||
|
||||
return [ Uh, Vl ];
|
||||
}
|
||||
|
||||
var exports = {
|
||||
ECCurveFp: ECCurveFp,
|
||||
ECPointFp: ECPointFp,
|
||||
ECFieldElementFp: ECFieldElementFp
|
||||
}
|
||||
|
||||
module.exports = exports
|
170
node_modules/ecc-jsbn/lib/sec.js
generated
vendored
Executable file
170
node_modules/ecc-jsbn/lib/sec.js
generated
vendored
Executable file
@@ -0,0 +1,170 @@
|
||||
// Named EC curves
|
||||
|
||||
// Requires ec.js, jsbn.js, and jsbn2.js
|
||||
var BigInteger = require('jsbn').BigInteger
|
||||
var ECCurveFp = require('./ec.js').ECCurveFp
|
||||
|
||||
|
||||
// ----------------
|
||||
// X9ECParameters
|
||||
|
||||
// constructor
|
||||
function X9ECParameters(curve,g,n,h) {
|
||||
this.curve = curve;
|
||||
this.g = g;
|
||||
this.n = n;
|
||||
this.h = h;
|
||||
}
|
||||
|
||||
function x9getCurve() {
|
||||
return this.curve;
|
||||
}
|
||||
|
||||
function x9getG() {
|
||||
return this.g;
|
||||
}
|
||||
|
||||
function x9getN() {
|
||||
return this.n;
|
||||
}
|
||||
|
||||
function x9getH() {
|
||||
return this.h;
|
||||
}
|
||||
|
||||
X9ECParameters.prototype.getCurve = x9getCurve;
|
||||
X9ECParameters.prototype.getG = x9getG;
|
||||
X9ECParameters.prototype.getN = x9getN;
|
||||
X9ECParameters.prototype.getH = x9getH;
|
||||
|
||||
// ----------------
|
||||
// SECNamedCurves
|
||||
|
||||
function fromHex(s) { return new BigInteger(s, 16); }
|
||||
|
||||
function secp128r1() {
|
||||
// p = 2^128 - 2^97 - 1
|
||||
var p = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF");
|
||||
var a = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC");
|
||||
var b = fromHex("E87579C11079F43DD824993C2CEE5ED3");
|
||||
//byte[] S = Hex.decode("000E0D4D696E6768756151750CC03A4473D03679");
|
||||
var n = fromHex("FFFFFFFE0000000075A30D1B9038A115");
|
||||
var h = BigInteger.ONE;
|
||||
var curve = new ECCurveFp(p, a, b);
|
||||
var G = curve.decodePointHex("04"
|
||||
+ "161FF7528B899B2D0C28607CA52C5B86"
|
||||
+ "CF5AC8395BAFEB13C02DA292DDED7A83");
|
||||
return new X9ECParameters(curve, G, n, h);
|
||||
}
|
||||
|
||||
function secp160k1() {
|
||||
// p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1
|
||||
var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73");
|
||||
var a = BigInteger.ZERO;
|
||||
var b = fromHex("7");
|
||||
//byte[] S = null;
|
||||
var n = fromHex("0100000000000000000001B8FA16DFAB9ACA16B6B3");
|
||||
var h = BigInteger.ONE;
|
||||
var curve = new ECCurveFp(p, a, b);
|
||||
var G = curve.decodePointHex("04"
|
||||
+ "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB"
|
||||
+ "938CF935318FDCED6BC28286531733C3F03C4FEE");
|
||||
return new X9ECParameters(curve, G, n, h);
|
||||
}
|
||||
|
||||
function secp160r1() {
|
||||
// p = 2^160 - 2^31 - 1
|
||||
var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF");
|
||||
var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC");
|
||||
var b = fromHex("1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45");
|
||||
//byte[] S = Hex.decode("1053CDE42C14D696E67687561517533BF3F83345");
|
||||
var n = fromHex("0100000000000000000001F4C8F927AED3CA752257");
|
||||
var h = BigInteger.ONE;
|
||||
var curve = new ECCurveFp(p, a, b);
|
||||
var G = curve.decodePointHex("04"
|
||||
+ "4A96B5688EF573284664698968C38BB913CBFC82"
|
||||
+ "23A628553168947D59DCC912042351377AC5FB32");
|
||||
return new X9ECParameters(curve, G, n, h);
|
||||
}
|
||||
|
||||
function secp192k1() {
|
||||
// p = 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1
|
||||
var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37");
|
||||
var a = BigInteger.ZERO;
|
||||
var b = fromHex("3");
|
||||
//byte[] S = null;
|
||||
var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D");
|
||||
var h = BigInteger.ONE;
|
||||
var curve = new ECCurveFp(p, a, b);
|
||||
var G = curve.decodePointHex("04"
|
||||
+ "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D"
|
||||
+ "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D");
|
||||
return new X9ECParameters(curve, G, n, h);
|
||||
}
|
||||
|
||||
function secp192r1() {
|
||||
// p = 2^192 - 2^64 - 1
|
||||
var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF");
|
||||
var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC");
|
||||
var b = fromHex("64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1");
|
||||
//byte[] S = Hex.decode("3045AE6FC8422F64ED579528D38120EAE12196D5");
|
||||
var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831");
|
||||
var h = BigInteger.ONE;
|
||||
var curve = new ECCurveFp(p, a, b);
|
||||
var G = curve.decodePointHex("04"
|
||||
+ "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012"
|
||||
+ "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811");
|
||||
return new X9ECParameters(curve, G, n, h);
|
||||
}
|
||||
|
||||
function secp224r1() {
|
||||
// p = 2^224 - 2^96 + 1
|
||||
var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001");
|
||||
var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE");
|
||||
var b = fromHex("B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4");
|
||||
//byte[] S = Hex.decode("BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5");
|
||||
var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D");
|
||||
var h = BigInteger.ONE;
|
||||
var curve = new ECCurveFp(p, a, b);
|
||||
var G = curve.decodePointHex("04"
|
||||
+ "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21"
|
||||
+ "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34");
|
||||
return new X9ECParameters(curve, G, n, h);
|
||||
}
|
||||
|
||||
function secp256r1() {
|
||||
// p = 2^224 (2^32 - 1) + 2^192 + 2^96 - 1
|
||||
var p = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF");
|
||||
var a = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC");
|
||||
var b = fromHex("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B");
|
||||
//byte[] S = Hex.decode("C49D360886E704936A6678E1139D26B7819F7E90");
|
||||
var n = fromHex("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551");
|
||||
var h = BigInteger.ONE;
|
||||
var curve = new ECCurveFp(p, a, b);
|
||||
var G = curve.decodePointHex("04"
|
||||
+ "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296"
|
||||
+ "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5");
|
||||
return new X9ECParameters(curve, G, n, h);
|
||||
}
|
||||
|
||||
// TODO: make this into a proper hashtable
|
||||
function getSECCurveByName(name) {
|
||||
if(name == "secp128r1") return secp128r1();
|
||||
if(name == "secp160k1") return secp160k1();
|
||||
if(name == "secp160r1") return secp160r1();
|
||||
if(name == "secp192k1") return secp192k1();
|
||||
if(name == "secp192r1") return secp192r1();
|
||||
if(name == "secp224r1") return secp224r1();
|
||||
if(name == "secp256r1") return secp256r1();
|
||||
return null;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
"secp128r1":secp128r1,
|
||||
"secp160k1":secp160k1,
|
||||
"secp160r1":secp160r1,
|
||||
"secp192k1":secp192k1,
|
||||
"secp192r1":secp192r1,
|
||||
"secp224r1":secp224r1,
|
||||
"secp256r1":secp256r1
|
||||
}
|
2
node_modules/ecc-jsbn/node_modules/jsbn/.npmignore
generated
vendored
Normal file
2
node_modules/ecc-jsbn/node_modules/jsbn/.npmignore
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
.DS_Store
|
40
node_modules/ecc-jsbn/node_modules/jsbn/LICENSE
generated
vendored
Normal file
40
node_modules/ecc-jsbn/node_modules/jsbn/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
Licensing
|
||||
---------
|
||||
|
||||
This software is covered under the following copyright:
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003-2005 Tom Wu
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* 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" AND WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
|
||||
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
|
||||
* THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
|
||||
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* In addition, the following condition applies:
|
||||
*
|
||||
* All redistributions must retain an intact copy of this copyright notice
|
||||
* and disclaimer.
|
||||
*/
|
||||
|
||||
Address all questions regarding this license to:
|
||||
|
||||
Tom Wu
|
||||
tjw@cs.Stanford.EDU
|
175
node_modules/ecc-jsbn/node_modules/jsbn/README.md
generated
vendored
Normal file
175
node_modules/ecc-jsbn/node_modules/jsbn/README.md
generated
vendored
Normal file
@@ -0,0 +1,175 @@
|
||||
# jsbn: javascript big number
|
||||
|
||||
[Tom Wu's Original Website](http://www-cs-students.stanford.edu/~tjw/jsbn/)
|
||||
|
||||
I felt compelled to put this on github and publish to npm. I haven't tested every other big integer library out there, but the few that I have tested in comparison to this one have not even come close in performance. I am aware of the `bi` module on npm, however it has been modified and I wanted to publish the original without modifications. This is jsbn and jsbn2 from Tom Wu's original website above, with the modular pattern applied to prevent global leaks and to allow for use with node.js on the server side.
|
||||
|
||||
## usage
|
||||
|
||||
var BigInteger = require('jsbn');
|
||||
|
||||
var a = new BigInteger('91823918239182398123');
|
||||
alert(a.bitLength()); // 67
|
||||
|
||||
|
||||
## API
|
||||
|
||||
### bi.toString()
|
||||
|
||||
returns the base-10 number as a string
|
||||
|
||||
### bi.negate()
|
||||
|
||||
returns a new BigInteger equal to the negation of `bi`
|
||||
|
||||
### bi.abs
|
||||
|
||||
returns new BI of absolute value
|
||||
|
||||
### bi.compareTo
|
||||
|
||||
|
||||
|
||||
### bi.bitLength
|
||||
|
||||
|
||||
|
||||
### bi.mod
|
||||
|
||||
|
||||
|
||||
### bi.modPowInt
|
||||
|
||||
|
||||
|
||||
### bi.clone
|
||||
|
||||
|
||||
|
||||
### bi.intValue
|
||||
|
||||
|
||||
|
||||
### bi.byteValue
|
||||
|
||||
|
||||
|
||||
### bi.shortValue
|
||||
|
||||
|
||||
|
||||
### bi.signum
|
||||
|
||||
|
||||
|
||||
### bi.toByteArray
|
||||
|
||||
|
||||
|
||||
### bi.equals
|
||||
|
||||
|
||||
|
||||
### bi.min
|
||||
|
||||
|
||||
|
||||
### bi.max
|
||||
|
||||
|
||||
|
||||
### bi.and
|
||||
|
||||
|
||||
|
||||
### bi.or
|
||||
|
||||
|
||||
|
||||
### bi.xor
|
||||
|
||||
|
||||
|
||||
### bi.andNot
|
||||
|
||||
|
||||
|
||||
### bi.not
|
||||
|
||||
|
||||
|
||||
### bi.shiftLeft
|
||||
|
||||
|
||||
|
||||
### bi.shiftRight
|
||||
|
||||
|
||||
|
||||
### bi.getLowestSetBit
|
||||
|
||||
|
||||
|
||||
### bi.bitCount
|
||||
|
||||
|
||||
|
||||
### bi.testBit
|
||||
|
||||
|
||||
|
||||
### bi.setBit
|
||||
|
||||
|
||||
|
||||
### bi.clearBit
|
||||
|
||||
|
||||
|
||||
### bi.flipBit
|
||||
|
||||
|
||||
|
||||
### bi.add
|
||||
|
||||
|
||||
|
||||
### bi.subtract
|
||||
|
||||
|
||||
|
||||
### bi.multiply
|
||||
|
||||
|
||||
|
||||
### bi.divide
|
||||
|
||||
|
||||
|
||||
### bi.remainder
|
||||
|
||||
|
||||
|
||||
### bi.divideAndRemainder
|
||||
|
||||
|
||||
|
||||
### bi.modPow
|
||||
|
||||
|
||||
|
||||
### bi.modInverse
|
||||
|
||||
|
||||
|
||||
### bi.pow
|
||||
|
||||
|
||||
|
||||
### bi.gcd
|
||||
|
||||
|
||||
|
||||
### bi.isProbablePrime
|
||||
|
||||
|
12
node_modules/ecc-jsbn/node_modules/jsbn/example.html
generated
vendored
Normal file
12
node_modules/ecc-jsbn/node_modules/jsbn/example.html
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<script src="index.js"></script>
|
||||
</body>
|
||||
</html>
|
3
node_modules/ecc-jsbn/node_modules/jsbn/example.js
generated
vendored
Normal file
3
node_modules/ecc-jsbn/node_modules/jsbn/example.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
var BigInteger = require('./');
|
||||
var a = new BigInteger('91823918239182398123');
|
||||
console.log(a.bitLength());
|
1357
node_modules/ecc-jsbn/node_modules/jsbn/index.js
generated
vendored
Normal file
1357
node_modules/ecc-jsbn/node_modules/jsbn/index.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
21
node_modules/ecc-jsbn/node_modules/jsbn/package.json
generated
vendored
Normal file
21
node_modules/ecc-jsbn/node_modules/jsbn/package.json
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "jsbn",
|
||||
"version": "0.1.1",
|
||||
"description": "The jsbn library is a fast, portable implementation of large-number math in pure JavaScript, enabling public-key crypto and other applications on desktop and mobile browsers.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "mocha test.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/andyperlitch/jsbn.git"
|
||||
},
|
||||
"keywords": [
|
||||
"biginteger",
|
||||
"bignumber",
|
||||
"big",
|
||||
"integer"
|
||||
],
|
||||
"author": "Tom Wu",
|
||||
"license": "MIT"
|
||||
}
|
40
node_modules/ecc-jsbn/package.json
generated
vendored
Executable file
40
node_modules/ecc-jsbn/package.json
generated
vendored
Executable file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": "ecc-jsbn",
|
||||
"version": "0.1.2",
|
||||
"description": "ECC JS code based on JSBN",
|
||||
"main": "index.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/quartzjer/ecc-jsbn.git"
|
||||
},
|
||||
"keywords": [
|
||||
"jsbn",
|
||||
"ecc",
|
||||
"browserify"
|
||||
],
|
||||
"author": {
|
||||
"name": "Jeremie Miller",
|
||||
"email": "jeremie@jabber.org",
|
||||
"url": "http://jeremie.com/"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "Jeremie Miller",
|
||||
"email": "jeremie@jabber.org",
|
||||
"url": "http://jeremie.com/"
|
||||
},
|
||||
{
|
||||
"name": "Ryan Bennett",
|
||||
"url": "https://github.com/rynomad"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"jsbn": "~0.1.0",
|
||||
"safer-buffer": "^2.1.0"
|
||||
},
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/quartzjer/ecc-jsbn/issues"
|
||||
},
|
||||
"homepage": "https://github.com/quartzjer/ecc-jsbn"
|
||||
}
|
14
node_modules/ecc-jsbn/test.js
generated
vendored
Executable file
14
node_modules/ecc-jsbn/test.js
generated
vendored
Executable file
@@ -0,0 +1,14 @@
|
||||
var ecc = require("./index.js");
|
||||
var key1 = new ecc.ECKey(ecc.ECCurves.secp160r1);
|
||||
var key2 = new ecc.ECKey(ecc.ECCurves.secp160r1);
|
||||
console.log(key1.deriveSharedSecret(key2));
|
||||
var key3 = new ecc.ECKey(ecc.ECCurves.secp160r1,key1.PrivateKey);
|
||||
var key4 = new ecc.ECKey(ecc.ECCurves.secp160r1,key2.PublicKey,true);
|
||||
console.log(key3.deriveSharedSecret(key4));
|
||||
|
||||
var key1 = new ecc.ECKey(ecc.ECCurves.secp256r1);
|
||||
var key2 = new ecc.ECKey(ecc.ECCurves.secp256r1);
|
||||
console.log(key1.deriveSharedSecret(key2));
|
||||
var key3 = new ecc.ECKey(ecc.ECCurves.secp256r1,key1.PrivateKey);
|
||||
var key4 = new ecc.ECKey(ecc.ECCurves.secp256r1,key2.PublicKey,true);
|
||||
console.log(key3.deriveSharedSecret(key4));
|
Reference in New Issue
Block a user