This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Fix crypto encryption/decryption with Base64.

Fixes #738.
Fixes #1205.
  • Loading branch information...
1 parent b8e9bf0 commit e357acc55b8126e1b8b78edcf4ac09dfa3217146 @cesare cesare committed with koichik Jun 19, 2011
Showing with 32 additions and 0 deletions.
  1. +13 −0 src/node_crypto.cc
  2. +19 −0 test/simple/test-crypto.js
View
@@ -1673,6 +1673,19 @@ class Cipher : public ObjectWrap {
outString = Encode(out_hexdigest, out_hex_len, BINARY);
delete [] out_hexdigest;
} else if (strcasecmp(*encoding, "base64") == 0) {
+ // Check to see if we need to add in previous base64 overhang
+ if (cipher->incomplete_base64!=NULL){
+ unsigned char* complete_base64 = new unsigned char[out_len+cipher->incomplete_base64_len+1];
+ memcpy(complete_base64, cipher->incomplete_base64, cipher->incomplete_base64_len);
+ memcpy(&complete_base64[cipher->incomplete_base64_len], out_value, out_len);
+ delete [] out_value;
+
+ delete [] cipher->incomplete_base64;
+ cipher->incomplete_base64=NULL;
+
+ out_value=complete_base64;
+ out_len += cipher->incomplete_base64_len;
+ }
base64(out_value, out_len, &out_hexdigest, &out_hex_len);
outString = Encode(out_hexdigest, out_hex_len, BINARY);
delete [] out_hexdigest;
View
@@ -128,6 +128,25 @@ txt += decipher.final('utf8');
assert.equal(txt, plaintext, 'encryption and decryption');
+// encryption and decryption with Base64
+// reported in https://github.com/joyent/node/issues/738
+var plaintext =
+ '32|RmVZZkFUVmpRRkp0TmJaUm56ZU9qcnJkaXNNWVNpTTU*|iXmckfRWZBGWWELw' +
+ 'eCBsThSsfUHLeRe0KCsK8ooHgxie0zOINpXxfZi/oNG7uq9JWFVCk70gfzQH8ZUJjAfaFg**';
+var cipher = crypto.createCipher('aes256', '0123456789abcdef');
+
+// encrypt plaintext which is in utf8 format
+// to a ciphertext which will be in Base64
+var ciph = cipher.update(plaintext, 'utf8', 'base64');
+ciph += cipher.final('base64');
+
+var decipher = crypto.createDecipher('aes256', '0123456789abcdef');
+var txt = decipher.update(ciph, 'base64', 'utf8');
+txt += decipher.final('utf8');
+
+assert.equal(txt, plaintext, 'encryption and decryption with Base64');
+
+
// Test encyrption and decryption with explicit key and iv
var encryption_key = '0123456789abcd0123456789';
var iv = '12345678';

0 comments on commit e357acc

Please sign in to comment.