fix: clean up, bundle size reduction

BREAKING CHANGE: getRandomValues method exported from src/keys/rsa-browser.js and src/keys/rsa.js signature has changed from accepting an array to a number for random byte length
This commit is contained in:
Hugo Dias 2019-01-08 18:37:03 +00:00 committed by David Dias
parent df23d634c5
commit 8d8294dc3f
11 changed files with 36 additions and 77 deletions

View File

@ -1,34 +0,0 @@
**/node_modules/
**/*.log
test/repo-tests*
# Logs
logs
*.log
coverage
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
build
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
test

View File

@ -10,6 +10,10 @@
"./src/aes/ciphers.js": "./src/aes/ciphers-browser.js", "./src/aes/ciphers.js": "./src/aes/ciphers-browser.js",
"./src/keys/rsa.js": "./src/keys/rsa-browser.js" "./src/keys/rsa.js": "./src/keys/rsa-browser.js"
}, },
"files": [
"src",
"dist"
],
"scripts": { "scripts": {
"lint": "aegir lint", "lint": "aegir lint",
"build": "aegir build", "build": "aegir build",
@ -20,7 +24,8 @@
"release": "aegir release", "release": "aegir release",
"release-minor": "aegir release --type minor", "release-minor": "aegir release --type minor",
"release-major": "aegir release --type major", "release-major": "aegir release --type major",
"coverage": "aegir coverage --ignore src/keys/keys.proto.js" "coverage": "aegir coverage --ignore src/keys/keys.proto.js",
"size": "bundlesize -f dist/index.min.js -s 139kB"
}, },
"keywords": [ "keywords": [
"IPFS", "IPFS",
@ -34,27 +39,28 @@
"async": "^2.6.1", "async": "^2.6.1",
"browserify-aes": "^1.2.0", "browserify-aes": "^1.2.0",
"bs58": "^4.0.1", "bs58": "^4.0.1",
"iso-random-stream": "^1.1.0",
"keypair": "^1.0.1", "keypair": "^1.0.1",
"libp2p-crypto-secp256k1": "~0.2.2", "libp2p-crypto-secp256k1": "~0.2.3",
"multihashing-async": "~0.5.1", "multihashing-async": "~0.5.1",
"node-forge": "~0.7.6", "node-forge": "~0.7.6",
"pem-jwk": "^1.5.1", "pem-jwk": "^1.5.1",
"protons": "^1.0.1", "protons": "^1.0.1",
"rsa-pem-to-jwk": "^1.1.3", "rsa-pem-to-jwk": "^1.1.3",
"tweetnacl": "^1.0.0", "tweetnacl": "^1.0.0",
"ursa-optional": "~0.9.9", "ursa-optional": "~0.9.9"
"webcrypto-shim": "github:dignifiedquire/webcrypto-shim#master"
}, },
"devDependencies": { "devDependencies": {
"aegir": "^17.1.1", "aegir": "^18.0.3",
"benchmark": "^2.1.4", "benchmark": "^2.1.4",
"bundlesize": "~0.17.0",
"chai": "^4.2.0", "chai": "^4.2.0",
"chai-string": "^1.5.0", "chai-string": "^1.5.0",
"dirty-chai": "^2.0.1" "dirty-chai": "^2.0.1"
}, },
"engines": { "engines": {
"node": ">=6.0.0", "node": ">=10.0.0",
"npm": ">=3.0.0" "npm": ">=6.0.0"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -2,7 +2,7 @@
const nodeify = require('../nodeify') const nodeify = require('../nodeify')
const crypto = require('../webcrypto.js')() const crypto = require('../webcrypto')
const lengths = require('./lengths') const lengths = require('./lengths')
const hashTypes = { const hashTypes = {

View File

@ -1,6 +1,6 @@
'use strict' 'use strict'
const webcrypto = require('../webcrypto.js')() const webcrypto = require('../webcrypto')
const nodeify = require('../nodeify') const nodeify = require('../nodeify')
const BN = require('asn1.js').bignum const BN = require('asn1.js').bignum

View File

@ -2,7 +2,10 @@
const protobuf = require('protons') const protobuf = require('protons')
const keysPBM = protobuf(require('./keys.proto')) const keysPBM = protobuf(require('./keys.proto'))
const forge = require('node-forge') require('node-forge/lib/asn1')
require('node-forge/lib/rsa')
require('node-forge/lib/pbe')
const forge = require('node-forge/lib/forge')
exports = module.exports exports = module.exports

View File

@ -1,8 +1,8 @@
'use strict' 'use strict'
const nodeify = require('../nodeify') const nodeify = require('../nodeify')
const webcrypto = require('../webcrypto')
const webcrypto = require('../webcrypto.js')() const randomBytes = require('../random-bytes')
exports.utils = require('./rsa-utils') exports.utils = require('./rsa-utils')
@ -49,9 +49,7 @@ exports.unmarshalPrivateKey = function (key, callback) {
})), callback) })), callback)
} }
exports.getRandomValues = function (arr) { exports.getRandomValues = randomBytes
return Buffer.from(webcrypto.getRandomValues(arr))
}
exports.hashAndSign = function (key, msg, callback) { exports.hashAndSign = function (key, msg, callback) {
nodeify(webcrypto.subtle.importKey( nodeify(webcrypto.subtle.importKey(

View File

@ -7,7 +7,9 @@ const nextTick = require('async/nextTick')
const crypto = require('./rsa') const crypto = require('./rsa')
const pbm = protobuf(require('./keys.proto')) const pbm = protobuf(require('./keys.proto'))
const forge = require('node-forge') require('node-forge/lib/sha512')
require('node-forge/lib/pbe')
const forge = require('node-forge/lib/forge')
class RsaPublicKey { class RsaPublicKey {
constructor (key) { constructor (key) {
@ -53,7 +55,7 @@ class RsaPrivateKey {
} }
genSecret () { genSecret () {
return crypto.getRandomValues(new Uint8Array(16)) return crypto.getRandomValues(16)
} }
sign (message, callback) { sign (message, callback) {
@ -136,7 +138,6 @@ class RsaPrivateKey {
const buffer = new forge.util.ByteBuffer(this.marshal()) const buffer = new forge.util.ByteBuffer(this.marshal())
const asn1 = forge.asn1.fromDer(buffer) const asn1 = forge.asn1.fromDer(buffer)
const privateKey = forge.pki.privateKeyFromAsn1(asn1) const privateKey = forge.pki.privateKeyFromAsn1(asn1)
if (format === 'pkcs-8') { if (format === 'pkcs-8') {
const options = { const options = {
algorithm: 'aes256', algorithm: 'aes256',

View File

@ -1,6 +1,7 @@
'use strict' 'use strict'
const crypto = require('crypto') const crypto = require('crypto')
const randomBytes = require('../random-bytes')
const nextTick = require('async/nextTick') const nextTick = require('async/nextTick')
let keypair let keypair
@ -63,9 +64,7 @@ exports.unmarshalPrivateKey = function (key, callback) {
}) })
} }
exports.getRandomValues = function (arr) { exports.getRandomValues = randomBytes
return crypto.randomBytes(arr.length)
}
exports.hashAndSign = function (key, msg, callback) { exports.hashAndSign = function (key, msg, callback) {
nextTick(() => { nextTick(() => {

View File

@ -1,6 +1,7 @@
'use strict' 'use strict'
const forge = require('node-forge') const forgePbkdf2 = require('node-forge/lib/pbkdf2')
const forgeUtil = require('node-forge/lib/util')
/** /**
* Maps an IPFS hash name to its node-forge equivalent. * Maps an IPFS hash name to its node-forge equivalent.
@ -30,13 +31,13 @@ function pbkdf2 (password, salt, iterations, keySize, hash) {
if (!hasher) { if (!hasher) {
throw new Error(`Hash '${hash}' is unknown or not supported`) throw new Error(`Hash '${hash}' is unknown or not supported`)
} }
const dek = forge.pkcs5.pbkdf2( const dek = forgePbkdf2(
password, password,
salt, salt,
iterations, iterations,
keySize, keySize,
hasher) hasher)
return forge.util.encode64(dek) return forgeUtil.encode64(dek)
} }
module.exports = pbkdf2 module.exports = pbkdf2

View File

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

View File

@ -2,15 +2,4 @@
'use strict' 'use strict'
module.exports = () => { module.exports = self.crypto || self.msCrypto
// This is only a shim for interfaces, not for functionality
if (typeof self !== 'undefined') {
require('webcrypto-shim')(self)
if (self.crypto) {
return self.crypto
}
}
throw new Error('Please use an environment with crypto support')
}