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.
51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import { getItemById } from '../../js/modules/data';
|
|
import { KeyPair } from '../../libtextsecure/libsignal-protocol';
|
|
import { PrimaryPubKey } from '../session/types';
|
|
import { MultiDeviceProtocol } from '../session/protocols';
|
|
import { StringUtils } from '../session/utils';
|
|
import _ from 'lodash';
|
|
|
|
export type HexKeyPair = {
|
|
pubKey: string;
|
|
privKey: string;
|
|
};
|
|
|
|
export async function getCurrentDevicePubKey(): Promise<string | undefined> {
|
|
const item = await getItemById('number_id');
|
|
if (!item || !item.value) {
|
|
return undefined;
|
|
}
|
|
|
|
return item.value.split('.')[0];
|
|
}
|
|
|
|
export async function getPrimary(): Promise<PrimaryPubKey> {
|
|
const ourNumber = (await getCurrentDevicePubKey()) as string;
|
|
return MultiDeviceProtocol.getPrimaryDevice(ourNumber);
|
|
}
|
|
|
|
/**
|
|
* This return the stored x25519 identity keypair for that 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: StringUtils.toHex(new Uint8Array(pubKeyAsArray)),
|
|
privKey: StringUtils.toHex(new Uint8Array(privKeyAsArray)),
|
|
};
|
|
}
|
|
return undefined;
|
|
}
|