pull/56/head
Niels Andriesse 6 years ago
parent d74202fa97
commit deb8ad002e

@ -90,7 +90,7 @@ public final class LokiGroupChatAPI : LokiDotNetAPI {
} else {
quote = nil
}
let signature = LokiGroupMessage.Signature(hexEncodedData: hexEncodedSignatureData, version: UInt64(signatureVersion))
let signature = LokiGroupMessage.Signature(data: Data(hex: hexEncodedSignatureData), version: UInt64(signatureVersion))
let result = LokiGroupMessage(serverID: serverID, hexEncodedPublicKey: hexEncodedPublicKey, displayName: displayName, body: body, type: publicChatMessageType, timestamp: timestamp, quote: quote, signature: signature)
guard result.hasValidSignature() else {
print("[Loki] Ignoring group chat message with invalid signature.")

@ -27,7 +27,7 @@ public final class LokiGroupMessage : NSObject {
}
public struct Signature {
public let hexEncodedData: String
public let data: Data
public let version: UInt64
}
@ -44,7 +44,7 @@ public final class LokiGroupMessage : NSObject {
super.init()
}
@objc public convenience init(hexEncodedPublicKey: String, displayName: String, body: String, type: String, timestamp: UInt64, quotedMessageTimestamp: UInt64, quoteeHexEncodedPublicKey: String?, quotedMessageBody: String?, quotedMessageServerID: UInt64, hexEncodedSignatureData: String?, signatureVersion: UInt64) {
@objc public convenience init(hexEncodedPublicKey: String, displayName: String, body: String, type: String, timestamp: UInt64, quotedMessageTimestamp: UInt64, quoteeHexEncodedPublicKey: String?, quotedMessageBody: String?, quotedMessageServerID: UInt64, signatureData: Data?, signatureVersion: UInt64) {
let quote: Quote?
if quotedMessageTimestamp != 0, let quoteeHexEncodedPublicKey = quoteeHexEncodedPublicKey, let quotedMessageBody = quotedMessageBody {
let quotedMessageServerID = (quotedMessageServerID != 0) ? quotedMessageServerID : nil
@ -53,8 +53,8 @@ public final class LokiGroupMessage : NSObject {
quote = nil
}
let signature: Signature?
if let hexEncodedData = hexEncodedSignatureData, signatureVersion != 0 {
signature = Signature(hexEncodedData: hexEncodedData, version: signatureVersion)
if let signatureData = signatureData, signatureVersion != 0 {
signature = Signature(data: signatureData, version: signatureVersion)
} else {
signature = nil
}
@ -72,15 +72,14 @@ public final class LokiGroupMessage : NSObject {
print("[Loki] Failed to sign group chat message.")
return nil
}
let hexEncodedSignatureData = signatureData.toHexString()
let signature = Signature(hexEncodedData: hexEncodedSignatureData, version: signatureVersion)
let signature = Signature(data: signatureData, version: signatureVersion)
return LokiGroupMessage(serverID: serverID, hexEncodedPublicKey: hexEncodedPublicKey, displayName: displayName, body: body, type: type, timestamp: timestamp, quote: quote, signature: signature)
}
internal func hasValidSignature() -> Bool {
guard let signature = signature else { return false }
guard let data = getValidationData() else { return false }
return (try? Ed25519.verifySignature(Data(hex: signature.hexEncodedData), publicKey: Data(hex: hexEncodedPublicKey), data: data)) ?? false
return (try? Ed25519.verifySignature(signature.data, publicKey: Data(hex: hexEncodedPublicKey), data: data)) ?? false
}
// MARK: JSON
@ -90,7 +89,7 @@ public final class LokiGroupMessage : NSObject {
value["quote"] = [ "id" : quote.quotedMessageTimestamp, "author" : quote.quoteeHexEncodedPublicKey, "text" : quote.quotedMessageBody ]
}
if let signature = signature {
value["sig"] = signature.hexEncodedData
value["sig"] = signature.data.toHexString()
value["sigver"] = signature.version
}
let annotation: JSON = [ "type" : type, "value" : value ]
@ -106,6 +105,9 @@ public final class LokiGroupMessage : NSObject {
var string = "\(body.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines))\(timestamp)"
if let quote = quote {
string += "\(quote.quotedMessageTimestamp)\(quote.quoteeHexEncodedPublicKey)\(quote.quotedMessageBody.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines))"
if let quotedMessageServerID = quote.quotedMessageServerID {
string += "\(quotedMessageServerID)"
}
}
string += "\(signatureVersion)"
return string.data(using: String.Encoding.utf8)

@ -1155,7 +1155,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
quotedMessageServerID = [LKDatabaseUtilities getServerIDForQuoteWithID:quoteID quoteeHexEncodedPublicKey:quoteeHexEncodedPublicKey threadID:messageSend.thread.uniqueId transaction:transaction];
}];
LKGroupMessage *groupMessage = [[LKGroupMessage alloc] initWithHexEncodedPublicKey:userHexEncodedPublicKey displayName:displayName body:message.body type:LKGroupChatAPI.publicChatMessageType
timestamp:message.timestamp quotedMessageTimestamp:quoteID quoteeHexEncodedPublicKey:quoteeHexEncodedPublicKey quotedMessageBody:quote.body quotedMessageServerID:quotedMessageServerID hexEncodedSignatureData:nil signatureVersion:0];
timestamp:message.timestamp quotedMessageTimestamp:quoteID quoteeHexEncodedPublicKey:quoteeHexEncodedPublicKey quotedMessageBody:quote.body quotedMessageServerID:quotedMessageServerID signatureData:nil signatureVersion:0];
[[LKGroupChatAPI sendMessage:groupMessage toGroup:LKGroupChatAPI.publicChatServerID onServer:LKGroupChatAPI.publicChatServer]
.thenOn(OWSDispatch.sendingQueue, ^(LKGroupMessage *groupMessage) {
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {

Loading…
Cancel
Save