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.
74 lines
2.2 KiB
TypeScript
74 lines
2.2 KiB
TypeScript
import _ from 'lodash';
|
|
import { UserUtils } from '.';
|
|
import { getItemById } from '../../../js/modules/data';
|
|
import { KeyPair } from '../../../libtextsecure/libsignal-protocol';
|
|
import { PubKey } from '../types';
|
|
import { toHex } from './String';
|
|
|
|
export type HexKeyPair = {
|
|
pubKey: string;
|
|
privKey: string;
|
|
};
|
|
|
|
/**
|
|
* Check if this pubkey is us, using the cache.
|
|
*/
|
|
export function isUsFromCache(pubKey: string | PubKey | undefined): boolean {
|
|
if (!pubKey) {
|
|
throw new Error('pubKey is not set');
|
|
}
|
|
const ourNumber = UserUtils.getOurPubKeyStrFromCache();
|
|
if (!ourNumber) {
|
|
throw new Error('ourNumber is not set');
|
|
}
|
|
const pubKeyStr = pubKey instanceof PubKey ? pubKey.key : pubKey;
|
|
return pubKeyStr === ourNumber;
|
|
}
|
|
|
|
/**
|
|
* Returns the public key of this current device as a STRING, or throws an error
|
|
*/
|
|
export function getOurPubKeyStrFromCache(): string {
|
|
const ourNumber = window.textsecure.storage.user.getNumber();
|
|
if (!ourNumber) {
|
|
throw new Error('ourNumber is not set');
|
|
}
|
|
return ourNumber;
|
|
}
|
|
|
|
/**
|
|
* Returns the public key of this current device as a PubKey, or throws an error
|
|
*/
|
|
export function getOurPubKeyFromCache(): PubKey {
|
|
const ourNumber = UserUtils.getOurPubKeyStrFromCache();
|
|
if (!ourNumber) {
|
|
throw new Error('ourNumber is not set');
|
|
}
|
|
return PubKey.cast(ourNumber);
|
|
}
|
|
|
|
/**
|
|
* This return the stored x25519 identity keypair for the current logged in user
|
|
*/
|
|
export async function getIdentityKeyPair(): Promise<KeyPair | undefined> {
|
|
const item = await getItemById('identityKey');
|
|
|
|
return item?.value;
|
|
}
|
|
|
|
export async function getUserED25519KeyPair(): Promise<HexKeyPair | undefined> {
|
|
// 'identityKey' keeps the ed25519KeyPair under a ed25519KeyPair field.
|
|
// it is only set if the user migrated to the ed25519 way of generating a key
|
|
const item = await getItemById('identityKey');
|
|
const ed25519KeyPair = item?.value?.ed25519KeyPair;
|
|
if (ed25519KeyPair?.publicKey && ed25519KeyPair?.privateKey) {
|
|
const pubKeyAsArray = _.map(ed25519KeyPair.publicKey, a => a);
|
|
const privKeyAsArray = _.map(ed25519KeyPair.privateKey, a => a);
|
|
return {
|
|
pubKey: toHex(new Uint8Array(pubKeyAsArray)),
|
|
privKey: toHex(new Uint8Array(privKeyAsArray)),
|
|
};
|
|
}
|
|
return undefined;
|
|
}
|