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.
		
		
		
		
		
			
		
			
	
	
		
			55 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											8 years ago
										 | 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'); | ||
|  |         }); | ||
|  |       }); | ||
|  |     }); | ||
|  |   }); | ||
|  | }); |