2017-09-11 16:50:35 +00:00
|
|
|
describe('encrypting and decrypting profile data', function() {
|
|
|
|
var NAME_PADDED_LENGTH = 26;
|
|
|
|
describe('encrypting and decrypting profile names', function() {
|
|
|
|
it('pads, encrypts, decrypts, and unpads a short string', function() {
|
|
|
|
var name = 'Alice';
|
|
|
|
var buffer = dcodeIO.ByteBuffer.wrap(name).toArrayBuffer();
|
|
|
|
var key = libsignal.crypto.getRandomBytes(32);
|
|
|
|
|
2018-05-02 16:51:22 +00:00
|
|
|
return textsecure.crypto
|
|
|
|
.encryptProfileName(buffer, key)
|
|
|
|
.then(function(encrypted) {
|
|
|
|
assert(encrypted.byteLength === NAME_PADDED_LENGTH + 16 + 12);
|
|
|
|
return textsecure.crypto
|
|
|
|
.decryptProfileName(encrypted, key)
|
|
|
|
.then(function(decrypted) {
|
|
|
|
assert.strictEqual(
|
|
|
|
dcodeIO.ByteBuffer.wrap(decrypted).toString('utf8'),
|
|
|
|
'Alice'
|
|
|
|
);
|
|
|
|
});
|
2017-09-11 16:50:35 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
it('works for empty string', function() {
|
|
|
|
var name = dcodeIO.ByteBuffer.wrap('').toArrayBuffer();
|
|
|
|
var key = libsignal.crypto.getRandomBytes(32);
|
|
|
|
|
2018-05-02 16:51:22 +00:00
|
|
|
return textsecure.crypto
|
|
|
|
.encryptProfileName(name.buffer, key)
|
|
|
|
.then(function(encrypted) {
|
|
|
|
assert(encrypted.byteLength === NAME_PADDED_LENGTH + 16 + 12);
|
|
|
|
return textsecure.crypto
|
|
|
|
.decryptProfileName(encrypted, key)
|
|
|
|
.then(function(decrypted) {
|
|
|
|
assert.strictEqual(decrypted.byteLength, 0);
|
|
|
|
assert.strictEqual(
|
|
|
|
dcodeIO.ByteBuffer.wrap(decrypted).toString('utf8'),
|
|
|
|
''
|
|
|
|
);
|
|
|
|
});
|
2017-09-11 16:50:35 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe('encrypting and decrypting profile avatars', function() {
|
|
|
|
it('encrypts and decrypts', function() {
|
|
|
|
var buffer = dcodeIO.ByteBuffer.wrap('This is an avatar').toArrayBuffer();
|
|
|
|
var key = libsignal.crypto.getRandomBytes(32);
|
|
|
|
|
2018-05-02 16:51:22 +00:00
|
|
|
return textsecure.crypto
|
|
|
|
.encryptProfile(buffer, key)
|
|
|
|
.then(function(encrypted) {
|
|
|
|
assert(encrypted.byteLength === buffer.byteLength + 16 + 12);
|
|
|
|
return textsecure.crypto
|
|
|
|
.decryptProfile(encrypted, key)
|
|
|
|
.then(function(decrypted) {
|
|
|
|
assertEqualArrayBuffers(buffer, decrypted);
|
|
|
|
});
|
2017-09-11 16:50:35 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
it('throws when decrypting with the wrong key', function() {
|
|
|
|
var buffer = dcodeIO.ByteBuffer.wrap('This is an avatar').toArrayBuffer();
|
|
|
|
var key = libsignal.crypto.getRandomBytes(32);
|
|
|
|
var bad_key = libsignal.crypto.getRandomBytes(32);
|
|
|
|
|
2018-05-02 16:51:22 +00:00
|
|
|
return textsecure.crypto
|
|
|
|
.encryptProfile(buffer, key)
|
|
|
|
.then(function(encrypted) {
|
|
|
|
assert(encrypted.byteLength === buffer.byteLength + 16 + 12);
|
|
|
|
return textsecure.crypto
|
|
|
|
.decryptProfile(encrypted, bad_key)
|
|
|
|
.catch(function(error) {
|
|
|
|
assert.strictEqual(error.name, 'ProfileDecryptError');
|
|
|
|
});
|
2017-09-11 16:50:35 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|