summaryrefslogtreecommitdiff
path: root/node/Packet.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/Packet.hpp')
-rw-r--r--node/Packet.hpp49
1 files changed, 36 insertions, 13 deletions
diff --git a/node/Packet.hpp b/node/Packet.hpp
index b03ec327..23597f68 100644
--- a/node/Packet.hpp
+++ b/node/Packet.hpp
@@ -755,8 +755,26 @@ public:
* <[8] 64-bit network ID>
* <[2] 16-bit length of network configuration dictionary chunk>
* <[...] network configuration dictionary (may be incomplete)>
+ * [ ... end of legacy single chunk response ... ]
+ * <[1] 8-bit flags>
+ * <[8] 64-bit config update ID (should never be 0)>
* <[4] 32-bit total length of assembled dictionary>
- * <[4] 32-bit index of chunk in this reply>
+ * <[4] 32-bit index of chunk>
+ * [ ... end signed portion ... ]
+ * <[1] 8-bit chunk signature type>
+ * <[2] 16-bit length of chunk signature>
+ * <[...] chunk signature>
+ *
+ * The chunk signature signs the entire payload of the OK response.
+ * Currently only one signature type is supported: ed25519 (1).
+ *
+ * Each config chunk is signed to prevent memory exhaustion or
+ * traffic crowding DOS attacks against config fragment assembly.
+ *
+ * If the packet is from the network controller it is permitted to end
+ * before the config update ID or other chunking related or signature
+ * fields. This is to support older controllers that don't include
+ * these fields and may be removed in the future.
*
* ERROR response payload:
* <[8] 64-bit network ID>
@@ -766,25 +784,30 @@ public:
/**
* Network configuration data push:
* <[8] 64-bit network ID>
- * <[8] 64-bit config update ID (token to identify this update)>
- * <[1] flags>
* <[2] 16-bit length of network configuration dictionary chunk>
* <[...] network configuration dictionary (may be incomplete)>
+ * <[1] 8-bit flags>
+ * <[8] 64-bit config update ID (should never be 0)>
* <[4] 32-bit total length of assembled dictionary>
- * <[4] 32-bit index of chunk in this reply>
+ * <[4] 32-bit index of chunk>
+ * [ ... end signed portion ... ]
+ * <[1] 8-bit chunk signature type>
+ * <[2] 16-bit length of chunk signature>
+ * <[...] chunk signature>
*
* This is a direct push variant for network config updates. It otherwise
- * carries the same payload as OK(NETWORK_CONFIG_REQUEST). There is an
- * extra number after network ID in this version that is used in place of
- * the in-re packet ID sent with OKs to group chunks together.
- *
- * Unlike OK(NETWORK_CONFIG_REQUEST) this can be sent by peers other than
- * network controllers. In that case the certificate inside the Dictionary
- * is used for verification purposes.
+ * carries the same payload as OK(NETWORK_CONFIG_REQUEST) and has the same
+ * semantics.
*
* Flags:
- * 0x01 - Patch, not whole config
- * 0x02 - Use fast P2P propagation
+ * 0x01 - Use fast propagation
+ *
+ * An OK should be sent if the config is successfully received and
+ * accepted.
+ *
+ * OK payload:
+ * <[8] 64-bit network ID>
+ * <[8] 64-bit config update ID>
*/
VERB_NETWORK_CONFIG = 0x0c,