Compile protobufs with no-convert/null-defaults

Co-authored-by: Scott Nonnenberg <scott@signal.org>
This commit is contained in:
Fedor Indutny 2023-11-07 22:31:59 +01:00 committed by GitHub
parent e8fdd7116b
commit f52da976f9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 119 additions and 43 deletions

View file

@ -50,7 +50,7 @@ import {
import { normalizeAci } from '../util/normalizeAci';
import { isMoreRecentThan, isOlderThan } from '../util/timestamp';
import { ourProfileKeyService } from '../services/ourProfileKey';
import { assertDev, strictAssert } from '../util/assert';
import { strictAssert } from '../util/assert';
import { getRegionCodeForNumber } from '../util/libphonenumberUtil';
import { isNotNil } from '../util/isNotNil';
import { missingCaseError } from '../util/missingCaseError';
@ -258,12 +258,21 @@ export default class AccountManager extends EventTarget {
const bytes = Bytes.fromBase64(base64);
const proto = Proto.DeviceName.decode(bytes);
assertDev(
proto.ephemeralPublic && proto.syntheticIv && proto.ciphertext,
'Missing required fields in DeviceName'
strictAssert(
proto.ephemeralPublic,
'Missing ephemeralPublic field in DeviceName'
);
strictAssert(proto.syntheticIv, 'Missing syntheticIv field in DeviceName');
strictAssert(proto.ciphertext, 'Missing ciphertext field in DeviceName');
const name = decryptDeviceName(proto, identityKey.privKey);
const name = decryptDeviceName(
{
ephemeralPublic: proto.ephemeralPublic,
syntheticIv: proto.syntheticIv,
ciphertext: proto.ciphertext,
},
identityKey.privKey
);
return name;
}

View file

@ -398,7 +398,7 @@ export default class MessageReceiver
try {
const decoded = Proto.Envelope.decode(plaintext);
const serverTimestamp = decoded.serverTimestamp?.toNumber();
const serverTimestamp = decoded.serverTimestamp?.toNumber() ?? 0;
const ourAci = this.storage.user.getCheckedAci();
@ -412,14 +412,14 @@ export default class MessageReceiver
messageAgeSec: this.calculateMessageAge(headers, serverTimestamp),
// Proto.Envelope fields
type: decoded.type,
type: decoded.type ?? Proto.Envelope.Type.UNKNOWN,
sourceServiceId: decoded.sourceServiceId
? normalizeServiceId(
decoded.sourceServiceId,
'MessageReceiver.handleRequest.sourceServiceId'
)
: undefined,
sourceDevice: decoded.sourceDevice,
sourceDevice: decoded.sourceDevice ?? 1,
destinationServiceId: decoded.destinationServiceId
? normalizeServiceId(
decoded.destinationServiceId,
@ -433,12 +433,12 @@ export default class MessageReceiver
'MessageReceiver.handleRequest.updatedPni'
)
: undefined,
timestamp: decoded.timestamp?.toNumber(),
timestamp: decoded.timestamp?.toNumber() ?? 0,
content: dropNull(decoded.content),
serverGuid: decoded.serverGuid,
serverGuid: decoded.serverGuid ?? getGuid(),
serverTimestamp,
urgent: isBoolean(decoded.urgent) ? decoded.urgent : true,
story: decoded.story,
story: decoded.story ?? false,
reportingToken: decoded.reportingToken?.length
? decoded.reportingToken
: undefined,
@ -873,7 +873,7 @@ export default class MessageReceiver
messageAgeSec: item.messageAgeSec || 0,
// Proto.Envelope fields
type: decoded.type,
type: decoded.type ?? Proto.Envelope.Type.UNKNOWN,
source: item.source,
sourceServiceId: normalizeServiceId(
item.sourceServiceId || decoded.sourceServiceId,
@ -890,11 +890,11 @@ export default class MessageReceiver
'CachedEnvelope.updatedPni'
)
: undefined,
timestamp: decoded.timestamp?.toNumber(),
timestamp: decoded.timestamp?.toNumber() ?? 0,
content: dropNull(decoded.content),
serverGuid: decoded.serverGuid,
serverGuid: decoded.serverGuid ?? getGuid(),
serverTimestamp:
item.serverTimestamp || decoded.serverTimestamp?.toNumber(),
item.serverTimestamp || decoded.serverTimestamp?.toNumber() || 0,
urgent: isBoolean(item.urgent) ? item.urgent : true,
story: Boolean(item.story),
reportingToken: item.reportingToken

View file

@ -13,6 +13,7 @@ import {
import { calculateAgreement, createKeyPair, generateKeyPair } from '../Curve';
import { SignalService as Proto } from '../protobuf';
import { strictAssert } from '../util/assert';
import { dropNull } from '../util/dropNull';
type ProvisionDecryptResult = {
aciKeyPair: KeyPairType;
@ -34,9 +35,10 @@ class ProvisioningCipherInner {
provisionEnvelope: Proto.ProvisionEnvelope
): Promise<ProvisionDecryptResult> {
strictAssert(
provisionEnvelope.publicKey && provisionEnvelope.body,
'Missing required fields in ProvisionEnvelope'
provisionEnvelope.publicKey,
'Missing publicKey in ProvisionEnvelope'
);
strictAssert(provisionEnvelope.body, 'Missing body in ProvisionEnvelope');
const masterEphemeral = provisionEnvelope.publicKey;
const message = provisionEnvelope.body;
if (new Uint8Array(message)[0] !== 1) {
@ -78,12 +80,12 @@ class ProvisioningCipherInner {
const ret: ProvisionDecryptResult = {
aciKeyPair,
pniKeyPair,
number: provisionMessage.number,
number: dropNull(provisionMessage.number),
aci,
untaggedPni: pni,
provisioningCode: provisionMessage.provisioningCode,
userAgent: provisionMessage.userAgent,
readReceipts: provisionMessage.readReceipts,
provisioningCode: dropNull(provisionMessage.provisioningCode),
userAgent: dropNull(provisionMessage.userAgent),
readReceipts: provisionMessage.readReceipts ?? false,
};
if (Bytes.isNotEmpty(provisionMessage.profileKey)) {
ret.profileKey = provisionMessage.profileKey;

View file

@ -3390,7 +3390,7 @@ export function initialize({
return getGroupLog(
{
...options,
startVersion: joinedAtVersion,
startVersion: joinedAtVersion ?? 0,
},
credentials
);

View file

@ -203,6 +203,9 @@ function decodeSingleResponse(
resultMap: Map<string, CDSResponseEntryType>,
response: Proto.CDSClientResponse
): void {
if (!response.e164PniAciTriples) {
return;
}
for (
let i = 0;
i < response.e164PniAciTriples.length;