Ed25519 self-signature in NODEINFO + fix sync sequence and zero-key bug
Add x25519_self_sig[64] to TOPOMSG_NODE/TOPO_NODE: - topo_node.h: add field to both structs (wire format + memory) - topo_node.c: compute Ed25519_sign(ed25519_privkey, x25519_pubkey) for own node - topo_node.c: serialize/deserialize x25519_self_sig - topo_group.c: verify Ed25519 self-sig on NODEINFO receive, reject forgery Fix Ed25519 pubkey zero-key bug: - topo_node_sqlite.c: get_ed25519_pubkey rejects all-zero key (MUST be non-zero) Delay db_sync until Ed25519 key is available: - db_sync.c: db_sync_on_conn_up checks db_get_ed25519_pubkey before starting - db_sync.c: db_sync_peer_check_cb also checks Ed25519 key availability - This prevents sync starting before NODEINFO with verified Ed25519 arrives
This commit is contained in:
1 parent
3890d2038d
commit
85269d1da3
5 files changed
+32
-6
No files matched your search
@@ -165,6 +165,7 @@ struct TOPOMSG_NODE {
|
||||
uint8_t ver;
|
||||
uint8_t public_key[SC_PUBKEY_SIZE];
|
||||
uint8_t ed25519_public_key[SC_PUBKEY_SIZE];
|
||||
uint8_t x25519_self_sig[64]; // Ed25519_sign(ed25519_privkey, x25519_pubkey, 32)
|
||||
uint8_t node_name_len;
|
||||
uint8_t local_v4_sockets;
|
||||
uint8_t local_v4_addrs;
|
||||
@@ -206,7 +207,8 @@ struct TOPO_NODE {
|
||||
uint8_t ver;
|
||||
uint8_t public_key[SC_PUBKEY_SIZE];
|
||||
uint8_t ed25519_public_key[SC_PUBKEY_SIZE];
|
||||
char* node_name; // отдельный u_strdup/u_free
|
||||
uint8_t x25519_self_sig[64]; // Ed25519_sign(ed25519_privkey, x25519_pubkey, 32)
|
||||
char* node_name; // отдельный u_strdup/u_free
|
||||
struct TOPO_SOCKMETA4* v4_sock_meta; // linked list head
|
||||
struct TOPO_ADDR4* v4_addrs; // linked list head
|
||||
struct TOPO_SOCKMETA6* v6_sock_meta;
|
||||
|
||||
Reference in new issue
Block a user