Browse Source

Fix crypto encryption/decryption with Base64.

Fixes #738.
Fixes #1205.
v0.7.4-release
SAWADA Tadashi 14 years ago
committed by Ben Noordhuis
parent
commit
d3a84bea7b
  1. 13
      src/node_crypto.cc
  2. 19
      test/simple/test-crypto.js

13
src/node_crypto.cc

@ -1823,6 +1823,19 @@ class Cipher : public ObjectWrap {
outString = Encode(out_hexdigest, out_hex_len, BINARY); outString = Encode(out_hexdigest, out_hex_len, BINARY);
delete [] out_hexdigest; delete [] out_hexdigest;
} else if (strcasecmp(*encoding, "base64") == 0) { } 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); base64(out_value, out_len, &out_hexdigest, &out_hex_len);
outString = Encode(out_hexdigest, out_hex_len, BINARY); outString = Encode(out_hexdigest, out_hex_len, BINARY);
delete [] out_hexdigest; delete [] out_hexdigest;

19
test/simple/test-crypto.js

@ -308,6 +308,25 @@ txt += decipher.final('utf8');
assert.equal(txt, plaintext, 'encryption and decryption'); 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 // Test encyrption and decryption with explicit key and iv
var encryption_key = '0123456789abcd0123456789'; var encryption_key = '0123456789abcd0123456789';
var iv = '12345678'; var iv = '12345678';

Loading…
Cancel
Save