mirror of
https://github.com/fluencelabs/js-libp2p-crypto
synced 2025-03-15 19:50:58 +00:00
fix: circular circular dep -> DI
This commit is contained in:
parent
83d2d52205
commit
bc554d1407
10
src/index.js
10
src/index.js
@ -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))
|
|
||||||
}
|
|
||||||
|
@ -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'))
|
||||||
}
|
}
|
||||||
|
@ -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
13
src/random-bytes.js
Normal 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
|
@ -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', () => {
|
||||||
|
@ -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', () => {
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user