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.
		
		
		
		
		
			
		
			
				
	
	
		
			186 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			186 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
/* global libsignal */
 | 
						|
 | 
						|
describe('AccountManager', () => {
 | 
						|
  let accountManager;
 | 
						|
 | 
						|
  beforeEach(() => {
 | 
						|
    accountManager = new window.textsecure.AccountManager();
 | 
						|
  });
 | 
						|
 | 
						|
  describe('#cleanSignedPreKeys', () => {
 | 
						|
    let originalProtocolStorage;
 | 
						|
    let signedPreKeys;
 | 
						|
    const DAY = 1000 * 60 * 60 * 24;
 | 
						|
 | 
						|
    beforeEach(async () => {
 | 
						|
      const identityKey = await libsignal.KeyHelper.generateIdentityKeyPair();
 | 
						|
 | 
						|
      originalProtocolStorage = window.textsecure.storage.protocol;
 | 
						|
      window.textsecure.storage.protocol = {
 | 
						|
        getIdentityKeyPair() {
 | 
						|
          return identityKey;
 | 
						|
        },
 | 
						|
        loadSignedPreKeys() {
 | 
						|
          return Promise.resolve(signedPreKeys);
 | 
						|
        },
 | 
						|
      };
 | 
						|
    });
 | 
						|
    afterEach(() => {
 | 
						|
      window.textsecure.storage.protocol = originalProtocolStorage;
 | 
						|
    });
 | 
						|
 | 
						|
    describe('encrypted device name', () => {
 | 
						|
      it('roundtrips', async () => {
 | 
						|
        const deviceName = 'v2.5.0 on Ubunto 20.04';
 | 
						|
        const encrypted = await accountManager.encryptDeviceName(deviceName);
 | 
						|
        assert.strictEqual(typeof encrypted, 'string');
 | 
						|
        const decrypted = await accountManager.decryptDeviceName(encrypted);
 | 
						|
 | 
						|
        assert.strictEqual(decrypted, deviceName);
 | 
						|
      });
 | 
						|
 | 
						|
      it('handles null deviceName', async () => {
 | 
						|
        const encrypted = await accountManager.encryptDeviceName(null);
 | 
						|
        assert.strictEqual(encrypted, null);
 | 
						|
      });
 | 
						|
    });
 | 
						|
 | 
						|
    it('keeps three confirmed keys even if over a week old', () => {
 | 
						|
      const now = Date.now();
 | 
						|
      signedPreKeys = [
 | 
						|
        {
 | 
						|
          keyId: 1,
 | 
						|
          created_at: now - DAY * 21,
 | 
						|
          confirmed: true,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 2,
 | 
						|
          created_at: now - DAY * 14,
 | 
						|
          confirmed: true,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 3,
 | 
						|
          created_at: now - DAY * 18,
 | 
						|
          confirmed: true,
 | 
						|
        },
 | 
						|
      ];
 | 
						|
 | 
						|
      // should be no calls to store.removeSignedPreKey, would cause crash
 | 
						|
      return accountManager.cleanSignedPreKeys();
 | 
						|
    });
 | 
						|
 | 
						|
    it('eliminates confirmed keys over a week old, if more than three', async () => {
 | 
						|
      const now = Date.now();
 | 
						|
      signedPreKeys = [
 | 
						|
        {
 | 
						|
          keyId: 1,
 | 
						|
          created_at: now - DAY * 21,
 | 
						|
          confirmed: true,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 2,
 | 
						|
          created_at: now - DAY * 14,
 | 
						|
          confirmed: true,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 3,
 | 
						|
          created_at: now - DAY * 4,
 | 
						|
          confirmed: true,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 4,
 | 
						|
          created_at: now - DAY * 18,
 | 
						|
          confirmed: true,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 5,
 | 
						|
          created_at: now - DAY,
 | 
						|
          confirmed: true,
 | 
						|
        },
 | 
						|
      ];
 | 
						|
 | 
						|
      let count = 0;
 | 
						|
      window.textsecure.storage.protocol.removeSignedPreKey = keyId => {
 | 
						|
        if (keyId !== 1 && keyId !== 4) {
 | 
						|
          throw new Error(`Wrong keys were eliminated! ${keyId}`);
 | 
						|
        }
 | 
						|
 | 
						|
        count += 1;
 | 
						|
      };
 | 
						|
 | 
						|
      await accountManager.cleanSignedPreKeys();
 | 
						|
      assert.strictEqual(count, 2);
 | 
						|
    });
 | 
						|
 | 
						|
    it('keeps at least three unconfirmed keys if no confirmed', async () => {
 | 
						|
      const now = Date.now();
 | 
						|
      signedPreKeys = [
 | 
						|
        {
 | 
						|
          keyId: 1,
 | 
						|
          created_at: now - DAY * 14,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 2,
 | 
						|
          created_at: now - DAY * 21,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 3,
 | 
						|
          created_at: now - DAY * 18,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 4,
 | 
						|
          created_at: now - DAY,
 | 
						|
        },
 | 
						|
      ];
 | 
						|
 | 
						|
      let count = 0;
 | 
						|
      window.textsecure.storage.protocol.removeSignedPreKey = keyId => {
 | 
						|
        if (keyId !== 2) {
 | 
						|
          throw new Error(`Wrong keys were eliminated! ${keyId}`);
 | 
						|
        }
 | 
						|
 | 
						|
        count += 1;
 | 
						|
      };
 | 
						|
 | 
						|
      await accountManager.cleanSignedPreKeys();
 | 
						|
      assert.strictEqual(count, 1);
 | 
						|
    });
 | 
						|
 | 
						|
    it('if some confirmed keys, keeps unconfirmed to addd up to three total', async () => {
 | 
						|
      const now = Date.now();
 | 
						|
      signedPreKeys = [
 | 
						|
        {
 | 
						|
          keyId: 1,
 | 
						|
          created_at: now - DAY * 21,
 | 
						|
          confirmed: true,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 2,
 | 
						|
          created_at: now - DAY * 14,
 | 
						|
          confirmed: true,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 3,
 | 
						|
          created_at: now - DAY * 12,
 | 
						|
        },
 | 
						|
        {
 | 
						|
          keyId: 4,
 | 
						|
          created_at: now - DAY * 8,
 | 
						|
        },
 | 
						|
      ];
 | 
						|
 | 
						|
      let count = 0;
 | 
						|
      window.textsecure.storage.protocol.removeSignedPreKey = keyId => {
 | 
						|
        if (keyId !== 3) {
 | 
						|
          throw new Error(`Wrong keys were eliminated! ${keyId}`);
 | 
						|
        }
 | 
						|
 | 
						|
        count += 1;
 | 
						|
      };
 | 
						|
 | 
						|
      await accountManager.cleanSignedPreKeys();
 | 
						|
      assert.strictEqual(count, 1);
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |