crypto: Pass encodings for Hmac digest
authorisaacs <i@izs.me>
Fri, 3 May 2013 01:38:04 +0000 (18:38 -0700)
committerisaacs <i@izs.me>
Tue, 14 May 2013 20:51:43 +0000 (13:51 -0700)
lib/crypto.js
src/node_crypto.cc

index 0a6b47f2c1978e3fa368f76a9cd9d2773b7cba3b..4650067fe6dbca42dbddc24643b1e0afbeeff3f0 100644 (file)
@@ -213,10 +213,7 @@ Hash.prototype.update = function(data, encoding) {
 
 Hash.prototype.digest = function(outputEncoding) {
   outputEncoding = outputEncoding || exports.DEFAULT_ENCODING;
-  var ret = this._binding.digest(outputEncoding);
-  if (outputEncoding !== 'buffer' && Buffer.isBuffer(ret))
-    ret = ret.toString(outputEncoding);
-  return ret;
+  return this._binding.digest(outputEncoding);
 };
 
 
index 3a5b9da5f44fde7f578b1b2e9d446c6a5b1522f1..774550c9956f514ec2ca1d06119007d24d12295d 100644 (file)
@@ -2761,6 +2761,11 @@ class Hmac : public ObjectWrap {
 
     HandleScope scope;
 
+    enum encoding encoding = BUFFER;
+    if (args.Length() >= 1) {
+      encoding = ParseEncoding(args[0]->ToString(), BUFFER);
+    }
+
     unsigned char* md_value = NULL;
     unsigned int md_len = 0;
     Local<Value> outString;
@@ -2771,9 +2776,10 @@ class Hmac : public ObjectWrap {
       md_len = 0;
     }
 
-    outString = Encode(md_value, md_len, BUFFER);
+    outString = StringBytes::Encode(
+          reinterpret_cast<const char*>(md_value), md_len, encoding);
 
-    delete [] md_value;
+    delete[] md_value;
     return scope.Close(outString);
   }