diff options
Diffstat (limited to 'node_modules/create-ecdh')
-rw-r--r-- | node_modules/create-ecdh/.npmignore | 1 | ||||
-rw-r--r-- | node_modules/create-ecdh/.travis.yml | 7 | ||||
-rw-r--r-- | node_modules/create-ecdh/browser.js | 122 | ||||
-rw-r--r-- | node_modules/create-ecdh/index.js | 3 | ||||
-rw-r--r-- | node_modules/create-ecdh/package.json | 34 | ||||
-rw-r--r-- | node_modules/create-ecdh/readme.md | 4 |
6 files changed, 171 insertions, 0 deletions
diff --git a/node_modules/create-ecdh/.npmignore b/node_modules/create-ecdh/.npmignore new file mode 100644 index 000000000..daa602947 --- /dev/null +++ b/node_modules/create-ecdh/.npmignore @@ -0,0 +1 @@ +test.js diff --git a/node_modules/create-ecdh/.travis.yml b/node_modules/create-ecdh/.travis.yml new file mode 100644 index 000000000..254335b27 --- /dev/null +++ b/node_modules/create-ecdh/.travis.yml @@ -0,0 +1,7 @@ +language: node_js + +node_js: + - "0.10" + - "0.11" + - "0.12" + - "iojs"
\ No newline at end of file diff --git a/node_modules/create-ecdh/browser.js b/node_modules/create-ecdh/browser.js new file mode 100644 index 000000000..c24c97526 --- /dev/null +++ b/node_modules/create-ecdh/browser.js @@ -0,0 +1,122 @@ +var elliptic = require('elliptic'); +var BN = require('bn.js'); + +module.exports = function createECDH(curve) { + return new ECDH(curve); +}; + +var aliases = { + secp256k1: { + name: 'secp256k1', + byteLength: 32 + }, + secp224r1: { + name: 'p224', + byteLength: 28 + }, + prime256v1: { + name: 'p256', + byteLength: 32 + }, + prime192v1: { + name: 'p192', + byteLength: 24 + }, + ed25519: { + name: 'ed25519', + byteLength: 32 + }, + secp384r1: { + name: 'p384', + byteLength: 48 + }, + secp521r1: { + name: 'p521', + byteLength: 66 + } +}; + +aliases.p224 = aliases.secp224r1; +aliases.p256 = aliases.secp256r1 = aliases.prime256v1; +aliases.p192 = aliases.secp192r1 = aliases.prime192v1; +aliases.p384 = aliases.secp384r1; +aliases.p521 = aliases.secp521r1; + +function ECDH(curve) { + this.curveType = aliases[curve]; + if (!this.curveType ) { + this.curveType = { + name: curve + }; + } + this.curve = new elliptic.ec(this.curveType.name); + this.keys = void 0; +} + +ECDH.prototype.generateKeys = function (enc, format) { + this.keys = this.curve.genKeyPair(); + return this.getPublicKey(enc, format); +}; + +ECDH.prototype.computeSecret = function (other, inenc, enc) { + inenc = inenc || 'utf8'; + if (!Buffer.isBuffer(other)) { + other = new Buffer(other, inenc); + } + var otherPub = this.curve.keyFromPublic(other).getPublic(); + var out = otherPub.mul(this.keys.getPrivate()).getX(); + return formatReturnValue(out, enc, this.curveType.byteLength); +}; + +ECDH.prototype.getPublicKey = function (enc, format) { + var key = this.keys.getPublic(format === 'compressed', true); + if (format === 'hybrid') { + if (key[key.length - 1] % 2) { + key[0] = 7; + } else { + key [0] = 6; + } + } + return formatReturnValue(key, enc); +}; + +ECDH.prototype.getPrivateKey = function (enc) { + return formatReturnValue(this.keys.getPrivate(), enc); +}; + +ECDH.prototype.setPublicKey = function (pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + this.keys._importPublic(pub); + return this; +}; + +ECDH.prototype.setPrivateKey = function (priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + var _priv = new BN(priv); + _priv = _priv.toString(16); + this.keys._importPrivate(_priv); + return this; +}; + +function formatReturnValue(bn, enc, len) { + if (!Array.isArray(bn)) { + bn = bn.toArray(); + } + var buf = new Buffer(bn); + if (len && buf.length < len) { + var zeros = new Buffer(len - buf.length); + zeros.fill(0); + buf = Buffer.concat([zeros, buf]); + } + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} diff --git a/node_modules/create-ecdh/index.js b/node_modules/create-ecdh/index.js new file mode 100644 index 000000000..90857b7b3 --- /dev/null +++ b/node_modules/create-ecdh/index.js @@ -0,0 +1,3 @@ +var createECDH = require('crypto').createECDH; + +module.exports = createECDH || require('./browser');
\ No newline at end of file diff --git a/node_modules/create-ecdh/package.json b/node_modules/create-ecdh/package.json new file mode 100644 index 000000000..65fc59725 --- /dev/null +++ b/node_modules/create-ecdh/package.json @@ -0,0 +1,34 @@ +{ + "name": "create-ecdh", + "version": "4.0.0", + "description": "createECDH but browserifiable", + "main": "index.js", + "browser": "browser.js", + "scripts": { + "test": "node test.js | tspec" + }, + "repository": { + "type": "git", + "url": "https://github.com/crypto-browserify/createECDH.git" + }, + "keywords": [ + "diffie", + "hellman", + "diffiehellman", + "ECDH" + ], + "author": "Calvin Metcalf", + "license": "MIT", + "bugs": { + "url": "https://github.com/crypto-browserify/createECDH/issues" + }, + "homepage": "https://github.com/crypto-browserify/createECDH", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + }, + "devDependencies": { + "tap-spec": "^1.0.1", + "tape": "^3.0.1" + } +} diff --git a/node_modules/create-ecdh/readme.md b/node_modules/create-ecdh/readme.md new file mode 100644 index 000000000..7e5ce47b5 --- /dev/null +++ b/node_modules/create-ecdh/readme.md @@ -0,0 +1,4 @@ +createECDH [![Build Status](https://travis-ci.org/crypto-browserify/createECDH.svg)](https://travis-ci.org/crypto-browserify/createECDH) +==== + +In io.js or node >= 0.11 this module is just a shortcut to crypto.createECDH. In node <= 0.11 or the browser this is a pure JavaScript implimentation, more specifically a wrapper around [elliptic](https://github.com/indutny/elliptic), to give it the same API as node. `secp256k1`, `secp224r1` (aka p224), `prime256v1` (aka p256, secp256r1), `prime192v1` (aka p192, secp192r1), `secp384r1` (aka p384), `secp521r1` (aka p521) curves all work in both this library and node (though only the highlighted name will work in node). |