mirror of
https://github.com/fluencelabs/js-libp2p-crypto
synced 2025-03-15 19:31:05 +00:00
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:
parent
df23d634c5
commit
8d8294dc3f
34
.npmignore
34
.npmignore
@ -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
|
|
20
package.json
20
package.json
@ -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",
|
||||||
|
@ -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 = {
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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(
|
||||||
|
@ -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',
|
||||||
|
@ -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(() => {
|
||||||
|
@ -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
|
||||||
|
@ -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
|
|
||||||
|
@ -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')
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user