Skip to content

Commit 93acc79

Browse files
committed
Address PR review: key-provenance terminology consistency
- Log line now says "not key-proven" (gate is XEdDSA OR manual, not just signer) - Rename markKeySignerProvenForTest -> markKeyXeddsaSignedForTest (sets only the XEdDSA bit) - Docs + test comments: "signer bit" -> "XEdDSA-signed bit" clod helped too
1 parent 5671620 commit 93acc79

4 files changed

Lines changed: 16 additions & 16 deletions

File tree

docs/node_info_stores.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ rationale live in the per-store sections above.
217217
| Node number | yes | yes | yes (0 = free slot) | yes (0 = free slot) |
218218
| Names + user id | yes (flattened fields) | - | yes (full `User`, when `hasFullUser`) | - |
219219
| Public key (32 B) | yes (authoritative) | yes (keyed entries) | yes (TOFU or proven; pinned against tiers 1-2) | - |
220-
| Key provenance - XEdDSA signed | `HAS_XEDDSA_SIGNED` bitfield bit | 1 signer bit (shared with `last_heard`) | `keyXeddsaSigned` | - |
220+
| Key provenance - XEdDSA signed | `HAS_XEDDSA_SIGNED` bitfield bit | 1 XEdDSA-signed bit (shared with `last_heard`) | `keyXeddsaSigned` | - |
221221
| Key provenance - manually verified | `IS_KEY_MANUALLY_VERIFIED` bitfield bit | - (not carried; collapsed into protected category) | `keyManuallyVerified` | - |
222222
| Device role | `role` field | 4-bit role (metadata steal) | inside the cached `User` | 4-bit role in count-byte top bits (final fallback) |
223223
| Recency | `last_heard` (unix secs) | `last_heard` (unix secs, 128 s quantised) | `obsTick` (3 min modular tick) + `hasObserved` | pos/rate/unknown modular ticks |

src/modules/TrafficManagementModule.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -886,7 +886,7 @@ int TrafficManagementModule::peekNodeInfoFlagsForTest(NodeNum node)
886886
return (entry->hasObserved ? 1 : 0) | (entry->isMember ? 2 : 0) | (entry->hasFullUser ? 4 : 0) | (entry->keyProven() ? 8 : 0);
887887
}
888888

