diff options
Diffstat (limited to 'node_modules/create-ecdh')
| -rw-r--r-- | node_modules/create-ecdh/.travis.yml | 7 | ||||
| -rw-r--r-- | node_modules/create-ecdh/LICENSE | 21 | ||||
| -rw-r--r-- | node_modules/create-ecdh/browser.js | 124 | ||||
| -rw-r--r-- | node_modules/create-ecdh/index.js | 3 | ||||
| -rw-r--r-- | node_modules/create-ecdh/package.json | 35 | ||||
| -rw-r--r-- | node_modules/create-ecdh/readme.md | 4 |
6 files changed, 194 insertions, 0 deletions
diff --git a/node_modules/create-ecdh/.travis.yml b/node_modules/create-ecdh/.travis.yml new file mode 100644 index 00000000..4ceadcbe --- /dev/null +++ b/node_modules/create-ecdh/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +sudo: false +node_js: + - 6 + - 8 + - 9 + - 10 diff --git a/node_modules/create-ecdh/LICENSE b/node_modules/create-ecdh/LICENSE new file mode 100644 index 00000000..58b3e845 --- /dev/null +++ b/node_modules/create-ecdh/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2017 createECDH contributors + +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. diff --git a/node_modules/create-ecdh/browser.js b/node_modules/create-ecdh/browser.js new file mode 100644 index 00000000..3613b451 --- /dev/null +++ b/node_modules/create-ecdh/browser.js @@ -0,0 +1,124 @@ +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) // eslint-disable-line new-cap + 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 = this.curve.genKeyPair() + 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 00000000..841d085e --- /dev/null +++ b/node_modules/create-ecdh/index.js @@ -0,0 +1,3 @@ +var createECDH = require('crypto').createECDH + +module.exports = createECDH || require('./browser') diff --git a/node_modules/create-ecdh/package.json b/node_modules/create-ecdh/package.json new file mode 100644 index 00000000..b804cac4 --- /dev/null +++ b/node_modules/create-ecdh/package.json @@ -0,0 +1,35 @@ +{ + "name": "create-ecdh", + "version": "4.0.3", + "description": "createECDH but browserifiable", + "main": "index.js", + "browser": "browser.js", + "scripts": { + "test": "standard && 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", + "standard": "^5.4.1" + } +} diff --git a/node_modules/create-ecdh/readme.md b/node_modules/create-ecdh/readme.md new file mode 100644 index 00000000..7e5ce47b --- /dev/null +++ b/node_modules/create-ecdh/readme.md @@ -0,0 +1,4 @@ +createECDH [](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). |
