diff --git a/SignalMetadataKit/src/SMKSecretSessionCipher.swift b/SignalMetadataKit/src/SMKSecretSessionCipher.swift index 8cc92b3..419c5b2 100644 --- a/SignalMetadataKit/src/SMKSecretSessionCipher.swift +++ b/SignalMetadataKit/src/SMKSecretSessionCipher.swift @@ -207,13 +207,13 @@ fileprivate extension SMKMessageType { // CiphertextMessage message = new SessionCipher(signalProtocolStore, destinationAddress).encrypt(paddedPlaintext); let recipientAddress = try ProtocolAddress(from: recipient, deviceId: UInt32(bitPattern: deviceId)) - var protocolContextAsPtr = protocolContext + // Allow nil contexts for testing. return Data(try sealedSenderEncrypt(message: paddedPlaintext, for: recipientAddress, from: senderCertificate, sessionStore: sessionStore, identityStore: identityStore, - context: &protocolContextAsPtr)) + context: (protocolContext as! StoreContext?) ?? NullContext())) } // public Pair decrypt(CertificateValidator validator, byte[] ciphertext, long timestamp) @@ -230,10 +230,11 @@ fileprivate extension SMKMessageType { throw SMKError.assertionError(description: "\(logTag) invalid timestamp") } - var protocolContextAsPtr = protocolContext + // Allow nil contexts for testing. + let context = (protocolContext as! StoreContext?) ?? NullContext() let messageContent = try UnidentifiedSenderMessageContent(message: cipherTextData, identityStore: self.identityStore, - context: &protocolContextAsPtr) + context: context) let senderAddress = messageContent.senderCertificate.sender let localAddress = try SMKAddress(uuid: localUuid, e164: localE164) @@ -252,7 +253,7 @@ fileprivate extension SMKMessageType { validationTime: timestamp) let paddedMessagePlaintext = try throwswrapped_decrypt(messageContent: messageContent, - protocolContext: protocolContext) + context: context) // return new Pair<>(new SignalProtocolAddress(content.getSenderCertificate().getSender(), // content.getSenderCertificate().getSenderDeviceId()), @@ -279,7 +280,7 @@ fileprivate extension SMKMessageType { // throws InvalidVersionException, InvalidMessageException, InvalidKeyException, DuplicateMessageException, // InvalidKeyIdException, UntrustedIdentityException, LegacyMessageException, NoSessionException private func throwswrapped_decrypt(messageContent: UnidentifiedSenderMessageContent, - protocolContext: SPKProtocolWriteContext?) throws -> Data { + context: StoreContext) throws -> Data { // SignalProtocolAddress sender = new SignalProtocolAddress(message.getSenderCertificate().getSender(), // message.getSenderCertificate().getSenderDeviceId()); @@ -296,7 +297,6 @@ fileprivate extension SMKMessageType { // SessionCipher(signalProtocolStore, sender).decrypt(new PreKeySignalMessage(message.getContent())); default: throw // new InvalidMessageException("Unknown type: " + message.getType()); // } - var protocolContextAsPtr = protocolContext let plaintextData: [UInt8] switch messageContent.messageType { case .whisper: @@ -306,7 +306,7 @@ fileprivate extension SMKMessageType { from: ProtocolAddress(from: sender), sessionStore: sessionStore, identityStore: identityStore, - context: &protocolContextAsPtr) + context: context) case .preKey: let cipherMessage = try PreKeySignalMessage(bytes: messageContent.contents) plaintextData = try signalDecryptPreKey( @@ -316,7 +316,7 @@ fileprivate extension SMKMessageType { identityStore: identityStore, preKeyStore: preKeyStore, signedPreKeyStore: signedPreKeyStore, - context: &protocolContextAsPtr) + context: context) case let unknownType: throw SMKError.assertionError( description: "\(logTag) Not prepared to handle this message type: \(unknownType.rawValue)") diff --git a/SignalMetadataKitTests/src/SMKTestUtils.swift b/SignalMetadataKitTests/src/SMKTestUtils.swift index 352609b..560e951 100644 --- a/SignalMetadataKitTests/src/SMKTestUtils.swift +++ b/SignalMetadataKitTests/src/SMKTestUtils.swift @@ -64,7 +64,7 @@ class MockClient: NSObject { func generateMockPreKey() -> PreKeyRecord { let preKeyId = UInt32(Int32.random(in: 0...Int32.max)) let preKey = try! PreKeyRecord(id: preKeyId, privateKey: PrivateKey.generate()) - try! self.preKeyStore.storePreKey(preKey, id: preKeyId, context: nil) + try! self.preKeyStore.storePreKey(preKey, id: preKeyId, context: NullContext()) return preKey } @@ -72,13 +72,13 @@ class MockClient: NSObject { let signedPreKeyId = UInt32(Int32.random(in: 0...Int32.max)) let keyPair = IdentityKeyPair.generate() let generatedAt = Date() - let identityKeyPair = try! self.identityStore.identityKeyPair(context: nil) + let identityKeyPair = try! self.identityStore.identityKeyPair(context: NullContext()) let signature = identityKeyPair.privateKey.generateSignature(message: keyPair.publicKey.serialize()) let signedPreKey = try! SignedPreKeyRecord(id: signedPreKeyId, timestamp: UInt64(generatedAt.timeIntervalSince1970), privateKey: keyPair.privateKey, signature: signature) - try! self.signedPreKeyStore.storeSignedPreKey(signedPreKey, id: signedPreKeyId, context: nil) + try! self.signedPreKeyStore.storeSignedPreKey(signedPreKey, id: signedPreKeyId, context: NullContext()) return signedPreKey } @@ -114,7 +114,7 @@ class MockClient: NSObject { for: bobProtocolAddress, sessionStore: sessionStore, identityStore: identityStore, - context: nil) + context: NullContext()) // bobStore.storeSignedPreKey(2, bobSignedPreKey); // bobStore.storePreKey(1, new PreKeyRecord(1, bobPreKey));