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.
		
		
		
		
		
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
/* global libsignal, textsecure */
 | 
						|
 | 
						|
describe('encrypting and decrypting profile data', () => {
 | 
						|
  const NAME_PADDED_LENGTH = 26;
 | 
						|
  describe('encrypting and decrypting profile names', () => {
 | 
						|
    it('pads, encrypts, decrypts, and unpads a short string', () => {
 | 
						|
      const name = 'Alice';
 | 
						|
      const buffer = dcodeIO.ByteBuffer.wrap(name).toArrayBuffer();
 | 
						|
      const key = libsignal.crypto.getRandomBytes(32);
 | 
						|
 | 
						|
      return textsecure.crypto
 | 
						|
        .encryptProfileName(buffer, key)
 | 
						|
        .then(encrypted => {
 | 
						|
          assert(encrypted.byteLength === NAME_PADDED_LENGTH + 16 + 12);
 | 
						|
          return textsecure.crypto
 | 
						|
            .decryptProfileName(encrypted, key)
 | 
						|
            .then(decrypted => {
 | 
						|
              assert.strictEqual(
 | 
						|
                dcodeIO.ByteBuffer.wrap(decrypted).toString('utf8'),
 | 
						|
                'Alice'
 | 
						|
              );
 | 
						|
            });
 | 
						|
        });
 | 
						|
    });
 | 
						|
    it('works for empty string', () => {
 | 
						|
      const name = dcodeIO.ByteBuffer.wrap('').toArrayBuffer();
 | 
						|
      const key = libsignal.crypto.getRandomBytes(32);
 | 
						|
 | 
						|
      return textsecure.crypto
 | 
						|
        .encryptProfileName(name.buffer, key)
 | 
						|
        .then(encrypted => {
 | 
						|
          assert(encrypted.byteLength === NAME_PADDED_LENGTH + 16 + 12);
 | 
						|
          return textsecure.crypto
 | 
						|
            .decryptProfileName(encrypted, key)
 | 
						|
            .then(decrypted => {
 | 
						|
              assert.strictEqual(decrypted.byteLength, 0);
 | 
						|
              assert.strictEqual(
 | 
						|
                dcodeIO.ByteBuffer.wrap(decrypted).toString('utf8'),
 | 
						|
                ''
 | 
						|
              );
 | 
						|
            });
 | 
						|
        });
 | 
						|
    });
 | 
						|
  });
 | 
						|
  describe('encrypting and decrypting profile avatars', () => {
 | 
						|
    it('encrypts and decrypts', () => {
 | 
						|
      const buffer = dcodeIO.ByteBuffer.wrap(
 | 
						|
        'This is an avatar'
 | 
						|
      ).toArrayBuffer();
 | 
						|
      const key = libsignal.crypto.getRandomBytes(32);
 | 
						|
 | 
						|
      return textsecure.crypto.encryptProfile(buffer, key).then(encrypted => {
 | 
						|
        assert(encrypted.byteLength === buffer.byteLength + 16 + 12);
 | 
						|
        return textsecure.crypto
 | 
						|
          .decryptProfile(encrypted, key)
 | 
						|
          .then(decrypted => {
 | 
						|
            assertEqualArrayBuffers(buffer, decrypted);
 | 
						|
          });
 | 
						|
      });
 | 
						|
    });
 | 
						|
    it('throws when decrypting with the wrong key', () => {
 | 
						|
      const buffer = dcodeIO.ByteBuffer.wrap(
 | 
						|
        'This is an avatar'
 | 
						|
      ).toArrayBuffer();
 | 
						|
      const key = libsignal.crypto.getRandomBytes(32);
 | 
						|
      const badKey = libsignal.crypto.getRandomBytes(32);
 | 
						|
 | 
						|
      return textsecure.crypto.encryptProfile(buffer, key).then(encrypted => {
 | 
						|
        assert(encrypted.byteLength === buffer.byteLength + 16 + 12);
 | 
						|
        return textsecure.crypto
 | 
						|
          .decryptProfile(encrypted, badKey)
 | 
						|
          .catch(error => {
 | 
						|
            assert.strictEqual(error.name, 'ProfileDecryptError');
 | 
						|
          });
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |