mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			39 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Swift
		
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Swift
		
	
| 
								 
											5 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								public struct OpenGroupMessageV2 {
							 | 
						||
| 
								 | 
							
								    public let serverID: Int64?
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								    public let sender: String?
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								    public let sentTimestamp: UInt64
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								    /// 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? {
							 | 
						||
| 
								 | 
							
								        let userKeyPair = SNMessagingKitConfiguration.shared.storage.getUserKeyPair()!
							 | 
						||
| 
								 | 
							
								        let data = Data(base64Encoded: base64EncodedData)!
							 | 
						||
| 
								 | 
							
								        guard let signature = try? Ed25519.sign(data, with: userKeyPair) else {
							 | 
						||
| 
								 | 
							
								            SNLog("Failed to sign open group message.")
							 | 
						||
| 
								 | 
							
								            return nil
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								        return OpenGroupMessageV2(serverID: serverID, sender: sender, sentTimestamp: sentTimestamp,
							 | 
						||
| 
								 | 
							
								            base64EncodedData: base64EncodedData, base64EncodedSignature: signature.base64EncodedString())
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public func toJSON() -> JSON? {
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								        var result: JSON = [ "data" : base64EncodedData, "timestamp" : sentTimestamp ]
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								        if let serverID = serverID { result["server_id"] = serverID }
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								        if let sender = sender { result["public_key"] = sender }
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								        if let base64EncodedSignature = base64EncodedSignature { result["signature"] = base64EncodedSignature }
							 | 
						||
| 
								 | 
							
								        return result
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public static func fromJSON(_ json: JSON) -> OpenGroupMessageV2? {
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								        guard let base64EncodedData = json["data"] as? String, let sentTimestamp = json["timestamp"] as? UInt64 else { return nil }
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								        let serverID = json["server_id"] as? Int64
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								        let sender = json["public_key"] as? String
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								        let base64EncodedSignature = json["signature"] as? String
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								        return OpenGroupMessageV2(serverID: serverID, sender: sender, sentTimestamp: sentTimestamp, base64EncodedData: base64EncodedData, base64EncodedSignature: base64EncodedSignature)
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |