draft: refactor project so it sits on top of a standalone app
This commit is contained in:
+7
@@ -0,0 +1,7 @@
|
||||
language: node_js
|
||||
sudo: false
|
||||
node_js:
|
||||
- 6
|
||||
- 8
|
||||
- 9
|
||||
- 10
|
||||
+21
@@ -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.
|
||||
+124
@@ -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)
|
||||
}
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
var createECDH = require('crypto').createECDH
|
||||
|
||||
module.exports = createECDH || require('./browser')
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"_from": "create-ecdh@^4.0.0",
|
||||
"_id": "create-ecdh@4.0.3",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
|
||||
"_location": "/create-ecdh",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "create-ecdh@^4.0.0",
|
||||
"name": "create-ecdh",
|
||||
"escapedName": "create-ecdh",
|
||||
"rawSpec": "^4.0.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^4.0.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/crypto-browserify"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
|
||||
"_shasum": "c9111b6f33045c4697f144787f9254cdc77c45ff",
|
||||
"_spec": "create-ecdh@^4.0.0",
|
||||
"_where": "O:\\zero\\zero.Web\\node_modules\\crypto-browserify",
|
||||
"author": {
|
||||
"name": "Calvin Metcalf"
|
||||
},
|
||||
"browser": "browser.js",
|
||||
"bugs": {
|
||||
"url": "https://github.com/crypto-browserify/createECDH/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"bn.js": "^4.1.0",
|
||||
"elliptic": "^6.0.0"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "createECDH but browserifiable",
|
||||
"devDependencies": {
|
||||
"standard": "^5.4.1",
|
||||
"tap-spec": "^1.0.1",
|
||||
"tape": "^3.0.1"
|
||||
},
|
||||
"homepage": "https://github.com/crypto-browserify/createECDH",
|
||||
"keywords": [
|
||||
"diffie",
|
||||
"hellman",
|
||||
"diffiehellman",
|
||||
"ECDH"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "create-ecdh",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/crypto-browserify/createECDH.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "standard && node test.js | tspec"
|
||||
},
|
||||
"version": "4.0.3"
|
||||
}
|
||||
+4
@@ -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).
|
||||
Reference in New Issue
Block a user