From ecfd1ac68c4ec97adea7c3919798bc1b8b355f3f Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Tue, 2 Oct 2018 11:47:37 -0400 Subject: [PATCH 1/2] Add UD decryption result type. --- SignalMetadataKit/src/ECPrivateKey.swift | 6 ++-- SignalMetadataKit/src/ECPublicKey.swift | 4 ++- .../src/SMKSecretSessionCipher.swift | 35 ++++++++++++++----- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/SignalMetadataKit/src/ECPrivateKey.swift b/SignalMetadataKit/src/ECPrivateKey.swift index fc587bf..2af140e 100644 --- a/SignalMetadataKit/src/ECPrivateKey.swift +++ b/SignalMetadataKit/src/ECPrivateKey.swift @@ -8,9 +8,11 @@ import Foundation // https://github.com/signalapp/libsignal-protocol-java/blob/87fae0f98332e98a32bbb82515428b4edeb4181f/java/src/main/java/org/whispersystems/libsignal/ecc/ECPrivateKey.java @objc public class ECPrivateKey: NSObject { - @objc public let keyData: Data + @objc + public let keyData: Data - @objc public init(keyData: Data) throws { + @objc + public init(keyData: Data) throws { guard keyData.count == ECCKeyLength else { throw SMKError.assertionError(description: "\(ECPrivateKey.logTag) key has invalid length") } diff --git a/SignalMetadataKit/src/ECPublicKey.swift b/SignalMetadataKit/src/ECPublicKey.swift index 162791e..ee57db1 100644 --- a/SignalMetadataKit/src/ECPublicKey.swift +++ b/SignalMetadataKit/src/ECPublicKey.swift @@ -8,9 +8,11 @@ import Foundation // https://github.com/signalapp/libsignal-protocol-java/blob/87fae0f98332e98a32bbb82515428b4edeb4181f/java/src/main/java/org/whispersystems/libsignal/ecc/DjbECPublicKey.java @objc public class ECPublicKey: NSObject { + @objc public static let keyTypeDJB: UInt8 = 0x05 - @objc public let keyData: Data + @objc + public let keyData: Data @objc public init(keyData: Data) throws { diff --git a/SignalMetadataKit/src/SMKSecretSessionCipher.swift b/SignalMetadataKit/src/SMKSecretSessionCipher.swift index 3e247cf..f401ad7 100644 --- a/SignalMetadataKit/src/SMKSecretSessionCipher.swift +++ b/SignalMetadataKit/src/SMKSecretSessionCipher.swift @@ -73,6 +73,24 @@ private class SMKStaticKeys: NSObject { // MARK: - +@objc +public class SMKDecryptResult: NSObject { + + @objc public let senderRecipientId: String + @objc public let senderDeviceId: Int + @objc public let paddedPayload: Data + + init(senderRecipientId: String, + senderDeviceId: Int, + paddedPayload: Data) { + self.senderRecipientId = senderRecipientId + self.senderDeviceId = senderDeviceId + self.paddedPayload = paddedPayload + } +} + +// MARK: - + @objc public class SMKSecretSessionCipher: NSObject { private let kUDPrefixString = "UnidentifiedDelivery" @@ -100,11 +118,12 @@ private class SMKStaticKeys: NSObject { // public byte[] encrypt(SignalProtocolAddress destinationAddress, SenderCertificate senderCertificate, byte[] // paddedPlaintext) - @objc public func encryptMessage(recipientId: String, - deviceId: Int32, - paddedPlaintext: Data, - senderCertificate: SMKSenderCertificate, - protocolContext: Any?) throws -> Data { + @objc + public func encryptMessage(recipientId: String, + deviceId: Int32, + paddedPlaintext: Data, + senderCertificate: SMKSenderCertificate, + protocolContext: Any?) throws -> Data { guard recipientId.count > 0 else { throw SMKError.assertionError(description: "\(SMKSecretSessionCipher.logTag) invalid recipientId") } @@ -214,9 +233,7 @@ private class SMKStaticKeys: NSObject { public func decryptMessage(certificateValidator: SMKCertificateValidator, cipherTextData: Data, timestamp: UInt64, - protocolContext: Any?) throws -> (senderRecipientId: String, - senderDeviceId: Int, - paddedPayload: Data) { + protocolContext: Any?) throws -> SMKDecryptResult { guard timestamp > 0 else { throw SMKError.assertionError(description: "\(logTag) invalid timestamp") @@ -299,7 +316,7 @@ private class SMKStaticKeys: NSObject { guard senderDeviceId >= 0 && senderDeviceId <= INT_MAX else { throw SMKError.assertionError(description: "\(logTag) Invalid senderDeviceId.") } - return (senderRecipientId: senderRecipientId, senderDeviceId: Int(senderDeviceId), paddedPayload: paddedMessagePlaintext) + return SMKDecryptResult(senderRecipientId: senderRecipientId, senderDeviceId: Int(senderDeviceId), paddedPayload: paddedMessagePlaintext) } // MARK: - Encrypt From c321ba1cf4d39ea22078d109e86ee0b7dffba3f0 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Tue, 2 Oct 2018 16:15:47 -0400 Subject: [PATCH 2/2] Add missing @objc. --- SignalMetadataKit/src/SMKSecretSessionCipher.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/SignalMetadataKit/src/SMKSecretSessionCipher.swift b/SignalMetadataKit/src/SMKSecretSessionCipher.swift index f401ad7..28a0f15 100644 --- a/SignalMetadataKit/src/SMKSecretSessionCipher.swift +++ b/SignalMetadataKit/src/SMKSecretSessionCipher.swift @@ -230,6 +230,7 @@ public class SMKDecryptResult: NSObject { // ProtocolNoSessionException, ProtocolLegacyMessageException, // ProtocolInvalidVersionException, ProtocolDuplicateMessageException, // ProtocolInvalidKeyIdException, ProtocolUntrustedIdentityException + @objc public func decryptMessage(certificateValidator: SMKCertificateValidator, cipherTextData: Data, timestamp: UInt64,