mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
cf66edb723
Added migrations for contacts and started working through thread migration (have contact and closed group threads migrating) Deprecated usage of ECKeyPair in the migrations (want to be able to remove Curve25519Kit in the future)
48 lines
2.3 KiB
Swift
48 lines
2.3 KiB
Swift
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
import Foundation
|
|
import Curve25519Kit
|
|
import SessionUtilitiesKit
|
|
|
|
public struct OpenGroupMessageV2 {
|
|
public let serverID: Int64?
|
|
public let sender: String?
|
|
public let sentTimestamp: UInt64
|
|
/// The serialized protobuf in base64 encoding.
|
|
public let base64EncodedData: String
|
|
/// When sending a message, the sender signs the serialized protobuf with their private key so that
|
|
/// a receiving user can verify that the message wasn't tampered with.
|
|
public let base64EncodedSignature: String?
|
|
|
|
public func sign() -> OpenGroupMessageV2? {
|
|
guard
|
|
let userKeyPair = Identity.fetchUserKeyPair(),
|
|
let legacyKeyPair: ECKeyPair = try? ECKeyPair(publicKeyData: Data(userKeyPair.publicKey), privateKeyData: Data(userKeyPair.secretKey)),
|
|
let data: Data = Data(base64Encoded: base64EncodedData)
|
|
else { return nil }
|
|
|
|
guard let signature = try? Ed25519.sign(data, with: legacyKeyPair) else {
|
|
SNLog("Failed to sign open group message.")
|
|
return nil
|
|
}
|
|
return OpenGroupMessageV2(serverID: serverID, sender: sender, sentTimestamp: sentTimestamp,
|
|
base64EncodedData: base64EncodedData, base64EncodedSignature: signature.base64EncodedString())
|
|
}
|
|
|
|
public func toJSON() -> JSON? {
|
|
var result: JSON = [ "data" : base64EncodedData, "timestamp" : sentTimestamp ]
|
|
if let serverID = serverID { result["server_id"] = serverID }
|
|
if let sender = sender { result["public_key"] = sender }
|
|
if let base64EncodedSignature = base64EncodedSignature { result["signature"] = base64EncodedSignature }
|
|
return result
|
|
}
|
|
|
|
public static func fromJSON(_ json: JSON) -> OpenGroupMessageV2? {
|
|
guard let base64EncodedData = json["data"] as? String, let sentTimestamp = json["timestamp"] as? UInt64 else { return nil }
|
|
let serverID = json["server_id"] as? Int64
|
|
let sender = json["public_key"] as? String
|
|
let base64EncodedSignature = json["signature"] as? String
|
|
return OpenGroupMessageV2(serverID: serverID, sender: sender, sentTimestamp: sentTimestamp, base64EncodedData: base64EncodedData, base64EncodedSignature: base64EncodedSignature)
|
|
}
|
|
}
|