signal-desktop/ts/util/checkOurPniIdentityKey.ts

35 lines
1.2 KiB
TypeScript
Raw Normal View History

2023-08-17 02:29:39 +02:00
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { createLogger } from '../logging/log.js';
import { constantTimeEqual } from '../Crypto.js';
import { strictAssert } from './assert.js';
2023-08-17 02:29:39 +02:00
2025-06-16 11:59:31 -07:00
const log = createLogger('checkOurPniIdentityKey');
2023-08-17 02:29:39 +02:00
export async function checkOurPniIdentityKey(): Promise<void> {
const { server } = window.textsecure;
strictAssert(server, 'WebAPI not ready');
const ourPni = window.storage.user.getCheckedPni();
const { pni: remotePni } = await server.whoami();
if (remotePni !== ourPni) {
2025-06-16 11:59:31 -07:00
log.warn(`remote pni mismatch, ${remotePni} != ${ourPni}`);
window.Whisper.events.emit('unlinkAndDisconnect');
return;
}
2023-08-17 02:29:39 +02:00
const localKeyPair = await window.storage.protocol.getIdentityKeyPair(ourPni);
if (!localKeyPair) {
2025-06-16 11:59:31 -07:00
log.warn(`no local key pair for ${ourPni}, unlinking`);
window.Whisper.events.emit('unlinkAndDisconnect');
2023-08-17 02:29:39 +02:00
return;
}
const { identityKey: remoteKey } = await server.getKeysForServiceId(ourPni);
if (!constantTimeEqual(localKeyPair.publicKey.serialize(), remoteKey)) {
2025-06-16 11:59:31 -07:00
log.warn(`local/remote key mismatch for ${ourPni}, unlinking`);
window.Whisper.events.emit('unlinkAndDisconnect');
2023-08-17 02:29:39 +02:00
}
}