1919// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2020// USE OR OTHER DEALINGS IN THE SOFTWARE.
2121
22+ // Note: In 0.8 and before, crypto functions all defaulted to using
23+ // binary-encoded strings rather than buffers.
24+
25+ exports . DEFAULT_ENCODING = 'buffer' ;
2226
2327try {
2428 var binding = process . binding ( 'crypto' ) ;
@@ -137,15 +141,17 @@ function Hash(algorithm) {
137141}
138142
139143Hash . prototype . update = function ( data , encoding ) {
144+ encoding = encoding || exports . DEFAULT_ENCODING ;
140145 if ( encoding === 'buffer' )
141146 encoding = null ;
142- if ( encoding || typeof data === 'string' )
147+ if ( typeof data === 'string' )
143148 data = new Buffer ( data , encoding ) ;
144149 this . _binding . update ( data ) ;
145150 return this ;
146151} ;
147152
148153Hash . prototype . digest = function ( outputEncoding ) {
154+ outputEncoding = outputEncoding || exports . DEFAULT_ENCODING ;
149155 var result = this . _binding . digest ( 'buffer' ) ;
150156 if ( outputEncoding && outputEncoding !== 'buffer' )
151157 result = result . toString ( outputEncoding ) ;
@@ -191,6 +197,8 @@ function Cipher(cipher, password) {
191197}
192198
193199Cipher . prototype . update = function ( data , inputEncoding , outputEncoding ) {
200+ inputEncoding = inputEncoding || exports . DEFAULT_ENCODING ;
201+ outputEncoding = outputEncoding || exports . DEFAULT_ENCODING ;
194202 if ( inputEncoding && inputEncoding !== 'buffer' )
195203 data = new Buffer ( data , inputEncoding ) ;
196204
@@ -205,6 +213,7 @@ Cipher.prototype.update = function(data, inputEncoding, outputEncoding) {
205213} ;
206214
207215Cipher . prototype . final = function ( outputEncoding ) {
216+ outputEncoding = outputEncoding || exports . DEFAULT_ENCODING ;
208217 var ret = this . _binding . final ( 'buffer' ) ;
209218
210219 if ( outputEncoding && outputEncoding !== 'buffer' ) {
@@ -296,6 +305,7 @@ Sign.prototype.sign = function(key, encoding) {
296305 if ( typeof key === 'string' )
297306 key = new Buffer ( key , 'binary' ) ;
298307
308+ encoding = encoding || exports . DEFAULT_ENCODING ;
299309 var ret = this . _binding . sign ( key , 'buffer' ) ;
300310 if ( encoding && encoding !== 'buffer' )
301311 ret = ret . toString ( encoding ) ;
@@ -319,6 +329,7 @@ Verify.prototype.verify = function(object, signature, sigEncoding) {
319329 if ( typeof object === 'string' )
320330 object = new Buffer ( object , 'binary' ) ;
321331
332+ sigEncoding = sigEncoding || exports . DEFAULT_ENCODING ;
322333 if ( sigEncoding === 'buffer' )
323334 sigEncoding = null ;
324335 if ( sigEncoding || typeof signature === 'string' )
@@ -336,22 +347,26 @@ function DiffieHellman(sizeOrKey, encoding) {
336347 if ( ! sizeOrKey )
337348 this . _binding = new binding . DiffieHellman ( ) ;
338349 else {
350+ encoding = encoding || exports . DEFAULT_ENCODING ;
339351 if ( encoding === 'buffer' )
340352 encoding = null ;
341- if ( encoding || typeof sizeOrKey === 'string' )
353+ if ( typeof sizeOrKey === 'string' )
342354 sizeOrKey = new Buffer ( sizeOrKey , encoding ) ;
343355 this . _binding = new binding . DiffieHellman ( sizeOrKey , 'buffer' ) ;
344356 }
345357}
346358
347359DiffieHellman . prototype . generateKeys = function ( encoding ) {
348360 var keys = this . _binding . generateKeys ( 'buffer' ) ;
349- if ( encoding )
361+ encoding = encoding || exports . DEFAULT_ENCODING ;
362+ if ( encoding && encoding !== 'buffer' )
350363 keys = keys . toString ( encoding ) ;
351364 return keys ;
352365} ;
353366
354367DiffieHellman . prototype . computeSecret = function ( key , inEnc , outEnc ) {
368+ inEnc = inEnc || exports . DEFAULT_ENCODING ;
369+ outEnc = outEnc || exports . DEFAULT_ENCODING ;
355370 if ( inEnc === 'buffer' )
356371 inEnc = null ;
357372 if ( outEnc === 'buffer' )
@@ -366,33 +381,38 @@ DiffieHellman.prototype.computeSecret = function(key, inEnc, outEnc) {
366381
367382DiffieHellman . prototype . getPrime = function ( encoding ) {
368383 var prime = this . _binding . getPrime ( 'buffer' ) ;
384+ encoding = encoding || exports . DEFAULT_ENCODING ;
369385 if ( encoding && encoding !== 'buffer' )
370386 prime = prime . toString ( encoding ) ;
371387 return prime ;
372388} ;
373389
374390DiffieHellman . prototype . getGenerator = function ( encoding ) {
375391 var generator = this . _binding . getGenerator ( 'buffer' ) ;
392+ encoding = encoding || exports . DEFAULT_ENCODING ;
376393 if ( encoding && encoding !== 'buffer' )
377394 generator = generator . toString ( encoding ) ;
378395 return generator ;
379396} ;
380397
381398DiffieHellman . prototype . getPublicKey = function ( encoding ) {
382399 var key = this . _binding . getPublicKey ( 'buffer' ) ;
400+ encoding = encoding || exports . DEFAULT_ENCODING ;
383401 if ( encoding && encoding !== 'buffer' )
384402 key = key . toString ( encoding ) ;
385403 return key ;
386404} ;
387405
388406DiffieHellman . prototype . getPrivateKey = function ( encoding ) {
389407 var key = this . _binding . getPrivateKey ( 'buffer' ) ;
408+ encoding = encoding || exports . DEFAULT_ENCODING ;
390409 if ( encoding && encoding !== 'buffer' )
391410 key = key . toString ( encoding ) ;
392411 return key ;
393412} ;
394413
395414DiffieHellman . prototype . setPublicKey = function ( key , encoding ) {
415+ encoding = encoding || exports . DEFAULT_ENCODING ;
396416 if ( encoding === 'buffer' )
397417 encoding = null ;
398418 if ( encoding || typeof key === 'string' )
@@ -402,6 +422,7 @@ DiffieHellman.prototype.setPublicKey = function(key, encoding) {
402422} ;
403423
404424DiffieHellman . prototype . setPrivateKey = function ( key , encoding ) {
425+ encoding = encoding || exports . DEFAULT_ENCODING ;
405426 if ( encoding === 'buffer' )
406427 encoding = null ;
407428 if ( encoding || typeof key === 'string' )
@@ -445,7 +466,22 @@ exports.pbkdf2 = function(password, salt, iterations, keylen, callback) {
445466 password = new Buffer ( password , 'binary' ) ;
446467 if ( typeof salt === 'string' )
447468 salt = new Buffer ( salt , 'binary' ) ;
448- return binding . PBKDF2 ( password , salt , iterations , keylen , callback ) ;
469+
470+ if ( exports . DEFAULT_ENCODING === 'buffer' )
471+ return binding . PBKDF2 ( password , salt , iterations , keylen , callback ) ;
472+
473+ // at this point, we need to handle encodings.
474+ var encoding = exports . DEFAULT_ENCODING ;
475+ if ( callback ) {
476+ binding . PBKDF2 ( password , salt , iterations , keylen , function ( er , ret ) {
477+ if ( ret )
478+ ret = ret . toString ( encoding ) ;
479+ callback ( er , ret ) ;
480+ } ) ;
481+ } else {
482+ var ret = binding . PBKDF2 ( password , salt , iterations , keylen ) ;
483+ return ret . toString ( encoding ) ;
484+ }
449485} ;
450486
451487exports . pbkdf2Sync = function ( password , salt , iterations , keylen ) {
0 commit comments