CC = clang CFLAGS = -O2 -Wall -Wextra BPF_SRC = piggyback.bpf.c BPF_OBJ = piggyback.bpf.o SRV_SRC = piggyback.c SRV_BIN = piggyback CLI_SRC = pb-client.c CLI_BIN = pb-client # BPF include paths — adjust if headers are elsewhere BPF_INCLUDES = -I/usr/include/bpf -I/usr/include -I/usr/include/x86_64-linux-gnu .PHONY: all clean keygen all: $(BPF_OBJ) $(SRV_BIN) $(CLI_BIN) # eBPF kernel program — compiled to BPF bytecode $(BPF_OBJ): $(BPF_SRC) $(CC) -O2 -target bpf $(BPF_INCLUDES) -c $< -o $@ # Server daemon — requires libbpf + libsodium $(SRV_BIN): $(SRV_SRC) $(CC) $(CFLAGS) $< -o $@ -lbpf -lsodium -lpthread # Client — requires libssl (OpenSSL) for Mode 2 TLS $(CLI_BIN): $(CLI_SRC) $(CC) $(CFLAGS) $< -o $@ -lssl -lcrypto -lpthread # Generate Ed25519 keypair for use with -k flag # Private key: engagement.key (keep offline, never on target) # Public key: engagement.pub.hex (pass to daemon via -k) keygen: @openssl genpkey -algorithm ed25519 -out engagement.key @openssl pkey -in engagement.key -pubout -out engagement.pub @echo "" @echo "Public key hex (pass to daemon with -k):" @openssl pkey -in engagement.key -pubout -outform DER | tail -c 32 | xxd -p | tr -d '\n' | tr 'a-f' 'A-F' @echo "" @echo "Private key: engagement.key — keep offline, never copy to target" clean: rm -f $(BPF_OBJ) $(SRV_BIN) $(CLI_BIN) engagement.key engagement.pub