mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 16:25:21 +00:00
Fix Noise session persistence during peer ID rotation
- Add session migration when peer IDs rotate - Sessions now follow peers across ID changes via fingerprint - Add migratePeerSession to NoiseEncryptionService - Add migrateSession to NoiseSessionManager - Integrate migration in BluetoothMeshService updatePeerBinding This fixes the issue where established Noise sessions were lost when peer IDs rotated, causing "No Noise session" errors and requiring re-handshake.
This commit is contained in:
@@ -279,6 +279,24 @@ class NoiseEncryptionService {
|
||||
}
|
||||
}
|
||||
|
||||
/// Migrate session when peer ID changes
|
||||
func migratePeerSession(from oldPeerID: String, to newPeerID: String, fingerprint: String) {
|
||||
// First update the fingerprint mappings
|
||||
serviceQueue.sync(flags: .barrier) {
|
||||
// Remove old mapping
|
||||
if let oldFingerprint = peerFingerprints[oldPeerID], oldFingerprint == fingerprint {
|
||||
peerFingerprints.removeValue(forKey: oldPeerID)
|
||||
}
|
||||
|
||||
// Add new mapping
|
||||
peerFingerprints[newPeerID] = fingerprint
|
||||
fingerprintToPeerID[fingerprint] = newPeerID
|
||||
}
|
||||
|
||||
// Migrate the session in session manager
|
||||
sessionManager.migrateSession(from: oldPeerID, to: newPeerID)
|
||||
}
|
||||
|
||||
// MARK: - Private Helpers
|
||||
|
||||
private func handleSessionEstablished(peerID: String, remoteStaticKey: Curve25519.KeyAgreement.PublicKey) {
|
||||
|
||||
Reference in New Issue
Block a user