@@ -1573,7 +1573,7 @@ Handle<Value> Connection::GetPeerCertificate(const Arguments& args) {
15731573 const char hex[] = " 0123456789ABCDEF" ;
15741574 char fingerprint[EVP_MAX_MD_SIZE * 3 ];
15751575
1576- for (i= 0 ; i<md_size; i++) {
1576+ for (i = 0 ; i<md_size; i++) {
15771577 fingerprint[3 *i] = hex[(md[i] & 0xf0 ) >> 4 ];
15781578 fingerprint[(3 *i)+1 ] = hex[(md[i] & 0x0f )];
15791579 fingerprint[(3 *i)+2 ] = ' :' ;
@@ -2109,8 +2109,8 @@ class Cipher : public ObjectWrap {
21092109
21102110 int CipherUpdate (char * data, int len, unsigned char ** out, int * out_len) {
21112111 if (!initialised_) return 0 ;
2112- *out_len= len+EVP_CIPHER_CTX_block_size (&ctx);
2113- *out= new unsigned char [*out_len];
2112+ *out_len = len+EVP_CIPHER_CTX_block_size (&ctx);
2113+ *out = new unsigned char [*out_len];
21142114 return EVP_CipherUpdate (&ctx, *out, out_len, (unsigned char *)data, len);
21152115 }
21162116
@@ -2235,15 +2235,15 @@ class Cipher : public ObjectWrap {
22352235 ASSERT_IS_STRING_OR_BUFFER (args[0 ]);
22362236
22372237 // Only copy the data if we have to, because it's a string
2238- unsigned char * out= 0 ;
2239- int out_len= 0 , r;
2238+ unsigned char * out = 0 ;
2239+ int out_len = 0 , r;
22402240 if (args[0 ]->IsString ()) {
22412241 enum encoding encoding = ParseEncoding (args[1 ], BINARY);
2242- size_t buflen = StringBytes::SizeFast (args[0 ], encoding);
2243- char * buf = static_cast < char *>( malloc ( buflen)) ;
2242+ size_t buflen = StringBytes::StorageSize (args[0 ], encoding);
2243+ char * buf = new char [ buflen] ;
22442244 size_t written = StringBytes::Write (buf, buflen, args[0 ], encoding);
22452245 r = cipher->CipherUpdate (buf, written, &out, &out_len);
2246- free ( buf) ;
2246+ delete[] buf;
22472247 } else {
22482248 char * buf = Buffer::Data (args[0 ]);
22492249 size_t buflen = Buffer::Length (args[0 ]);
@@ -2407,8 +2407,8 @@ class Decipher : public ObjectWrap {
24072407 return 0 ;
24082408 }
24092409
2410- *out_len= len+EVP_CIPHER_CTX_block_size (&ctx);
2411- *out= new unsigned char [*out_len];
2410+ *out_len = len+EVP_CIPHER_CTX_block_size (&ctx);
2411+ *out = new unsigned char [*out_len];
24122412
24132413 return EVP_CipherUpdate (&ctx, *out, out_len, (unsigned char *)data, len);
24142414 }
@@ -2544,15 +2544,15 @@ class Decipher : public ObjectWrap {
25442544 ASSERT_IS_STRING_OR_BUFFER (args[0 ]);
25452545
25462546 // Only copy the data if we have to, because it's a string
2547- unsigned char * out= 0 ;
2548- int out_len= 0 , r;
2547+ unsigned char * out = 0 ;
2548+ int out_len = 0 , r;
25492549 if (args[0 ]->IsString ()) {
25502550 enum encoding encoding = ParseEncoding (args[1 ], BINARY);
2551- size_t buflen = StringBytes::SizeFast (args[0 ], encoding);
2552- char * buf = static_cast < char *>( malloc ( buflen)) ;
2551+ size_t buflen = StringBytes::StorageSize (args[0 ], encoding);
2552+ char * buf = new char [ buflen] ;
25532553 size_t written = StringBytes::Write (buf, buflen, args[0 ], encoding);
25542554 r = cipher->DecipherUpdate (buf, written, &out, &out_len);
2555- free ( buf) ;
2555+ delete[] buf;
25562556 } else {
25572557 char * buf = Buffer::Data (args[0 ]);
25582558 size_t buflen = Buffer::Length (args[0 ]);
@@ -2737,11 +2737,11 @@ class Hmac : public ObjectWrap {
27372737 int r;
27382738 if (args[0 ]->IsString ()) {
27392739 enum encoding encoding = ParseEncoding (args[1 ], BINARY);
2740- size_t buflen = StringBytes::SizeFast (args[0 ], encoding);
2741- char * buf = static_cast < char *>( malloc ( buflen)) ;
2740+ size_t buflen = StringBytes::StorageSize (args[0 ], encoding);
2741+ char * buf = new char [ buflen] ;
27422742 size_t written = StringBytes::Write (buf, buflen, args[0 ], encoding);
27432743 r = hmac->HmacUpdate (buf, written);
2744- free ( buf) ;
2744+ delete[] buf;
27452745 } else {
27462746 char * buf = Buffer::Data (args[0 ]);
27472747 size_t buflen = Buffer::Length (args[0 ]);
@@ -2860,11 +2860,11 @@ class Hash : public ObjectWrap {
28602860 int r;
28612861 if (args[0 ]->IsString ()) {
28622862 enum encoding encoding = ParseEncoding (args[1 ], BINARY);
2863- size_t buflen = StringBytes::SizeFast (args[0 ], encoding);
2864- char * buf = static_cast < char *>( malloc ( buflen)) ;
2863+ size_t buflen = StringBytes::StorageSize (args[0 ], encoding);
2864+ char * buf = new char [ buflen] ;
28652865 size_t written = StringBytes::Write (buf, buflen, args[0 ], encoding);
28662866 r = hash->HashUpdate (buf, written);
2867- free ( buf) ;
2867+ delete[] buf;
28682868 } else {
28692869 char * buf = Buffer::Data (args[0 ]);
28702870 size_t buflen = Buffer::Length (args[0 ]);
@@ -2888,18 +2888,20 @@ class Hash : public ObjectWrap {
28882888 return ThrowException (Exception::Error (String::New (" Not initialized" )));
28892889 }
28902890
2891+ enum encoding encoding = BUFFER;
2892+ if (args.Length () >= 1 ) {
2893+ encoding = ParseEncoding (args[0 ]->ToString (), BUFFER);
2894+ }
2895+
28912896 unsigned char md_value[EVP_MAX_MD_SIZE];
28922897 unsigned int md_len;
28932898
28942899 EVP_DigestFinal_ex (&hash->mdctx , md_value, &md_len);
28952900 EVP_MD_CTX_cleanup (&hash->mdctx );
28962901 hash->initialised_ = false ;
28972902
2898- Local<Value> outString;
2899-
2900- outString = Encode (md_value, md_len, BUFFER);
2901-
2902- return scope.Close (outString);
2903+ return scope.Close (StringBytes::Encode (
2904+ reinterpret_cast <const char *>(md_value), md_len, encoding));
29032905 }
29042906
29052907 Hash () : ObjectWrap () {
@@ -3021,11 +3023,11 @@ class Sign : public ObjectWrap {
30213023 int r;
30223024 if (args[0 ]->IsString ()) {
30233025 enum encoding encoding = ParseEncoding (args[1 ], BINARY);
3024- size_t buflen = StringBytes::SizeFast (args[0 ], encoding);
3025- char * buf = static_cast < char *>( malloc ( buflen)) ;
3026+ size_t buflen = StringBytes::StorageSize (args[0 ], encoding);
3027+ char * buf = new char [ buflen] ;
30263028 size_t written = StringBytes::Write (buf, buflen, args[0 ], encoding);
30273029 r = sign->SignUpdate (buf, written);
3028- free ( buf) ;
3030+ delete[] buf;
30293031 } else {
30303032 char * buf = Buffer::Data (args[0 ]);
30313033 size_t buflen = Buffer::Length (args[0 ]);
@@ -3240,11 +3242,11 @@ class Verify : public ObjectWrap {
32403242 int r;
32413243 if (args[0 ]->IsString ()) {
32423244 enum encoding encoding = ParseEncoding (args[1 ], BINARY);
3243- size_t buflen = StringBytes::SizeFast (args[0 ], encoding);
3244- char * buf = static_cast < char *>( malloc ( buflen)) ;
3245+ size_t buflen = StringBytes::StorageSize (args[0 ], encoding);
3246+ char * buf = new char [ buflen] ;
32453247 size_t written = StringBytes::Write (buf, buflen, args[0 ], encoding);
32463248 r = verify->VerifyUpdate (buf, written);
3247- free ( buf) ;
3249+ delete[] buf;
32483250 } else {
32493251 char * buf = Buffer::Data (args[0 ]);
32503252 size_t buflen = Buffer::Length (args[0 ]);
@@ -3277,8 +3279,15 @@ class Verify : public ObjectWrap {
32773279 ssize_t kwritten = DecodeWrite (kbuf, klen, args[0 ], BINARY);
32783280 assert (kwritten == klen);
32793281
3280- ASSERT_IS_BUFFER (args[1 ]);
3281- ssize_t hlen = Buffer::Length (args[1 ]);
3282+ ASSERT_IS_STRING_OR_BUFFER (args[1 ]);
3283+
3284+ // BINARY works for both buffers and binary strings.
3285+ enum encoding encoding = BINARY;
3286+ if (args.Length () >= 3 ) {
3287+ encoding = ParseEncoding (args[2 ]->ToString (), BINARY);
3288+ }
3289+
3290+ ssize_t hlen = StringBytes::Size (args[1 ], encoding);
32823291
32833292 if (hlen < 0 ) {
32843293 delete [] kbuf;
0 commit comments