Encrypt private media before fragmentation

This commit is contained in:
jack
2026-07-10 21:00:54 +02:00
parent 733098bb63
commit 7faa9d7d4a
25 changed files with 893 additions and 138 deletions
@@ -24,6 +24,9 @@ public struct PeerCapabilities: OptionSet, Equatable, Hashable, Sendable {
/// (uplink/downlink carriers for mesh-only peers). Advertised alongside
/// a `bridgeGeohash` TLV carrying the rendezvous cell.
public static let bridge = PeerCapabilities(rawValue: 1 << 7)
/// Finalized direct-message media encrypted as a `.privateFile` Noise
/// payload before outer BLE fragmentation.
public static let privateMedia = PeerCapabilities(rawValue: 1 << 8)
/// Minimal little-endian byte encoding; always at least one byte so an
/// empty set is distinguishable from an absent TLV.
@@ -16,11 +16,12 @@ struct PeerCapabilitiesTests {
#expect(PeerCapabilities([]).encoded() == Data([0x00]))
#expect(PeerCapabilities.prekeys.encoded() == Data([0x01]))
#expect(PeerCapabilities.meshDiagnostics.encoded() == Data([0x40]))
#expect(PeerCapabilities.privateMedia.encoded() == Data([0x00, 0x01]))
let high = PeerCapabilities(rawValue: 1 << 9)
#expect(high.encoded() == Data([0x00, 0x02]))
let all: PeerCapabilities = [.prekeys, .wifiBulk, .gateway, .groups, .board, .vouch, .meshDiagnostics]
let all: PeerCapabilities = [.prekeys, .wifiBulk, .gateway, .groups, .board, .vouch, .meshDiagnostics, .privateMedia]
#expect(PeerCapabilities(encoded: all.encoded()) == all)
#expect(PeerCapabilities(encoded: high.encoded()) == high)
#expect(PeerCapabilities(encoded: PeerCapabilities([]).encoded()) == [])