47 lines
1.7 KiB
Swift
47 lines
1.7 KiB
Swift
//
|
|
// Copyright 2022 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import Foundation
|
|
import LibSignalClient
|
|
import Testing
|
|
|
|
@testable import SignalServiceKit
|
|
|
|
struct KyberPreKeyStoreImplTest {
|
|
@Test
|
|
func testGenerate() throws {
|
|
let now = Date(timeIntervalSince1970: 1234567890)
|
|
let keyId = 42 as UInt32
|
|
let identityKey = PrivateKey.generate()
|
|
let kyberRecord = KyberPreKeyStoreImpl.generatePreKeyRecord(keyId: keyId, now: now, signedBy: identityKey)
|
|
|
|
#expect(kyberRecord.id == keyId)
|
|
#expect(kyberRecord.timestamp == now.ows_millisecondsSince1970)
|
|
#expect(try identityKey.publicKey.verifySignature(
|
|
message: kyberRecord.publicKey().serialize(),
|
|
signature: kyberRecord.signature,
|
|
))
|
|
}
|
|
|
|
@Test
|
|
func testStoreChangeNumber() {
|
|
let db = InMemoryDB()
|
|
let preKeyStore = PreKeyStore()
|
|
let kyberStore = KyberPreKeyStoreImpl(for: .aci, dateProvider: { fatalError() }, preKeyStore: preKeyStore)
|
|
|
|
db.write { tx in
|
|
let preKeyId = kyberStore.allocatePreKeyIds(count: 1, tx: tx).first
|
|
if preKeyId == 42 { _ = kyberStore.allocatePreKeyIds(count: 1, tx: tx) }
|
|
|
|
let kyberRecord = KyberPreKeyStoreImpl.generatePreKeyRecord(keyId: 42, now: Date(), signedBy: .generate())
|
|
kyberStore.storePreKeyRecords([kyberRecord], isLastResort: true, tx: tx)
|
|
#expect(kyberStore.allocatePreKeyIds(count: 1, tx: tx).lowerBound != 43)
|
|
|
|
kyberStore.storeLastResortPreKeyFromChangeNumber(kyberRecord, tx: tx)
|
|
#expect(kyberStore.allocatePreKeyIds(count: 1, tx: tx).lowerBound == 43)
|
|
}
|
|
}
|
|
}
|