Use untagged pnis in storage service

This commit is contained in:
Fedor Indutny 2023-09-28 01:14:55 +02:00 committed by GitHub
parent 283ef57779
commit eb7942dd1e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 530 additions and 62 deletions

View file

@ -401,7 +401,7 @@ export default class AccountManager extends EventTarget {
!provisionMessage.pniKeyPair ||
!provisionMessage.profileKey ||
!provisionMessage.aci ||
!isUntaggedPniString(provisionMessage.pni)
!isUntaggedPniString(provisionMessage.untaggedPni)
) {
throw new Error(
'AccountManager.registerSecondDevice: Provision message was missing key data'
@ -410,7 +410,7 @@ export default class AccountManager extends EventTarget {
const ourAci = normalizeAci(provisionMessage.aci, 'provisionMessage.aci');
const ourPni = normalizePni(
toTaggedPni(provisionMessage.pni),
toTaggedPni(provisionMessage.untaggedPni),
'provisionMessage.pni'
);

View file

@ -59,8 +59,10 @@ import {
normalizeServiceId,
normalizePni,
isPniString,
isUntaggedPniString,
isServiceIdString,
fromPniObject,
toTaggedPni,
} from '../types/ServiceId';
import { normalizeAci } from '../util/normalizeAci';
import { isAciString } from '../util/isAciString';
@ -421,12 +423,13 @@ export default class MessageReceiver
'MessageReceiver.handleRequest.destinationServiceId'
)
: ourAci,
updatedPni: decoded.updatedPni
? normalizePni(
decoded.updatedPni,
'MessageReceiver.handleRequest.updatedPni'
)
: undefined,
updatedPni:
decoded.updatedPni && isUntaggedPniString(decoded.updatedPni)
? normalizePni(
toTaggedPni(decoded.updatedPni),
'MessageReceiver.handleRequest.updatedPni'
)
: undefined,
timestamp: decoded.timestamp?.toNumber(),
content: dropNull(decoded.content),
serverGuid: decoded.serverGuid,
@ -878,8 +881,11 @@ export default class MessageReceiver
decoded.destinationServiceId || item.destinationServiceId || ourAci,
'CachedEnvelope.destinationServiceId'
),
updatedPni: decoded.updatedPni
? normalizePni(decoded.updatedPni, 'CachedEnvelope.updatedPni')
updatedPni: isUntaggedPniString(decoded.updatedPni)
? normalizePni(
toTaggedPni(decoded.updatedPni),
'CachedEnvelope.updatedPni'
)
: undefined,
timestamp: decoded.timestamp?.toNumber(),
content: dropNull(decoded.content),

View file

@ -12,17 +12,14 @@ import {
} from '../Crypto';
import { calculateAgreement, createKeyPair, generateKeyPair } from '../Curve';
import { SignalService as Proto } from '../protobuf';
import type { PniString, AciString } from '../types/ServiceId';
import { normalizePni } from '../types/ServiceId';
import { normalizeAci } from '../util/normalizeAci';
import { strictAssert } from '../util/assert';
type ProvisionDecryptResult = {
aciKeyPair: KeyPairType;
pniKeyPair?: KeyPairType;
number?: string;
aci?: AciString;
pni?: PniString;
aci?: string;
untaggedPni?: string;
provisioningCode?: string;
userAgent?: string;
readReceipts?: boolean;
@ -75,13 +72,14 @@ class ProvisioningCipherInner {
const { aci, pni } = provisionMessage;
strictAssert(aci, 'Missing aci in provisioning message');
strictAssert(pni, 'Missing pni in provisioning message');
const ret: ProvisionDecryptResult = {
aciKeyPair,
pniKeyPair,
number: provisionMessage.number,
aci: normalizeAci(aci, 'ProvisionMessage.aci'),
pni: pni ? normalizePni(pni, 'ProvisionMessage.pni') : undefined,
aci,
untaggedPni: pni,
provisioningCode: provisionMessage.provisioningCode,
userAgent: provisionMessage.userAgent,
readReceipts: provisionMessage.readReceipts,