From 8d938e85184741335de9cb81e75fe8d789ced776 Mon Sep 17 00:00:00 2001 From: Islam <2553451+qalandarov@users.noreply.github.com> Date: Wed, 1 Oct 2025 12:33:39 +0100 Subject: [PATCH] PeerID 2/n: Count and hex conversion done with `bare` (#705) --- bitchat/Models/PeerID.swift | 6 +++--- bitchatTests/Utils/PeerIDTests.swift | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/bitchat/Models/PeerID.swift b/bitchat/Models/PeerID.swift index 5738c585..23ddc4f3 100644 --- a/bitchat/Models/PeerID.swift +++ b/bitchat/Models/PeerID.swift @@ -153,7 +153,7 @@ extension PeerID { /// Short routing IDs (exact 16-hex) var isShort: Bool { - id.count == Constants.hexIDLength && Data(hexString: id) != nil + bare.count == Constants.hexIDLength && Data(hexString: bare) != nil } /// Full Noise key hex (exact 64-hex) @@ -163,8 +163,8 @@ extension PeerID { /// Full Noise key (exact 64-hex) as Data var noiseKey: Data? { - guard id.count == Constants.maxIDLength else { return nil } - return Data(hexString: id) + guard bare.count == Constants.maxIDLength else { return nil } + return Data(hexString: bare) } } diff --git a/bitchatTests/Utils/PeerIDTests.swift b/bitchatTests/Utils/PeerIDTests.swift index 7b76cef8..bdb7d561 100644 --- a/bitchatTests/Utils/PeerIDTests.swift +++ b/bitchatTests/Utils/PeerIDTests.swift @@ -206,6 +206,18 @@ final class PeerIDTests: XCTestCase { XCTAssertEqual(short.prefix, .empty) } + func test_toShort_whenNoiseKeyExists_withNoisePrefix() { + let peerID = PeerID(str: "noise:" + hex64) + let short = peerID.toShort() + + // `toShort()` should derive 16-hex peerID + let expected = Data(hexString: hex64)!.sha256Fingerprint().prefix(16) + + XCTAssertEqual(short.bare, String(expected)) + XCTAssertEqual(short.prefix, .empty) + XCTAssertEqual(peerID.prefix, .noise) + } + func test_toShort_whenNoNoiseKey() { let peerID = PeerID(str: "some_random_key") let short = peerID.toShort() @@ -340,6 +352,10 @@ final class PeerIDTests: XCTestCase { XCTAssertTrue(peerID.isNoiseKeyHex) XCTAssertNotNil(peerID.noiseKey) + let prefixedPeerID = PeerID(str: "noise:" + hex64) + XCTAssertTrue(prefixedPeerID.isNoiseKeyHex) + XCTAssertNotNil(prefixedPeerID.noiseKey) + let bad = String(repeating: "z", count: 64) // invalid hex let badPeerID = PeerID(str: bad) XCTAssertFalse(badPeerID.isNoiseKeyHex)