889-
void TrafficManagementModule::markKeySignerProvenForTest(NodeNum node)
889+
void TrafficManagementModule::markKeyXeddsaSignedForTest(NodeNum node)
890890
{
891891
concurrency::LockGuard guard(&cacheLock);
892892
if (!nodeInfoPayload)
@@ -934,7 +934,7 @@ int TrafficManagementModule::peekNodeInfoFlagsForTest(NodeNum)
934934
{
935935
return -1;
936936
}
937-
void TrafficManagementModule::markKeySignerProvenForTest(NodeNum) {}
937+
void TrafficManagementModule::markKeyXeddsaSignedForTest(NodeNum) {}
938938

939939
#endif // TMM_HAS_NODEINFO_CACHE
940940

@@ -1482,7 +1482,7 @@ bool TrafficManagementModule::shouldRespondToNodeInfo(const meshtastic_MeshPacke
14821482
// path's keyProven() (XEdDSA | manual). An unproven (trust-on-first-use) identity is left
14831483
// for the genuine node or another cache-holder to answer.
14841484
if (!nodeInfoLiteHasXeddsaSigned(node) && !nodeInfoLiteIsKeyManuallyVerified(node)) {
1485-
TM_LOG_DEBUG("NodeInfo NodeDB entry for 0x%08x not signer-proven, not responding", p->to);
1485+
TM_LOG_DEBUG("NodeInfo NodeDB entry for 0x%08x not key-proven, not responding", p->to);
14861486
return false;
14871487
}
14881488
#endif

src/modules/TrafficManagementModule.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class TrafficManagementModule : public MeshModule, private concurrency::OSThread
127127

128128
/// Test hook: force a cached NodeInfo entry's key to signer-proven so replay-gate tests
129129
/// can skip a full XEdDSA verification. No-op if absent.
130-
void markKeySignerProvenForTest(NodeNum node);
130+
void markKeyXeddsaSignedForTest(NodeNum node);
131131

132132
/// Test hook: free the NodeInfo cache so the NodeDB fallback path can be exercised in
133133
/// builds where the cache is compiled in. No-op when already absent.

test/test_traffic_management/test_main.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class MockNodeDB : public NodeDB
107107
numMeshNodes = 2;
108108
}
109109

110-
// Seed a full identity (name, 32-byte key of `keyByte`, optional signer bit) into the
110+
// Seed a full identity (name, 32-byte key of `keyByte`, optional XEdDSA-signed bit) into the
111111
// hot-store buffer at index 1, for reconcile/seeding tests that iterate
112112
// getMeshNodeByIndex().
113113
void setHotNodeIdentity(NodeNum n, const char *longName, uint8_t keyByte, bool xeddsaSigned)
@@ -196,7 +196,7 @@ class TrafficManagementModuleTestShim : public TrafficManagementModule
196196
using TrafficManagementModule::dropNodeInfoCacheForTest;
197197
using TrafficManagementModule::flushCache;
198198
using TrafficManagementModule::handleReceived;
199-
using TrafficManagementModule::markKeySignerProvenForTest;
199+
using TrafficManagementModule::markKeyXeddsaSignedForTest;
200200
using TrafficManagementModule::nodeInfoCacheCapacityForTest;
201201
using TrafficManagementModule::peekCachedRole;
202202
using TrafficManagementModule::peekNodeInfoFlagsForTest;
@@ -770,7 +770,7 @@ static void test_tm_nodeinfo_directResponse_psramCacheRespondsAndPreservesBitfie
770770
ProcessMessage observedResult = module.handleReceived(observed);
771771
TEST_ASSERT_EQUAL_INT(static_cast<int>(ProcessMessage::CONTINUE), static_cast<int>(observedResult));
772772
// Signed-only replay gate (default) requires signer-proven provenance to serve.
773-
module.markKeySignerProvenForTest(kTargetNode);
773+
module.markKeyXeddsaSignedForTest(kTargetNode);
774774

775775
meshtastic_MeshPacket request = makeDecodedPacket(meshtastic_PortNum_NODEINFO_APP, kRemoteNode, kTargetNode);
776776
request.decoded.want_response = true;
@@ -851,7 +851,7 @@ static void test_tm_nodeinfo_directResponse_psramStaleEntryNotServed(void)
851851
meshtastic_MeshPacket observed = makeNodeInfoPacket(kTargetNode, "target-long", "tg");
852852
module.handleReceived(observed);
853853
// Signer-proven so staleness is the sole reason it is not served (isolates the gate under test).
854-
module.markKeySignerProvenForTest(kTargetNode);
854+
module.markKeyXeddsaSignedForTest(kTargetNode);
855855

856856
// Advance the virtual clock just past the 6 h serve window.
857857
// 6 h + two 3-min observation ticks: guarantees the modular obs-tick age exceeds the
@@ -893,7 +893,7 @@ static void test_tm_nodeinfo_directResponse_psramThrottlesWithinWindow(void)
893893
meshtastic_MeshPacket observed = makeNodeInfoPacket(kTargetNode, "target-long", "tg");
894894
module.handleReceived(observed);
895895
// Signed-only replay gate (default) requires signer-proven provenance to serve.
896-
module.markKeySignerProvenForTest(kTargetNode);
896+
module.markKeyXeddsaSignedForTest(kTargetNode);
897897

898898
meshtastic_MeshPacket request = makeDecodedPacket(meshtastic_PortNum_NODEINFO_APP, kRemoteNode, kTargetNode);
899899
request.decoded.want_response = true;
@@ -966,7 +966,7 @@ static void test_tm_nodeinfo_cache_rejectsMismatchedKey(void)
966966
// Poisoning attempt with a different key (0x22...) must be rejected.
967967
module.handleReceived(makeNodeInfoPacketWithKey(kTargetNode, "attacker", 0x22));
968968
// Signed-only replay gate (default) requires signer-proven provenance to serve the reply.
969-
module.markKeySignerProvenForTest(kTargetNode);
969+
module.markKeyXeddsaSignedForTest(kTargetNode);
970970

971971
meshtastic_MeshPacket request = makeDecodedPacket(meshtastic_PortNum_NODEINFO_APP, kRemoteNode, kTargetNode);
972972
request.decoded.want_response = true;
@@ -1313,7 +1313,7 @@ static void test_tm_nodeinfo_noTimedEviction_quietKeyedEntrySurvives(void)
13131313

13141314
TrafficManagementModuleTestShim module;
13151315
module.handleReceived(makeNodeInfoPacketWithKey(kTargetNode, "quiet", 0x21));
1316-
module.markKeySignerProvenForTest(kTargetNode); // isolate: staleness, not the signed gate
1316+
module.markKeyXeddsaSignedForTest(kTargetNode); // isolate: staleness, not the signed gate
13171317

13181318
// Nine days of silence, swept every three days. The old design would have evicted the
13191319
// entry at the 7-day retention TTL; now nothing expires by timer.
@@ -1533,7 +1533,7 @@ static void test_tm_nodeinfo_tickSaturation_sweepClearsObserved(void)
15331533

15341534
TrafficManagementModuleTestShim module;
15351535
module.handleReceived(makeNodeInfoPacket(kTargetNode, "target-long", "tg"));
1536-
module.markKeySignerProvenForTest(kTargetNode);
1536+
module.markKeyXeddsaSignedForTest(kTargetNode);
15371537
const uint32_t stampMs = TrafficManagementModule::s_testNowMs;
15381538
int flags = module.peekNodeInfoFlagsForTest(kTargetNode);
15391539
TEST_ASSERT_TRUE(flags >= 0 && (flags & kFlagObserved));
@@ -1777,7 +1777,7 @@ static void test_tm_nodeinfo_eviction_keyedTiersOutrankKeyless(void)
17771777
constexpr NodeNum kTofu = 0x51000001, kProven = 0x51000002, kMember = 0x51000003, kNewcomer = 0x51000004;
17781778
module.handleReceived(makeNodeInfoPacketWithKey(kTofu, "tofu", 0x11));
17791779
module.handleReceived(makeNodeInfoPacketWithKey(kProven, "proven", 0x22));
1780-
module.markKeySignerProvenForTest(kProven);
1780+
module.markKeyXeddsaSignedForTest(kProven);
17811781
uint8_t memberKey[32];
17821782
memset(memberKey, 0x33, sizeof(memberKey));
17831783
module.onNodeKeyCommitted(kMember, memberKey, false);
@@ -1815,7 +1815,7 @@ static void test_tm_nodeinfo_eviction_tofuLosesBeforeProvenAndMember(void)
18151815
const uint16_t cap = TrafficManagementModuleTestShim::nodeInfoCacheCapacityForTest();
18161816
fillNodeInfoCacheWithTofuStrangers(module, cap - 2u, kFillBase);
18171817
module.handleReceived(makeNodeInfoPacketWithKey(kProven, "proven", 0x22));
1818-
module.markKeySignerProvenForTest(kProven);
1818+
module.markKeyXeddsaSignedForTest(kProven);
18191819
uint8_t memberKey[32];
18201820
memset(memberKey, 0x33, sizeof(memberKey));
18211821
module.onNodeKeyCommitted(kMember, memberKey, false);
@@ -2135,7 +2135,7 @@ static void test_tm_nodeinfo_directResponse_perRequesterAndGlobalFloor(void)
21352135
constexpr NodeNum kRemoteNode3 = 0x66666666;
21362136
for (NodeNum t : {kTargetA, kTargetB, kTargetC}) {
21372137
module.handleReceived(makeNodeInfoPacket(t, "target-long", "tg"));
2138-
module.markKeySignerProvenForTest(t);
2138+
module.markKeyXeddsaSignedForTest(t);
21392139
}
21402140

21412141
meshtastic_MeshPacket request = makeDecodedPacket(meshtastic_PortNum_NODEINFO_APP, kRemoteNode, kTargetA);

0 commit comments

Comments
 (0)