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.
		
		
		
		
		
			
		
			
				
	
	
		
			85 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
/* global libsignal, libloki, textsecure, StringView */
 | 
						|
 | 
						|
'use strict';
 | 
						|
 | 
						|
describe('Storage', () => {
 | 
						|
  let testKey;
 | 
						|
  const store = textsecure.storage.protocol;
 | 
						|
 | 
						|
  describe('#getPreKeyBundleForContact', () => {
 | 
						|
    beforeEach(async () => {
 | 
						|
      clearDatabase();
 | 
						|
      testKey = {
 | 
						|
        pubKey: libsignal.crypto.getRandomBytes(33),
 | 
						|
        privKey: libsignal.crypto.getRandomBytes(32),
 | 
						|
      };
 | 
						|
      textsecure.storage.put('signedKeyId', 2);
 | 
						|
      await store.storeSignedPreKey(1, testKey);
 | 
						|
    });
 | 
						|
 | 
						|
    it('should generate a new prekey bundle for a new contact', async () => {
 | 
						|
      const pubKey = libsignal.crypto.getRandomBytes(32);
 | 
						|
      const pubKeyString = StringView.arrayBufferToHex(pubKey);
 | 
						|
      const preKeyIdBefore = textsecure.storage.get('maxPreKeyId', 1);
 | 
						|
      const newBundle = await libloki.storage.getPreKeyBundleForContact(
 | 
						|
        pubKeyString
 | 
						|
      );
 | 
						|
      const preKeyIdAfter = textsecure.storage.get('maxPreKeyId', 1);
 | 
						|
      assert.strictEqual(preKeyIdAfter, preKeyIdBefore + 1);
 | 
						|
 | 
						|
      const testKeyArray = new Uint8Array(testKey.pubKey);
 | 
						|
      assert.isDefined(newBundle);
 | 
						|
      assert.isDefined(newBundle.identityKey);
 | 
						|
      assert.isDefined(newBundle.deviceId);
 | 
						|
      assert.isDefined(newBundle.preKeyId);
 | 
						|
      assert.isDefined(newBundle.signedKeyId);
 | 
						|
      assert.isDefined(newBundle.preKey);
 | 
						|
      assert.isDefined(newBundle.signedKey);
 | 
						|
      assert.isDefined(newBundle.signature);
 | 
						|
      assert.strictEqual(
 | 
						|
        testKeyArray.byteLength,
 | 
						|
        newBundle.signedKey.byteLength
 | 
						|
      );
 | 
						|
      for (let i = 0; i !== testKeyArray.byteLength; i += 1) {
 | 
						|
        assert.strictEqual(testKeyArray[i], newBundle.signedKey[i]);
 | 
						|
      }
 | 
						|
    });
 | 
						|
 | 
						|
    it('should return the same prekey bundle after creating a contact', async () => {
 | 
						|
      const pubKey = libsignal.crypto.getRandomBytes(32);
 | 
						|
      const pubKeyString = StringView.arrayBufferToHex(pubKey);
 | 
						|
      const bundle1 = await libloki.storage.getPreKeyBundleForContact(
 | 
						|
        pubKeyString
 | 
						|
      );
 | 
						|
      const bundle2 = await libloki.storage.getPreKeyBundleForContact(
 | 
						|
        pubKeyString
 | 
						|
      );
 | 
						|
      assert.isDefined(bundle1);
 | 
						|
      assert.isDefined(bundle2);
 | 
						|
      assert.deepEqual(bundle1, bundle2);
 | 
						|
    });
 | 
						|
 | 
						|
    it('should save the signed keys and prekeys from a bundle', async () => {
 | 
						|
      const pubKey = libsignal.crypto.getRandomBytes(32);
 | 
						|
      const pubKeyString = StringView.arrayBufferToHex(pubKey);
 | 
						|
      const preKeyIdBefore = textsecure.storage.get('maxPreKeyId', 1);
 | 
						|
      const newBundle = await libloki.storage.getPreKeyBundleForContact(
 | 
						|
        pubKeyString
 | 
						|
      );
 | 
						|
      const preKeyIdAfter = textsecure.storage.get('maxPreKeyId', 1);
 | 
						|
      assert.strictEqual(preKeyIdAfter, preKeyIdBefore + 1);
 | 
						|
 | 
						|
      const testKeyArray = new Uint8Array(testKey.pubKey);
 | 
						|
      assert.isDefined(newBundle);
 | 
						|
      assert.isDefined(newBundle.identityKey);
 | 
						|
      assert.isDefined(newBundle.deviceId);
 | 
						|
      assert.isDefined(newBundle.preKeyId);
 | 
						|
      assert.isDefined(newBundle.signedKeyId);
 | 
						|
      assert.isDefined(newBundle.preKey);
 | 
						|
      assert.isDefined(newBundle.signedKey);
 | 
						|
      assert.isDefined(newBundle.signature);
 | 
						|
      assert.deepEqual(testKeyArray, newBundle.signedKey);
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |