@@ -165,12 +165,20 @@ exports.createFromPubKey = function (key, callback) {
165
165
throw new Error ( 'callback is required' )
166
166
}
167
167
168
- let buf = key
169
- if ( typeof buf === 'string' ) {
170
- buf = Buffer . from ( key , 'base64' )
171
- }
168
+ let pubKey
169
+
170
+ try {
171
+ let buf = key
172
+ if ( typeof buf === 'string' ) {
173
+ buf = Buffer . from ( key , 'base64' )
174
+ }
172
175
173
- const pubKey = crypto . keys . unmarshalPublicKey ( buf )
176
+ if ( ! Buffer . isBuffer ( buf ) ) throw new Error ( 'Supplied key is neither a base64 string nor a buffer' )
177
+
178
+ pubKey = crypto . keys . unmarshalPublicKey ( buf )
179
+ } catch ( err ) {
180
+ return callback ( err )
181
+ }
174
182
175
183
pubKey . hash ( ( err , digest ) => {
176
184
if ( err ) {
@@ -183,15 +191,22 @@ exports.createFromPubKey = function (key, callback) {
183
191
184
192
// Private key input will be a string
185
193
exports . createFromPrivKey = function ( key , callback ) {
186
- let buf = key
187
- if ( typeof buf === 'string' ) {
188
- buf = Buffer . from ( key , 'base64' )
189
- }
190
-
191
194
if ( typeof callback !== 'function' ) {
192
195
throw new Error ( 'callback is required' )
193
196
}
194
197
198
+ let buf = key
199
+
200
+ try {
201
+ if ( typeof buf === 'string' ) {
202
+ buf = Buffer . from ( key , 'base64' )
203
+ }
204
+
205
+ if ( ! Buffer . isBuffer ( buf ) ) throw new Error ( 'Supplied key is neither a base64 string nor a buffer' )
206
+ } catch ( err ) {
207
+ return callback ( err )
208
+ }
209
+
195
210
waterfall ( [
196
211
( cb ) => crypto . keys . unmarshalPrivateKey ( buf , cb ) ,
197
212
( privKey , cb ) => privKey . public . hash ( ( err , digest ) => {
@@ -211,10 +226,19 @@ exports.createFromJSON = function (obj, callback) {
211
226
throw new Error ( 'callback is required' )
212
227
}
213
228
214
- const id = mh . fromB58String ( obj . id )
215
- const rawPrivKey = obj . privKey && Buffer . from ( obj . privKey , 'base64' )
216
- const rawPubKey = obj . pubKey && Buffer . from ( obj . pubKey , 'base64' )
217
- const pub = rawPubKey && crypto . keys . unmarshalPublicKey ( rawPubKey )
229
+ let id
230
+ let rawPrivKey
231
+ let rawPubKey
232
+ let pub
233
+
234
+ try {
235
+ id = mh . fromB58String ( obj . id )
236
+ rawPrivKey = obj . privKey && Buffer . from ( obj . privKey , 'base64' )
237
+ rawPubKey = obj . pubKey && Buffer . from ( obj . pubKey , 'base64' )
238
+ pub = rawPubKey && crypto . keys . unmarshalPublicKey ( rawPubKey )
239
+ } catch ( err ) {
240
+ return callback ( err )
241
+ }
218
242
219
243
if ( rawPrivKey ) {
220
244
waterfall ( [
0 commit comments