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.
		
		
		
		
		
			
		
			
				
	
	
		
			105 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
'use strict';
 | 
						|
 | 
						|
describe('Crypto', function() {
 | 
						|
  it('roundtrip symmetric encryption succeeds', async function() {
 | 
						|
    var message = 'this is my message';
 | 
						|
    var plaintext = new dcodeIO.ByteBuffer.wrap(
 | 
						|
      message,
 | 
						|
      'binary'
 | 
						|
    ).toArrayBuffer();
 | 
						|
    var key = textsecure.crypto.getRandomBytes(32);
 | 
						|
 | 
						|
    var encrypted = await Signal.Crypto.encryptSymmetric(key, plaintext);
 | 
						|
    var decrypted = await Signal.Crypto.decryptSymmetric(key, encrypted);
 | 
						|
 | 
						|
    var equal = Signal.Crypto.constantTimeEqual(plaintext, decrypted);
 | 
						|
    if (!equal) {
 | 
						|
      throw new Error('The output and input did not match!');
 | 
						|
    }
 | 
						|
  });
 | 
						|
 | 
						|
  it('roundtrip fails if nonce is modified', async function() {
 | 
						|
    var message = 'this is my message';
 | 
						|
    var plaintext = new dcodeIO.ByteBuffer.wrap(
 | 
						|
      message,
 | 
						|
      'binary'
 | 
						|
    ).toArrayBuffer();
 | 
						|
    var key = textsecure.crypto.getRandomBytes(32);
 | 
						|
 | 
						|
    var encrypted = await Signal.Crypto.encryptSymmetric(key, plaintext);
 | 
						|
    var uintArray = new Uint8Array(encrypted);
 | 
						|
    uintArray[2] = 9;
 | 
						|
 | 
						|
    try {
 | 
						|
      var decrypted = await Signal.Crypto.decryptSymmetric(
 | 
						|
        key,
 | 
						|
        uintArray.buffer
 | 
						|
      );
 | 
						|
    } catch (error) {
 | 
						|
      assert.strictEqual(
 | 
						|
        error.message,
 | 
						|
        'decryptSymmetric: Failed to decrypt; MAC verification failed'
 | 
						|
      );
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    throw new Error('Expected error to be thrown');
 | 
						|
  });
 | 
						|
 | 
						|
  it('fails if mac is modified', async function() {
 | 
						|
    var message = 'this is my message';
 | 
						|
    var plaintext = new dcodeIO.ByteBuffer.wrap(
 | 
						|
      message,
 | 
						|
      'binary'
 | 
						|
    ).toArrayBuffer();
 | 
						|
    var key = textsecure.crypto.getRandomBytes(32);
 | 
						|
 | 
						|
    var encrypted = await Signal.Crypto.encryptSymmetric(key, plaintext);
 | 
						|
    var uintArray = new Uint8Array(encrypted);
 | 
						|
    uintArray[uintArray.length - 3] = 9;
 | 
						|
 | 
						|
    try {
 | 
						|
      var decrypted = await Signal.Crypto.decryptSymmetric(
 | 
						|
        key,
 | 
						|
        uintArray.buffer
 | 
						|
      );
 | 
						|
    } catch (error) {
 | 
						|
      assert.strictEqual(
 | 
						|
        error.message,
 | 
						|
        'decryptSymmetric: Failed to decrypt; MAC verification failed'
 | 
						|
      );
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    throw new Error('Expected error to be thrown');
 | 
						|
  });
 | 
						|
 | 
						|
  it('fails if encrypted contents are modified', async function() {
 | 
						|
    var message = 'this is my message';
 | 
						|
    var plaintext = new dcodeIO.ByteBuffer.wrap(
 | 
						|
      message,
 | 
						|
      'binary'
 | 
						|
    ).toArrayBuffer();
 | 
						|
    var key = textsecure.crypto.getRandomBytes(32);
 | 
						|
 | 
						|
    var encrypted = await Signal.Crypto.encryptSymmetric(key, plaintext);
 | 
						|
    var uintArray = new Uint8Array(encrypted);
 | 
						|
    uintArray[35] = 9;
 | 
						|
 | 
						|
    try {
 | 
						|
      var decrypted = await Signal.Crypto.decryptSymmetric(
 | 
						|
        key,
 | 
						|
        uintArray.buffer
 | 
						|
      );
 | 
						|
    } catch (error) {
 | 
						|
      assert.strictEqual(
 | 
						|
        error.message,
 | 
						|
        'decryptSymmetric: Failed to decrypt; MAC verification failed'
 | 
						|
      );
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    throw new Error('Expected error to be thrown');
 | 
						|
  });
 | 
						|
});
 |