You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
| 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);
 | |
| 
 | |
|       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'
 | |
|               );
 | |
|             });
 | |
|         });
 | |
|     });
 | |
|     it('works for empty string', function() {
 | |
|       var name = dcodeIO.ByteBuffer.wrap('').toArrayBuffer();
 | |
|       var key = libsignal.crypto.getRandomBytes(32);
 | |
| 
 | |
|       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'),
 | |
|                 ''
 | |
|               );
 | |
|             });
 | |
|         });
 | |
|     });
 | |
|   });
 | |
|   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);
 | |
| 
 | |
|       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);
 | |
|             });
 | |
|         });
 | |
|     });
 | |
|     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);
 | |
| 
 | |
|       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');
 | |
|             });
 | |
|         });
 | |
|     });
 | |
|   });
 | |
| });
 |