Update EphemeralIdentity to use Peer

This commit is contained in:
islam
2025-09-18 02:10:48 +01:00
parent 94e19dc039
commit 9ecd346197
3 changed files with 16 additions and 16 deletions
+1 -1
View File
@@ -87,7 +87,7 @@ import Foundation
/// Represents the ephemeral layer of identity - short-lived peer IDs that provide network privacy. /// Represents the ephemeral layer of identity - short-lived peer IDs that provide network privacy.
/// These IDs rotate periodically to prevent tracking while maintaining cryptographic relationships. /// These IDs rotate periodically to prevent tracking while maintaining cryptographic relationships.
struct EphemeralIdentity { struct EphemeralIdentity {
let peerID: String // 8 random bytes let peer: Peer // 8 random bytes
let sessionStart: Date let sessionStart: Date
var handshakeState: HandshakeState var handshakeState: HandshakeState
} }
@@ -121,12 +121,12 @@ protocol SecureIdentityStateManagerProtocol {
func getBlockedNostrPubkeys() -> Set<String> func getBlockedNostrPubkeys() -> Set<String>
// MARK: Ephemeral Session Management // MARK: Ephemeral Session Management
func registerEphemeralSession(peerID: String, handshakeState: HandshakeState) func registerEphemeralSession(peer: Peer, handshakeState: HandshakeState)
func updateHandshakeState(peerID: String, state: HandshakeState) func updateHandshakeState(peer: Peer, state: HandshakeState)
// MARK: Cleanup // MARK: Cleanup
func clearAllIdentityData() func clearAllIdentityData()
func removeEphemeralSession(peerID: String) func removeEphemeralSession(peer: Peer)
// MARK: Verification // MARK: Verification
func setVerified(fingerprint: String, verified: Bool) func setVerified(fingerprint: String, verified: Bool)
@@ -143,7 +143,7 @@ final class SecureIdentityStateManager: SecureIdentityStateManagerProtocol {
private let encryptionKeyName = "identityCacheEncryptionKey" private let encryptionKeyName = "identityCacheEncryptionKey"
// In-memory state // In-memory state
private var ephemeralSessions: [String: EphemeralIdentity] = [:] private var ephemeralSessions: [Peer: EphemeralIdentity] = [:]
private var cryptographicIdentities: [String: CryptographicIdentity] = [:] private var cryptographicIdentities: [String: CryptographicIdentity] = [:]
private var cache: IdentityCache = IdentityCache() private var cache: IdentityCache = IdentityCache()
@@ -455,19 +455,19 @@ final class SecureIdentityStateManager: SecureIdentityStateManagerProtocol {
// MARK: - Ephemeral Session Management // MARK: - Ephemeral Session Management
func registerEphemeralSession(peerID: String, handshakeState: HandshakeState = .none) { func registerEphemeralSession(peer: Peer, handshakeState: HandshakeState = .none) {
queue.async(flags: .barrier) { queue.async(flags: .barrier) {
self.ephemeralSessions[peerID] = EphemeralIdentity( self.ephemeralSessions[peer] = EphemeralIdentity(
peerID: peerID, peer: peer,
sessionStart: Date(), sessionStart: Date(),
handshakeState: handshakeState handshakeState: handshakeState
) )
} }
} }
func updateHandshakeState(peerID: String, state: HandshakeState) { func updateHandshakeState(peer: Peer, state: HandshakeState) {
queue.async(flags: .barrier) { queue.async(flags: .barrier) {
self.ephemeralSessions[peerID]?.handshakeState = state self.ephemeralSessions[peer]?.handshakeState = state
// If handshake completed, update last interaction // If handshake completed, update last interaction
if case .completed(let fingerprint) = state { if case .completed(let fingerprint) = state {
@@ -493,9 +493,9 @@ final class SecureIdentityStateManager: SecureIdentityStateManagerProtocol {
} }
} }
func removeEphemeralSession(peerID: String) { func removeEphemeralSession(peer: Peer) {
queue.async(flags: .barrier) { queue.async(flags: .barrier) {
self.ephemeralSessions.removeValue(forKey: peerID) self.ephemeralSessions.removeValue(forKey: peer)
} }
} }
+4 -4
View File
@@ -1298,7 +1298,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
} }
// Update identity state manager with handshake completion // Update identity state manager with handshake completion
identityManager.updateHandshakeState(peerID: peerID, state: .completed(fingerprint: fingerprintStr)) identityManager.updateHandshakeState(peer: Peer(str: peerID), state: .completed(fingerprint: fingerprintStr))
// Update encryption status now that we have the fingerprint // Update encryption status now that we have the fingerprint
updateEncryptionStatus(for: peerID) updateEncryptionStatus(for: peerID)
@@ -4608,7 +4608,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
isConnected = true isConnected = true
// Register ephemeral session with identity manager // Register ephemeral session with identity manager
identityManager.registerEphemeralSession(peerID: peerID, handshakeState: .none) identityManager.registerEphemeralSession(peer: Peer(str: peerID), handshakeState: .none)
// Intentionally do not resend favorites on reconnect. // Intentionally do not resend favorites on reconnect.
// We only send our npub when a favorite is toggled on, or if our npub changes. // We only send our npub when a favorite is toggled on, or if our npub changes.
@@ -4633,7 +4633,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
SecureLogger.debug("👋 Peer disconnected: \(peerID)", category: .session) SecureLogger.debug("👋 Peer disconnected: \(peerID)", category: .session)
// Remove ephemeral session from identity manager // Remove ephemeral session from identity manager
identityManager.removeEphemeralSession(peerID: peerID) identityManager.removeEphemeralSession(peer: Peer(str: peerID))
// If the open PM is tied to this short peer ID, switch UI context to the full Noise key (offline favorite) // If the open PM is tied to this short peer ID, switch UI context to the full Noise key (offline favorite)
var derivedStableKeyHex: String? = shortIDToNoiseKey[peerID] var derivedStableKeyHex: String? = shortIDToNoiseKey[peerID]
@@ -4740,7 +4740,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
// Register ephemeral sessions for all connected peers // Register ephemeral sessions for all connected peers
for peerID in peers { for peerID in peers {
self.identityManager.registerEphemeralSession(peerID: peerID, handshakeState: .none) self.identityManager.registerEphemeralSession(peer: Peer(str: peerID), handshakeState: .none)
} }
// Schedule UI refresh to ensure offline favorites are shown // Schedule UI refresh to ensure offline favorites are shown