11'use strict'
22
33const async = require ( 'async' )
4- const sanitize = require ( " sanitize-filename" )
4+ const sanitize = require ( ' sanitize-filename' )
55const forge = require ( 'node-forge' )
66const deepmerge = require ( 'deepmerge' )
7- const crypto = require ( 'crypto' )
8- const libp2pCrypto = require ( 'libp2p-crypto' )
7+ const crypto = require ( 'libp2p-crypto' )
98const util = require ( './util' )
109const CMS = require ( './cms' )
1110const DS = require ( 'interface-datastore' )
@@ -32,7 +31,6 @@ const defaultOptions = {
3231
3332function validateKeyName ( name ) {
3433 if ( ! name ) return false
35-
3634 return name === sanitize ( name . trim ( ) )
3735}
3836
@@ -44,8 +42,9 @@ function validateKeyName (name) {
4442 *
4543 * @param {function(Error) } callback - The caller
4644 * @param {string | Error } err - The error
45+ * @returns {undefined }
4746 */
48- function _error ( callback , err ) {
47+ function _error ( callback , err ) {
4948 const min = 200
5049 const max = 1000
5150 const delay = Math . random ( ) * ( max - min ) + min
@@ -55,15 +54,21 @@ function _error(callback, err) {
5554
5655/**
5756 * Converts a key name into a datastore name.
57+ *
58+ * @param {string } name
59+ * @returns {DS.Key }
5860 */
5961function DsName ( name ) {
6062 return new DS . Key ( '/' + name )
6163}
6264
6365/**
6466 * Converts a datastore name into a key name.
67+ *
68+ * @param {DS.Key } name - A datastore name
69+ * @returns {string }
6570 */
66- function KsName ( name ) {
71+ function KsName ( name ) {
6772 return name . toString ( ) . slice ( 1 )
6873}
6974
@@ -111,7 +116,7 @@ class Keychain {
111116 this . cms = new CMS ( this )
112117 }
113118
114- static get options ( ) {
119+ static get options ( ) {
115120 return defaultOptions
116121 }
117122
@@ -123,6 +128,7 @@ class Keychain {
123128 }
124129 const dsname = DsName ( name )
125130 self . store . has ( dsname , ( err , exists ) => {
131+ if ( err ) return _error ( callback , err )
126132 if ( exists ) return _error ( callback , `Key '${ name } ' already exists'` )
127133
128134 switch ( type . toLowerCase ( ) ) {
@@ -133,14 +139,14 @@ class Keychain {
133139 forge . pki . rsa . generateKeyPair ( { bits : size , workers : - 1 } , ( err , keypair ) => {
134140 if ( err ) return _error ( callback , err )
135141
136- const pem = forge . pki . encryptRsaPrivateKey ( keypair . privateKey , this . _ ( ) ) ;
142+ const pem = forge . pki . encryptRsaPrivateKey ( keypair . privateKey , this . _ ( ) )
137143 return self . store . put ( dsname , pem , ( err ) => {
138144 if ( err ) return _error ( callback , err )
139145
140146 self . _getKeyInfo ( name , callback )
141147 } )
142148 } )
143- break ;
149+ break
144150
145151 default :
146152 return _error ( callback , `Invalid key type '${ type } '` )
@@ -181,13 +187,14 @@ class Keychain {
181187 }
182188 const dsname = DsName ( name )
183189 self . store . has ( dsname , ( err , exists ) => {
190+ if ( err ) return _error ( callback , err )
184191 if ( ! exists ) return _error ( callback , `Key '${ name } ' does not exist'` )
185192
186193 self . store . delete ( dsname , callback )
187194 } )
188195 }
189196
190- renameKey ( oldName , newName , callback ) {
197+ renameKey ( oldName , newName , callback ) {
191198 const self = this
192199 if ( ! validateKeyName ( oldName ) || oldName === 'self' ) {
193200 return _error ( callback , `Invalid old key name '${ oldName } '` )
@@ -203,6 +210,7 @@ class Keychain {
203210 }
204211 const pem = res . toString ( )
205212 self . store . has ( newDsname , ( err , exists ) => {
213+ if ( err ) return _error ( callback , err )
206214 if ( exists ) return _error ( callback , `Key '${ newName } ' already exists'` )
207215
208216 const batch = self . store . batch ( )
@@ -246,7 +254,7 @@ class Keychain {
246254 } )
247255 }
248256
249- importKey ( name , pem , password , callback ) {
257+ importKey ( name , pem , password , callback ) {
250258 const self = this
251259 if ( ! validateKeyName ( name ) || name === 'self' ) {
252260 return _error ( callback , `Invalid key name '${ name } '` )
@@ -256,15 +264,16 @@ class Keychain {
256264 }
257265 const dsname = DsName ( name )
258266 self . store . has ( dsname , ( err , exists ) => {
267+ if ( err ) return _error ( callback , err )
259268 if ( exists ) return _error ( callback , `Key '${ name } ' already exists'` )
260269 try {
261270 const privateKey = forge . pki . decryptRsaPrivateKey ( pem , password )
262271 if ( privateKey === null ) {
263272 return _error ( callback , 'Cannot read the key, most likely the password is wrong' )
264273 }
265- const newpem = forge . pki . encryptRsaPrivateKey ( privateKey , this . _ ( ) ) ;
274+ const newpem = forge . pki . encryptRsaPrivateKey ( privateKey , this . _ ( ) )
266275 return self . store . put ( dsname , newpem , ( err ) => {
267- if ( err ) return _error ( callback , err )
276+ if ( err ) return _error ( callback , err )
268277
269278 this . _getKeyInfo ( name , callback )
270279 } )
@@ -280,23 +289,25 @@ class Keychain {
280289 return _error ( callback , `Invalid key name '${ name } '` )
281290 }
282291 if ( ! peer || ! peer . privKey ) {
283- return _error ( callback , 'Peer.privKey \ is required' )
292+ return _error ( callback , 'Peer.privKey is required' )
284293 }
285294 const dsname = DsName ( name )
286295 self . store . has ( dsname , ( err , exists ) => {
296+ if ( err ) return _error ( callback , err )
287297 if ( exists ) return _error ( callback , `Key '${ name } ' already exists'` )
288298
289299 const privateKeyProtobuf = peer . marshalPrivKey ( )
290- libp2pCrypto . keys . unmarshalPrivateKey ( privateKeyProtobuf , ( err , key ) => {
300+ crypto . keys . unmarshalPrivateKey ( privateKeyProtobuf , ( err , key ) => {
301+ if ( err ) return _error ( callback , err )
291302 try {
292303 const der = key . marshal ( )
293- const buf = forge . util . createBuffer ( der . toString ( 'binary' ) ) ;
304+ const buf = forge . util . createBuffer ( der . toString ( 'binary' ) )
294305 const obj = forge . asn1 . fromDer ( buf )
295306 const privateKey = forge . pki . privateKeyFromAsn1 ( obj )
296307 if ( privateKey === null ) {
297308 return _error ( callback , 'Cannot read the peer private key' )
298309 }
299- const pem = forge . pki . encryptRsaPrivateKey ( privateKey , this . _ ( ) ) ;
310+ const pem = forge . pki . encryptRsaPrivateKey ( privateKey , this . _ ( ) )
300311 return self . store . put ( dsname , pem , ( err ) => {
301312 if ( err ) return _error ( callback , err )
302313
@@ -314,9 +325,9 @@ class Keychain {
314325 *
315326 * @param {string } name
316327 * @param {function(Error, string) } callback
328+ * @returns {undefined }
317329 */
318330 _getPrivateKey ( name , callback ) {
319- const self = this
320331 if ( ! validateKeyName ( name ) ) {
321332 return _error ( callback , `Invalid key name '${ name } '` )
322333 }
@@ -329,7 +340,6 @@ class Keychain {
329340 }
330341
331342 _getKeyInfo ( name , callback ) {
332- const self = this
333343 if ( ! validateKeyName ( name ) ) {
334344 return _error ( callback , `Invalid key name '${ name } '` )
335345 }
@@ -356,7 +366,6 @@ class Keychain {
356366 }
357367 } )
358368 }
359-
360369}
361370
362371module . exports = Keychain
0 commit comments