mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-04-27 03:43:27 +01:00
Add transaction support to kyber triples
This commit is contained in:
@@ -397,6 +397,8 @@ export const DataReader: ServerReadableInterface = {
|
||||
|
||||
getAllSessions,
|
||||
|
||||
getAllKyberTriples,
|
||||
|
||||
getConversationCount,
|
||||
getConversationById,
|
||||
|
||||
@@ -532,7 +534,6 @@ export const DataWriter: ServerWritableInterface = {
|
||||
bulkAddKyberPreKeys,
|
||||
removeKyberPreKeyById,
|
||||
removeKyberPreKeysByServiceId,
|
||||
markKyberTripleSeenOrFail,
|
||||
removeAllKyberPreKeys,
|
||||
|
||||
createOrUpdatePreKey,
|
||||
@@ -1080,7 +1081,7 @@ function removeKyberPreKeysByServiceId(
|
||||
function markKyberTripleSeenOrFail(
|
||||
db: WritableDB,
|
||||
{ id, signedPreKeyId, baseKey }: KyberPreKeyTripleType
|
||||
): 'seen' | 'fail' {
|
||||
): void {
|
||||
// Notes that `kyberPreKey_triples` has
|
||||
// - Unique constraint on id, signedPreKeyId, baseKey so that we can't insert
|
||||
// two identical rows
|
||||
@@ -1095,10 +1096,9 @@ function markKyberTripleSeenOrFail(
|
||||
|
||||
try {
|
||||
db.prepare(query).run(parameters);
|
||||
return 'seen';
|
||||
} catch (error) {
|
||||
if (error.code === 'SQLITE_CONSTRAINT_UNIQUE') {
|
||||
return 'fail';
|
||||
throw new Error(`Duplicate kyber triple ${id}:${signedPreKeyId}`);
|
||||
}
|
||||
|
||||
// Unexpected error
|
||||
@@ -1699,12 +1699,14 @@ function commitDecryptResult(
|
||||
senderKeys,
|
||||
sessions,
|
||||
unprocessed,
|
||||
kyberTriples,
|
||||
}: {
|
||||
kyberPreKeysToRemove: Array<PreKeyIdType>;
|
||||
preKeysToRemove: Array<PreKeyIdType>;
|
||||
senderKeys: Array<SenderKeyType>;
|
||||
sessions: Array<SessionType>;
|
||||
unprocessed: Array<UnprocessedType>;
|
||||
kyberTriples: Array<KyberPreKeyTripleType>;
|
||||
}
|
||||
): void {
|
||||
db.transaction(() => {
|
||||
@@ -1745,6 +1747,10 @@ function commitDecryptResult(
|
||||
for (const item of unprocessed) {
|
||||
saveUnprocessed(db, item);
|
||||
}
|
||||
|
||||
for (const item of kyberTriples) {
|
||||
markKyberTripleSeenOrFail(db, item);
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
@@ -1783,6 +1789,9 @@ function removeAllSessions(db: WritableDB): number {
|
||||
function getAllSessions(db: ReadableDB): Array<SessionType> {
|
||||
return db.prepare('SELECT * FROM sessions').all();
|
||||
}
|
||||
function getAllKyberTriples(db: ReadableDB): Array<KyberPreKeyTripleType> {
|
||||
return db.prepare('SELECT * FROM kyberPreKey_triples').all();
|
||||
}
|
||||
// Conversations
|
||||
|
||||
function getConversationCount(db: ReadableDB): number {
|
||||
|
||||
Reference in New Issue
Block a user