fix: circular circular dep -> DI

This commit is contained in:
David Dias 2017-07-22 13:25:15 -07:00
parent 83d2d52205
commit bc554d1407
7 changed files with 46 additions and 43 deletions

View File

@ -3,18 +3,10 @@
const hmac = require('./hmac') const hmac = require('./hmac')
const aes = require('./aes') const aes = require('./aes')
const keys = require('./keys') const keys = require('./keys')
const rsa = require('./keys/rsa')
exports = module.exports exports = module.exports
exports.aes = aes exports.aes = aes
exports.hmac = hmac exports.hmac = hmac
exports.keys = keys exports.keys = keys
exports.randomBytes = require('./random-bytes')
exports.randomBytes = (number) => {
if (!number || typeof number !== 'number') {
throw new Error('first argument must be a Number bigger than 0')
}
return rsa.getRandomValues(new Uint8Array(number))
}

View File

@ -1,16 +1,21 @@
'use strict' 'use strict'
const protobuf = require('protocol-buffers') const protobuf = require('protocol-buffers')
const pbm = protobuf(require('./keys.proto')) const keysPBM = protobuf(require('./keys.proto'))
const keys = exports.keys = require('./keys')
exports = module.exports exports = module.exports
exports.pbm = pbm const supportedKeys = {
rsa: require('./rsa-class'),
ed25519: require('./ed25519-class'),
secp256k1: require('libp2p-crypto-secp256k1')(keysPBM, require('../random-bytes'))
}
exports.supportedKeys = supportedKeys
exports.keysPBM = keysPBM
function isValidKeyType (keyType) { function isValidKeyType (keyType) {
const key = keys[keyType.toLowerCase()] const key = supportedKeys[keyType.toLowerCase()]
return key !== undefined return key !== undefined
} }
@ -19,7 +24,7 @@ exports.generateEphemeralKeyPair = require('./ephemeral-keys')
// Generates a keypair of the given type and bitsize // Generates a keypair of the given type and bitsize
exports.generateKeyPair = (type, bits, cb) => { exports.generateKeyPair = (type, bits, cb) => {
let key = keys[type.toLowerCase()] let key = supportedKeys[type.toLowerCase()]
if (!key) { if (!key) {
return cb(new Error('invalid or unsupported key type')) return cb(new Error('invalid or unsupported key type'))
@ -31,7 +36,7 @@ exports.generateKeyPair = (type, bits, cb) => {
// Generates a keypair of the given type and bitsize // Generates a keypair of the given type and bitsize
// seed is a 32 byte uint8array // seed is a 32 byte uint8array
exports.generateKeyPairFromSeed = (type, seed, bits, cb) => { exports.generateKeyPairFromSeed = (type, seed, bits, cb) => {
let key = keys[type.toLowerCase()] let key = supportedKeys[type.toLowerCase()]
if (!key) { if (!key) {
return cb(new Error('invalid or unsupported key type')) return cb(new Error('invalid or unsupported key type'))
} }
@ -44,16 +49,16 @@ exports.generateKeyPairFromSeed = (type, seed, bits, cb) => {
// Converts a protobuf serialized public key into its // Converts a protobuf serialized public key into its
// representative object // representative object
exports.unmarshalPublicKey = (buf) => { exports.unmarshalPublicKey = (buf) => {
const decoded = pbm.PublicKey.decode(buf) const decoded = keysPBM.PublicKey.decode(buf)
switch (decoded.Type) { switch (decoded.Type) {
case pbm.KeyType.RSA: case keysPBM.KeyType.RSA:
return keys.rsa.unmarshalRsaPublicKey(decoded.Data) return supportedKeys.rsa.unmarshalRsaPublicKey(decoded.Data)
case pbm.KeyType.Ed25519: case keysPBM.KeyType.Ed25519:
return keys.ed25519.unmarshalEd25519PublicKey(decoded.Data) return supportedKeys.ed25519.unmarshalEd25519PublicKey(decoded.Data)
case pbm.KeyType.Secp256k1: case keysPBM.KeyType.Secp256k1:
if (keys.secp256k1) { if (supportedKeys.secp256k1) {
return keys.secp256k1.unmarshalSecp256k1PublicKey(decoded.Data) return supportedKeys.secp256k1.unmarshalSecp256k1PublicKey(decoded.Data)
} else { } else {
throw new Error('secp256k1 support requires libp2p-crypto-secp256k1 package') throw new Error('secp256k1 support requires libp2p-crypto-secp256k1 package')
} }
@ -75,16 +80,16 @@ exports.marshalPublicKey = (key, type) => {
// Converts a protobuf serialized private key into its // Converts a protobuf serialized private key into its
// representative object // representative object
exports.unmarshalPrivateKey = (buf, callback) => { exports.unmarshalPrivateKey = (buf, callback) => {
const decoded = pbm.PrivateKey.decode(buf) const decoded = keysPBM.PrivateKey.decode(buf)
switch (decoded.Type) { switch (decoded.Type) {
case pbm.KeyType.RSA: case keysPBM.KeyType.RSA:
return keys.rsa.unmarshalRsaPrivateKey(decoded.Data, callback) return supportedKeys.rsa.unmarshalRsaPrivateKey(decoded.Data, callback)
case pbm.KeyType.Ed25519: case keysPBM.KeyType.Ed25519:
return keys.ed25519.unmarshalEd25519PrivateKey(decoded.Data, callback) return supportedKeys.ed25519.unmarshalEd25519PrivateKey(decoded.Data, callback)
case pbm.KeyType.Secp256k1: case keysPBM.KeyType.Secp256k1:
if (keys.secp256k1) { if (supportedKeys.secp256k1) {
return keys.secp256k1.unmarshalSecp256k1PrivateKey(decoded.Data, callback) return supportedKeys.secp256k1.unmarshalSecp256k1PrivateKey(decoded.Data, callback)
} else { } else {
return callback(new Error('secp256k1 support requires libp2p-crypto-secp256k1 package')) return callback(new Error('secp256k1 support requires libp2p-crypto-secp256k1 package'))
} }

View File

@ -1,7 +0,0 @@
'use strict'
module.exports = {
rsa: require('./rsa-class'),
ed25519: require('./ed25519-class'),
secp256k1: require('libp2p-crypto-secp256k1')
}

13
src/random-bytes.js Normal file
View File

@ -0,0 +1,13 @@
'use strict'
const rsa = require('./keys/rsa')
function randomBytes (number) {
if (!number || typeof number !== 'number') {
throw new Error('first argument must be a Number bigger than 0')
}
return rsa.getRandomValues(new Uint8Array(number))
}
module.exports = randomBytes

View File

@ -8,7 +8,7 @@ chai.use(dirtyChai)
const Buffer = require('safe-buffer').Buffer const Buffer = require('safe-buffer').Buffer
const crypto = require('../../src') const crypto = require('../../src')
const ed25519 = crypto.keys.keys.ed25519 const ed25519 = crypto.keys.supportedKeys.ed25519
const fixtures = require('../fixtures/go-key-ed25519') const fixtures = require('../fixtures/go-key-ed25519')
describe('ed25519', () => { describe('ed25519', () => {

View File

@ -8,7 +8,7 @@ chai.use(dirtyChai)
const Buffer = require('safe-buffer').Buffer const Buffer = require('safe-buffer').Buffer
const crypto = require('../../src') const crypto = require('../../src')
const rsa = crypto.keys.keys.rsa const rsa = crypto.keys.supportedKeys.rsa
const fixtures = require('../fixtures/go-key-rsa') const fixtures = require('../fixtures/go-key-rsa')
describe('RSA', () => { describe('RSA', () => {

View File

@ -32,7 +32,7 @@ const mockSecp256k1Module = {
} }
describe('without libp2p-crypto-secp256k1 module present', () => { describe('without libp2p-crypto-secp256k1 module present', () => {
crypto.keys.keys['secp256k1'] = undefined crypto.keys.supportedKeys['secp256k1'] = undefined
it('fails to generate a secp256k1 key', (done) => { it('fails to generate a secp256k1 key', (done) => {
crypto.keys.generateKeyPair('secp256k1', 256, (err, key) => { crypto.keys.generateKeyPair('secp256k1', 256, (err, key) => {
@ -61,7 +61,7 @@ describe('with libp2p-crypto-secp256k1 module present', () => {
let key let key
before((done) => { before((done) => {
crypto.keys.keys['secp256k1'] = mockSecp256k1Module crypto.keys.supportedKeys['secp256k1'] = mockSecp256k1Module
crypto.keys.generateKeyPair('secp256k1', 256, (err, _key) => { crypto.keys.generateKeyPair('secp256k1', 256, (err, _key) => {
if (err) return done(err) if (err) return done(err)
key = _key key = _key