feat: add working encrypt/decrypt for 03 group with libsession

pull/2873/head
Audric Ackermann 2 years ago
parent b53264593b
commit e220aeea91

@ -679,8 +679,8 @@ async function handleGroupUpdate(latestEnvelopeTimestamp: number) {
const allGoupsIdsInWrapper = allGoupsInWrapper.map(m => m.pubkeyHex);
const allGoupsIdsInDb = allGoupsInDb.map(m => m.id as string);
console.warn('allGoupsIdsInWrapper', stringify(allGoupsIdsInWrapper));
console.warn('allGoupsIdsInDb', stringify(allGoupsIdsInDb));
window.log.debug('allGoupsIdsInWrapper', stringify(allGoupsIdsInWrapper));
window.log.debug('allGoupsIdsInDb', stringify(allGoupsIdsInDb));
const userEdKeypair = await UserUtils.getUserED25519KeyPairBytes();
if (!userEdKeypair) {

@ -60,16 +60,26 @@ export async function handleSwarmContentMessage(envelope: EnvelopePlus, messageH
async function decryptForGroupV2(envelope: EnvelopePlus) {
window?.log?.info('received closed group message v2');
try {
const groupPk = envelope.source;
if (!PubKey.isClosedGroupV2(groupPk)) {
throw new PreConditionFailed('decryptForGroupV2: not a 03 prefixed group');
}
return MetaGroupWrapperActions.decryptMessage(groupPk, envelope.content);
const decrypted = await MetaGroupWrapperActions.decryptMessage(groupPk, envelope.content);
// the receiving pipeline relies on the envelope.senderIdentity field to know who is the author of a message
// eslint-disable-next-line no-param-reassign
envelope.senderIdentity = decrypted.pubkeyHex;
return decrypted.plaintext;
} catch (e) {
window.log.warn('failed to decrypt message with error: ', e.message);
return null;
}
}
async function decryptForClosedGroup(envelope: EnvelopePlus) {
// case .closedGroupCiphertext: for ios
window?.log?.info('received closed group message');
try {
const hexEncodedGroupPublicKey = envelope.source;

@ -19,7 +19,7 @@ type EncryptResult = {
async function encryptWithLibSession(destination: GroupPubkeyType, plainText: Uint8Array) {
try {
return MetaGroupWrapperActions.encryptMessage(destination, plainText, true);
return MetaGroupWrapperActions.encryptMessage(destination, plainText);
} catch (e) {
window.log.warn('encrypt message for group failed with', e.message);
throw new SigningFailed(e.message);

@ -26,58 +26,6 @@ export enum KeyPrefixType {
groupV3 = '03',
}
// export type GroupV2PubKey = {
// key: GroupPubkeyType; // 03 prefix for groups v2
// isGroupV2: true;
// isLegacyGroup: false;
// isPrivate: false;
// isUS: false;
// isBlinded: false;
// };
// export type PrivatePubkey = {
// key: PubkeyType; // 05 prefix for private conversations
// isGroupV2: false;
// isLegacyGroup: false;
// isPrivate: true;
// isUS: false;
// isBlinded: false;
// };
// export type UsPubkey = {
// key: PubkeyType; // 05 prefix for note to self
// isGroupV2: false;
// isLegacyGroup: false;
// isPrivate: false;
// isUS: true;
// isBlinded: false;
// };
// export type PrivateBlindedPubkey = {
// key: BlindedPubkeyType; // 15 prefix for blinded pubkeys
// isGroupV2: false;
// isLegacyGroup: false;
// isPrivate: true;
// isUS: false;
// isBlinded: true;
// };
// export type LegacyGroupPubkey = {
// key: PubkeyType; // 05 prefix for legacy closed group
// isGroupV2: false;
// isLegacyGroup: true;
// isPrivate: false;
// isUS: false;
// isBlinded: false;
// };
// export type PubKeyRecord =
// | UsPubkey
// | PrivatePubkey
// | GroupV2PubKey
// | LegacyGroupPubkey
// | PrivateBlindedPubkey;
// TODO make that Pubkey class more useful, add fields for what types of pubkey it is (group, legacy group, private)
export class PubKey {

@ -510,13 +510,10 @@ export const MetaGroupWrapperActions: MetaGroupWrapperActionsCalls = {
data,
timestampMs,
]) as Promise<ReturnType<MetaGroupWrapperActionsCalls['loadKeyMessage']>>,
encryptMessage: async (groupPk: GroupPubkeyType, plaintext: Uint8Array, compress: boolean) =>
callLibSessionWorker([
`MetaGroupConfig-${groupPk}`,
'encryptMessage',
plaintext,
compress,
]) as Promise<ReturnType<MetaGroupWrapperActionsCalls['encryptMessage']>>,
encryptMessage: async (groupPk: GroupPubkeyType, plaintext: Uint8Array) =>
callLibSessionWorker([`MetaGroupConfig-${groupPk}`, 'encryptMessage', plaintext]) as Promise<
ReturnType<MetaGroupWrapperActionsCalls['encryptMessage']>
>,
decryptMessage: async (groupPk: GroupPubkeyType, ciphertext: Uint8Array) =>
callLibSessionWorker([`MetaGroupConfig-${groupPk}`, 'decryptMessage', ciphertext]) as Promise<
ReturnType<MetaGroupWrapperActionsCalls['decryptMessage']>

Loading…
Cancel
Save