From 2ef3bc3b44e1aff370591310d0b804cd33172e51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20B=C3=B6ttger?= Date: Sat, 14 Mar 2026 11:15:15 +0100 Subject: [PATCH] Add auth for incoming transfers --- .../Connection/InboundNearbyConnection.swift | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/NearbyShare/Connection/InboundNearbyConnection.swift b/NearbyShare/Connection/InboundNearbyConnection.swift index af42ef7..aef5603 100644 --- a/NearbyShare/Connection/InboundNearbyConnection.swift +++ b/NearbyShare/Connection/InboundNearbyConnection.swift @@ -12,6 +12,7 @@ import Network import System import BigInt import SwiftECC +import ASN1 import LUI #if os(macOS) @@ -438,10 +439,29 @@ class InboundNearbyConnection: NearbyConnection { pairedEncryption.v1 = Sharing_Nearby_V1Frame() pairedEncryption.v1.type = .pairedKeyEncryption pairedEncryption.v1.pairedKeyEncryption = Sharing_Nearby_PairedKeyEncryptionFrame() - - // For inbound connections, we do not use provide secretIDHash and signedData - pairedEncryption.v1.pairedKeyEncryption.secretIDHash = Data.randomData(length: 6) - pairedEncryption.v1.pairedKeyEncryption.signedData = Data.randomData(length: 72) + + if let signingPrivateKey = IdentityManager.shared.getPrivateKey(), + let publicKey = IdentityManager.shared.getPublicKey()?.toGenericPublicKey(), + let publicKeyData = IdentityManager.shared.getPublicKey()?.toGenericPublicKeyData(), + let publicKeyID = publicKey.id(), + let authKeyData = self.authKey?.data() { + + var cert = Sharing_Nearby_PublicCertificate() + cert.secretID = publicKeyID + cert.publicKey = publicKeyData + + let signatureTuple = signingPrivateKey.sign(msg: authKeyData) + + pairedEncryption.v1.certificateInfo.publicCertificate.append(cert) + pairedEncryption.v1.pairedKeyEncryption.secretIDHash = cert.secretID + pairedEncryption.v1.pairedKeyEncryption.signedData = Data(signatureTuple.asn1.encode()) + + pairedEncryption.v1.pairedKeyResult.status = .success + } else { + log("[InboundNearbyConnection \(self.id)] No private key available for receiver authentication.") + pairedEncryption.v1.pairedKeyEncryption.secretIDHash = Data.randomData(length: 6) + pairedEncryption.v1.pairedKeyEncryption.signedData = Data.randomData(length: 72) + } try sendTransferSetupFrame(pairedEncryption) currentState = .sentConnectionResponse