mirror of
https://github.com/fluencelabs/js-peer-id
synced 2025-04-25 14:12:29 +00:00
getting ready to rewrite tests
This commit is contained in:
parent
6ce01ab434
commit
16c77433f9
29552
deps/forge.bundle.js
vendored
Normal file
29552
deps/forge.bundle.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
59
karma.conf.js
Normal file
59
karma.conf.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
module.exports = function (config) {
|
||||||
|
var path = require('path')
|
||||||
|
var node_modules_dir = path.join(__dirname, 'node_modules')
|
||||||
|
var deps = [
|
||||||
|
'deps/forge.bundle.js'
|
||||||
|
]
|
||||||
|
|
||||||
|
config.set({
|
||||||
|
basePath: '',
|
||||||
|
frameworks: ['mocha'],
|
||||||
|
|
||||||
|
files: [
|
||||||
|
'tests/id-test.js'
|
||||||
|
],
|
||||||
|
|
||||||
|
preprocessors: {
|
||||||
|
'tests/test-core/*': ['webpack']
|
||||||
|
},
|
||||||
|
|
||||||
|
webpack: {
|
||||||
|
resolve: {
|
||||||
|
extensions: ['', '.js', '.json'],
|
||||||
|
alias: {'node-forge': node_modules_dir+'/deps/forge.bundle.js' }
|
||||||
|
},
|
||||||
|
externals: {
|
||||||
|
fs: '{}'
|
||||||
|
},
|
||||||
|
node: {
|
||||||
|
Buffer: true
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
loaders: [
|
||||||
|
{ test: /\.json$/, loader: 'json' }
|
||||||
|
],
|
||||||
|
noParse: []
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
webpackMiddleware: {
|
||||||
|
noInfo: true,
|
||||||
|
stats: {
|
||||||
|
colors: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
reporters: ['spec'],
|
||||||
|
port: 9876,
|
||||||
|
colors: true,
|
||||||
|
logLevel: config.LOG_INFO,
|
||||||
|
autoWatch: false,
|
||||||
|
browsers: process.env.TRAVIS ? ['Firefox'] : ['Chrome'],
|
||||||
|
singleRun: true
|
||||||
|
})
|
||||||
|
|
||||||
|
deps.forEach(function (dep) {
|
||||||
|
var depPath = path.resolve(node_modules_dir, dep)
|
||||||
|
//config.webpack.resolve.alias[dep.split(path.sep)[0]] = depPath
|
||||||
|
config.webpack.module.noParse.push(depPath)
|
||||||
|
})
|
||||||
|
}
|
@ -33,9 +33,18 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/diasdavid/js-peer-id",
|
"homepage": "https://github.com/diasdavid/js-peer-id",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"karma": "^0.13.19",
|
||||||
|
"karma-chrome-launcher": "^0.2.2",
|
||||||
|
"karma-cli": "^0.1.2",
|
||||||
|
"karma-firefox-launcher": "^0.1.7",
|
||||||
|
"karma-mocha": "^0.2.1",
|
||||||
|
"karma-spec-reporter": "0.0.24",
|
||||||
|
"karma-webpack": "^1.7.0",
|
||||||
|
"mocha": "^2.4.5",
|
||||||
"pre-commit": "^1.1.1",
|
"pre-commit": "^1.1.1",
|
||||||
"standard": "^5.3.1",
|
"standard": "^5.3.1",
|
||||||
"tape": "^4.2.2",
|
"tape": "^4.2.2",
|
||||||
|
"webpack": "^1.12.13",
|
||||||
"zuul": "^3.7.2"
|
"zuul": "^3.7.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
15
pb/crypto.proto
Normal file
15
pb/crypto.proto
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package crypto.pb;
|
||||||
|
|
||||||
|
enum KeyType {
|
||||||
|
RSA = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
message PublicKey {
|
||||||
|
required KeyType Type = 1;
|
||||||
|
required bytes Data = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message PrivateKey {
|
||||||
|
required KeyType Type = 1;
|
||||||
|
required bytes Data = 2;
|
||||||
|
}
|
90
src/index.js
90
src/index.js
@ -8,8 +8,16 @@ var base58 = require('bs58')
|
|||||||
var forge = require('node-forge')
|
var forge = require('node-forge')
|
||||||
var protobuf = require('protocol-buffers')
|
var protobuf = require('protocol-buffers')
|
||||||
|
|
||||||
|
var isNode = !global.window
|
||||||
|
|
||||||
//protobuf read from file
|
//protobuf read from file
|
||||||
var messages = protobuf(fs.readFileSync(__dirname+'/crypto.proto'))
|
var messages = isNode ? protobuf(fs.readFileSync(__dirname+'/../pb/crypto.proto')) : protobuf(require('buffer!./../pb/crypto.proto'))
|
||||||
|
|
||||||
|
//for some reason webpack can only find forge at forge.forge().someFunction()...
|
||||||
|
//browser should be able to just use forge.someFunction()
|
||||||
|
if(!isNode){
|
||||||
|
forge = forge.forge()
|
||||||
|
}
|
||||||
|
|
||||||
exports = module.exports = Id
|
exports = module.exports = Id
|
||||||
|
|
||||||
@ -59,14 +67,14 @@ function unmarshal (key) {
|
|||||||
|
|
||||||
//create a public key protobuf to be base64 string stored in config
|
//create a public key protobuf to be base64 string stored in config
|
||||||
function marshal (data, type) {
|
function marshal (data, type) {
|
||||||
if(type == 'Public'){
|
if(type === 'Public'){
|
||||||
var epb = messages.PublicKey.encode({
|
var epb = messages.PublicKey.encode({
|
||||||
Type: 0,
|
Type: 0,
|
||||||
Data: data
|
Data: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type == 'Private'){
|
if(type === 'Private'){
|
||||||
var epb = messages.PrivateKey.encode({
|
var epb = messages.PrivateKey.encode({
|
||||||
Type: 0,
|
Type: 0,
|
||||||
Data: data
|
Data: data
|
||||||
@ -76,53 +84,41 @@ function marshal (data, type) {
|
|||||||
return epb
|
return epb
|
||||||
}
|
}
|
||||||
|
|
||||||
// generation
|
//this returns a base64 encoded protobuf of the public key
|
||||||
exports.create = function () {
|
function formatKey(key, type) {
|
||||||
//generate keys
|
|
||||||
var pair = forge.rsa.generateKeyPair({bits:2048, e: 0x10001})
|
|
||||||
|
|
||||||
//Create Public Key
|
|
||||||
//return the RSA public key to asn1 object and DER encode
|
|
||||||
var asnPub = forge.pki.publicKeyToAsn1(pair.publicKey)
|
|
||||||
|
|
||||||
//create der buffer of public key asn.1 object
|
//create der buffer of public key asn.1 object
|
||||||
var derPub = forge.asn1.toDer(asnPub)
|
var der = forge.asn1.toDer(key)
|
||||||
|
|
||||||
//create forge buffer of der public key buffer
|
//create forge buffer of der public key buffer
|
||||||
var fDerBuf = forge.util.createBuffer(derPub.data, 'binary')
|
var fDerBuf = forge.util.createBuffer(der.data, 'binary')
|
||||||
|
|
||||||
//convert forge buffer to node buffer public key
|
//convert forge buffer to node buffer public key
|
||||||
var nDerBuf = new Buffer(fDerBuf.getBytes(), 'binary')
|
var nDerBuf = new Buffer(fDerBuf.getBytes(), 'binary')
|
||||||
|
|
||||||
//protobuf the new DER bytes to the PublicKey Data: field
|
//protobuf the new DER bytes to the PublicKey Data: field
|
||||||
var marPubKey = marshal(nDerBuf, 'Public')
|
var marshalKey = marshal(nDerBuf, type)
|
||||||
|
|
||||||
//encode the protobuf public key to base64 string
|
//encode the protobuf public key to base64 string
|
||||||
var pubKeyb64 = marPubKey.toString('base64')
|
var b64 = marshalKey.toString('base64')
|
||||||
|
return b64
|
||||||
|
}
|
||||||
|
|
||||||
|
// generation
|
||||||
|
exports.create = function () {
|
||||||
|
//generate keys
|
||||||
|
var pair = forge.rsa.generateKeyPair({bits:2048, e: 0x10001})
|
||||||
|
|
||||||
//create Private Key
|
//return the RSA public/private key to asn1 object
|
||||||
//return the RSA private key to asn1 object and DER encode
|
var asnPub = forge.pki.publicKeyToAsn1(pair.publicKey)
|
||||||
var asnPriv = forge.pki.privateKeyToAsn1(pair.privateKey)
|
var asnPriv = forge.pki.privateKeyToAsn1(pair.privateKey)
|
||||||
|
|
||||||
//create der buffer of private key asn.1 object
|
//format the keys to protobuf base64 encoded string
|
||||||
var derPriv = forge.asn1.toDer(asnPriv)
|
var protoPublic64 = formatKey(asnPub, 'Public')
|
||||||
|
var protoPrivate64 = formatKey(asnPriv, 'Private')
|
||||||
|
|
||||||
|
var mhId = multihashing(new Buffer(protoPublic64, 'base64'), 'sha2-256')
|
||||||
|
|
||||||
//create forge buffer of der private key buffer
|
return new Id(mhId, protoPrivate64, protoPublic64)
|
||||||
var fDerBufPriv = forge.util.createBuffer(derPriv.data, 'binary')
|
|
||||||
|
|
||||||
//convert forge buffer to node buffer private key
|
|
||||||
var nDerBufPriv = new Buffer(fDerBufPriv.getBytes(), 'binary')
|
|
||||||
|
|
||||||
//protobuf the new DER bytes to the PrivateKey Data: field
|
|
||||||
var marPrivKey = marshal(nDerBufPriv, 'Private')
|
|
||||||
|
|
||||||
//encode the protobuf private key to base64 string
|
|
||||||
var privKeyb64 = marPrivKey.toString('base64')
|
|
||||||
|
|
||||||
var mhId = multihashing(marPubKey, 'sha2-256')
|
|
||||||
|
|
||||||
return new Id(mhId, privKeyb64, pubKeyb64)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.createFromHexString = function (str) {
|
exports.createFromHexString = function (str) {
|
||||||
@ -162,25 +158,11 @@ exports.createFromPrivKey = function (privKey) {
|
|||||||
//set the RSA public key to the modulus and exponent of the private key
|
//set the RSA public key to the modulus and exponent of the private key
|
||||||
var publicKey = forge.pki.rsa.setPublicKey(privateKey.n, privateKey.e)
|
var publicKey = forge.pki.rsa.setPublicKey(privateKey.n, privateKey.e)
|
||||||
|
|
||||||
//return the RSA public to asn1 object and DER encode
|
//return the RSA public key to asn1 object
|
||||||
var asnPub = forge.pki.publicKeyToAsn1(publicKey)
|
var asnPub = forge.pki.publicKeyToAsn1(publicKey)
|
||||||
|
|
||||||
//create der buffer of public key asn.1 object
|
//format the public key
|
||||||
var derPub = forge.asn1.toDer(asnPub)
|
var protoPublic64 = formatKey(asnPub, 'Public')
|
||||||
|
var mhId = multihashing(new Buffer(protoPublic64, 'base64'), 'sha2-256')
|
||||||
//create forge buffer of der buffer
|
return new Id(mhId, privKey, protoPublic64)
|
||||||
var fDerBuf = forge.util.createBuffer(derPub.data, 'binary')
|
|
||||||
|
|
||||||
//convert forge buffer to node buffer
|
|
||||||
var nDerBuf = new Buffer(fDerBuf.getBytes(), 'binary')
|
|
||||||
|
|
||||||
//protobuf the new DER bytes to the PublicKey Data: field
|
|
||||||
var marPubKey = marshal(nDerBuf, 'Public')
|
|
||||||
|
|
||||||
//encode the protobuf public key to base64 string
|
|
||||||
var pubKeyb64 = marPubKey.toString('base64')
|
|
||||||
|
|
||||||
var mhId = multihashing(marPubKey, 'sha2-256')
|
|
||||||
|
|
||||||
return new Id(mhId, privKey, pubKeyb64)
|
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,9 @@ var PeerId = require('../src')
|
|||||||
|
|
||||||
var testId = {
|
var testId = {
|
||||||
id: '1220151ab1658d8294ab34b71d5582cfe20d06414212f440a69366f1bc31deb5c72d',
|
id: '1220151ab1658d8294ab34b71d5582cfe20d06414212f440a69366f1bc31deb5c72d',
|
||||||
privKey: 'CAASqQkwggSlAgEAAoIBAQC1/m95i4waplpSl43/uefQClPfuguPsX6qa6pWE0Df+krs5p+RnhX+8j2aWBI9QZ0pliGryet5qM3in6J1ihb2LzjLUWIsWrMLxtqi/mQDjj1f0HfV11Q/k2v6yVgSgYJ+VoW51hCpAEdEnhthsbyKWMD6xVIvtkqOmK/FaxUMa2boWCVKsycf39U6GVaiuTk32btw6LqGMo8P1cehWDy80SOzv0qk2mD7ZJbKnVfVm8xwU+gzogasOFYs/LmKb4IEV9Otq0MHmWGUN0VyC82htoGBidheRs1Ssh7TDVtWlNTJSG1vJJV7cnIhpGKut2b0pMxhY1Sg0kn/VrfriXINAgMBAAECggEBAJrJuI4r/hF8gz3T4NYri9oJrqSOW97vG8heohVrcrYM70TmMblsN1ELPxHS7lBjSgRgyGqP5lMnG1UwaMCHnlfseeWTZmhLDBVsH/CZZP8RL2oaqJGb/u/Dtwcp0FqNBCvn8vzH8IuMzRCzWJ6SyMTyD9A5m1kxNeBqRLUoClLwZsLKuL8ld9sXfwmn1D1yY9sWLWCcrlPZnm4v49otc6Q9GYpurhOLBlQOqkEVqSyiN9N70bZ3QNPxWpAjKZS08X5PK0teI0b3uMZB9KwCdPkjMxHyymulyQ/bOkm1CCogFpGlG8abwyusIfrrjQOCeX+sUSei6/K/eN2kPLUUcoECgYEA0EKwQPq6mXmXiWqVMk08wz1JPqiNE9zreqaSOx9aOO/DbeR0xkfWjKy4RoCY9zo8FW0Y7jvwuEojm7LNZSrLrur3b2myfzHsdsjuo2t/fVilVrjtzxDEQSeBNOJasVdS+ZhB+/GHWfeZEcMjhXHkW9WRgMwIC/jTanmqLYy4nzkCgYEA37ZZJ+QH8+saafhztaSK/IC8pjJLTkHsMBjhSpVGm9TptpVdxHx/cHJdCDiHPfeP+TIPSOD//hGbHoTZuy2owZ0FJ2QFxyLpagEUch+Sy0f7fQZ+LoeUa1UJ9RsCbCCeKtcZvqZ0fuu9iWoR8LvJ7UI19SEyQ2T7Fymvbq3hFXUCgYEAsHHf7J3BHKjE97rifwSrV2sENF8Pb+W7aGXZ/NdaVGTm+aMWQKu6neL0GV94ufWP1ENjXOxRzYGa255IoM76VM9kJfOyNEuy4QzqCnDYSfWh13DEoqu86sqykIC6gAfRGACk3vVKTLIW8NKYtMXCyP+P0ESNCL+fN1WvFfpkrRkCgYEA3nriP6GvpwxwwGKt8D8rWeJNuprZ+YHl+g9EPoAmMGOV6laxYe7Obm3Nx5cwKJhDPnhiawAYlfu8YKWOQ3AtHB+kOIBonppBt4JLaxOrUS7NFJGYe32qRPPVa0TpK89kfQZePBQeVvrrC/XI0bhwINxv/NB+xDdw3qA+L7wM1OECgYA+3YgYJ6nbvT7s4DylRmyZ4AfOt3TcIjS3D0PDj4S4agZrvlPCKgn1LwBIFutjOe6V9lPSWZJiw6flfImhpWvQOap3zdT9gsU5PhbUmD3TndAk0n10+lmMYpGkU2UM/+zV5HsiZA5X+DPcVbSnIuNT/7pZdbD5uFF9Ibzoh022Fg==',
|
privKey: 'CAASpgkwggSiAgEAAoIBAQC2SKo/HMFZeBml1AF3XijzrxrfQXdJzjePBZAbdxqKR1Mc6juRHXij6HXYPjlAk01BhF1S3Ll4Lwi0cAHhggf457sMg55UWyeGKeUv0ucgvCpBwlR5cQ020i0MgzjPWOLWq1rtvSbNcAi2ZEVn6+Q2EcHo3wUvWRtLeKz+DZSZfw2PEDC+DGPJPl7f8g7zl56YymmmzH9liZLNrzg/qidokUv5u1pdGrcpLuPNeTODk0cqKB+OUbuKj9GShYECCEjaybJDl9276oalL9ghBtSeEv20kugatTvYy590wFlJkkvyl+nPxIH0EEYMKK9XRWlu9XYnoSfboiwcv8M3SlsjAgMBAAECggEAZtju/bcKvKFPz0mkHiaJcpycy9STKphorpCT83srBVQi59CdFU6Mj+aL/xt0kCPMVigJw8P3/YCEJ9J+rS8BsoWE+xWUEsJvtXoT7vzPHaAtM3ci1HZd302Mz1+GgS8Epdx+7F5p80XAFLDUnELzOzKftvWGZmWfSeDnslwVONkL/1VAzwKy7Ce6hk4SxRE7l2NE2OklSHOzCGU1f78ZzVYKSnS5Ag9YrGjOAmTOXDbKNKN/qIorAQ1bovzGoCwx3iGIatQKFOxyVCyO1PsJYT7JO+kZbhBWRRE+L7l+ppPER9bdLFxs1t5CrKc078h+wuUr05S1P1JjXk68pk3+kQKBgQDeK8AR11373Mzib6uzpjGzgNRMzdYNuExWjxyxAzz53NAR7zrPHvXvfIqjDScLJ4NcRO2TddhXAfZoOPVH5k4PJHKLBPKuXZpWlookCAyENY7+Pd55S8r+a+MusrMagYNljb5WbVTgN8cgdpim9lbbIFlpN6SZaVjLQL3J8TWH6wKBgQDSChzItkqWX11CNstJ9zJyUE20I7LrpyBJNgG1gtvz3ZMUQCn3PxxHtQzN9n1P0mSSYs+jBKPuoSyYLt1wwe10/lpgL4rkKWU3/m1Myt0tveJ9WcqHh6tzcAbb/fXpUFT/o4SWDimWkPkuCb+8j//2yiXk0a/T2f36zKMuZvujqQKBgC6B7BAQDG2H2B/ijofp12ejJU36nL98gAZyqOfpLJ+FeMz4TlBDQ+phIMhnHXA5UkdDapQ+zA3SrFk+6yGk9Vw4Hf46B+82SvOrSbmnMa+PYqKYIvUzR4gg34rL/7AhwnbEyD5hXq4dHwMNsIDq+l2elPjwm/U9V0gdAl2+r50HAoGALtsKqMvhv8HucAMBPrLikhXP/8um8mMKFMrzfqZ+otxfHzlhI0L08Bo3jQrb0Z7ByNY6M8epOmbCKADsbWcVre/AAY0ZkuSZK/CaOXNX/AhMKmKJh8qAOPRY02LIJRBCpfS4czEdnfUhYV/TYiFNnKRj57PPYZdTzUsxa/yVTmECgYBr7slQEjb5Onn5mZnGDh+72BxLNdgwBkhO0OCdpdISqk0F0Pxby22DFOKXZEpiyI9XYP1C8wPiJsShGm2yEwBPWXnrrZNWczaVuCbXHrZkWQogBDG3HGXNdU4MAWCyiYlyinIBpPpoAJZSzpGLmWbMWh28+RJS6AQX6KHrK1o2uw==',
|
||||||
pubKey: 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1/m95i4waplpSl43/uefQClPfuguPsX6qa6pWE0Df+krs5p+RnhX+8j2aWBI9QZ0pliGryet5qM3in6J1ihb2LzjLUWIsWrMLxtqi/mQDjj1f0HfV11Q/k2v6yVgSgYJ+VoW51hCpAEdEnhthsbyKWMD6xVIvtkqOmK/FaxUMa2boWCVKsycf39U6GVaiuTk32btw6LqGMo8P1cehWDy80SOzv0qk2mD7ZJbKnVfVm8xwU+gzogasOFYs/LmKb4IEV9Otq0MHmWGUN0VyC82htoGBidheRs1Ssh7TDVtWlNTJSG1vJJV7cnIhpGKut2b0pMxhY1Sg0kn/VrfriXINAgMBAAE='
|
pubKey: 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2SKo/HMFZeBml1AF3XijzrxrfQXdJzjePBZAbdxqKR1Mc6juRHXij6HXYPjlAk01BhF1S3Ll4Lwi0cAHhggf457sMg55UWyeGKeUv0ucgvCpBwlR5cQ020i0MgzjPWOLWq1rtvSbNcAi2ZEVn6+Q2EcHo3wUvWRtLeKz+DZSZfw2PEDC+DGPJPl7f8g7zl56YymmmzH9liZLNrzg/qidokUv5u1pdGrcpLuPNeTODk0cqKB+OUbuKj9GShYECCEjaybJDl9276oalL9ghBtSeEv20kugatTvYy590wFlJkkvyl+nPxIH0EEYMKK9XRWlu9XYnoSfboiwcv8M3SlsjAgMBAAE='
|
||||||
|
//pubKey: 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1/m95i4waplpSl43/uefQClPfuguPsX6qa6pWE0Df+krs5p+RnhX+8j2aWBI9QZ0pliGryet5qM3in6J1ihb2LzjLUWIsWrMLxtqi/mQDjj1f0HfV11Q/k2v6yVgSgYJ+VoW51hCpAEdEnhthsbyKWMD6xVIvtkqOmK/FaxUMa2boWCVKsycf39U6GVaiuTk32btw6LqGMo8P1cehWDy80SOzv0qk2mD7ZJbKnVfVm8xwU+gzogasOFYs/LmKb4IEV9Otq0MHmWGUN0VyC82htoGBidheRs1Ssh7TDVtWlNTJSG1vJJV7cnIhpGKut2b0pMxhY1Sg0kn/VrfriXINAgMBAAE='
|
||||||
}
|
}
|
||||||
|
|
||||||
var testIdHex = '1220151ab1658d8294ab34b71d5582cfe20d06414212f440a69366f1bc31deb5c72d'
|
var testIdHex = '1220151ab1658d8294ab34b71d5582cfe20d06414212f440a69366f1bc31deb5c72d'
|
||||||
@ -15,7 +16,6 @@ var testIdB58String = 'QmPm2sunRFpswBAByqunK5Yk8PLj7mxL5HpCS4Qg6p7LdS'
|
|||||||
|
|
||||||
test('create a new Id', function (t) {
|
test('create a new Id', function (t) {
|
||||||
var id = PeerId.create()
|
var id = PeerId.create()
|
||||||
console.log(id.toPrint())
|
|
||||||
t.ok(id)
|
t.ok(id)
|
||||||
t.end()
|
t.end()
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user