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.
		
		
		
		
		
			
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.7 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');
 | |
|   });
 | |
| });
 |