Fix incorrect multi device signature signing and verification.

pull/56/head
Mikunj 6 years ago
parent 306e9cf346
commit 5047a98990

@ -7,7 +7,7 @@ public enum DeviceLinkingUtilities {
public static func getLinkingRequestMessage(for masterHexEncodedPublicKey: String) -> DeviceLinkMessage { public static func getLinkingRequestMessage(for masterHexEncodedPublicKey: String) -> DeviceLinkMessage {
let slaveKeyPair = OWSIdentityManager.shared().identityKeyPair()! let slaveKeyPair = OWSIdentityManager.shared().identityKeyPair()!
let slaveHexEncodedPublicKey = slaveKeyPair.hexEncodedPublicKey let slaveHexEncodedPublicKey = slaveKeyPair.hexEncodedPublicKey
var kind = LKDeviceLinkMessageKind.request var kind = UInt8(LKDeviceLinkMessageKind.request.rawValue)
let data = Data(hex: masterHexEncodedPublicKey) + Data(bytes: &kind, count: MemoryLayout.size(ofValue: kind)) let data = Data(hex: masterHexEncodedPublicKey) + Data(bytes: &kind, count: MemoryLayout.size(ofValue: kind))
let slaveSignature = try! Ed25519.sign(data, with: slaveKeyPair) let slaveSignature = try! Ed25519.sign(data, with: slaveKeyPair)
let thread = TSContactThread.getOrCreateThread(contactId: masterHexEncodedPublicKey) let thread = TSContactThread.getOrCreateThread(contactId: masterHexEncodedPublicKey)
@ -18,7 +18,7 @@ public enum DeviceLinkingUtilities {
let masterKeyPair = OWSIdentityManager.shared().identityKeyPair()! let masterKeyPair = OWSIdentityManager.shared().identityKeyPair()!
let masterHexEncodedPublicKey = masterKeyPair.hexEncodedPublicKey let masterHexEncodedPublicKey = masterKeyPair.hexEncodedPublicKey
let slaveHexEncodedPublicKey = deviceLink.slave.hexEncodedPublicKey let slaveHexEncodedPublicKey = deviceLink.slave.hexEncodedPublicKey
var kind = LKDeviceLinkMessageKind.authorization var kind = UInt8(LKDeviceLinkMessageKind.authorization.rawValue)
let data = Data(hex: slaveHexEncodedPublicKey) + Data(bytes: &kind, count: MemoryLayout.size(ofValue: kind)) let data = Data(hex: slaveHexEncodedPublicKey) + Data(bytes: &kind, count: MemoryLayout.size(ofValue: kind))
let masterSignature = try! Ed25519.sign(data, with: masterKeyPair) let masterSignature = try! Ed25519.sign(data, with: masterKeyPair)
let slaveSignature = deviceLink.slave.signature! let slaveSignature = deviceLink.slave.signature!
@ -29,7 +29,7 @@ public enum DeviceLinkingUtilities {
public static func hasValidSlaveSignature(_ deviceLink: DeviceLink) -> Bool { public static func hasValidSlaveSignature(_ deviceLink: DeviceLink) -> Bool {
guard let slaveSignature = deviceLink.slave.signature else { return false } guard let slaveSignature = deviceLink.slave.signature else { return false }
let slavePublicKey = Data(hex: deviceLink.slave.hexEncodedPublicKey.removing05PrefixIfNeeded()) let slavePublicKey = Data(hex: deviceLink.slave.hexEncodedPublicKey.removing05PrefixIfNeeded())
var kind = LKDeviceLinkMessageKind.request var kind = UInt8(LKDeviceLinkMessageKind.request.rawValue)
let data = Data(hex: deviceLink.master.hexEncodedPublicKey) + Data(bytes: &kind, count: MemoryLayout.size(ofValue: kind)) let data = Data(hex: deviceLink.master.hexEncodedPublicKey) + Data(bytes: &kind, count: MemoryLayout.size(ofValue: kind))
return (try? Ed25519.verifySignature(slaveSignature, publicKey: slavePublicKey, data: data)) ?? false return (try? Ed25519.verifySignature(slaveSignature, publicKey: slavePublicKey, data: data)) ?? false
} }
@ -37,7 +37,7 @@ public enum DeviceLinkingUtilities {
public static func hasValidMasterSignature(_ deviceLink: DeviceLink) -> Bool { public static func hasValidMasterSignature(_ deviceLink: DeviceLink) -> Bool {
guard let masterSignature = deviceLink.master.signature else { return false } guard let masterSignature = deviceLink.master.signature else { return false }
let masterPublicKey = Data(hex: deviceLink.master.hexEncodedPublicKey.removing05PrefixIfNeeded()) let masterPublicKey = Data(hex: deviceLink.master.hexEncodedPublicKey.removing05PrefixIfNeeded())
var kind = LKDeviceLinkMessageKind.authorization var kind = UInt8(LKDeviceLinkMessageKind.authorization.rawValue)
let data = Data(hex: deviceLink.slave.hexEncodedPublicKey) + Data(bytes: &kind, count: MemoryLayout.size(ofValue: kind)) let data = Data(hex: deviceLink.slave.hexEncodedPublicKey) + Data(bytes: &kind, count: MemoryLayout.size(ofValue: kind))
return (try? Ed25519.verifySignature(masterSignature, publicKey: masterPublicKey, data: data)) ?? false return (try? Ed25519.verifySignature(masterSignature, publicKey: masterPublicKey, data: data)) ?? false
} }

Loading…
Cancel
Save