From 8c8631ac9c33289519ffa6a817f17ebf5d49f074 Mon Sep 17 00:00:00 2001 From: vergil_on Date: Mon, 3 Aug 2026 22:22:24 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D1=8B=D0=B1=D0=B0=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=B0.=20=D0=9C=D0=B8=D0=BD=D0=B8=D0=BC?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D1=84=D1=83=D0=BD=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .agents/skills/chore/README.md | 11 + .agents/skills/chore/README.ru.md | 12 + .../skills/chore/dockerfile-skill/SKILL.md | 289 ++++++ .agents/skills/common/README.md | 11 + .agents/skills/common/README.ru.md | 12 + .../common/common-daemon-cli-skill/SKILL.md | 69 ++ .agents/skills/golang/README.md | 12 + .agents/skills/golang/README.ru.md | 13 + .../golang-flexible-config-skill/SKILL.md | 261 +++++ .../golang-tswf-codestyle-skill/SKILL.md | 243 +++++ .codegraph | 1 + .dockerignore | 10 + .gitignore | 7 + .idea/.gitignore | 10 + .idea/dataSources.xml | 17 + .idea/go-synapse-backupper.iml | 9 + .idea/go.imports.xml | 10 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .omo/notepads/synapse-backupper/learnings.md | 92 ++ Makefile | 37 + README.md | 229 +++++ README.ru.md | 229 +++++ cmd/synapse-backupper/backup.go | 167 +++ cmd/synapse-backupper/backup_test.go | 367 +++++++ cmd/synapse-backupper/generate_config.go | 47 + cmd/synapse-backupper/generate_config_test.go | 234 +++++ cmd/synapse-backupper/keygen.go | 122 +++ cmd/synapse-backupper/keygen_test.go | 444 ++++++++ cmd/synapse-backupper/main.go | 32 + .../resources/config.en.yaml | 66 ++ .../resources/config.ru.yaml | 65 ++ cmd/synapse-backupper/restore.go | 122 +++ cmd/synapse-backupper/restore_test.go | 498 +++++++++ cmd/synapse-backupper/run.go | 114 +++ cmd/synapse-backupper/run_test.go | 393 ++++++++ deploy/docker/Dockerfile | 17 + deploy/docker/docker-compose.yml | 28 + go.mod | 26 + go.sum | 58 ++ pkg/adapters/config/config.go | 161 +++ pkg/adapters/config/config_test.go | 224 +++++ pkg/adapters/crypto/composite/composite.go | 624 ++++++++++++ .../crypto/composite/composite_test.go | 949 ++++++++++++++++++ .../crypto/composite/golden_generate_test.go | 120 +++ .../composite/testdata/golden-keys.json | 4 + pkg/adapters/crypto/keymanager/keymanager.go | 214 ++++ .../crypto/keymanager/keymanager_test.go | 362 +++++++ pkg/adapters/crypto/mlkem768/mlkem768.go | 194 ++++ pkg/adapters/crypto/mlkem768/mlkem768_test.go | 140 +++ pkg/adapters/crypto/x25519/x25519.go | 196 ++++ pkg/adapters/crypto/x25519/x25519_test.go | 189 ++++ pkg/adapters/healthz/healthz.go | 67 ++ pkg/adapters/healthz/healthz_test.go | 77 ++ pkg/adapters/pgdump/pgdump.go | 100 ++ pkg/adapters/pgdump/pgdump_test.go | 374 +++++++ pkg/adapters/pipeline/pipeline.go | 102 ++ pkg/adapters/pipeline/pipeline_test.go | 249 +++++ pkg/adapters/retention/retention.go | 109 ++ pkg/adapters/retention/retention_test.go | 401 ++++++++ pkg/adapters/scheduler/cron/cron.go | 66 ++ pkg/adapters/scheduler/cron/cron_test.go | 61 ++ pkg/adapters/storage/local/local.go | 132 +++ pkg/adapters/storage/local/local_test.go | 255 +++++ pkg/domain/backup/backup.go | 75 ++ pkg/domain/backup/backup_test.go | 129 +++ pkg/domain/crypto/decryptor.go | 12 + pkg/domain/crypto/encryptor.go | 13 + pkg/domain/crypto/kem.go | 50 + pkg/domain/crypto/keymanager.go | 27 + pkg/domain/crypto/registry.go | 84 ++ pkg/domain/crypto/registry_test.go | 173 ++++ pkg/domain/pgdump/dumper.go | 50 + pkg/domain/pgdump/dumper_test.go | 72 ++ pkg/domain/scheduler.go | 12 + pkg/domain/sink.go | 17 + resources/config.example.yaml | 0 scripts/integration-test.sh | 70 ++ synapse-backupper | Bin 0 -> 11728101 bytes sync-skills.sh | 66 ++ 80 files changed, 10618 insertions(+) create mode 100644 .agents/skills/chore/README.md create mode 100644 .agents/skills/chore/README.ru.md create mode 100644 .agents/skills/chore/dockerfile-skill/SKILL.md create mode 100644 .agents/skills/common/README.md create mode 100644 .agents/skills/common/README.ru.md create mode 100644 .agents/skills/common/common-daemon-cli-skill/SKILL.md create mode 100644 .agents/skills/golang/README.md create mode 100644 .agents/skills/golang/README.ru.md create mode 100644 .agents/skills/golang/golang-flexible-config-skill/SKILL.md create mode 100644 .agents/skills/golang/golang-tswf-codestyle-skill/SKILL.md create mode 120000 .codegraph create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/dataSources.xml create mode 100644 .idea/go-synapse-backupper.iml create mode 100644 .idea/go.imports.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .omo/notepads/synapse-backupper/learnings.md create mode 100644 Makefile create mode 100644 README.md create mode 100644 README.ru.md create mode 100644 cmd/synapse-backupper/backup.go create mode 100644 cmd/synapse-backupper/backup_test.go create mode 100644 cmd/synapse-backupper/generate_config.go create mode 100644 cmd/synapse-backupper/generate_config_test.go create mode 100644 cmd/synapse-backupper/keygen.go create mode 100644 cmd/synapse-backupper/keygen_test.go create mode 100644 cmd/synapse-backupper/main.go create mode 100644 cmd/synapse-backupper/resources/config.en.yaml create mode 100644 cmd/synapse-backupper/resources/config.ru.yaml create mode 100644 cmd/synapse-backupper/restore.go create mode 100644 cmd/synapse-backupper/restore_test.go create mode 100644 cmd/synapse-backupper/run.go create mode 100644 cmd/synapse-backupper/run_test.go create mode 100644 deploy/docker/Dockerfile create mode 100644 deploy/docker/docker-compose.yml create mode 100644 go.mod create mode 100644 go.sum create mode 100644 pkg/adapters/config/config.go create mode 100644 pkg/adapters/config/config_test.go create mode 100644 pkg/adapters/crypto/composite/composite.go create mode 100644 pkg/adapters/crypto/composite/composite_test.go create mode 100644 pkg/adapters/crypto/composite/golden_generate_test.go create mode 100644 pkg/adapters/crypto/composite/testdata/golden-keys.json create mode 100644 pkg/adapters/crypto/keymanager/keymanager.go create mode 100644 pkg/adapters/crypto/keymanager/keymanager_test.go create mode 100644 pkg/adapters/crypto/mlkem768/mlkem768.go create mode 100644 pkg/adapters/crypto/mlkem768/mlkem768_test.go create mode 100644 pkg/adapters/crypto/x25519/x25519.go create mode 100644 pkg/adapters/crypto/x25519/x25519_test.go create mode 100644 pkg/adapters/healthz/healthz.go create mode 100644 pkg/adapters/healthz/healthz_test.go create mode 100644 pkg/adapters/pgdump/pgdump.go create mode 100644 pkg/adapters/pgdump/pgdump_test.go create mode 100644 pkg/adapters/pipeline/pipeline.go create mode 100644 pkg/adapters/pipeline/pipeline_test.go create mode 100644 pkg/adapters/retention/retention.go create mode 100644 pkg/adapters/retention/retention_test.go create mode 100644 pkg/adapters/scheduler/cron/cron.go create mode 100644 pkg/adapters/scheduler/cron/cron_test.go create mode 100644 pkg/adapters/storage/local/local.go create mode 100644 pkg/adapters/storage/local/local_test.go create mode 100644 pkg/domain/backup/backup.go create mode 100644 pkg/domain/backup/backup_test.go create mode 100644 pkg/domain/crypto/decryptor.go create mode 100644 pkg/domain/crypto/encryptor.go create mode 100644 pkg/domain/crypto/kem.go create mode 100644 pkg/domain/crypto/keymanager.go create mode 100644 pkg/domain/crypto/registry.go create mode 100644 pkg/domain/crypto/registry_test.go create mode 100644 pkg/domain/pgdump/dumper.go create mode 100644 pkg/domain/pgdump/dumper_test.go create mode 100644 pkg/domain/scheduler.go create mode 100644 pkg/domain/sink.go create mode 100644 resources/config.example.yaml create mode 100755 scripts/integration-test.sh create mode 100755 synapse-backupper create mode 100755 sync-skills.sh diff --git a/.agents/skills/chore/README.md b/.agents/skills/chore/README.md new file mode 100644 index 0000000..e387d9b --- /dev/null +++ b/.agents/skills/chore/README.md @@ -0,0 +1,11 @@ +# Chore Skills + +> **Русская версия:** [README.ru.md](README.ru.md) + +Infrastructure and utility skills applicable across projects. + +## Available Skills + +| Skill | Description | +|-------|-------------| +| [dockerfile-skill](dockerfile-skill) | Best practices for writing production-ready Dockerfiles: multistage builds, BuildKit parallelism, security hardening (non-root user, pinned base images, no secrets in layers), healthchecks, custom entrypoints, `.dockerignore`, and integration with Makefile / Docker Compose. Includes a self-check checklist. | diff --git a/.agents/skills/chore/README.ru.md b/.agents/skills/chore/README.ru.md new file mode 100644 index 0000000..6e607fb --- /dev/null +++ b/.agents/skills/chore/README.ru.md @@ -0,0 +1,12 @@ +# Chore Skills + +> **English version:** [README.md](README.md) +> **Вернуться к оглавлению:** [README.ru.md](../../README.ru.md) + +Инфраструктурные и утилитарные скиллы, применимые во всех проектах. + +## Доступные скиллы + +| Скилл | Описание | +|-------|----------| +| [dockerfile-skill](dockerfile-skill) | Лучшие практики написания production-ready Dockerfile: многоступенчатая сборка, параллельные стейджи BuildKit, харднинг безопасности (непривилегированный пользователь, фиксированные версии образов, отсутствие секретов в слоях), healthchecks, кастомные entrypoint-скрипты, `.dockerignore` и интеграция с Makefile / Docker Compose. Включает чеклист самопроверки. | diff --git a/.agents/skills/chore/dockerfile-skill/SKILL.md b/.agents/skills/chore/dockerfile-skill/SKILL.md new file mode 100644 index 0000000..8a665d7 --- /dev/null +++ b/.agents/skills/chore/dockerfile-skill/SKILL.md @@ -0,0 +1,289 @@ +--- +name: dockerfile-skill +description: Ты ОБЯЗАН использовать этот скилл, если хочешь писать Dockerfile +--- + +## Multistage + +Используй Docker multistage, если тебе надо создать Dockerfile для сборки и запуска приложения – раздели его на стейдж со сборкой и запуском. + +Не стесняйся использовать `COPY FROM`. + +Объединяй несколько команд `RUN` в одну строку с помощью `&&` и очищай временные файлы внутри того же слоя (например, `rm -rf /var/lib/apt/lists/*`). Это уменьшает число слоёв и размер финального образа. + +Для зависимостей, которые часто пересобираются (pip, npm, apt), используй `--mount=type=cache,target=/root/.cache/pip` (или аналогично) – это ускоряет повторные сборки за счёт кэширования на хосте. + +## Parallel + +Разделяй стейджи Dockerfile таким образом, чтобы они могли выполняться параллельно (например, сборка зависимостей и подготовка тестовых данных). + +При использовании BuildKit можно объявить несколько независимых `FROM` и копировать между ними через `COPY --from=...`. Убедись, что стейджи не имеют неявных зависимостей друг от друга. + +## Makefile + +Если в проекте есть Makefile, постарайся использовать его. + +Если Makefile нет, сделай его и вызывай команды через таргеты, а не напрямую в Dockerfile. + +Также добавь в этот Makefile таргеты для сборки и запуска текущего приложения в Docker. + +## Compose + +Если его еще нет, сделай возможность запустить приложение, для которого пишешь Dockerfile, в Docker Compose. + +## Security + +Используй лучшие практики безопасности при написании Dockerfile. + +* **Фиксируй версии базовых образов** – всегда используй конкретный тег (например, `python:3.11-slim-bookworm`) вместо `:latest` или плавающих тегов, чтобы обеспечить воспроизводимость сборки. + +* **Создавай выделенного непривилегированного пользователя** внутри образа: `RUN addgroup -S app && adduser -S -G app app`. Затем переключайся на него с помощью `USER app`. Копируй файлы командой `COPY --chown=app:app`, чтобы они сразу принадлежали этому пользователю, избегая лишних операций с правами. + +* **Не храни секреты в переменных окружения образа** – используй `ARG` только для нечувствительных данных (например, версий пакетов), а секреты передавай через `--build-arg` в момент сборки или монтируй через Docker Secrets в рантайме. + +* **Запускай контейнер rootless**, если это возможно. После создания пользователя и переключения на него финальный процесс будет работать без прав root. + +* **Добавь `HEALTHCHECK`** (например, `HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:8080/ || exit 1`), чтобы оркестраторы могли корректно определять состояние приложения. + +* **Проставляй метаданные через `LABEL`** – например, `LABEL maintainer="team@example.com"`, `LABEL version="1.0.0"`, `LABEL description="..."`. Это стандарт для документирования образов. + +* **Указывай в Dockerfile флаги уменьшения размера зависимостей** – для `apt` используй `--no-install-recommends`, для `pip` – `--no-cache-dir`, для `npm` – `--only=production`, для `composer` – `--no-dev`. + +* **Сканируй собранный образ на уязвимости** – в CI/CD используй инструменты вроде `trivy`, `docker scout` или `grype`. Это должно быть частью пайплайна сборки. + +## Dockerignore + +*Создай файл `.dockerignore` в корне проекта. Включи в него все ненужные файлы и директории: `.git`, `node_modules`, `venv`, `__pycache__`, `*.md`, `docker-compose.yml`, временные файлы. Это ускорит сборку и предотвратит случайную утечку секретов.* + +## Пример корректного Dockerfile (мини-шаблон) + +*Для быстрого старта используй команду `docker init`, которая сгенерирует корректные Dockerfile, compose и .dockerignore под твой язык.* + + +Хорошо, вот интеграция примеров в раздел **Entrypoint** исходного скилла. Я добавил два конкретных скрипта (Alpine/`su-exec` и Ubuntu/`gosu`) и описал, как их встроить в Dockerfile. Также учтена exec-форма и рекомендации по сигналам. + +## Entrypoint + +Сделай кастомный Docker-Entrypoint, который запускает все скрипты из папки `/etc/docker-custom-init/*.sh`, сортируя их по имени. +Если нужно запустить само приложение, вызови `app`. Тогда entrypoint должен заменить вызов вызовом оригинального приложения. + +**Обязательно используй exec-форму** в `ENTRYPOINT` и `CMD` – запись вида `["executable", "param"]`, а не `executable param`. Только exec-форма гарантирует, что сигналы (SIGTERM, SIGINT) будут корректно переданы основному процессу и контейнер сможет правильно завершиться. + +### Пример для Alpine (использует `su-exec`) + +Скрипт `docker-entrypoint.sh` (универсален для Alpine, BusyBox, минимальных образов): + +```sh +#!/bin/sh +set -e + +INIT_DIRS="${DOCKER_INITD_DIRS:-/etc/init-custom-docker.d}" +SCRIPTS_ENVS="${DOCKER_INIT_SCRIPTS_ENVS}" +INIT_SCRIPT="${DOCKER_INIT_SCRIPT}" + +log() { + echo "[init] $1" +} + +# 1. Run init scripts from directories (as root) +for dir in $(echo "$INIT_DIRS" | tr ',' ' '); do + if [ -d "$dir" ]; then + log "Processing init directory: $dir" + for script in $(find "$dir" -maxdepth 1 -name '*.sh' -type f 2>/dev/null | sort); do + log "Running script: $script" + sh "$script" + done + else + log "Directory not found, skipping: $dir" + fi +done + +# 2. Run scripts from environment variables (as root) +if [ -n "$SCRIPTS_ENVS" ]; then + for env_name in $(echo "$SCRIPTS_ENVS" | tr ',' ' '); do + eval "script_content=\$$env_name" + if [ -z "$script_content" ]; then + log "Error: Environment variable $env_name specified but empty" + exit 1 + fi + log "Running scripts from environment: $env_name" + echo "$script_content" | sh + done +fi + +# 3. Run script from DOCKER_INIT_SCRIPT (as root) +if [ -n "$INIT_SCRIPT" ]; then + log "Running script from DOCKER_INIT_SCRIPT" + echo "$INIT_SCRIPT" | sh +fi + +# Switch to appuser using su-exec +log "Switching to user: appuser" +log "Starting application: $@" + +exec su-exec appuser:appgroup "$@" +``` + +Как добавить в Dockerfile (Alpine): + +```dockerfile +RUN apk add --no-cache su-exec # для Alpine +RUN addgroup -g 1000 appgroup && adduser -u 1000 -G appgroup -D appuser + +COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh +RUN chmod +x /usr/local/bin/docker-entrypoint.sh + +ENTRYPOINT ["docker-entrypoint.sh"] +CMD ["app"] +``` + +### Пример для Ubuntu/Debian (использует `gosu`) + +Скрипт `docker-entrypoint.sh` (аналог для Debian-based образов): + +```bash +#!/bin/bash +set -e + +INIT_DIRS="${DOCKER_INITD_DIRS:-/etc/init-custom-docker.d}" +SCRIPTS_ENVS="${DOCKER_INIT_SCRIPTS_ENVS}" +INIT_SCRIPT="${DOCKER_INIT_SCRIPT}" +APP_USER="${APP_USER:-appuser}" +APP_GROUP="${APP_GROUP:-appgroup}" + +log() { + echo "[init] $1" +} + +# 1. Execute scripts from directories (as root) +IFS=',' read -ra dirs <<< "$INIT_DIRS" +for dir in "${dirs[@]}"; do + if [ -d "$dir" ]; then + log "Processing init directory: $dir" + for script in $(find "$dir" -maxdepth 1 -name '*.sh' -type f 2>/dev/null | sort); do + log "Running script: $script" + bash "$script" + done + else + log "Directory not found, skipping: $dir" + fi +done + +# 2. Execute scripts from environment variables (as root) +if [ -n "$SCRIPTS_ENVS" ]; then + IFS=',' read -ra env_names <<< "$SCRIPTS_ENVS" + for env_name in "${env_names[@]}"; do + script_content="${!env_name}" + if [ -z "$script_content" ]; then + log "Error: Environment variable $env_name specified but empty" + exit 1 + fi + log "Running script from environment: $env_name" + echo "$script_content" | bash + done +fi + +# 3. Execute script from DOCKER_INIT_SCRIPT (as root) +if [ -n "$INIT_SCRIPT" ]; then + log "Running script from DOCKER_INIT_SCRIPT" + echo "$INIT_SCRIPT" | bash +fi + +# Switch to appuser using gosu +log "Switching to user: $APP_USER" +log "Starting application: $@" + +exec gosu "${APP_USER}:${APP_GROUP}" "$@" +``` + +Как добавить в Dockerfile (Ubuntu): + +```dockerfile +# Установка gosu (два варианта: через apt или копирование статического бинарника) +RUN apt-get update && apt-get install -y --no-install-recommends gosu && rm -rf /var/lib/apt/lists/* +# Или: COPY --from=gosu/alpine:latest /usr/local/bin/gosu /usr/local/bin/gosu + +RUN groupadd -r appgroup && useradd -r -g appgroup appuser + +COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh +RUN chmod +x /usr/local/bin/docker-entrypoint.sh + +ENTRYPOINT ["docker-entrypoint.sh"] +CMD ["app"] +``` + +### Важные замечания + +- Внутри скрипта обязательно используй **exec** в конце (например, `exec su-exec appuser "$@"` или `exec gosu appuser "$@"`), чтобы заменить процесс entrypoint на основной процесс приложения. +- Пути к init-директориям по умолчанию можно переопределить через переменные окружения (`DOCKER_INITD_DIRS`). Убедись, что нужные директории существуют (создай их в Dockerfile или смонтируй как тома). +- Чтобы уменьшить количество слоёв, можно объединить команды `RUN groupadd ... && useradd ... && apt-get install ...` в один `RUN`. + + +# Self-check список для валидации Dockerfile + +Используй этот список для проверки своего Dockerfile перед финальной сборкой. Отмечай каждый пункт как выполненный. + +## 1. Структура и многоступенчатость (Multistage) +- [ ] Есть ли разделение на этап сборки и этап запуска (если приложение требует компиляции/установки зависимостей)? +- [ ] Используется ли `COPY --from=` для переноса артефактов между стейджами? +- [ ] Объединены ли команды RUN в один слой (через `&&`) и очищен ли временный кэш (например, `rm -rf /var/lib/apt/lists/*`)? +- [ ] Используется ли `--mount=type=cache` для ускорения повторных сборок (если применимо)? + +## 2. Параллелизм (BuildKit) +- [ ] Можно ли независимые стейджи выполнять параллельно? (Зависимости, тесты, документация – разделены?) +- [ ] Нет ли неявных зависимостей между параллельными стейджами? + +## 3. Безопасность +- [ ] Версия базового образа фиксирована (например `python:3.11-slim-bookworm`) вместо `:latest`? +- [ ] Создан непривилегированный пользователь (`useradd -r -g appgroup appuser`)? +- [ ] Финальный процесс запускается от этого пользователя (`USER appuser`)? +- [ ] Файлы скопированы с `--chown=appuser:appgroup`? +- [ ] Используются флаги уменьшения размера: `--no-install-recommends` (apt), `--no-cache-dir` (pip), `--only=production` (npm)? +- [ ] Нет секретов в переменных `ENV` или слоях образа (используются `ARG`/секреты BuildKit)? +- [ ] Добавлен `HEALTHCHECK` для продакшен-контейнеров? +- [ ] Присутствуют метаданные `LABEL` (maintainer, version, description)? + +## 4. Entrypoint +- [ ] Написан кастомный скрипт entrypoint, который запускает init-скрипты из `/etc/docker-custom-init/*.sh` (или из переменных окружения)? +- [ ] Entrypoint и CMD записаны в exec-форме (`["entrypoint.sh", "param"]`)? +- [ ] Внутри скрипта используется `exec` для передачи управления основному процессу (сигналы корректно обрабатываются)? +- [ ] Пользователь переключается на непривилегированного (через `gosu` или `su-exec`) в entrypoint? + +## 5. .dockerignore +- [ ] Существует файл `.dockerignore` в корне проекта? +- [ ] В него включены: `.git`, `node_modules`, `venv`, `__pycache__`, `*.md`, `docker-compose.yml`, временные файлы? + +## 6. Makefile +- [ ] Есть Makefile с таргетами для сборки, запуска, возможно `docker init`? +- [ ] В Dockerfile или инструкциях не используется прямая сборка через `docker build`, а только через `make`? + +## 7. Docker Compose +- [ ] Есть файл `docker-compose.yml` (или `docker-compose.yaml`) для локального запуска? +- [ ] В compose корректно указаны порты, volumes, переменные окружения, не используется непривилегированный пользователь без необходимости? + +## 8. Сканирование уязвимостей +- [ ] В CI/CD добавлен этап сканирования готового образа (trivy, docker scout, grype)? +- [ ] Уязвимости критического уровня отсутствуют или задокументированы? + +## 9. Тестирование +- [ ] Dockerfile успешно собирается без ошибок? +- [ ] Контейнер запускается и отвечает на healthcheck (если задан)? +- [ ] Init-скрипты выполняются в правильном порядке? + +--- + +### Пример быстрой проверки (через команды) + +```bash +# 1. Проверка на секреты (не должно быть hardcoded паролей) +grep -n 'password\|secret\|key=' Dockerfile + +# 2. Проверка exec-формы +grep -n '^ENTRYPOINT\|^CMD' Dockerfile | grep -v '^\[' + +# 3. Проверка наличия пользователя +grep -n '^RUN.*useradd\|^USER' Dockerfile + +# 4. Проверка healthcheck +grep 'HEALTHCHECK' Dockerfile || echo "HEALTHCHECK отсутствует" +``` diff --git a/.agents/skills/common/README.md b/.agents/skills/common/README.md new file mode 100644 index 0000000..5a602a6 --- /dev/null +++ b/.agents/skills/common/README.md @@ -0,0 +1,11 @@ +# Common Skills + +> **Русская версия:** [README.ru.md](README.ru.md) + +Language-agnostic skills applicable across all projects. + +## Available Skills + +| Skill | Description | +|-------|-------------| +| [common-daemon-cli-skill](common-daemon-cli-skill) | Use this skill whenever you need to implement a system daemon mode in your CLI application. | diff --git a/.agents/skills/common/README.ru.md b/.agents/skills/common/README.ru.md new file mode 100644 index 0000000..74cdcd0 --- /dev/null +++ b/.agents/skills/common/README.ru.md @@ -0,0 +1,12 @@ +# Common Skills + +> **English version:** [README.md](README.md) +> **Вернуться к оглавлению:** [README.ru.md](../../README.ru.md) + +Языко-независимые скиллы, применимые во всех проектах. + +## Доступные скиллы + +| Скилл | Описание | +|-------|----------| +| [common-daemon-cli-skill](common-daemon-cli-skill) | Используйте этот скилл, когда необходимо реализовать режим системного демона в CLI-приложении. | diff --git a/.agents/skills/common/common-daemon-cli-skill/SKILL.md b/.agents/skills/common/common-daemon-cli-skill/SKILL.md new file mode 100644 index 0000000..51a3739 --- /dev/null +++ b/.agents/skills/common/common-daemon-cli-skill/SKILL.md @@ -0,0 +1,69 @@ +--- +name: common-daemon-cli-skill +description: Use this skill whenever you need to implement a system daemon mode in your CLI application. +--- + +# The "daemon" Subcommand + +Every CLI daemon must have a `daemon` subcommand with the following nested subcommands: +* logs - view logs of the active daemon +* enable - enable the daemon, copy configuration files and the executable itself to system directories +* disable - disable the daemon; if executable files or config were copied to a system directory, do not touch them +* status - show the daemon's status. Is it enabled? If it crashed, what error? The last 50 lines of logs if it crashed. +* env - allows modifying the environment variables with which the daemon runs. +* restart - restarts the daemon + +For example: +```shell +myrootcommand daemon [ enable / disable / logs / status / env ] +``` + +# Enabling the Daemon + +Enabling the daemon must support the following operating systems: +* Linux-based + * \+ Systemd + * \+ OpenRC + * \+ Init.D +* FreeBSD +* Windows +* MacOS + +(The method by which the application is added to autostart is displayed in `status`) + +Enabling includes: +* Copying the configuration file and the application executable to a location where the user won't accidentally delete them. For example, to `/var/lib/*` on Linux. If the `--no-copy` flag is provided, copying is skipped and files remain in their original locations. +* Adding the application to autostart with the specified config (if there is a config at all) +* Storing information somewhere publicly accessible that the daemon is enabled. + +# Disabling + +When disabling, check whether the daemon exists or not. + +If the daemon does not exist, simply inform the user. + +If the daemon is in autostart, remove it from there. + +# Removing Copies + +Removes any copies made during enabling, if they were created. + +Activated by the `--remove` flag. + +In this case, a random number between 1000 and 2000 is generated, which must be entered into an interactive input field to confirm. + +The CLI explicitly and clearly notifies the user about this. + +# Environment Configuration (env) + +Allows editing / adding / deleting the daemon's environment variables. + +Subcommands: +* add - adds a new value; overwrites the old one if it exists +* remove - removes an environment variable +* append - appends to an environment variable using the path separator — for example, on Linux: `$PATH:new_value` and so on. + +```shell +myrootcommand daemon env append PATH /path/to/my/external/files +myrootcommand daemon restart +``` \ No newline at end of file diff --git a/.agents/skills/golang/README.md b/.agents/skills/golang/README.md new file mode 100644 index 0000000..e5a1558 --- /dev/null +++ b/.agents/skills/golang/README.md @@ -0,0 +1,12 @@ +# Go Skills + +> **Русская версия:** [README.ru.md](README.ru.md) + +Skills specific to Go (Golang) projects. + +## Available Skills + +| Skill | Description | +|-------|-------------| +| [golang-flexible-config-skill](golang-flexible-config-skill) | Defines how an AI agent should implement configuration loading in any Go application. | +| [golang-tswf-codestyle-skill](golang-tswf-codestyle-skill) | Tswf.io Go codestyle conventions: naming, interfaces, constructors, line breaks, and project structure. | diff --git a/.agents/skills/golang/README.ru.md b/.agents/skills/golang/README.ru.md new file mode 100644 index 0000000..6b43974 --- /dev/null +++ b/.agents/skills/golang/README.ru.md @@ -0,0 +1,13 @@ +# Go Skills + +> **English version:** [README.md](README.md) +> **Вернуться к оглавлению:** [README.ru.md](../../README.ru.md) + +Скиллы для проектов на Go (Golang). + +## Доступные скиллы + +| Скилл | Описание | +|-------|----------| +| [golang-flexible-config-skill](golang-flexible-config-skill) | Определяет, как AI-агент должен реализовать загрузку конфигурации в любом Go-приложении. | +| [golang-tswf-codestyle-skill](golang-tswf-codestyle-skill) | Конвенции кодстайла Go для tswf.io: именование, интерфейсы, конструкторы, переносы строк и структура проекта. | diff --git a/.agents/skills/golang/golang-flexible-config-skill/SKILL.md b/.agents/skills/golang/golang-flexible-config-skill/SKILL.md new file mode 100644 index 0000000..b1b9201 --- /dev/null +++ b/.agents/skills/golang/golang-flexible-config-skill/SKILL.md @@ -0,0 +1,261 @@ +--- +name: golang-flexible-config-skill +description: This skill defines how an AI agent should implement configuration loading in any Go application. +--- + +## Skill: Go Configuration Pipeline (Launch Arg → Env → Config File → Defaults) + +**Description**: This skill defines how an AI agent should implement configuration loading in any Go application. The configuration must be loaded in the following order of priority (each source overrides the previous): + +1. **Launch arguments** (command-line flags) – **must be handled via Cobra**. +2. **Environment variables** (uppercase, dots/dashes replaced by underscores). +3. **Configuration file** (YAML/JSON/TOML). +4. **Hardcoded defaults**. + +The skill enforces consistent logging of the config file location (found or not), a well-defined search path list, and a `generate-config` subcommand that produces a commented example config in either English or Russian. +All subcommands and flag definitions **must use the Cobra library** (`github.com/spf13/cobra`). + +### Env Variable Rules + +- All environment variables must use **UPPER_CASE**. +- Dots (`.` ) and dashes (`-`) in config property names are replaced with underscores (`_`). +- Example: property `db.path` maps to env `APP_DB_PATH`, `log-level` maps to `APP_LOG_LEVEL`. +- Use `viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_", "-", "_"))`. + +### Config File Search Order + +The config file is searched in the following order (first found wins). **The agent must log the exact path where the file was found.** If no file is found, log "Configuration file not found" and log the **list of all checked paths** so the user knows where to place one. + +1. **Environment variable `APP_CONFIG_LOCATION`** (or custom prefix) – absolute path. +2. **Working directory** – `./config.yaml` (or other extensions). +3. **User config directory** – `~/.config/{app-name}/config.yaml`. +4. **Binary directory** – directory containing the executable. +5. **System Config default** - directory such as /etc/* on unix systems + +### Subcommand: `generate-config` (Cobra based) + +The application must support a subcommand `generate-config` that writes an example config file with detailed comments. + +- **Flag `--lang`** (default `"en"`, possible values `"en"` and `"ru"`). + - `en`: comments in English. + - `ru`: comments in Russian. +- **Flag `--output`** (optional; if not provided, prints to stdout; if given, writes to that file). + +The generated file must include every configuration parameter with a meaningful comment describing its purpose and type. + +### Example Implementation (Template for AI Agent – Cobra version) + +Below is a complete, production‑ready example. The agent should use this pattern or a very similar one. + +```go +package main + +import ( + "fmt" + "log" + "os" + "path/filepath" + "strings" + + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +// Config structure with mapstructure tags +type Config struct { + Port int `mapstructure:"port"` + DBPath string `mapstructure:"db_path"` + LogLevel string `mapstructure:"log_level"` +} + +func main() { + var rootCmd = &cobra.Command{ + Use: "myapp", + Short: "MyApp configuration loader", + Long: `Loads configuration from defaults, file, env, and CLI flags (in order of priority).`, + RunE: func(cmd *cobra.Command, args []string) error { + cfg, err := loadConfig() + if err != nil { + return err + } + _ = cfg // use cfg in your application + return nil + }, + } + + // Define main flags + rootCmd.Flags().Int("port", 0, "listen port (overrides env/file)") + rootCmd.Flags().String("db-path", "", "path to database") + rootCmd.Flags().String("log-level", "", "log level (debug, info, warn, error)") + + // Bind Viper to flags + viper.BindPFlag("port", rootCmd.Flags().Lookup("port")) + viper.BindPFlag("db_path", rootCmd.Flags().Lookup("db-path")) + viper.BindPFlag("log_level", rootCmd.Flags().Lookup("log-level")) + + // Subcommand: generate-config + var generateCmd = &cobra.Command{ + Use: "generate-config", + Short: "Generate an example config file", + Run: func(cmd *cobra.Command, args []string) { + lang, _ := cmd.Flags().GetString("lang") + output, _ := cmd.Flags().GetString("output") + generateConfig(lang, output) + }, + } + generateCmd.Flags().String("lang", "en", "Language for comments: en or ru") + generateCmd.Flags().String("output", "", "Output file path (if empty, prints to stdout)") + rootCmd.AddCommand(generateCmd) + + if err := rootCmd.Execute(); err != nil { + log.Fatal(err) + } +} + +// loadConfig implements the ordered configuration loading +func loadConfig() (*Config, error) { + // 1. Defaults (lowest priority) + viper.SetDefault("port", 8080) + viper.SetDefault("db_path", "./data.db") + viper.SetDefault("log_level", "info") + + // 2. Config file search with logging + viper.SetConfigName("config") + viper.SetConfigType("yaml") // can also support json, toml, etc. + + // Collect all search paths for logging + searchPaths := []string{} + + // a) Environment variable APP_CONFIG_LOCATION + if envLoc := os.Getenv("APP_CONFIG_LOCATION"); envLoc != "" { + viper.SetConfigFile(envLoc) + searchPaths = append(searchPaths, fmt.Sprintf("ENV: APP_CONFIG_LOCATION = %s", envLoc)) + if err := viper.ReadInConfig(); err == nil { + log.Printf("Config file found: %s (from APP_CONFIG_LOCATION)", viper.ConfigFileUsed()) + } else { + return nil, fmt.Errorf("config file specified in APP_CONFIG_LOCATION not found: %s", envLoc) + } + } else { + // b) Working directory + wd, _ := os.Getwd() + searchPaths = append(searchPaths, fmt.Sprintf("Working directory: %s", filepath.Join(wd, "config.yaml"))) + viper.AddConfigPath(".") + + // c) ~/.config/{app-name}/ + homeDir, _ := os.UserHomeDir() + appName := "myapp" // replace with your application name + userConfigPath := filepath.Join(homeDir, ".config", appName) + searchPaths = append(searchPaths, fmt.Sprintf("User config: %s", filepath.Join(userConfigPath, "config.yaml"))) + viper.AddConfigPath(userConfigPath) + + // d) Binary directory + exePath, _ := os.Executable() + exeDir := filepath.Dir(exePath) + searchPaths = append(searchPaths, fmt.Sprintf("Binary directory: %s", filepath.Join(exeDir, "config.yaml"))) + viper.AddConfigPath(exeDir) + + // e) /etc/{app-name}/ + etcPath := filepath.Join("/etc", appName) + searchPaths = append(searchPaths, fmt.Sprintf("System config: %s", filepath.Join(etcPath, "config.yaml"))) + viper.AddConfigPath(etcPath) + + // Try to read config + if err := viper.ReadInConfig(); err != nil { + if _, ok := err.(viper.ConfigFileNotFoundError); ok { + log.Println("Configuration file not found. Using defaults and env/args.") + log.Println("Search paths checked:") + for _, p := range searchPaths { + log.Println(" ", p) + } + } else { + return nil, fmt.Errorf("error reading config: %w", err) + } + } else { + log.Printf("Config file found: %s", viper.ConfigFileUsed()) + } + } + + // 3. Environment variables + viper.SetEnvPrefix("APP") + viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_", "-", "_")) + viper.AutomaticEnv() + + // 4. Command-line flags – already bound via Cobra, Viper will read them + // No additional code needed, flags are already processed by Cobra + + // 5. Decode into Config struct + var cfg Config + if err := viper.Unmarshal(&cfg); err != nil { + return nil, fmt.Errorf("config unmarshal failed: %w", err) + } + return &cfg, nil +} + +// generateConfig writes an example config file with English or Russian comments +func generateConfig(lang, output string) { + var commentLines []string + switch lang { + case "ru": + commentLines = []string{ + "# Конфигурация приложения MyApp", + "# Все значения могут быть переопределены через переменные окружения (префикс APP_)", + "# или аргументы командной строки.", + "", + "port: 8080 # Порт, на котором будет слушать HTTP-сервер", + "db_path: \"./data.db\" # Путь к файлу базы данных SQLite", + "log_level: \"info\" # Уровень логирования: debug, info, warn, error", + } + default: // en + commentLines = []string{ + "# MyApp configuration file", + "# All values can be overridden by environment variables (prefix APP_)", + "# or command-line flags.", + "", + "port: 8080 # HTTP server listening port", + "db_path: \"./data.db\" # Path to SQLite database file", + "log_level: \"info\" # Log level: debug, info, warn, error", + } + } + + content := strings.Join(commentLines, "\n") + "\n" + if output != "" { + if err := os.WriteFile(output, []byte(content), 0644); err != nil { + log.Fatalf("Failed to write example config: %v", err) + } + log.Printf("Example config written to %s", output) + } else { + fmt.Print(content) + } +} +``` + +### Agent Instructions + +- Use the code above as a baseline. +- **All subcommands and CLI flags must be implemented via Cobra** (`github.com/spf13/cobra`). +- Always include logging of config file location (found or not) and all checked search paths. +- The `generate-config` subcommand must accept `--lang` (default `"en"`, can be `"ru"`) and `--output`. +- Comments inside the generated config must be meaningful and match the selected language. +- The config search order and env variable rules are mandatory. +- If the agent uses a different configuration library (e.g., `envconfig`, `cleanenv`), the same semantics must be maintained, but CLI handling must still be through Cobra. +- **Never set `SilenceUsage: true` on the root command or any subcommand.** Incorrect flags or invalid subcommands **must** result in an explicit error message and the usage output. Cobra’s default behavior already provides this; leave `SilenceUsage` and `SilenceErrors` at their default (`false`). Do not suppress automatic usage printing on parse errors. + +--- + +## Self‑Check: Adding a New Config Property + +When you introduce a new configuration property to the application (e.g. `max_connections`), verify each of the following points. **Tick all boxes before considering the change complete.** + +- [ ] 1. **Default value** – A sensible hardcoded default is set in `viper.SetDefault(...)` (or equivalent). +- [ ] 2. **Struct field** – The property exists as a field in the `Config` struct with a correct `mapstructure` tag. +- [ ] 3. **Env mapping** – The corresponding environment variable is automatically picked up. Ensure the env name follows the pattern: prefix + uppercase + underscores (dots/dashes replaced). + *Example:* for `max_connections` you should be able to set `APP_MAX_CONNECTIONS`. +- [ ] 4. **Command‑line flag (Cobra)** – A flag is defined on the appropriate Cobra command (root or sub) and bound via `viper.BindPFlag(...)`. + *Example flag name:* `--max-connections` (dashes). The binding uses the struct key `max_connections`. +- [ ] 5. **Config file key** – The property is documented as a key in the example config file (YAML key matches the struct field name). +- [ ] 6. **Comments in `generate-config`** – The example config output includes a meaningful comment for the new property in **both** English and Russian (if the `--lang ru` case is implemented). The comment explains the unit, default, and allowed values if applicable. +- [ ] 7. **Logging** – No additional logging is required for a single property change; the existing logging of the config file location is sufficient. +- [ ] 8. **Consistency check** – Verify that the same property name is used consistently across: struct tag, env prefix replacement, flag binding, and config file key. + +**Run through this checklist every time you add or modify a configuration property.** This ensures all four sources (defaults, file, env, flags) work seamlessly together. + diff --git a/.agents/skills/golang/golang-tswf-codestyle-skill/SKILL.md b/.agents/skills/golang/golang-tswf-codestyle-skill/SKILL.md new file mode 100644 index 0000000..1924a38 --- /dev/null +++ b/.agents/skills/golang/golang-tswf-codestyle-skill/SKILL.md @@ -0,0 +1,243 @@ +--- +name: golang-tswf-codestyle-skill +description: ТЫ ДОЛЖЕН использовать этот скилл для всех Go проектов, модуль которых содержит подстроку tswf.io или если пользователь явно выбрал этот скилл. +--- + +# Naming Conventions + +## Базовые инструкции + +* __Запрещено использовать короткие имена__ - `i`, `j`, `k`, `temp` и так далее - под запретом. Все переменные и методы должны иметь осмысленные имена. +* __Локальные переменные__ - camelCase, `:=` +* __Слайсы__ - всегда инициализируются через `make`. +* __Поля переменные__ - camelCase +* __Function Receiver__ - первая буква структуры, владелец по указателю. +* __Структура, скрытая за интерфейсом__ - camelCase с маленькой буквы (`myPrivateStuct`) +* __Публичная структура__, _например Dto_ - camelCase с большой буквы (`MyPublicStruct`) +```go +type Something struct {} + +func (s /*<--- первая буква слова Something*/ *Something) somethingFunction() { } +``` + +## Пакеты в именах типов + +Старайся использовать пакет, как часть имени класса, а классы старайся раскладывать по пакетам как можно более по смыслу, но не уходя в спагетти код + +__Плохой пример__ +```go +dtos.SomethingApiUserDto +``` + +__Хороший пример__ +```go +somethingapi.UserDto +``` + +## Лаконичные, достаточные названия + +Если класс что-то делает, а так чаще всего - старайся вложить это в название. + +Например класс для регистрации - `Registrar`, а класс для продвинутого конфигурирования чего-то - `AdvancedConfigurer`. + + +Если ты видишь, что тебе в имени нужно указать что-то слишком длинное, вроде `SomethingApiUserDtoMapperToOurEntity`, то постарайся закрыть вопрос контекста в имени класса его пакетом и придумай название получше. + +# Interfaces + +Ты ДОЛЖЕН скрывать компоненты за интерфейсами. + +Это позволит подстраховаться от жесткой связанности на структуру. + +Например: + +**ПЛОХОЙ пример** + +```go +type MyComponent struct { + // ... +} + +func NewMyComponent() *MyComponent {} +``` + +**ПРАВИЛЬНЫЙ ПРИМЕР** + +```go +type MyComponent interface { + // Все нужные публичные методы из myComponent +} + +type myComponent struct { + // ... +} + +// Этот пример правильный - используется интерфейс +func NewMyComponent() MyComponent { + return &myComponent{} +} +``` + +Даже в рамках одного пакета при возможности используй интерфейсы вместо структур для инъекций компонентов + +# Инстанцирование + +Все новые объекты создаются через конструктор. + +Конструктор принимает все объекты зависимости и внедряет их в создаваемый объект прямо при конструировании. + +Если возникает циклическая зависимость, то можно применить паттерн "Фасад" + +__Плохой пример__ + +```go +type MyComponent interface{ + SetDependency1(dep Dependency1) + SetDependency2(dep Dependency2) +} + +// Плохой пример +// Конструктор не гарантирует полного инстанцирования объекта. +// Такой конструктор может вернуть объект в некорректном состоянии (если вызывающий код сам не использует сеттеры для зависимостей) +func NewMyComponent() MyComponent { /** ... **/ } +``` + +__Хороший пример__ + +```go +type MyComponent interface{ + +} + +// Хороший пример +// Конструктор явно принял все зависимости +// Параметры конструктора для читаемости каждый на новой строке +func NewMyComponent( + dep1 Dependency1, + dep2 Dependency1, +) MyComponent +{ + /** ... **/ +} +``` + +# Перенос строк + +Для читаемости кода человеком и улучшения его визуальной структуры в коде применяются переносы строк. + +Ты можешь применять их более креативно, но приведу два кейса: __вложенность__ и __много параметров__ функции + +## Вложенность + +Если вызовы вложены один в другой, то человеку-читателю легко потерять структуру. Например: + +__Плохой пример__ + +```go +// Вся цепочка смешивается в кашу. +// Сразу не видно, кто в кого вложен. Читателю приходится напрягаться просто чтобы это понять. Это очень плохой пример +SomeMethod1(SomeMethod2(SomeMethod3()), SomeMethod4(&myStruct{1, 2, 3})) +``` + +__Хороший пример__ + +```go +// Вся цепочка вызовов структурно сразу визуализируется глазами читателя. +// Видно, кто в кого вложен. Это хороший пример +SomeMethod1( + SomeMethod2( + SomeMethod3(), + ), + SomeMethod4( + &myStruct{1, 2, 3}, + ), +) +``` + +## Множество параметров функции + +Если у функции есть параметры с длинными именами, типами или просто занимающими место - используй перенос строк, чтобы наглядно разделить их. + +__Плохой пример__ + +```go +// Все в кучу. Чем больше параметров, тем тяжелее читать человеку +// Это плохой пример. +func funcOne(a string, b int, c bool, g pos.Position, e user.Controller) {} + +func main() { + funcTwo("hello world", 1, false, resolvePos().absolute(), resolveController()) +} +``` + +__Хороший пример__ + +```go +// Четко видно структуру. Человеку просто такое читать. +// Это хороший пример. +func funcOne( + a string, + b int, + c bool, + g pos.Position, + e user.Controller, +) {} + +func main() { + funcTwo( + "hello world", + 1, + false, + resolvePos().absolute(), + resolveController(), + ) +} +``` + +# Project Structure + +## Обязательно для любого Go проекта + +* Makefile с кросс-платформенной сборкой +* README.md + русская версия +* Весь код лежит в папках `pkg`, `cmd` или `resources` ( код для доступа к embed ресурсам ) +* Папка `bin` - туда попадают собранные через Make бинари. Она в gitignore + +## Для микросервисов + +Если это сервис, то добавляется +* Dockerfile +* Docker-compose +* k8s chart + +## CLI приложение +* Папка `cmd`, в подпапках которой реализуются консольные команды на `cobra`(!) + +## Структура файлов + +* Root + * bin # ОБЯЗАТЕЛЬНО в .gitignore!! + * doc + * deploy + * docker (_тут если делаешь Docker, то добавь сразу compose. и посмотри релевантные скиллы для этого_) + * k8s + * e.t.c. + * pkg + * domain + * adapters + * infrastructure + * cmd + * \ + * resources + * \ + * go.mod + * go.sum + * README.md + * README.ru.md + * .gitignore + * Makefile + +# Имя модуля + +Спроси имя модуля проекта, если пользователь явно его не задал. +Если пользователь дал базовый путь (он оканчивается на `/`), то прибавь к нему имя корневой папки проекта \ No newline at end of file diff --git a/.codegraph b/.codegraph new file mode 120000 index 0000000..074a08b --- /dev/null +++ b/.codegraph @@ -0,0 +1 @@ +/home/vergil/.omo/codegraph/projects/go-synapse-backupper-e2e7657dae43c695 \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9759939 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +.git +.omo +.agents +bin +*.md +*.pem +*.priv.* +*.tmp +doc/ +deploy/ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ccc1113 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +bin/ +*.tmp +*.pqenc +*.pem +!example*.pem +!*.example.pem +/.omo/ diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..30cf57e --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..5edb56d --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,17 @@ + + + + + postgresql + true + org.postgresql.Driver + jdbc:postgresql://localhost:5430/postgres + + + + + + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/go-synapse-backupper.iml b/.idea/go-synapse-backupper.iml new file mode 100644 index 0000000..5e764c4 --- /dev/null +++ b/.idea/go-synapse-backupper.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/go.imports.xml b/.idea/go.imports.xml new file mode 100644 index 0000000..644cdf0 --- /dev/null +++ b/.idea/go.imports.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..99559ee --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.omo/notepads/synapse-backupper/learnings.md b/.omo/notepads/synapse-backupper/learnings.md new file mode 100644 index 0000000..861bba3 --- /dev/null +++ b/.omo/notepads/synapse-backupper/learnings.md @@ -0,0 +1,92 @@ +# Synapse Backupper - Learnings & Conventions + +## Project +- Module: git.tswf.io/infra/go-synapse-backupper +- Go 1.26+ +- NO CGO, NO k8s, NO systemd daemon ceremony + +## Skills in use +- golang-tswf-codestyle-skill (project structure) +- golang-flexible-config-skill (config loading) +- dockerfile-skill (multistage Dockerfile) + +## Key Decisions +- TDD throughout +- Dual KEM: ML-KEM-768 (0x0006) + X25519 (0x0007) +- Composite HKDF combiner +- v2 .pqenc artifact format +- Two-phase Sink contract (Begin/Commit/Abort) +- Pipeline orchestrator with select-based fan-in + +## Issues/Problems +- (As of Todo 5) Adapter packages (`mlkem768`, `x25519`) do NOT expose a LoadPriv-from-raw constructor; their `Decapsulate` type-asserts to its own unexported `privKey` type and rejects any other `RecipientPriv` implementation. This means KeyManager-constructed raw-bytes-backed `recipientPriv` (Todo 6's ProductType) CANNOT currently be passed to the adapters' `Decapsulate` — they would fail the type assertion. Latent bug surfaced while authoring the composite golden fixture; resolved in tests by registering deterministic FAKE KEMs under the same schemeIDs (0x0006/0x0007, ct lengths 1088/32) so reconstruction from committed raw bytes is possible without touching the adapter packages (out of scope for Todo 5). Real-key Decrypt-with-loaded-PEM must be revisited when KeyManager (Todo 6) is integrated into backup/restore (Todos 11/12) — likely requires exposing an exported `LoadPriv(raw) crypto.RecipientPriv` on each adapter. + + +## 2026-07-25T00:08:53+03:00 Todo 1 Complete +- Go module initialized with go 1.26 +- Project skeleton created per tswf-codestyle-skill +- All directories: bin/, doc/, deploy/docker/, pkg/{domain,adapters,infrastructure}/, cmd/synapse-backupper/, resources/ +- go.mod module path: git.tswf.io/infra/go-synapse-backupper +- .gitignore excludes bin/, *.tmp, *.pqenc, *.pem (allows example*.pem) +- Makefile, README.md, README.ru.md, config.example.yaml are empty placeholders for later todos +- Verified: go build ./... passes, skeleton binary prints correct output +- Environment: Go 1.26.5 installed via golang.org/dl + +## 2026-07-25T00:28:00+03:00 Todo 2 Complete +- Created pkg/domain/crypto/ ports: KEM, Encryptor, Decryptor, KeyManager interfaces +- Created RecipientPub/RecipientPriv interfaces with SchemeID/KeyID/Raw methods +- Created concurrent-safe Registry (sync.RWMutex) with Register/Lookup/KEMFactory +- Defined sentinel errors: ErrUnknownScheme, ErrDuplicateScheme +- TDD: wrote registry_test.go first, then registry.go implementation +- Verified: `go test -race ./pkg/domain/crypto/...` passes (1.043s) +- Verified: `go build ./...` passes +- No concrete KEM implementations yet (blocked for Todo 3/4) +- No crypto/mlkem or crypto/ecdh imports in domain package + +## 2026-07-25 Todo 3 Complete +- Created pkg/adapters/crypto/mlkem768/ adapter wrapping Go 1.26 stdlib crypto/mlkem +- TDD: wrote mlkem768_test.go first, then mlkem768.go implementation +- Adapter implements crypto.KEM interface with GenerateKeyPair, Encapsulate, Decapsulate +- KeyID derived as SHA-256(pub.Raw()[:8])[:8] +- Encapsulate swaps stdlib return order (ss, ct) → adapter (ct, ss) per domain contract +- Explicit return-order test: TestEncapsulateReturnOrder asserts len(ct)==1088 && len(ss)==32 +- Decapsulate implements explicit rejection because crypto/mlkem.Decapsulate uses implicit rejection + (docs claim it returns an error for invalid ciphertexts, but implementation always returns nil) + Workaround: recompute Kout = SHAKE256(z || ciphertext) from priv seed and compare; match = ErrDecapsulationFailed +- Registered factory under suiteID 0x0006 in init() to package-level DefaultRegistry +- Verified: `go test -race ./pkg/adapters/crypto/mlkem768/...` passes (1.034s) +- Verified: `go test -run TestRoundTrip -v ./pkg/adapters/crypto/mlkem768/...` prints PASS +- Verified: `grep -q "suiteID.*0x0006" pkg/adapters/crypto/mlkem768/mlkem768.go` succeeds + +## 2026-07-25 Todo 4 Complete +- Created pkg/adapters/crypto/x25519/ adapter wrapping Go 1.26 stdlib crypto/ecdh X25519 +- TDD: wrote x25519_test.go first, then x25519.go implementation +- Adapter implements crypto.KEM interface with GenerateKeyPair, Encapsulate, Decapsulate +- KeyID derived as SHA-256(pub.Raw())[:8] (full raw key, not truncated like mlkem768) +- Encapsulate: ephemeral keypair via ecdh.X25519().GenerateKey(rand); ct = ephemeralPub.Bytes() (32B); ss = ephemeralPriv.ECDH(pub) (32B) +- Decapsulate: parse ct as ecdh.X25519().NewPublicKey(ct), ss = priv.ECDH(ephemeralPub) +- Added explicit ciphertext validation in Decapsulate: reject len != 32, high bit set (bit 255), and all-zero identity point + - Go stdlib ecdh.NewPublicKey only validates length, so explicit validation is required for KEM security +- Independent ECDH verification test: reconstruct ecdh.PrivateKey from priv.Raw() and ecdh.PublicKey from ct, compute shared secret, assert matches encapsulate output +- Round-trip stress test: 1000 iterations with fresh keypairs each iteration +- Random ciphertext test: 32 random bytes with high bit set → Decapsulate returns ErrDecapsulationFailed +- Registered factory under suiteID 0x0007 in init() to package-level DefaultRegistry +- Verified: `go test -race ./pkg/adapters/crypto/x25519/...` passes (3.662s) +- Verified: `grep -q "suiteID.*0x0007" pkg/adapters/crypto/x25519/x25519.go` succeeds +- Verified: `grep -q "ecdh.X25519" pkg/adapters/crypto/x25519/x25519.go` succeeds + + +## 2026-07-25 Todo 5 Complete (Composite Encryptor/Decryptor + v2 Artifact) +- Created pkg/adapters/crypto/composite/ with composite.go (production) + composite_test.go (TDD) + golden_generate_test.go (//go:build golden_generate one-time generator) +- Created testdata/golden-1byte.pqenc (1274 bytes — 1231 fixed header + 22B body chunk record for 1-byte 0xAA + 21B final marker chunk record) + testdata/golden-keys.json (committed priv raws as base64 — 122 bytes) +- All 16 required tests pass under -race: (a) Golden decrypt-equality on committed fixture + header byte-offset stability [magic@0:4=0x47535051, version@4:6=0x0002, flags@6:10=0, nRecipients@10=0x02, slot0 schemeID@11:13=0x0006, slot1 schemeID@1113:1115=0x0007], (b) round-trip 0/1/64KiB-1/64KiB/64KiB+1/1MiB, (c) empty→1 final chunk (ct=16B tag-only, flags=0x01), (d) exactly-64KiB→2 chunks (full body flags=0x00 + zero-length final markers flags=0x01), (e) counter wrap to 0xFFFFFFFFFFFFFFFF → ErrNonceCounterWrapped, (f) payload tamper → ErrTamperingDetected, (g) wrappedCEK tamper → ErrTamperingDetected, (h) wrong pq priv swap → ErrWrongKeys (via keyID sanity check), (i) format conformance, (j) version==0x0001 → ErrUnsupportedVersion + countingReader assertion reader.n==11 (no GCM ops attempted), (k) nRecipients==0 → ErrMalformedHeader, (l) nRecipients>2 OR ctLen>1<<20 → ErrMalformedHeader with reader.n==25 (ctLen validation fires per-slot BEFORE any ct io.ReadFull), (m) zero-length non-final chunk → ErrMalformedChunk, (n) oversized chunk (>64KiB+16) → ErrMalformedChunk, (o) premature EOF without final marker → ErrUnexpectedEOF, (p) truncated 30-byte header → ErrMalformedHeader with reader.n<=39 (no recipient allocation) +- Production sentinel errors: ErrMalformedHeader, ErrUnsupportedVersion, ErrWrongKeys, ErrTamperingDetected, ErrNonceCounterWrapped, ErrMalformedChunk, ErrUnexpectedEOF +- Adaptive parser ordering: magic check → version check (ErrUnsupportedVersion BEFORE any flags/nRecipients validation — no GCM ops) → flags check → nRecipients check → per-slot (read meta → validate ctLen ≤ max → read ct) → tail (wrapNonce+wrappedCEK+firstPayloadNonce) → decaps → HKDF combiner → unwrap CEK → chunk stream +- HKDF combiner: VERBATIM per plan Metis B1, but the plan's pseudocode assumed `hkdf.Expand` returns an infinite `io.Reader` requiring `io.ReadFull`. Go 1.26 stdlib `crypto/hkdf` returns `([]byte, error)` DIRECTLY (signatures `Extract(h func() H, secret, salt []byte) ([]byte, error)` and `Expand(h func() H, prk []byte, info string, keyLength int) ([]byte, error)`) — no reader is involved, so neither io.ReadAll nor io.ReadFull is needed; the spirit of the plan's "do not use io.ReadAll on hkdf.Expand" guidance is preserved trivially. Verified at /home/vergil/sdk/go1.26.5/src/crypto/hkdf/hkdf.go. +- Format spec pinned (verbatim from plan line 31): magic u32 BE 0x47535051 "GSPQ" + version u16 BE 0x0002 + flags u32 BE 0x00000000 + nRecipients u8 0x02 + 2 inline-ct recipient blocks (each: schemeID u16 + keyID 8B + ctLen u32 + ct; slot 0 PQ ct=1088B, slot 1 classical ct=32B) + wrapNonce 12B + wrappedCEK 48B (= 32B CEK + 16B GCM tag) + firstPayloadNonce 12B + chunked payload [len u32 BE 4B][flags 1B][AES-256-GCM ct + 16B tag] +- Chunk AEAD: 64 KiB body chunks with flags=0x00; ALWAYS-emit zero-length final marker chunk with flags=0x01 on EOF (Metis B2 — never seek backwards to mutate; the previous chunk's fullness does not affect marker emission) +- CEK wrap: aes.NewCipher(kekFinal) → cipher.NewGCM → Seal(nil, wrapNonce(12B from crypto/rand), cek(32B), AAD=[0x00,0x02]=version u16 BE) +- Counter increment (Metis N5, verbatim): counter := binary.BigEndian.Uint64(chunkNonce[4:12]); newCounter := counter + 1; if newCounter <= counter { return ErrNonceCounterWrapped }; binary.BigEndian.PutUint64(chunkNonce[4:12], newCounter) — chunkNonce[0:4] (random base) untouched +- Slot routing: POSITIONAL (slot 0 ← pq priv, slot 1 ← classical priv) per Metis N4; keyID equality enforced as a fast wrong-key reject BEFORE any AEAD operation (plan N4's "keyID is informational/audit only" preserved — keyID collision would still route correctly positionally and surface ErrTamperingDetected downstream) +- Registry wiring: NewEncryptor/NewDecryptor take a `crypto.Registry`; production code never imports mlkem768 OR x25519 directly — every scheme lookup goes through `Registry.Lookup(schemeID)` as the plan mandates. Tests use a fakeRegistry registering deterministic `fakeKem`(schemeID, ctLen) under the same 0x0006/0x0007 schemeIDs — fake Priv/Pub types (`fakePriv`/`fakePub`) live in composite_test.go so the committed golden fixture can reconstruct privs from raw bytes in testdata/golden-keys.json. +- Verified: `go test -race ./pkg/adapters/crypto/composite/...` PASSES (1.116s) ; `go test -race -count=3 ./pkg/adapters/crypto/composite/...` PASSES (1.318s) ; `go build ./...` PASSES ; `go vet ./pkg/adapters/crypto/composite/...` clean ; `grep -q "ErrNonceCounterWrapped" composite.go` succeeds ; `go test -race ./...` PASSES for ALL packages (no regression) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..deabb44 --- /dev/null +++ b/Makefile @@ -0,0 +1,37 @@ +.PHONY: build docker-build docker-run docker-push lint vet gofumpt test cross-build integration-test + +BIN := synapse-backupper +CMD := ./cmd/synapse-backupper +GO := go + +build: + $(GO) build -o bin/$(BIN) $(CMD) + +docker-build: + docker build -t synapse-backupper:latest -f deploy/docker/Dockerfile . + +docker-run: + docker run --rm synapse-backupper:latest --help + +docker-push: + docker push synapse-backupper:latest + +lint: + golangci-lint run --timeout 5m ./... + +vet: + $(GO) vet ./... + +gofumpt: + gofumpt -l . + +test: + $(GO) test -race ./... + +cross-build: + GOOS=linux GOARCH=amd64 $(GO) build -o bin/$(BIN)-linux-amd64 $(CMD) + GOOS=linux GOARCH=arm64 $(GO) build -o bin/$(BIN)-linux-arm64 $(CMD) + +integration-test: docker-build + docker tag synapse-backupper:latest synapse-backupper:test + bash scripts/integration-test.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..c4ae6d6 --- /dev/null +++ b/README.md @@ -0,0 +1,229 @@ +# Synapse Backupper + +PostgreSQL backup tool for [Synapse](https://github.com/element-hq/synapse) with composite dual-KEM encryption. + +## Overview + +`synapse-backupper` creates encrypted PostgreSQL dumps using a **composite** encryption scheme that combines a post-quantum KEM (ML-KEM-768) with a classical KEM (X25519). Both keys are required to decrypt a backup (AND model). The tool supports two operational modes: a one-shot `backup` command and a scheduler mode (`run`) that performs backups on a cron schedule. + +Backups are stored locally on disk; retention pruning is applied automatically based on age. + +## Install + +Build the Docker image: + +```bash +make docker-build +``` + +This produces `synapse-backupper:latest`. The image contains the compiled binary, PostgreSQL client tools, and runs as an unprivileged user. + +## Quick Start + +### 1. Generate encryption keys + +Generate both key pairs (post-quantum and classical) with the `keygen` subcommand: + +```bash +mkdir -p ./keys +docker run --rm -u root -v "$(pwd)/keys:/keys" synapse-backupper:latest \ + keygen --type both --out-prefix /keys/synapse +chown -R "$(id -u):$(id -g)" ./keys +``` + +> **Note:** The container image runs as an unprivileged `app` user by default. `keygen` must write to the mounted host directory, so it is run as root here, then ownership is restored to the current user. Adjust `chown` (e.g., with `sudo`) if you are not running as root. + +This creates four files under `./keys/`: + +| File | Purpose | +|------|---------| +| `synapse.pq.pub.pem` | Post-quantum public key (for backup) | +| `synapse.pq.priv.pem` | Post-quantum private key (for restore, keep offline) | +| `synapse.classical.pub.pem` | Classical public key (for backup) | +| `synapse.classical.priv.pem` | Classical private key (for restore, keep offline) | + +**Important:** Private keys should never be mounted into the backup container. Store them offline or on a separate restore-only host. + +### 2. Run modes + +#### Scheduler mode (`run`) + +The default command starts a cron scheduler and an HTTP health-check endpoint: + +```bash +docker run -d \ + --name synapse-backupper \ + -v "$(pwd)/keys:/keys:ro" \ + -v "$(pwd)/backups:/backups" \ + -e APP_PG_HOST=db \ + -e APP_PG_DATABASE=synapse \ + -e APP_PG_USER=synapse \ + -e APP_PG_PASSWORD=secret \ + -e APP_PQ_PUBLIC_KEY_PATH=/keys/synapse.pq.pub.pem \ + -e APP_CLASSICAL_PUBLIC_KEY_PATH=/keys/synapse.classical.pub.pem \ + -e APP_BACKUP_DIR=/backups \ + synapse-backupper:latest +``` + +By default backups run at `03:00` daily. The schedule is controlled by `backup.cron` in the config file or `APP_BACKUP_CRON`. + +#### One-shot backup (`backup`) + +Run a single backup immediately: + +```bash +docker run --rm \ + -v "$(pwd)/keys:/keys:ro" \ + -v "$(pwd)/backups:/backups" \ + -e APP_PG_HOST=db \ + -e APP_PG_DATABASE=synapse \ + -e APP_PG_USER=synapse \ + -e APP_PG_PASSWORD=secret \ + -e APP_PQ_PUBLIC_KEY_PATH=/keys/synapse.pq.pub.pem \ + -e APP_CLASSICAL_PUBLIC_KEY_PATH=/keys/synapse.classical.pub.pem \ + -e APP_BACKUP_DIR=/backups \ + synapse-backupper:latest backup +``` + +The resulting file is named `synapse-.dump.pqenc` and placed in the backup directory. The underlying dump is produced in PostgreSQL custom format (`--format=custom`), which is the format expected by `pg_restore`. + +### 3. Restore a backup on a separate host + +Restoration is intentionally performed on a host that does **not** have access to the database. Only the private keys are required. + +```bash +docker run --rm \ + -v "$(pwd)/keys:/keys:ro" \ + -v "$(pwd)/backups:/backups:ro" \ + -v "$(pwd)/restored:/out" \ + synapse-backupper:latest restore \ + --in /backups/synapse-20260102-150405.dump.pqenc \ + --privkey-pq /keys/synapse.pq.priv.pem \ + --privkey-classical /keys/synapse.classical.priv.pem \ + --out /out/restored.dump +``` + +Then restore the plaintext dump with standard PostgreSQL tools: + +```bash +pg_restore --clean --if-exists --dbname=synapse restored.dump +``` + +## Configuration + +The tool reads configuration in the following priority order: command-line flags → `APP_*` environment variables → config file → defaults. + +Quick Start examples use environment variables. The prefix is `APP_`, and nested keys use underscores, for example: + +- `APP_PG_HOST` +- `APP_PG_DATABASE` +- `APP_BACKUP_DIR` +- `APP_PQ_PUBLIC_KEY_PATH` +- `APP_CLASSICAL_PUBLIC_KEY_PATH` + +To use a config file instead, generate an example and mount it into the container: + +```bash +docker run --rm synapse-backupper:latest generate-config --lang en > config.yaml +``` + +Edit `config.yaml`, then mount it at `/config.yaml` when running the container: + +```bash +docker run -d \ + --name synapse-backupper \ + -v "$(pwd)/config.yaml:/config.yaml" \ + -v "$(pwd)/keys:/keys:ro" \ + -v "$(pwd)/backups:/backups" \ + synapse-backupper:latest +``` + +Environment variables override values from the config file. + +## Docker Compose + +The scheduler can also be run with Docker Compose. Example `docker-compose.yml`: + +```yaml +version: '3.8' +services: + synapse-backupper: + image: synapse-backupper:latest + volumes: + - ./backups:/backups + - ./keys:/keys:ro + environment: + - APP_PG_HOST=synapse-pg + - APP_PG_DATABASE=synapse + - APP_PG_USER=synapse + - APP_PG_PASSWORD=secret + - APP_PQ_PUBLIC_KEY_PATH=/keys/synapse.pq.pub.pem + - APP_CLASSICAL_PUBLIC_KEY_PATH=/keys/synapse.classical.pub.pem + - APP_BACKUP_DIR=/backups + - APP_BACKUP_CRON=0 0 3 * * * + healthcheck: + test: ["CMD", "wget", "-qO-", "http://localhost:8080/healthz"] + interval: 30s + timeout: 3s + start_period: 10s + restart: unless-stopped +``` + +> **Important:** Only public keys (`*.pub.pem`) should be present in `./keys`. Move private keys (`*.priv.pem`) to an offline or restore-only host before starting the container. + +Start the scheduler with: + +```bash +docker compose up -d +``` + +## Security Model + +### Defence in depth + +Backups are encrypted with a **composite** scheme: a shared secret is derived independently from both the post-quantum and classical KEMs, and the payload is encrypted with a symmetric key derived from both secrets. An attacker must break **both** KEMs to recover the data. + +### AND model + +Decryption requires **both** private keys. The `restore` command will fail if either key is missing or incorrect. This prevents a single compromised key from exposing backups. + +### Plug-and-play KEM + +KEM implementations are registered in a runtime registry by scheme ID. New post-quantum or classical algorithms can be added without changing the backup or restore logic. + +### Private key isolation + +Private keys are **not** needed for backup creation. The backup container only mounts public keys (`:ro`). Private keys should live on a separate restore host or offline storage, reducing the blast radius of a backup-server compromise. + +## Limitations + +This is an MVP release. The following features are **not** implemented: + +- **S3 / object storage** — backups are written to a local directory only. +- **Kubernetes deployment** — no Helm chart or operator is provided. +- **Streaming / incremental backups** — each run produces a full `pg_dump`. +- **Multi-database support** — a single database per instance is assumed. + +## Development + +Run unit tests: + +```bash +make test +``` + +Run the end-to-end integration test (requires Docker): + +```bash +make integration-test +``` + +Cross-compile: + +```bash +make cross-build +``` + +## License + +MIT diff --git a/README.ru.md b/README.ru.md new file mode 100644 index 0000000..eda3950 --- /dev/null +++ b/README.ru.md @@ -0,0 +1,229 @@ +# Synapse Backupper + +Инструмент для резервного копирования PostgreSQL [Synapse](https://github.com/element-hq/synapse) с композитным шифрованием на основе двух механизмов обмена ключами (dual-KEM). + +## Обзор + +`synapse-backupper` создает зашифрованные дампы PostgreSQL с использованием **композитной** схемы шифрования, которая объединяет постквантовый KEM (ML-KEM-768) и классический KEM (X25519). Для расшифровки резервной копии требуются оба ключа (модель AND). Инструмент поддерживает два режима работы: разовое резервное копирование (`backup`) и планировщик (`run`), который выполняет копирование по расписанию cron. + +Копии хранятся локально на диске; устаревшие копии автоматически удаляются по возрасту. + +## Установка + +Сборка Docker-образа: + +```bash +make docker-build +``` + +В результате собирается образ `synapse-backupper:latest`. Внутри образа находится скомпилированный бинарник, клиентские утилиты PostgreSQL, а сам контейнер запускается от непривилегированного пользователя. + +## Быстрый старт + +### 1. Генерация ключей шифрования + +Сгенерируйте обе пары ключей (постквантовую и классическую) с помощью подкоманды `keygen`: + +```bash +mkdir -p ./keys +docker run --rm -u root -v "$(pwd)/keys:/keys" synapse-backupper:latest \ + keygen --type both --out-prefix /keys/synapse +chown -R "$(id -u):$(id -g)" ./keys +``` + +> **Примечание:** Образ контейнера по умолчанию запускается от непривилегированного пользователя `app`. Подкоманда `keygen` должна писать в смонтированный с хоста каталог, поэтому здесь она запускается от `root`, а затем владение файлами возвращается текущему пользователю. Если вы не работаете от `root`, скорректируйте команду `chown` (например, через `sudo`). + +В каталоге `./keys/` появятся четыре файла: + +| Файл | Назначение | +|------|------------| +| `synapse.pq.pub.pem` | Постквантовый публичный ключ (для резервного копирования) | +| `synapse.pq.priv.pem` | Постквантовый приватный ключ (для восстановления, хранить офлайн) | +| `synapse.classical.pub.pem` | Классический публичный ключ (для резервного копирования) | +| `synapse.classical.priv.pem` | Классический приватный ключ (для восстановления, хранить офлайн) | + +**Важно:** приватные ключи никогда не следует монтировать в контейнер, который делает резервные копии. Храните их офлайн или на отдельном хосте, предназначенном только для восстановления. + +### 2. Режимы работы + +#### Режим планировщика (`run`) + +Команда по умолчанию запускает планировщик по расписанию cron и HTTP-эндпоинт для проверки здоровья: + +```bash +docker run -d -u root \ + --name synapse-backupper \ + -v "$(pwd)/keys:/keys:ro" \ + -v "$(pwd)/backups:/backups" \ + -e APP_PG_HOST=db \ + -e APP_PG_DATABASE=postgres \ + -e APP_PG_USER=synapse \ + -e APP_PG_PASSWORD=changeme \ + -e APP_PQ_PUBLIC_KEY_PATH=/keys/synapse.pq.pub.pem \ + -e APP_CLASSICAL_PUBLIC_KEY_PATH=/keys/synapse.classical.pub.pem \ + -e APP_BACKUP_DIR=/backups \ + synapse-backupper:latest +``` + +По умолчанию резервное копирование выполняется ежедневно в `03:00`. Расписание задается параметром `backup.cron` в конфигурационном файле или переменной окружения `APP_BACKUP_CRON`. + +#### Разовое резервное копирование (`backup`) + +Выполнить одну резервную копию немедленно: + +```bash +docker run --rm -u root \ + -v "$(pwd)/keys:/keys:ro" \ + -v "$(pwd)/backups:/backups" \ + -e APP_PG_HOST=5432 \ + -e APP_PG_DATABASE=postgres \ + -e APP_PG_USER=synapse \ + -e APP_PG_PASSWORD=changeme \ + -e APP_PQ_PUBLIC_KEY_PATH=/keys/synapse.pq.pub.pem \ + -e APP_CLASSICAL_PUBLIC_KEY_PATH=/keys/synapse.classical.pub.pem \ + -e APP_BACKUP_DIR=/backups \ + synapse-backupper:latest backup +``` + +Результирующий файл получает имя `synapse-.dump.pqenc` и сохраняется в каталог резервных копий. Дамп создается в формате PostgreSQL custom (`--format=custom`), который ожидает `pg_restore`. + +### 3. Восстановление на отдельном хосте + +Процедура восстановления специально выполняется на хосте, который **не** имеет доступа к базе данных. Достаточно только приватных ключей. + +```bash +docker run --rm \ + -v "$(pwd)/keys:/keys:ro" \ + -v "$(pwd)/backups:/backups:ro" \ + -v "$(pwd)/restored:/out" \ + synapse-backupper:latest restore \ + --in /backups/synapse-20260102-150405.dump.pqenc \ + --privkey-pq /keys/synapse.pq.priv.pem \ + --privkey-classical /keys/synapse.classical.priv.pem \ + --out /out/restored.dump +``` + +После этого восстановите расшифрованный дамп стандартными средствами PostgreSQL: + +```bash +pg_restore --clean --if-exists --dbname=synapse restored.dump +``` + +## Конфигурация + +Приоритет источников настроек: флаги командной строки → переменные окружения `APP_*` → файл конфигурации → значения по умолчанию. + +Примеры в разделе «Быстрый старт» используют переменные окружения. Префикс — `APP_`, вложенные ключи разделяются подчеркиванием, например: + +- `APP_PG_HOST` +- `APP_PG_DATABASE` +- `APP_BACKUP_DIR` +- `APP_PQ_PUBLIC_KEY_PATH` +- `APP_CLASSICAL_PUBLIC_KEY_PATH` + +Чтобы использовать файл конфигурации, сгенерируйте пример и смонтируйте его в контейнер: + +```bash +docker run --rm synapse-backupper:latest generate-config --lang ru > config.yaml +``` + +Отредактируйте `config.yaml`, затем смонтируйте его в `/config.yaml` при запуске контейнера: + +```bash +docker run -d \ + --name synapse-backupper \ + -v "$(pwd)/config.yaml:/config.yaml" \ + -v "$(pwd)/keys:/keys:ro" \ + -v "$(pwd)/backups:/backups" \ + synapse-backupper:latest +``` + +Переменные окружения переопределяют значения из файла конфигурации. + +## Docker Compose + +Планировщик можно запустить через Docker Compose. Пример `docker-compose.yml`: + +```yaml +version: '3.8' +services: + synapse-backupper: + image: synapse-backupper:latest + volumes: + - ./backups:/backups + - ./keys:/keys:ro + environment: + - APP_PG_HOST=synapse-pg + - APP_PG_DATABASE=synapse + - APP_PG_USER=synapse + - APP_PG_PASSWORD=secret + - APP_PQ_PUBLIC_KEY_PATH=/keys/synapse.pq.pub.pem + - APP_CLASSICAL_PUBLIC_KEY_PATH=/keys/synapse.classical.pub.pem + - APP_BACKUP_DIR=/backups + - APP_BACKUP_CRON=0 0 3 * * * + healthcheck: + test: ["CMD", "wget", "-qO-", "http://localhost:8080/healthz"] + interval: 30s + timeout: 3s + start_period: 10s + restart: unless-stopped +``` + +> **Важно:** В каталоге `./keys` должны находиться только публичные ключи (`*.pub.pem`). Перед запуском контейнера переместите приватные ключи (`*.priv.pem`) на офлайн-хост или хост, предназначенный только для восстановления. + +Запуск планировщика: + +```bash +docker compose up -d +``` + +## Модель безопасности + +### Многоуровневая защита + +Резервные копии шифруются по **композитной** схеме: общий секрет вычисляется независимо от постквантового и классического KEM, а полезная нагрузка шифруется симметричным ключом, полученным из обоих секретов. Злоумышленник должен взломать **оба** механизма, чтобы получить данные. + +### Модель AND + +Для расшифровки требуются **оба** приватных ключа. Команда `restore` завершится с ошибкой, если хотя бы один ключ отсутствует или неверен. Это исключает компрометацию копий при компрометации одного ключа. + +### Plug-and-play KEM + +Реализации KEM регистрируются в runtime-реестре по идентификатору схемы. Новые постквантовые или классические алгоритмы можно добавлять без изменения логики резервного копирования и восстановления. + +### Изоляция приватных ключей + +Приватные ключи **не нужны** при создании резервной копии. Контейнер, выполняющий бэкап, монтирует только публичные ключи (`:ro`). Приватные ключи должны находиться на отдельном хосте восстановления или в офлайн-хранилище, что сужает зону поражения при компрометации сервера резервного копирования. + +## Ограничения + +Это MVP-релиз. Следующие возможности **не реализованы**: + +- **S3 / объектное хранилище** — копии пишутся только в локальный каталог. +- **Развертывание в Kubernetes** — Helm-чарт и оператор не предоставляются. +- **Потоковое / инкрементальное резервное копирование** — каждый запуск создает полный `pg_dump`. +- **Поддержка нескольких баз данных** — предполагается одна база данных на инстанс. + +## Разработка + +Запуск unit-тестов: + +```bash +make test +``` + +Запуск сквозного интеграционного теста (требуется Docker): + +```bash +make integration-test +``` + +Кросс-компиляция: + +```bash +make cross-build +``` + +## Лицензия + +MIT diff --git a/cmd/synapse-backupper/backup.go b/cmd/synapse-backupper/backup.go new file mode 100644 index 0000000..7b30768 --- /dev/null +++ b/cmd/synapse-backupper/backup.go @@ -0,0 +1,167 @@ +package main + +import ( + "context" + "crypto/rand" + "fmt" + "io" + "log/slog" + "os" + "path/filepath" + "time" + + "github.com/google/uuid" + "github.com/spf13/cobra" + + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/config" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/composite" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/keymanager" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/mlkem768" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/x25519" + pgdumpadapter "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/pgdump" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/pipeline" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/retention" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/storage/local" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/pgdump" +) + +var ( + newKeyManager = keymanager.NewKeyManager + newLocalSink = local.NewLocalSink + newRunner = defaultNewRunner + outputWriter io.Writer = os.Stderr +) + +type pipelineRunner interface { + Run( + ctx context.Context, + pgDumpOpts pgdump.Options, + recipients []crypto.RecipientPub, + sink domain.Sink, + rand io.Reader, + ) error +} + +func defaultNewRunner(options ...pipeline.Option) pipelineRunner { + return pipeline.NewRunner(options...) +} + +func init() { + config.RegisterFlags(backupCmd) +} + +var backupCmd = &cobra.Command{ + Use: "backup", + Short: "Run a one-off backup", + RunE: func(cmd *cobra.Command, args []string) error { + ctx := cmd.Context() + if ctx == nil { + ctx = context.Background() + } + + startTime := time.Now().UTC() + runID, err := uuid.NewRandom() + if err != nil { + return fmt.Errorf("generate run-id: %w", err) + } + + logger := slog.New(slog.NewTextHandler(outputWriter, nil)) + logger.Info( + "backup started", + slog.String("run_id", runID.String()), + slog.Time("start_time", startTime), + ) + + cfg, err := config.Load(cmd) + if err != nil { + return fmt.Errorf("load config: %w", err) + } + + keyManager := newKeyManager(crypto.NewRegistry()) + pqPub, err := keyManager.LoadPub(cfg.PQPublicKeyPath, cfg.PQScheme) + if err != nil { + return fmt.Errorf("load PQ public key: %w", err) + } + + classicalPub, err := keyManager.LoadPub(cfg.ClassicalPublicKeyPath, cfg.ClassicalScheme) + if err != nil { + return fmt.Errorf("load classical public key: %w", err) + } + + recipients := []crypto.RecipientPub{pqPub, classicalPub} + + pgDumpOpts := pgdump.Options{ + Host: cfg.PG.Host, + Port: cfg.PG.Port, + Database: cfg.PG.Database, + User: cfg.PG.User, + Password: cfg.PG.Password, + Key: fmt.Sprintf("synapse-%s.dump.pqenc", startTime.Format("20060102-150405")), + ExcludeTables: cfg.PG.ExcludeTables, + } + + finalPath := filepath.Join(cfg.Backup.Dir, pgDumpOpts.Key) + logger.Info( + "backup destination", + slog.String("backup_dir", cfg.Backup.Dir), + slog.String("output_path", finalPath), + ) + + sink := newLocalSink(cfg.Backup.Dir) + + registry := crypto.NewRegistry() + _ = registry.Register(0x0006, func() crypto.KEM { return mlkem768.New() }) + _ = registry.Register(0x0007, func() crypto.KEM { return x25519.New() }) + runner := newRunner( + pipeline.WithDumper(pgdumpadapter.New()), + pipeline.WithEncryptor(composite.NewEncryptor(registry)), + ) + + err = runner.Run(ctx, pgDumpOpts, recipients, sink, rand.Reader) + endTime := time.Now().UTC() + + var byteCount int64 + if info, statErr := os.Stat(finalPath); statErr == nil { + byteCount = info.Size() + } + + if err != nil { + logger.Error( + "backup failed", + slog.String("run_id", runID.String()), + slog.String("output_path", finalPath), + slog.Time("start_time", startTime), + slog.Time("end_time", endTime), + slog.Int64("byte_count", byteCount), + slog.String("error", err.Error()), + ) + return err + } + + logger.Info( + "backup completed", + slog.String("run_id", runID.String()), + slog.String("output_path", finalPath), + slog.Time("start_time", startTime), + slog.Time("end_time", endTime), + slog.Int64("byte_count", byteCount), + ) + + if _, pruneErr := retention.PruneByAge( + ctx, + cfg.Backup.Dir, + cfg.Backup.RetentionDays, + time.Now(), + ); pruneErr != nil { + logger.Error( + "retention pruning failed", + slog.String("error", pruneErr.Error()), + ) + return pruneErr + } + + return nil + }, +} diff --git a/cmd/synapse-backupper/backup_test.go b/cmd/synapse-backupper/backup_test.go new file mode 100644 index 0000000..f32a12a --- /dev/null +++ b/cmd/synapse-backupper/backup_test.go @@ -0,0 +1,367 @@ +package main + +import ( + "bytes" + "context" + "io" + "os" + "path/filepath" + "regexp" + "strings" + "testing" + "time" + + "github.com/spf13/cobra" + + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/config" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/pipeline" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/pgdump" +) + +// --- Mocks --- + +type mockRecipientPub struct { + schemeID uint16 + keyID []byte + raw []byte +} + +func (m *mockRecipientPub) SchemeID() uint16 { return m.schemeID } +func (m *mockRecipientPub) KeyID() []byte { return m.keyID } +func (m *mockRecipientPub) Raw() []byte { return m.raw } + +type mockKeyManager struct { + loadPubCalls []loadPubCall + pub crypto.RecipientPub +} + +type loadPubCall struct { + path string + schemeID uint16 +} + +func (m *mockKeyManager) LoadPub( + path string, + schemeID uint16, +) ( + crypto.RecipientPub, + error, +) { + m.loadPubCalls = append( + m.loadPubCalls, + loadPubCall{path: path, schemeID: schemeID}, + ) + return m.pub, nil +} + +func (m *mockKeyManager) LoadPriv( + path string, + schemeID uint16, +) ( + crypto.RecipientPriv, + error, +) { + return nil, nil +} + +func (m *mockKeyManager) Generate( + schemeID uint16, + pubOut io.Writer, + privOut io.Writer, + rand io.Reader, +) error { + return nil +} + +type successDumper struct { + data []byte + receivedOpts pgdump.Options +} + +func (d *successDumper) Dump( + ctx context.Context, + opts pgdump.Options, + sink io.Writer, +) error { + d.receivedOpts = opts + if len(d.data) > 0 { + _, err := sink.Write(d.data) + if err != nil { + return err + } + } + if closer, ok := sink.(io.Closer); ok { + _ = closer.Close() + } + return nil +} + +type failDumper struct{} + +func (d *failDumper) Dump( + ctx context.Context, + opts pgdump.Options, + sink io.Writer, +) error { + return pgdump.ErrPgDumpFailed(1) +} + +type passthroughEncryptor struct{} + +func (e *passthroughEncryptor) Encrypt( + plaintext io.Reader, + recipients []crypto.RecipientPub, + sink io.Writer, + rand io.Reader, +) error { + _, err := io.Copy(sink, plaintext) + return err +} + +// --- Helpers --- + +func setBackupFlags( + cmd *cobra.Command, + backupDir string, + pqPath string, + classicalPath string, +) { + config.RegisterFlags(cmd) + _ = cmd.Flags().Set("backup-dir", backupDir) + _ = cmd.Flags().Set("pq-public-key-path", pqPath) + _ = cmd.Flags().Set("classical-public-key-path", classicalPath) + _ = cmd.Flags().Set("pg-host", "localhost") + _ = cmd.Flags().Set("pg-port", "5432") + _ = cmd.Flags().Set("pg-user", "testuser") + _ = cmd.Flags().Set("pg-password", "testpass") + _ = cmd.Flags().Set("pg-database", "testdb") +} + +func restoreGlobals(t *testing.T) { + originalNewKeyManager := newKeyManager + originalNewRunner := newRunner + originalOutputWriter := outputWriter + t.Cleanup(func() { + newKeyManager = originalNewKeyManager + newRunner = originalNewRunner + outputWriter = originalOutputWriter + }) +} + +// --- Tests --- + +func TestBackupCmd_Structure(t *testing.T) { + if backupCmd == nil { + t.Fatal("backupCmd is nil") + } + if backupCmd.Use != "backup" { + t.Fatalf("expected Use='backup', got %q", backupCmd.Use) + } +} + +func TestBackupCmd_Success(t *testing.T) { + restoreGlobals(t) + + backupDir := t.TempDir() + pqPath := filepath.Join(backupDir, "pq.pub") + classicalPath := filepath.Join(backupDir, "classical.pub") + + _ = os.WriteFile(pqPath, []byte("pq"), 0o644) + _ = os.WriteFile(classicalPath, []byte("classical"), 0o644) + + mockKM := &mockKeyManager{ + pub: &mockRecipientPub{ + schemeID: 0x0006, + keyID: make([]byte, 8), + raw: make([]byte, 32), + }, + } + newKeyManager = func(crypto.Registry) crypto.KeyManager { + return mockKM + } + + testData := []byte("test backup payload") + dumper := &successDumper{data: testData} + newRunner = func(...pipeline.Option) pipelineRunner { + return pipeline.NewRunner( + pipeline.WithDumper(dumper), + pipeline.WithEncryptor(&passthroughEncryptor{}), + ) + } + + var buf bytes.Buffer + outputWriter = &buf + + cmd := &cobra.Command{} + setBackupFlags(cmd, backupDir, pqPath, classicalPath) + _ = cmd.Flags().Set("backup-retention-days", "1") + + oldFile := filepath.Join(backupDir, "synapse-20230101-000000.dump.pqenc") + _ = os.WriteFile(oldFile, []byte("old"), 0o644) + oldTime := time.Now().Add(-48 * time.Hour) + _ = os.Chtimes(oldFile, oldTime, oldTime) + + err := backupCmd.RunE(cmd, []string{}) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if len(mockKM.loadPubCalls) != 2 { + t.Fatalf("expected 2 LoadPub calls, got %d", len(mockKM.loadPubCalls)) + } + if mockKM.loadPubCalls[0].path != pqPath || + mockKM.loadPubCalls[0].schemeID != 0x0006 { + t.Fatalf("unexpected PQ LoadPub call: %+v", mockKM.loadPubCalls[0]) + } + if mockKM.loadPubCalls[1].path != classicalPath || + mockKM.loadPubCalls[1].schemeID != 0x0007 { + t.Fatalf( + "unexpected classical LoadPub call: %+v", + mockKM.loadPubCalls[1], + ) + } + + if dumper.receivedOpts.Host != "localhost" { + t.Fatalf("unexpected host: %q", dumper.receivedOpts.Host) + } + if dumper.receivedOpts.Port != 5432 { + t.Fatalf("unexpected port: %d", dumper.receivedOpts.Port) + } + if dumper.receivedOpts.Database != "testdb" { + t.Fatalf("unexpected database: %q", dumper.receivedOpts.Database) + } + if dumper.receivedOpts.User != "testuser" { + t.Fatalf("unexpected user: %q", dumper.receivedOpts.User) + } + if dumper.receivedOpts.Password != "testpass" { + t.Fatalf("unexpected password: %q", dumper.receivedOpts.Password) + } + + key := dumper.receivedOpts.Key + matched, _ := regexp.MatchString( + `^synapse-\d{8}-\d{6}\.dump\.pqenc$`, + key, + ) + if !matched { + t.Fatalf("unexpected key format: %q", key) + } + + entries, err := os.ReadDir(backupDir) + if err != nil { + t.Fatal(err) + } + var foundFinal int + var foundTmp int + for _, entry := range entries { + name := entry.Name() + if strings.HasSuffix(name, ".dump.pqenc") { + foundFinal++ + } + if strings.HasSuffix(name, ".tmp") { + foundTmp++ + } + } + if foundFinal != 1 { + t.Fatalf("expected 1 final .pqenc file, found %d", foundFinal) + } + if foundTmp != 0 { + t.Fatalf("expected 0 .tmp files, found %d", foundTmp) + } + + if _, err := os.Stat(oldFile); !os.IsNotExist(err) { + t.Fatal("expected old file to be pruned by retention") + } + + logStr := buf.String() + if !strings.Contains(logStr, "run_id=") { + t.Fatal("expected log to contain run_id") + } + if !strings.Contains(logStr, "start_time=") { + t.Fatal("expected log to contain start_time") + } + if !strings.Contains(logStr, "end_time=") { + t.Fatal("expected log to contain end_time") + } + if !strings.Contains(logStr, "byte_count=") { + t.Fatal("expected log to contain byte_count") + } + + re := regexp.MustCompile(`byte_count=(\d+)`) + matches := re.FindAllStringSubmatch(logStr, -1) + if len(matches) == 0 { + t.Fatal("expected log to contain byte_count value") + } + lastMatch := matches[len(matches)-1][1] + if lastMatch == "0" { + t.Fatal("expected non-zero byte_count for successful backup") + } +} + +func TestBackupCmd_PgDumpFailure(t *testing.T) { + restoreGlobals(t) + + backupDir := t.TempDir() + pqPath := filepath.Join(backupDir, "pq.pub") + classicalPath := filepath.Join(backupDir, "classical.pub") + + _ = os.WriteFile(pqPath, []byte("pq"), 0o644) + _ = os.WriteFile(classicalPath, []byte("classical"), 0o644) + + mockKM := &mockKeyManager{ + pub: &mockRecipientPub{ + schemeID: 0x0006, + keyID: make([]byte, 8), + raw: make([]byte, 32), + }, + } + newKeyManager = func(crypto.Registry) crypto.KeyManager { + return mockKM + } + + newRunner = func(...pipeline.Option) pipelineRunner { + return pipeline.NewRunner( + pipeline.WithDumper(&failDumper{}), + pipeline.WithEncryptor(&passthroughEncryptor{}), + ) + } + + var buf bytes.Buffer + outputWriter = &buf + + cmd := &cobra.Command{} + setBackupFlags(cmd, backupDir, pqPath, classicalPath) + + err := backupCmd.RunE(cmd, []string{}) + if err == nil { + t.Fatal("expected non-nil error") + } + + entries, err := os.ReadDir(backupDir) + if err != nil { + t.Fatal(err) + } + for _, entry := range entries { + name := entry.Name() + if strings.HasSuffix(name, ".pqenc") || strings.HasSuffix(name, ".tmp") { + t.Fatalf("unexpected file after failure: %s", name) + } + } + + logStr := buf.String() + if !strings.Contains(logStr, "backup failed") { + t.Fatal("expected 'backup failed' in log") + } + if !strings.Contains(logStr, "run_id=") { + t.Fatal("expected log to contain run_id") + } + if !strings.Contains(logStr, "start_time=") { + t.Fatal("expected log to contain start_time") + } + if !strings.Contains(logStr, "end_time=") { + t.Fatal("expected log to contain end_time") + } + if !strings.Contains(logStr, "byte_count=0") { + t.Fatal("expected log to contain byte_count=0 for failed backup") + } +} diff --git a/cmd/synapse-backupper/generate_config.go b/cmd/synapse-backupper/generate_config.go new file mode 100644 index 0000000..4527e45 --- /dev/null +++ b/cmd/synapse-backupper/generate_config.go @@ -0,0 +1,47 @@ +package main + +import ( + _ "embed" + "fmt" + "os" + + "github.com/spf13/cobra" +) + +//go:embed resources/config.en.yaml +var configEnYAML []byte + +//go:embed resources/config.ru.yaml +var configRuYAML []byte + +func generateConfigCmd() *cobra.Command { + var lang string + var output string + + cmd := &cobra.Command{ + Use: "generate-config", + Short: "Generate a commented example configuration file", + RunE: func(cmd *cobra.Command, args []string) error { + var tmpl []byte + switch lang { + case "en": + tmpl = configEnYAML + case "ru": + tmpl = configRuYAML + default: + return fmt.Errorf("unsupported language: %q (must be \"en\" or \"ru\")", lang) + } + + if output != "" { + return os.WriteFile(output, tmpl, 0o644) + } + _, err := cmd.OutOrStdout().Write(tmpl) + return err + }, + } + + cmd.Flags().StringVar(&lang, "lang", "en", "Language for comments (en or ru)") + cmd.Flags().StringVar(&output, "output", "", "Output file path (empty = stdout)") + + return cmd +} diff --git a/cmd/synapse-backupper/generate_config_test.go b/cmd/synapse-backupper/generate_config_test.go new file mode 100644 index 0000000..61b0c8c --- /dev/null +++ b/cmd/synapse-backupper/generate_config_test.go @@ -0,0 +1,234 @@ +package main + +import ( + "bytes" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/spf13/viper" +) + +func TestGenerateConfigCmd_Flags(t *testing.T) { + cmd := generateConfigCmd() + flags := cmd.Flags() + + lang, err := flags.GetString("lang") + if err != nil { + t.Fatalf("failed to get --lang flag: %v", err) + } + if lang != "en" { + t.Errorf("--lang default = %q, want %q", lang, "en") + } + + output, err := flags.GetString("output") + if err != nil { + t.Fatalf("failed to get --output flag: %v", err) + } + if output != "" { + t.Errorf("--output default = %q, want empty string", output) + } +} + +func TestGenerateConfig_LangEn(t *testing.T) { + cmd := generateConfigCmd() + var buf bytes.Buffer + cmd.SetOut(&buf) + cmd.SetErr(&buf) + + if err := cmd.Flags().Set("lang", "en"); err != nil { + t.Fatalf("Set flag failed: %v", err) + } + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + out := buf.String() + if !strings.Contains(out, "pg:") { + t.Errorf("output missing pg section") + } + if !strings.Contains(out, "host") { + t.Errorf("output missing host key") + } + if !strings.Contains(out, "PostgreSQL") { + t.Errorf("output missing English comment") + } +} + +func TestGenerateConfig_LangRu(t *testing.T) { + cmd := generateConfigCmd() + var buf bytes.Buffer + cmd.SetOut(&buf) + cmd.SetErr(&buf) + + if err := cmd.Flags().Set("lang", "ru"); err != nil { + t.Fatalf("Set flag failed: %v", err) + } + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + out := buf.String() + if !strings.Contains(out, "pg:") { + t.Errorf("output missing pg section") + } + if !strings.Contains(out, "хост") { + t.Errorf("output missing Russian comment (хост)") + } +} + +func TestGenerateConfig_OutputFile(t *testing.T) { + tempDir := t.TempDir() + outputPath := filepath.Join(tempDir, "config.yaml") + + cmd := generateConfigCmd() + var buf bytes.Buffer + cmd.SetOut(&buf) + cmd.SetErr(&buf) + + if err := cmd.Flags().Set("output", outputPath); err != nil { + t.Fatalf("Set flag failed: %v", err) + } + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + data, err := os.ReadFile(outputPath) + if err != nil { + t.Fatalf("failed to read output file: %v", err) + } + if len(data) == 0 { + t.Errorf("output file is empty") + } + + if buf.Len() != 0 { + t.Errorf("stdout not empty when --output set: %q", buf.String()) + } +} + +func TestGenerateConfig_Stdout(t *testing.T) { + cmd := generateConfigCmd() + var buf bytes.Buffer + cmd.SetOut(&buf) + cmd.SetErr(&buf) + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + out := buf.String() + if out == "" { + t.Errorf("stdout empty when no --output") + } + if !strings.Contains(out, "pg:") { + t.Errorf("stdout missing pg section") + } +} + +func TestGenerateConfig_AllKeys(t *testing.T) { + cmd := generateConfigCmd() + var buf bytes.Buffer + cmd.SetOut(&buf) + cmd.SetErr(&buf) + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + out := buf.String() + requiredKeys := []string{ + "host", "port", "user", "password", "database", "sslmode", "exclude_tables", + "dir", "retention_days", "cron", + "pq_scheme", "classical_scheme", + "pq_public_key_path", "classical_public_key_path", + "healthz", "log", + } + + for _, key := range requiredKeys { + if !strings.Contains(out, key) { + t.Errorf("output missing key %q", key) + } + } +} + +func TestGenerateConfig_RoundTrip(t *testing.T) { + tempDir := t.TempDir() + outputPath := filepath.Join(tempDir, "config.yaml") + + cmd := generateConfigCmd() + if err := cmd.Flags().Set("output", outputPath); err != nil { + t.Fatalf("Set flag failed: %v", err) + } + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + v := viper.New() + v.SetConfigFile(outputPath) + if err := v.ReadInConfig(); err != nil { + t.Fatalf("viper read generated config failed: %v", err) + } + + var cfg struct { + PG struct { + Host string `mapstructure:"host"` + Port int `mapstructure:"port"` + User string `mapstructure:"user"` + Password string `mapstructure:"password"` + Database string `mapstructure:"database"` + SSLMode string `mapstructure:"sslmode"` + ExcludeTables []string `mapstructure:"exclude_tables"` + } `mapstructure:"pg"` + Backup struct { + Dir string `mapstructure:"dir"` + RetentionDays int `mapstructure:"retention_days"` + Cron string `mapstructure:"cron"` + } `mapstructure:"backup"` + PQScheme uint16 `mapstructure:"pq_scheme"` + ClassicalScheme uint16 `mapstructure:"classical_scheme"` + PQPublicKeyPath string `mapstructure:"pq_public_key_path"` + ClassicalPublicKeyPath string `mapstructure:"classical_public_key_path"` + Healthz struct { + Port int `mapstructure:"port"` + } `mapstructure:"healthz"` + Log struct { + Level string `mapstructure:"level"` + } `mapstructure:"log"` + } + + if err := v.Unmarshal(&cfg); err != nil { + t.Fatalf("viper unmarshal generated config failed: %v", err) + } + + if cfg.PG.Port != 5432 { + t.Errorf("PG.Port = %d, want 5432", cfg.PG.Port) + } + if cfg.PG.SSLMode != "prefer" { + t.Errorf("PG.SSLMode = %q, want prefer", cfg.PG.SSLMode) + } + if len(cfg.PG.ExcludeTables) != 1 || cfg.PG.ExcludeTables[0] != "e2e_one_time_keys_json" { + t.Errorf("PG.ExcludeTables = %v, want [e2e_one_time_keys_json]", cfg.PG.ExcludeTables) + } + if cfg.Backup.RetentionDays != 180 { + t.Errorf("Backup.RetentionDays = %d, want 180", cfg.Backup.RetentionDays) + } + if cfg.Backup.Cron != "0 0 3 * * *" { + t.Errorf("Backup.Cron = %q, want 0 0 3 * * *", cfg.Backup.Cron) + } + if cfg.PQScheme != 0x0006 { + t.Errorf("PQScheme = 0x%04x, want 0x%04x", cfg.PQScheme, 0x0006) + } + if cfg.ClassicalScheme != 0x0007 { + t.Errorf("ClassicalScheme = 0x%04x, want 0x%04x", cfg.ClassicalScheme, 0x0007) + } + if cfg.Healthz.Port != 8080 { + t.Errorf("Healthz.Port = %d, want 8080", cfg.Healthz.Port) + } + if cfg.Log.Level != "info" { + t.Errorf("Log.Level = %q, want info", cfg.Log.Level) + } +} diff --git a/cmd/synapse-backupper/keygen.go b/cmd/synapse-backupper/keygen.go new file mode 100644 index 0000000..b0fa7d7 --- /dev/null +++ b/cmd/synapse-backupper/keygen.go @@ -0,0 +1,122 @@ +package main + +import ( + "crypto/rand" + "fmt" + "os" + + "github.com/spf13/cobra" + + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/keymanager" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/mlkem768" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/x25519" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +func newRegistry() crypto.Registry { + reg := crypto.NewRegistry() + _ = reg.Register(0x0006, func() crypto.KEM { return mlkem768.New() }) + _ = reg.Register(0x0007, func() crypto.KEM { return x25519.New() }) + return reg +} + +func newKeygenCmd() *cobra.Command { + return newKeygenCmdWithDeps(newRegistry()) +} + +func newKeygenCmdWithDeps(reg crypto.Registry) *cobra.Command { + var ( + keyType string + outPrefix string + force bool + ) + + cmd := &cobra.Command{ + Use: "keygen", + Short: "Generate encryption key pairs", + RunE: func(cmd *cobra.Command, args []string) error { + schemes := []struct { + name string + schemeID uint16 + }{} + + switch keyType { + case "pq": + schemes = append(schemes, struct { + name string + schemeID uint16 + }{"pq", 0x0006}) + case "classical": + schemes = append(schemes, struct { + name string + schemeID uint16 + }{"classical", 0x0007}) + case "both": + schemes = append( + schemes, + struct { + name string + schemeID uint16 + }{"pq", 0x0006}, + struct { + name string + schemeID uint16 + }{"classical", 0x0007}, + ) + default: + return fmt.Errorf("invalid --type %q; must be pq, classical, or both", keyType) + } + + if !force { + for _, s := range schemes { + pubPath := outPrefix + "." + s.name + ".pub.pem" + privPath := outPrefix + "." + s.name + ".priv.pem" + for _, p := range []string{pubPath, privPath} { + if _, err := os.Stat(p); err == nil { + return fmt.Errorf("file already exists: %s (use --force to overwrite)", p) + } + } + } + } + + km := keymanager.NewKeyManager(reg) + + for _, s := range schemes { + pubPath := outPrefix + "." + s.name + ".pub.pem" + privPath := outPrefix + "." + s.name + ".priv.pem" + + pubFile, err := os.OpenFile(pubPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o644) + if err != nil { + return fmt.Errorf("create public key file %s: %w", pubPath, err) + } + + privFile, err := os.OpenFile(privPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o600) + if err != nil { + _ = pubFile.Close() + return fmt.Errorf("create private key file %s: %w", privPath, err) + } + + if err := km.Generate(s.schemeID, pubFile, privFile, rand.Reader); err != nil { + _ = pubFile.Close() + _ = privFile.Close() + return fmt.Errorf("generate %s keys: %w", s.name, err) + } + + if err := pubFile.Close(); err != nil { + return fmt.Errorf("close public key file %s: %w", pubPath, err) + } + if err := privFile.Close(); err != nil { + return fmt.Errorf("close private key file %s: %w", privPath, err) + } + } + + return nil + }, + } + + cmd.Flags().StringVar(&keyType, "type", "both", "Key type to generate (pq|classical|both)") + cmd.Flags().StringVar(&outPrefix, "out-prefix", "", "Output file path prefix") + cmd.Flags().BoolVar(&force, "force", false, "Overwrite existing files") + + return cmd +} diff --git a/cmd/synapse-backupper/keygen_test.go b/cmd/synapse-backupper/keygen_test.go new file mode 100644 index 0000000..2c16a08 --- /dev/null +++ b/cmd/synapse-backupper/keygen_test.go @@ -0,0 +1,444 @@ +package main + +import ( + "bytes" + "encoding/pem" + "os" + "path/filepath" + "testing" + + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/keymanager" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/mlkem768" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/x25519" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +func makeRegistry(t *testing.T) crypto.Registry { + t.Helper() + reg := crypto.NewRegistry() + if err := reg.Register(0x0006, func() crypto.KEM { return mlkem768.New() }); err != nil { + t.Fatalf("register mlkem768: %v", err) + } + if err := reg.Register(0x0007, func() crypto.KEM { return x25519.New() }); err != nil { + t.Fatalf("register x25519: %v", err) + } + return reg +} + +func TestKeygenCmdFlags(t *testing.T) { + cmd := newKeygenCmd() + + // Verify flags exist and have correct defaults. + if cmd.Flag("type") == nil { + t.Fatal("missing --type flag") + } + if cmd.Flag("type").DefValue != "both" { + t.Errorf("--type default = %q, want both", cmd.Flag("type").DefValue) + } + + if cmd.Flag("out-prefix") == nil { + t.Fatal("missing --out-prefix flag") + } + if cmd.Flag("out-prefix").DefValue != "" { + t.Errorf("--out-prefix default = %q, want empty", cmd.Flag("out-prefix").DefValue) + } + + if cmd.Flag("force") == nil { + t.Fatal("missing --force flag") + } + if cmd.Flag("force").DefValue != "false" { + t.Errorf("--force default = %q, want false", cmd.Flag("force").DefValue) + } +} + +func TestKeygenCmdInvalidType(t *testing.T) { + cmd := newKeygenCmd() + cmd.SetArgs([]string{"--type", "invalid", "--out-prefix", filepath.Join(t.TempDir(), "keys")}) + + err := cmd.Execute() + if err == nil { + t.Fatal("expected error for invalid --type") + } +} + +func TestKeygenCmdBoth(t *testing.T) { + reg := makeRegistry(t) + dir := t.TempDir() + prefix := filepath.Join(dir, "keys") + + cmd := newKeygenCmdWithDeps(reg) + cmd.SetArgs([]string{"--type", "both", "--out-prefix", prefix}) + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + // Verify all 4 files exist. + files := []string{ + prefix + ".pq.pub.pem", + prefix + ".pq.priv.pem", + prefix + ".classical.pub.pem", + prefix + ".classical.priv.pem", + } + for _, f := range files { + if _, err := os.Stat(f); err != nil { + t.Errorf("expected file %s to exist: %v", f, err) + } + } +} + +func TestKeygenCmdPEMTypes(t *testing.T) { + reg := makeRegistry(t) + dir := t.TempDir() + prefix := filepath.Join(dir, "keys") + + cmd := newKeygenCmdWithDeps(reg) + cmd.SetArgs([]string{"--type", "both", "--out-prefix", prefix}) + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + tests := []struct { + path string + wantType string + wantKeyLen int + }{ + {prefix + ".pq.pub.pem", "ML-KEM-768 PUBLIC KEY", 1184}, + {prefix + ".pq.priv.pem", "ML-KEM-768 PRIVATE KEY", 64}, + {prefix + ".classical.pub.pem", "X25519 PUBLIC KEY", 32}, + {prefix + ".classical.priv.pem", "X25519 PRIVATE KEY", 32}, + } + + for _, tt := range tests { + data, err := os.ReadFile(tt.path) + if err != nil { + t.Fatalf("read %s: %v", tt.path, err) + } + block, _ := pem.Decode(data) + if block == nil { + t.Fatalf("failed to decode PEM from %s", tt.path) + } + if block.Type != tt.wantType { + t.Errorf("%s PEM type = %q, want %q", tt.path, block.Type, tt.wantType) + } + if len(block.Bytes) != tt.wantKeyLen { + t.Errorf("%s key len = %d, want %d", tt.path, len(block.Bytes), tt.wantKeyLen) + } + } +} + +func TestKeygenCmdRoundTrip(t *testing.T) { + reg := makeRegistry(t) + dir := t.TempDir() + prefix := filepath.Join(dir, "keys") + + cmd := newKeygenCmdWithDeps(reg) + cmd.SetArgs([]string{"--type", "both", "--out-prefix", prefix}) + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + km := keymanager.NewKeyManager(reg) + + schemes := []struct { + pubPath string + privPath string + schemeID uint16 + pubLen int + privLen int + }{ + {prefix + ".pq.pub.pem", prefix + ".pq.priv.pem", 0x0006, 1184, 64}, + {prefix + ".classical.pub.pem", prefix + ".classical.priv.pem", 0x0007, 32, 32}, + } + + for _, s := range schemes { + pub, err := km.LoadPub(s.pubPath, s.schemeID) + if err != nil { + t.Fatalf("LoadPub %s: %v", s.pubPath, err) + } + priv, err := km.LoadPriv(s.privPath, s.schemeID) + if err != nil { + t.Fatalf("LoadPriv %s: %v", s.privPath, err) + } + + if pub.SchemeID() != s.schemeID { + t.Errorf("pub.SchemeID() = 0x%04x, want 0x%04x", pub.SchemeID(), s.schemeID) + } + if priv.SchemeID() != s.schemeID { + t.Errorf("priv.SchemeID() = 0x%04x, want 0x%04x", priv.SchemeID(), s.schemeID) + } + if len(pub.Raw()) != s.pubLen { + t.Errorf("pub.Raw() len = %d, want %d", len(pub.Raw()), s.pubLen) + } + if len(priv.Raw()) != s.privLen { + t.Errorf("priv.Raw() len = %d, want %d", len(priv.Raw()), s.privLen) + } + if len(pub.KeyID()) != 8 { + t.Errorf("pub.KeyID() len = %d, want 8", len(pub.KeyID())) + } + if len(priv.KeyID()) != 8 { + t.Errorf("priv.KeyID() len = %d, want 8", len(priv.KeyID())) + } + + // Verify the raw bytes round-trip correctly by checking the PEM + // contents match what LoadPub/LoadPriv return. + pubPEM, err := os.ReadFile(s.pubPath) + if err != nil { + t.Fatalf("read pub PEM: %v", err) + } + pubBlock, _ := pem.Decode(pubPEM) + if pubBlock == nil { + t.Fatal("failed to decode pub PEM") + } + if !bytes.Equal(pub.Raw(), pubBlock.Bytes) { + t.Errorf("pub.Raw() does not match PEM bytes") + } + + privPEM, err := os.ReadFile(s.privPath) + if err != nil { + t.Fatalf("read priv PEM: %v", err) + } + privBlock, _ := pem.Decode(privPEM) + if privBlock == nil { + t.Fatal("failed to decode priv PEM") + } + if !bytes.Equal(priv.Raw(), privBlock.Bytes) { + t.Errorf("priv.Raw() does not match PEM bytes") + } + } +} + +func TestKeygenCmdPQOnly(t *testing.T) { + reg := makeRegistry(t) + dir := t.TempDir() + prefix := filepath.Join(dir, "keys") + + cmd := newKeygenCmdWithDeps(reg) + cmd.SetArgs([]string{"--type", "pq", "--out-prefix", prefix}) + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + if _, err := os.Stat(prefix + ".pq.pub.pem"); err != nil { + t.Errorf("expected pq.pub.pem to exist: %v", err) + } + if _, err := os.Stat(prefix + ".pq.priv.pem"); err != nil { + t.Errorf("expected pq.priv.pem to exist: %v", err) + } + if _, err := os.Stat(prefix + ".classical.pub.pem"); !os.IsNotExist(err) { + t.Errorf("expected classical.pub.pem to NOT exist") + } + if _, err := os.Stat(prefix + ".classical.priv.pem"); !os.IsNotExist(err) { + t.Errorf("expected classical.priv.pem to NOT exist") + } +} + +func TestKeygenCmdClassicalOnly(t *testing.T) { + reg := makeRegistry(t) + dir := t.TempDir() + prefix := filepath.Join(dir, "keys") + + cmd := newKeygenCmdWithDeps(reg) + cmd.SetArgs([]string{"--type", "classical", "--out-prefix", prefix}) + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + if _, err := os.Stat(prefix + ".classical.pub.pem"); err != nil { + t.Errorf("expected classical.pub.pem to exist: %v", err) + } + if _, err := os.Stat(prefix + ".classical.priv.pem"); err != nil { + t.Errorf("expected classical.priv.pem to exist: %v", err) + } + if _, err := os.Stat(prefix + ".pq.pub.pem"); !os.IsNotExist(err) { + t.Errorf("expected pq.pub.pem to NOT exist") + } + if _, err := os.Stat(prefix + ".pq.priv.pem"); !os.IsNotExist(err) { + t.Errorf("expected pq.priv.pem to NOT exist") + } +} + +func TestKeygenCmdPermissions(t *testing.T) { + reg := makeRegistry(t) + dir := t.TempDir() + prefix := filepath.Join(dir, "keys") + + cmd := newKeygenCmdWithDeps(reg) + cmd.SetArgs([]string{"--type", "both", "--out-prefix", prefix}) + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + pubFiles := []string{prefix + ".pq.pub.pem", prefix + ".classical.pub.pem"} + for _, f := range pubFiles { + info, err := os.Stat(f) + if err != nil { + t.Fatalf("stat %s: %v", f, err) + } + mode := info.Mode().Perm() + if mode != 0o644 { + t.Errorf("%s permissions = 0%o, want 0644", f, mode) + } + } + + privFiles := []string{prefix + ".pq.priv.pem", prefix + ".classical.priv.pem"} + for _, f := range privFiles { + info, err := os.Stat(f) + if err != nil { + t.Fatalf("stat %s: %v", f, err) + } + mode := info.Mode().Perm() + if mode != 0o600 { + t.Errorf("%s permissions = 0%o, want 0600", f, mode) + } + } +} + +func TestKeygenCmdNoOverwrite(t *testing.T) { + reg := makeRegistry(t) + dir := t.TempDir() + prefix := filepath.Join(dir, "keys") + + // Create an existing file. + existing := prefix + ".pq.pub.pem" + if err := os.WriteFile(existing, []byte("existing"), 0o644); err != nil { + t.Fatalf("write existing file: %v", err) + } + + cmd := newKeygenCmdWithDeps(reg) + cmd.SetArgs([]string{"--type", "both", "--out-prefix", prefix}) + + err := cmd.Execute() + if err == nil { + t.Fatal("expected error when file exists without --force") + } + + // Verify existing file was not overwritten. + data, err := os.ReadFile(existing) + if err != nil { + t.Fatalf("read existing file: %v", err) + } + if !bytes.Equal(data, []byte("existing")) { + t.Error("existing file was overwritten without --force") + } +} + +func TestKeygenCmdForceOverwrite(t *testing.T) { + reg := makeRegistry(t) + dir := t.TempDir() + prefix := filepath.Join(dir, "keys") + + // Create an existing file. + existing := prefix + ".pq.pub.pem" + if err := os.WriteFile(existing, []byte("existing"), 0o644); err != nil { + t.Fatalf("write existing file: %v", err) + } + + cmd := newKeygenCmdWithDeps(reg) + cmd.SetArgs([]string{"--type", "both", "--out-prefix", prefix, "--force"}) + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + // Verify file was overwritten with valid PEM. + data, err := os.ReadFile(existing) + if err != nil { + t.Fatalf("read overwritten file: %v", err) + } + block, _ := pem.Decode(data) + if block == nil { + t.Fatal("overwritten file is not valid PEM") + } + if block.Type != "ML-KEM-768 PUBLIC KEY" { + t.Errorf("overwritten PEM type = %q, want ML-KEM-768 PUBLIC KEY", block.Type) + } +} + +func TestKeygenCmdKeyIDConsistency(t *testing.T) { + reg := makeRegistry(t) + dir := t.TempDir() + prefix := filepath.Join(dir, "keys") + + cmd := newKeygenCmdWithDeps(reg) + cmd.SetArgs([]string{"--type", "both", "--out-prefix", prefix}) + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + km := keymanager.NewKeyManager(reg) + + schemes := []struct { + pubPath string + privPath string + schemeID uint16 + pubLen int + privLen int + }{ + {prefix + ".pq.pub.pem", prefix + ".pq.priv.pem", 0x0006, 1184, 64}, + {prefix + ".classical.pub.pem", prefix + ".classical.priv.pem", 0x0007, 32, 32}, + } + + for _, s := range schemes { + pub, err := km.LoadPub(s.pubPath, s.schemeID) + if err != nil { + t.Fatalf("LoadPub %s: %v", s.pubPath, err) + } + priv, err := km.LoadPriv(s.privPath, s.schemeID) + if err != nil { + t.Fatalf("LoadPriv %s: %v", s.privPath, err) + } + + if len(pub.Raw()) != s.pubLen { + t.Errorf("pub %s raw len = %d, want %d", s.pubPath, len(pub.Raw()), s.pubLen) + } + if len(priv.Raw()) != s.privLen { + t.Errorf("priv %s raw len = %d, want %d", s.privPath, len(priv.Raw()), s.privLen) + } + + // KeyID must be present and 8 bytes for both pub and priv. + if len(pub.KeyID()) != 8 { + t.Errorf("pub %s KeyID len = %d, want 8", s.pubPath, len(pub.KeyID())) + } + if len(priv.KeyID()) != 8 { + t.Errorf("priv %s KeyID len = %d, want 8", s.privPath, len(priv.KeyID())) + } + } +} + +func TestKeygenCmdEmptyPrefix(t *testing.T) { + reg := makeRegistry(t) + dir := t.TempDir() + + cmd := newKeygenCmdWithDeps(reg) + cmd.SetArgs([]string{"--type", "pq"}) + cmd.SetOut(nil) + cmd.SetErr(nil) + // Change working directory to temp dir so empty prefix creates files there. + origWd, _ := os.Getwd() + if err := os.Chdir(dir); err != nil { + t.Fatalf("Chdir(%q): %v", dir, err) + } + defer func() { + if err := os.Chdir(origWd); err != nil { + t.Fatalf("Chdir(%q): %v", origWd, err) + } + }() + + if err := cmd.Execute(); err != nil { + t.Fatalf("Execute failed: %v", err) + } + + if _, err := os.Stat(filepath.Join(dir, ".pq.pub.pem")); err != nil { + t.Errorf("expected .pq.pub.pem to exist: %v", err) + } + if _, err := os.Stat(filepath.Join(dir, ".pq.priv.pem")); err != nil { + t.Errorf("expected .pq.priv.pem to exist: %v", err) + } +} diff --git a/cmd/synapse-backupper/main.go b/cmd/synapse-backupper/main.go new file mode 100644 index 0000000..9974b30 --- /dev/null +++ b/cmd/synapse-backupper/main.go @@ -0,0 +1,32 @@ +package main + +import ( + "context" + "fmt" + "os" + "os/signal" + "syscall" + + "github.com/spf13/cobra" +) + +func main() { + ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) + defer stop() + + rootCmd := &cobra.Command{ + Use: "synapse-backupper", + Short: "Synapse database backup tool", + } + rootCmd.SetContext(ctx) + rootCmd.AddCommand(backupCmd) + rootCmd.AddCommand(restoreCmd) + rootCmd.AddCommand(runCmd) + rootCmd.AddCommand(newKeygenCmd()) + rootCmd.AddCommand(generateConfigCmd()) + + if err := rootCmd.ExecuteContext(ctx); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} diff --git a/cmd/synapse-backupper/resources/config.en.yaml b/cmd/synapse-backupper/resources/config.en.yaml new file mode 100644 index 0000000..10a2a9c --- /dev/null +++ b/cmd/synapse-backupper/resources/config.en.yaml @@ -0,0 +1,66 @@ +# Synapse Backupper configuration file +# Generated by: synapse-backupper generate-config --lang en +# Dotted key example: pg.host + +# PostgreSQL connection settings +pg: + # host: string — PostgreSQL server hostname or IP address. + host: "localhost" + + # port: integer — PostgreSQL server port. + port: 5432 + + # user: string — PostgreSQL username for the backup connection. + user: "" + + # password: string — PostgreSQL password for the backup connection. + # Do not commit real passwords to version control. + password: "" + + # database: string — Name of the Synapse database to back up. + database: "" + + # sslmode: string — PostgreSQL SSL mode (disable, allow, prefer, require, verify-ca, verify-full). + sslmode: "prefer" + + # exclude_tables: list of strings — Tables to skip during pg_dump. + # The default excludes the large one-time-keys table to reduce dump size. + exclude_tables: + - "e2e_one_time_keys_json" + +# Backup scheduling and retention settings +backup: + # dir: string — Directory where encrypted backup files are stored. + dir: "" + + # retention_days: integer — How many days to keep backups before pruning. + retention_days: 180 + + # cron: string — Cron expression for automatic backup schedule. + cron: "0 0 3 * * *" + +# Encryption scheme identifiers +# pq_scheme: uint16 — Post-quantum KEM scheme ID. +# 0x0006 = ML-KEM-768 (NIST FIPS 203) +pq_scheme: 0x0006 + +# classical_scheme: uint16 — Classical KEM scheme ID. +# 0x0007 = X25519 ECDH +classical_scheme: 0x0007 + +# Public key file paths for hybrid encryption +# pq_public_key_path: string — Path to the post-quantum public key PEM file. +pq_public_key_path: "" + +# classical_public_key_path: string — Path to the classical public key PEM file. +classical_public_key_path: "" + +# Health check HTTP server settings +healthz: + # port: integer — TCP port for the /healthz endpoint. + port: 8080 + +# Logging settings +log: + # level: string — Log verbosity (debug, info, warn, error). + level: "info" diff --git a/cmd/synapse-backupper/resources/config.ru.yaml b/cmd/synapse-backupper/resources/config.ru.yaml new file mode 100644 index 0000000..3e0e217 --- /dev/null +++ b/cmd/synapse-backupper/resources/config.ru.yaml @@ -0,0 +1,65 @@ +# Файл конфигурации Synapse Backupper +# Сгенерировано командой: synapse-backupper generate-config --lang ru + +# Настройки подключения к PostgreSQL +pg: + # host: строка — имя хоста или IP-адрес сервера PostgreSQL. + host: "localhost" + + # port: целое число — порт сервера PostgreSQL. + port: 5430 + + # user: строка — имя пользователя PostgreSQL для резервного копирования. + user: "synapse" + + # password: строка — пароль пользователя PostgreSQL. + # Не сохраняйте настоящие пароли в системе контроля версий. + password: "changeme" + + # database: строка — имя базы данных Synapse для резервного копирования. + database: "postgres" + + # sslmode: строка — режим SSL PostgreSQL (disable, allow, prefer, require, verify-ca, verify-full). + sslmode: "prefer" + + # exclude_tables: список строк — таблицы, которые следует пропустить при pg_dump. + # По умолчанию исключается большая таблица одноразовых ключей для уменьшения размера дампа. + exclude_tables: + - "e2e_one_time_keys_json" + +# Настройки расписания и хранения резервных копий +backup: + # dir: строка — каталог для хранения зашифрованных файлов резервных копий. + dir: "backups" + + # retention_days: целое число — сколько дней хранить резервные копии перед удалением. + retention_days: 180 + + # cron: строка — выражение cron для автоматического расписания резервного копирования. + cron: "0 0 3 * * *" + +# Идентификаторы схем шифрования +# pq_scheme: uint16 — идентификатор постквантовой схемы KEM. +# 0x0006 = ML-KEM-768 (NIST FIPS 203) +pq_scheme: 0x0006 + +# classical_scheme: uint16 — идентификатор классической схемы KEM. +# 0x0007 = X25519 ECDH +classical_scheme: 0x0007 + +# Пути к файлам открытых ключей для гибридного шифрования +# pq_public_key_path: строка — путь к PEM-файлу постквантового открытого ключа. +pq_public_key_path: "" + +# classical_public_key_path: строка — путь к PEM-файлу классического открытого ключа. +classical_public_key_path: "" + +# Настройки HTTP-сервера проверки состояния +healthz: + # port: целое число — TCP-порт для эндпоинта /healthz. + port: 8080 + +# Настройки журналирования +log: + # level: строка — уровень детализации журнала (debug, info, warn, error). + level: "info" diff --git a/cmd/synapse-backupper/restore.go b/cmd/synapse-backupper/restore.go new file mode 100644 index 0000000..97b1fc9 --- /dev/null +++ b/cmd/synapse-backupper/restore.go @@ -0,0 +1,122 @@ +package main + +import ( + "fmt" + "io" + "os" + + "github.com/spf13/cobra" + + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/composite" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/keymanager" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/mlkem768" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/x25519" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +var ( + newRestoreKeyManager = keymanager.NewKeyManager + newRestoreDecryptor = func(registry crypto.Registry) crypto.Decryptor { + return composite.NewDecryptor(registry) + } + restoreOutput io.Writer = os.Stdout + restoreOsOpen = os.Open +) + +var restoreCmd = &cobra.Command{ + Use: "restore", + Short: "Restore a backup from a .pqenc file", + PreRunE: func(cmd *cobra.Command, args []string) error { + privkeyPq, _ := cmd.Flags().GetString("privkey-pq") + privkeyClassical, _ := cmd.Flags().GetString("privkey-classical") + + var pqMissing bool + if _, err := os.Stat(privkeyPq); err != nil { + pqMissing = true + } + + var classicalMissing bool + if _, err := os.Stat(privkeyClassical); err != nil { + classicalMissing = true + } + + if pqMissing || classicalMissing { + return fmt.Errorf( + "--privkey-pq and --privkey-classical are both required (AND model)", + ) + } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + inPath, _ := cmd.Flags().GetString("in") + outPath, _ := cmd.Flags().GetString("out") + privkeyPq, _ := cmd.Flags().GetString("privkey-pq") + privkeyClassical, _ := cmd.Flags().GetString("privkey-classical") + + inFile, err := restoreOsOpen(inPath) + if err != nil { + return fmt.Errorf("open input file: %w", err) + } + defer inFile.Close() + + registry := crypto.NewRegistry() + _ = registry.Register( + 0x0006, + func() crypto.KEM { return mlkem768.New() }, + ) + _ = registry.Register( + 0x0007, + func() crypto.KEM { return x25519.New() }, + ) + + keyManager := newRestoreKeyManager(registry) + + pqPriv, err := keyManager.LoadPriv(privkeyPq, 0x0006) + if err != nil { + return fmt.Errorf("load PQ private key: %w", err) + } + + classicalPriv, err := keyManager.LoadPriv(privkeyClassical, 0x0007) + if err != nil { + return fmt.Errorf("load classical private key: %w", err) + } + + var out io.Writer + if outPath != "" { + outFile, err := os.Create(outPath) + if err != nil { + return fmt.Errorf("create output file: %w", err) + } + defer outFile.Close() + out = outFile + } else { + out = restoreOutput + } + + decryptor := newRestoreDecryptor(registry) + if err := decryptor.Decrypt( + inFile, + []crypto.RecipientPriv{pqPriv, classicalPriv}, + out, + ); err != nil { + return err + } + + return nil + }, +} + +func init() { + restoreCmd.Flags().String("in", "", "Input .pqenc file path") + restoreCmd.Flags().String("privkey-pq", "", "Path to PQ private key PEM") + restoreCmd.Flags().String( + "privkey-classical", + "", + "Path to classical private key PEM", + ) + restoreCmd.Flags().String("out", "", "Output file path (empty = stdout)") + + _ = restoreCmd.MarkFlagRequired("in") + _ = restoreCmd.MarkFlagRequired("privkey-pq") + _ = restoreCmd.MarkFlagRequired("privkey-classical") +} diff --git a/cmd/synapse-backupper/restore_test.go b/cmd/synapse-backupper/restore_test.go new file mode 100644 index 0000000..598a339 --- /dev/null +++ b/cmd/synapse-backupper/restore_test.go @@ -0,0 +1,498 @@ +package main + +import ( + "bytes" + "errors" + "io" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/spf13/cobra" + + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/composite" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +// --- Mocks --- + +type mockRecipientPriv struct { + schemeID uint16 + keyID []byte + raw []byte +} + +func (m *mockRecipientPriv) SchemeID() uint16 { return m.schemeID } +func (m *mockRecipientPriv) KeyID() []byte { return m.keyID } +func (m *mockRecipientPriv) Raw() []byte { return m.raw } + +type mockRestoreKeyManager struct { + loadPrivCalls []loadPrivCall + pqPriv crypto.RecipientPriv + classicalPriv crypto.RecipientPriv + loadPrivErr error +} + +type loadPrivCall struct { + path string + schemeID uint16 +} + +func (m *mockRestoreKeyManager) LoadPub( + path string, + schemeID uint16, +) ( + crypto.RecipientPub, + error, +) { + return nil, nil +} + +func (m *mockRestoreKeyManager) LoadPriv( + path string, + schemeID uint16, +) ( + crypto.RecipientPriv, + error, +) { + m.loadPrivCalls = append( + m.loadPrivCalls, + loadPrivCall{path: path, schemeID: schemeID}, + ) + if m.loadPrivErr != nil { + return nil, m.loadPrivErr + } + if schemeID == 0x0006 { + return m.pqPriv, nil + } + return m.classicalPriv, nil +} + +func (m *mockRestoreKeyManager) Generate( + schemeID uint16, + pubOut io.Writer, + privOut io.Writer, + rand io.Reader, +) error { + return nil +} + +type mockDecryptor struct { + called bool + src io.Reader + privs []crypto.RecipientPriv + out io.Writer + err error +} + +func (d *mockDecryptor) Decrypt( + src io.Reader, + privs []crypto.RecipientPriv, + plaintext io.Writer, +) error { + d.called = true + d.src = src + d.privs = privs + d.out = plaintext + if d.err != nil { + return d.err + } + _, writeErr := plaintext.Write([]byte("decrypted pg_dump data")) + return writeErr +} + +// --- Helpers --- + +func setRestoreFlags( + cmd *cobra.Command, + inPath string, + pqPath string, + classicalPath string, +) { + _ = cmd.Flags().Set("in", inPath) + _ = cmd.Flags().Set("privkey-pq", pqPath) + _ = cmd.Flags().Set("privkey-classical", classicalPath) +} + +func makeRestoreTestCmd() *cobra.Command { + cmd := &cobra.Command{ + SilenceUsage: true, + SilenceErrors: true, + } + cmd.SetArgs([]string{}) + cmd.Flags().String("in", "", "Input .pqenc file path") + cmd.Flags().String("privkey-pq", "", "Path to PQ private key PEM") + cmd.Flags().String("privkey-classical", "", "Path to classical private key PEM") + cmd.Flags().String("out", "", "Output file path (empty = stdout)") + cmd.PreRunE = restoreCmd.PreRunE + cmd.RunE = restoreCmd.RunE + return cmd +} + +func restoreTestGlobals(t *testing.T) { + originalNewRestoreKeyManager := newRestoreKeyManager + originalNewRestoreDecryptor := newRestoreDecryptor + originalRestoreOutput := restoreOutput + originalRestoreOsOpen := restoreOsOpen + t.Cleanup(func() { + newRestoreKeyManager = originalNewRestoreKeyManager + newRestoreDecryptor = originalNewRestoreDecryptor + restoreOutput = originalRestoreOutput + restoreOsOpen = originalRestoreOsOpen + }) +} + +// --- Tests --- + +func TestRestoreCmd_Structure(t *testing.T) { + if restoreCmd == nil { + t.Fatal("restoreCmd is nil") + } + if restoreCmd.Use != "restore" { + t.Fatalf("expected Use='restore', got %q", restoreCmd.Use) + } + + requiredFlags := []string{"in", "privkey-pq", "privkey-classical"} + for _, f := range requiredFlags { + if restoreCmd.Flag(f) == nil { + t.Fatalf("missing required --%s flag", f) + } + } + + if restoreCmd.Flag("out") == nil { + t.Fatal("missing --out flag") + } + if restoreCmd.Flag("out").DefValue != "" { + t.Fatalf( + "expected --out default empty, got %q", + restoreCmd.Flag("out").DefValue, + ) + } +} + +func TestRestoreCmd_RequiredFlags(t *testing.T) { + required := []string{"in", "privkey-pq", "privkey-classical"} + for _, name := range required { + flag := restoreCmd.Flag(name) + if flag == nil { + t.Fatalf("missing required --%s flag", name) + } + ann, ok := flag.Annotations[cobra.BashCompOneRequiredFlag] + if !ok || len(ann) == 0 || ann[0] != "true" { + t.Fatalf("flag --%s is not marked required", name) + } + } +} + +func TestRestoreCmd_PreRunE_MissingPrivkeyClassical(t *testing.T) { + restoreTestGlobals(t) + + dir := t.TempDir() + inFile := filepath.Join(dir, "backup.pqenc") + _ = os.WriteFile(inFile, []byte("data"), 0o644) + pqFile := filepath.Join(dir, "pq.priv.pem") + _ = os.WriteFile(pqFile, []byte("pq"), 0o600) + classicalFile := filepath.Join(dir, "classical.priv.pem") // does not exist + + openCount := 0 + restoreOsOpen = func(name string) (*os.File, error) { + openCount++ + return os.Open(name) + } + + cmd := makeRestoreTestCmd() + setRestoreFlags(cmd, inFile, pqFile, classicalFile) + + err := cmd.Execute() + if err == nil { + t.Fatal("expected non-nil error") + } + if !strings.Contains( + err.Error(), + "--privkey-pq and --privkey-classical are both required (AND model)", + ) { + t.Fatalf("expected AND model error, got: %v", err) + } + if openCount != 0 { + t.Fatalf("expected no os.Open calls on .pqenc, got %d", openCount) + } +} + +func TestRestoreCmd_PreRunE_MissingPrivkeyPQ(t *testing.T) { + restoreTestGlobals(t) + + dir := t.TempDir() + inFile := filepath.Join(dir, "backup.pqenc") + _ = os.WriteFile(inFile, []byte("data"), 0o644) + pqFile := filepath.Join(dir, "pq.priv.pem") // does not exist + classicalFile := filepath.Join(dir, "classical.priv.pem") + _ = os.WriteFile(classicalFile, []byte("classical"), 0o600) + + openCount := 0 + restoreOsOpen = func(name string) (*os.File, error) { + openCount++ + return os.Open(name) + } + + cmd := makeRestoreTestCmd() + setRestoreFlags(cmd, inFile, pqFile, classicalFile) + + err := cmd.Execute() + if err == nil { + t.Fatal("expected non-nil error") + } + if !strings.Contains( + err.Error(), + "--privkey-pq and --privkey-classical are both required (AND model)", + ) { + t.Fatalf("expected AND model error, got: %v", err) + } + if openCount != 0 { + t.Fatalf("expected no os.Open calls on .pqenc, got %d", openCount) + } +} + +func TestRestoreCmd_OnlyPrivkeyPQ(t *testing.T) { + restoreTestGlobals(t) + + dir := t.TempDir() + inFile := filepath.Join(dir, "backup.pqenc") + _ = os.WriteFile(inFile, []byte("data"), 0o644) + pqFile := filepath.Join(dir, "pq.priv.pem") + _ = os.WriteFile(pqFile, []byte("pq"), 0o600) + + openCount := 0 + restoreOsOpen = func(name string) (*os.File, error) { + openCount++ + return os.Open(name) + } + + cmd := makeRestoreTestCmd() + _ = cmd.Flags().Set("in", inFile) + _ = cmd.Flags().Set("privkey-pq", pqFile) + // --privkey-classical intentionally omitted + + err := cmd.Execute() + if err == nil { + t.Fatal("expected non-nil error") + } + if openCount != 0 { + t.Fatalf("expected no os.Open calls on .pqenc, got %d", openCount) + } +} + +func TestRestoreCmd_HappyPath_Stdout(t *testing.T) { + restoreTestGlobals(t) + + dir := t.TempDir() + inFile := filepath.Join(dir, "backup.pqenc") + _ = os.WriteFile(inFile, []byte("encrypted"), 0o644) + pqFile := filepath.Join(dir, "pq.priv.pem") + _ = os.WriteFile(pqFile, []byte("pq"), 0o600) + classicalFile := filepath.Join(dir, "classical.priv.pem") + _ = os.WriteFile(classicalFile, []byte("classical"), 0o600) + + pqPriv := &mockRecipientPriv{ + schemeID: 0x0006, + keyID: []byte{1, 2, 3, 4, 5, 6, 7, 8}, + raw: make([]byte, 32), + } + classicalPriv := &mockRecipientPriv{ + schemeID: 0x0007, + keyID: []byte{8, 7, 6, 5, 4, 3, 2, 1}, + raw: make([]byte, 32), + } + + mockKM := &mockRestoreKeyManager{pqPriv: pqPriv, classicalPriv: classicalPriv} + newRestoreKeyManager = func(crypto.Registry) crypto.KeyManager { + return mockKM + } + + mockDec := &mockDecryptor{} + newRestoreDecryptor = func(crypto.Registry) crypto.Decryptor { + return mockDec + } + + var outBuf bytes.Buffer + restoreOutput = &outBuf + + cmd := makeRestoreTestCmd() + setRestoreFlags(cmd, inFile, pqFile, classicalFile) + + err := cmd.Execute() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if len(mockKM.loadPrivCalls) != 2 { + t.Fatalf("expected 2 LoadPriv calls, got %d", len(mockKM.loadPrivCalls)) + } + if mockKM.loadPrivCalls[0].path != pqFile || + mockKM.loadPrivCalls[0].schemeID != 0x0006 { + t.Fatalf("unexpected PQ LoadPriv call: %+v", mockKM.loadPrivCalls[0]) + } + if mockKM.loadPrivCalls[1].path != classicalFile || + mockKM.loadPrivCalls[1].schemeID != 0x0007 { + t.Fatalf( + "unexpected classical LoadPriv call: %+v", + mockKM.loadPrivCalls[1], + ) + } + + if !mockDec.called { + t.Fatal("expected decryptor.Decrypt to be called") + } + if len(mockDec.privs) != 2 { + t.Fatalf("expected 2 privs, got %d", len(mockDec.privs)) + } + if mockDec.privs[0] != pqPriv { + t.Fatal("expected pqPriv in positional slot 0") + } + if mockDec.privs[1] != classicalPriv { + t.Fatal("expected classicalPriv in positional slot 1") + } + + if !bytes.Equal(outBuf.Bytes(), []byte("decrypted pg_dump data")) { + t.Fatalf("unexpected stdout content: %q", outBuf.Bytes()) + } +} + +func TestRestoreCmd_HappyPath_FileOut(t *testing.T) { + restoreTestGlobals(t) + + dir := t.TempDir() + inFile := filepath.Join(dir, "backup.pqenc") + _ = os.WriteFile(inFile, []byte("encrypted"), 0o644) + pqFile := filepath.Join(dir, "pq.priv.pem") + _ = os.WriteFile(pqFile, []byte("pq"), 0o600) + classicalFile := filepath.Join(dir, "classical.priv.pem") + _ = os.WriteFile(classicalFile, []byte("classical"), 0o600) + outFile := filepath.Join(dir, "restored.dump") + + pqPriv := &mockRecipientPriv{ + schemeID: 0x0006, + keyID: []byte{1, 2, 3, 4, 5, 6, 7, 8}, + raw: make([]byte, 32), + } + classicalPriv := &mockRecipientPriv{ + schemeID: 0x0007, + keyID: []byte{8, 7, 6, 5, 4, 3, 2, 1}, + raw: make([]byte, 32), + } + + mockKM := &mockRestoreKeyManager{pqPriv: pqPriv, classicalPriv: classicalPriv} + newRestoreKeyManager = func(crypto.Registry) crypto.KeyManager { + return mockKM + } + + mockDec := &mockDecryptor{} + newRestoreDecryptor = func(crypto.Registry) crypto.Decryptor { + return mockDec + } + + cmd := makeRestoreTestCmd() + setRestoreFlags(cmd, inFile, pqFile, classicalFile) + _ = cmd.Flags().Set("out", outFile) + + err := cmd.Execute() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + data, err := os.ReadFile(outFile) + if err != nil { + t.Fatalf("read output file: %v", err) + } + if !bytes.Equal(data, []byte("decrypted pg_dump data")) { + t.Fatalf("unexpected output file content: %q", data) + } +} + +func TestRestoreCmd_TamperingDetected(t *testing.T) { + restoreTestGlobals(t) + + dir := t.TempDir() + inFile := filepath.Join(dir, "backup.pqenc") + _ = os.WriteFile(inFile, []byte("encrypted"), 0o644) + pqFile := filepath.Join(dir, "pq.priv.pem") + _ = os.WriteFile(pqFile, []byte("pq"), 0o600) + classicalFile := filepath.Join(dir, "classical.priv.pem") + _ = os.WriteFile(classicalFile, []byte("classical"), 0o600) + + pqPriv := &mockRecipientPriv{ + schemeID: 0x0006, + keyID: []byte{1, 2, 3, 4, 5, 6, 7, 8}, + raw: make([]byte, 32), + } + classicalPriv := &mockRecipientPriv{ + schemeID: 0x0007, + keyID: []byte{8, 7, 6, 5, 4, 3, 2, 1}, + raw: make([]byte, 32), + } + + mockKM := &mockRestoreKeyManager{pqPriv: pqPriv, classicalPriv: classicalPriv} + newRestoreKeyManager = func(crypto.Registry) crypto.KeyManager { + return mockKM + } + + mockDec := &mockDecryptor{err: composite.ErrTamperingDetected} + newRestoreDecryptor = func(crypto.Registry) crypto.Decryptor { + return mockDec + } + + cmd := makeRestoreTestCmd() + setRestoreFlags(cmd, inFile, pqFile, classicalFile) + + err := cmd.Execute() + if err == nil { + t.Fatal("expected non-nil error") + } + if !errors.Is(err, composite.ErrTamperingDetected) { + t.Fatalf("expected ErrTamperingDetected, got: %v", err) + } +} + +func TestRestoreCmd_WrongKeys(t *testing.T) { + restoreTestGlobals(t) + + dir := t.TempDir() + inFile := filepath.Join(dir, "backup.pqenc") + _ = os.WriteFile(inFile, []byte("encrypted"), 0o644) + pqFile := filepath.Join(dir, "pq.priv.pem") + _ = os.WriteFile(pqFile, []byte("pq"), 0o600) + classicalFile := filepath.Join(dir, "classical.priv.pem") + _ = os.WriteFile(classicalFile, []byte("classical"), 0o600) + + pqPriv := &mockRecipientPriv{ + schemeID: 0x0006, + keyID: []byte{1, 2, 3, 4, 5, 6, 7, 8}, + raw: make([]byte, 32), + } + classicalPriv := &mockRecipientPriv{ + schemeID: 0x0007, + keyID: []byte{8, 7, 6, 5, 4, 3, 2, 1}, + raw: make([]byte, 32), + } + + mockKM := &mockRestoreKeyManager{pqPriv: pqPriv, classicalPriv: classicalPriv} + newRestoreKeyManager = func(crypto.Registry) crypto.KeyManager { + return mockKM + } + + mockDec := &mockDecryptor{err: composite.ErrWrongKeys} + newRestoreDecryptor = func(crypto.Registry) crypto.Decryptor { + return mockDec + } + + cmd := makeRestoreTestCmd() + setRestoreFlags(cmd, inFile, pqFile, classicalFile) + + err := cmd.Execute() + if err == nil { + t.Fatal("expected non-nil error") + } + if !errors.Is(err, composite.ErrWrongKeys) { + t.Fatalf("expected ErrWrongKeys, got: %v", err) + } +} diff --git a/cmd/synapse-backupper/run.go b/cmd/synapse-backupper/run.go new file mode 100644 index 0000000..87c6239 --- /dev/null +++ b/cmd/synapse-backupper/run.go @@ -0,0 +1,114 @@ +package main + +import ( + "context" + "errors" + "log/slog" + "net/http" + "os" + "os/signal" + "syscall" + "time" + + "github.com/spf13/cobra" + + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/config" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/healthz" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/scheduler/cron" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/backup" +) + +var ( + newScheduler = func( + expr string, + job func(), + ) ( + domain.Scheduler, + error, + ) { + return cron.NewCronScheduler(expr, job) + } + newHealthz = func(port int) (*healthz.Server, error) { + return healthz.New(port) + } + runOnceFunc = backup.RunOnce + osExitFunc = func(code int) { os.Exit(code) } +) + +var runCmd = &cobra.Command{ + Use: "run", + Short: "Start the backup scheduler", + RunE: run, +} + +func init() { + config.RegisterFlags(runCmd) +} + +func run(cmd *cobra.Command, args []string) error { + cfg, err := config.Load(cmd) + if err != nil { + return err + } + return runWithConfig(cmd.Context(), cfg) +} + +func runWithConfig( + ctx context.Context, + cfg *config.Config, +) error { + job := func() { + jobCtx := context.Background() + if err := runOnceFunc(jobCtx, cfg); err != nil { + slog.Error("backup job failed", "error", err) + } + } + + scheduler, err := newScheduler(cfg.Backup.Cron, job) + if err != nil { + return err + } + + healthzServer, err := newHealthz(cfg.Healthz.Port) + if err != nil { + slog.Error("failed to bind healthz server", "error", err) + osExitFunc(1) + return nil + } + + go func() { + if err := healthzServer.Start(); err != nil && !errors.Is(err, http.ErrServerClosed) { + slog.Error("healthz server error", "error", err) + } + }() + + scheduler.Start() + + sigCtx, stop := signal.NotifyContext(ctx, syscall.SIGTERM, syscall.SIGINT) + defer stop() + + <-sigCtx.Done() + + shutdownTimeout := cfg.ShutdownTimeout + if shutdownTimeout <= 0 { + shutdownTimeout = 30 * time.Second + } + + shutdownCtx, cancel := context.WithTimeout(context.Background(), shutdownTimeout) + defer cancel() + + _ = healthzServer.Stop(shutdownCtx) + + stoppedCtx := scheduler.Stop() + + select { + case <-stoppedCtx.Done(): + slog.Info("graceful shutdown complete") + case <-time.After(shutdownTimeout): + slog.Warn("forcing exit, backup job still running") + osExitFunc(0) + } + + return nil +} diff --git a/cmd/synapse-backupper/run_test.go b/cmd/synapse-backupper/run_test.go new file mode 100644 index 0000000..62bd256 --- /dev/null +++ b/cmd/synapse-backupper/run_test.go @@ -0,0 +1,393 @@ +package main + +import ( + "context" + "errors" + "fmt" + "net/http" + "sync" + "testing" + "time" + + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/config" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/healthz" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain" +) + +type fakeScheduler struct { + mu sync.Mutex + startCalled bool + stopCalled bool + stoppedCtx context.Context + stopCancel context.CancelFunc +} + +func (f *fakeScheduler) Start() { + f.mu.Lock() + f.startCalled = true + f.mu.Unlock() +} + +func (f *fakeScheduler) Stop() context.Context { + f.mu.Lock() + f.stopCalled = true + f.mu.Unlock() + return f.stoppedCtx +} + +func (f *fakeScheduler) wasStarted() bool { + f.mu.Lock() + defer f.mu.Unlock() + return f.startCalled +} + +func (f *fakeScheduler) wasStopped() bool { + f.mu.Lock() + defer f.mu.Unlock() + return f.stopCalled +} + +type exitPanic int + +func (e exitPanic) Error() string { return fmt.Sprintf("exit %d", int(e)) } + +func TestRunCmd_Use(t *testing.T) { + if runCmd.Use != "run" { + t.Errorf("runCmd.Use = %q, want %q", runCmd.Use, "run") + } +} + +func TestRunCmd_SIGTERM_stopsScheduler(t *testing.T) { + origNewScheduler := newScheduler + origOsExit := osExitFunc + origRunOnce := runOnceFunc + defer func() { + newScheduler = origNewScheduler + osExitFunc = origOsExit + runOnceFunc = origRunOnce + }() + + fake := &fakeScheduler{} + fake.stoppedCtx, fake.stopCancel = context.WithCancel(context.Background()) + + newScheduler = func(expr string, job func()) (domain.Scheduler, error) { + return fake, nil + } + + runOnceFunc = func(ctx context.Context, cfg *config.Config) error { + return nil + } + + var exitCode int + exitPanicked := false + osExitFunc = func(code int) { + exitCode = code + exitPanicked = true + panic(exitPanic(code)) + } + + cfg := &config.Config{} + cfg.Healthz.Port = 0 + cfg.Backup.Cron = "* * * * *" + cfg.ShutdownTimeout = 100 * time.Millisecond + + ctx, cancel := context.WithCancel(context.Background()) + + errCh := make(chan error, 1) + go func() { + defer func() { + if r := recover(); r != nil { + if _, ok := r.(exitPanic); ok { + errCh <- nil + return + } + errCh <- fmt.Errorf("unexpected panic: %v", r) + return + } + }() + errCh <- runWithConfig(ctx, cfg) + }() + + time.Sleep(50 * time.Millisecond) + if !fake.wasStarted() { + t.Fatal("scheduler.Start was not called") + } + + cancel() + go func() { + time.Sleep(50 * time.Millisecond) + fake.stopCancel() + }() + + select { + case err := <-errCh: + if err != nil { + t.Fatalf("runWithConfig returned error: %v", err) + } + case <-time.After(2 * time.Second): + t.Fatal("timeout waiting for runWithConfig to exit") + } + + if !fake.wasStopped() { + t.Error("scheduler.Stop was not called") + } + + if exitPanicked { + t.Errorf("unexpected os.Exit call with code %d", exitCode) + } +} + +func TestRunCmd_SIGTERM_forcesExitAfterTimeout(t *testing.T) { + origNewScheduler := newScheduler + origOsExit := osExitFunc + origNewHealthz := newHealthz + origRunOnce := runOnceFunc + defer func() { + newScheduler = origNewScheduler + osExitFunc = origOsExit + newHealthz = origNewHealthz + runOnceFunc = origRunOnce + }() + + fake := &fakeScheduler{} + var cancelFunc context.CancelFunc + fake.stoppedCtx, cancelFunc = context.WithCancel(context.Background()) + defer cancelFunc() + + newScheduler = func(expr string, job func()) (domain.Scheduler, error) { + return fake, nil + } + + newHealthz = func(port int) (*healthz.Server, error) { + return healthz.New(port) + } + + runOnceFunc = func(ctx context.Context, cfg *config.Config) error { + return nil + } + + var exitCode int + exitPanicked := false + osExitFunc = func(code int) { + exitCode = code + exitPanicked = true + panic(exitPanic(code)) + } + + cfg := &config.Config{} + cfg.Healthz.Port = 0 + cfg.Backup.Cron = "* * * * * *" + cfg.ShutdownTimeout = 100 * time.Millisecond + + ctx, cancel := context.WithCancel(context.Background()) + + errCh := make(chan error, 1) + go func() { + defer func() { + if r := recover(); r != nil { + if _, ok := r.(exitPanic); ok { + errCh <- nil + return + } + errCh <- fmt.Errorf("unexpected panic: %v", r) + return + } + }() + errCh <- runWithConfig(ctx, cfg) + }() + + time.Sleep(50 * time.Millisecond) + cancel() + + select { + case err := <-errCh: + if err != nil { + t.Fatalf("runWithConfig returned error: %v", err) + } + case <-time.After(2 * time.Second): + t.Fatal("timeout waiting for runWithConfig to exit") + } + + if !fake.wasStopped() { + t.Error("scheduler.Stop was not called") + } + + if !exitPanicked { + t.Fatal("expected os.Exit to be called") + } + + if exitCode != 0 { + t.Errorf("os.Exit code = %d, want 0", exitCode) + } +} + +func TestRunCmd_Healthz503DuringShutdown(t *testing.T) { + origNewScheduler := newScheduler + origOsExit := osExitFunc + origNewHealthz := newHealthz + origRunOnce := runOnceFunc + defer func() { + newScheduler = origNewScheduler + osExitFunc = origOsExit + newHealthz = origNewHealthz + runOnceFunc = origRunOnce + }() + + fake := &fakeScheduler{} + fake.stoppedCtx, fake.stopCancel = context.WithCancel(context.Background()) + + newScheduler = func(expr string, job func()) (domain.Scheduler, error) { + return fake, nil + } + + srv, err := healthz.New(0) + if err != nil { + t.Fatalf("failed to create healthz server: %v", err) + } + + newHealthz = func(port int) (*healthz.Server, error) { + return srv, nil + } + + runOnceFunc = func(ctx context.Context, cfg *config.Config) error { + return nil + } + + osExitFunc = func(code int) { panic(exitPanic(code)) } + + cfg := &config.Config{} + cfg.Healthz.Port = 0 + cfg.Backup.Cron = "* * * * * *" + cfg.ShutdownTimeout = 5 * time.Second + + ctx, cancel := context.WithCancel(context.Background()) + + errCh := make(chan error, 1) + go func() { + defer func() { + if r := recover(); r != nil { + if _, ok := r.(exitPanic); ok { + errCh <- nil + return + } + errCh <- fmt.Errorf("unexpected panic: %v", r) + return + } + }() + errCh <- runWithConfig(ctx, cfg) + }() + + time.Sleep(100 * time.Millisecond) + + addr := srv.Addr() + resp, err := http.Get("http://" + addr + "/healthz") + if err != nil { + t.Fatalf("healthz request failed: %v", err) + } + resp.Body.Close() + if resp.StatusCode != http.StatusOK { + t.Fatalf("healthz status before shutdown = %d, want %d", resp.StatusCode, http.StatusOK) + } + + cancel() + + var status503 bool + for i := 0; i < 20; i++ { + resp, err = http.Get("http://" + addr + "/healthz") + if err == nil { + resp.Body.Close() + if resp.StatusCode == http.StatusServiceUnavailable { + status503 = true + break + } + } + time.Sleep(10 * time.Millisecond) + } + if !status503 { + t.Error("did not observe /healthz returning 503 during shutdown") + } + + fake.stopCancel() + + select { + case err := <-errCh: + if err != nil { + t.Fatalf("runWithConfig returned error: %v", err) + } + case <-time.After(2 * time.Second): + t.Fatal("timeout waiting for runWithConfig to exit") + } +} + +func TestRunCmd_HealthzBindFailure(t *testing.T) { + origNewScheduler := newScheduler + origNewHealthz := newHealthz + origOsExit := osExitFunc + origRunOnce := runOnceFunc + defer func() { + newScheduler = origNewScheduler + newHealthz = origNewHealthz + osExitFunc = origOsExit + runOnceFunc = origRunOnce + }() + + fake := &fakeScheduler{} + var cancelFunc context.CancelFunc + fake.stoppedCtx, cancelFunc = context.WithCancel(context.Background()) + defer cancelFunc() + + newScheduler = func(expr string, job func()) (domain.Scheduler, error) { + return fake, nil + } + + newHealthz = func(port int) (*healthz.Server, error) { + return nil, errors.New("bind failed") + } + + runOnceFunc = func(ctx context.Context, cfg *config.Config) error { + return nil + } + + var exitCode int + exitPanicked := false + osExitFunc = func(code int) { + exitCode = code + exitPanicked = true + panic(exitPanic(code)) + } + + cfg := &config.Config{} + cfg.Backup.Cron = "* * * * * *" + + errCh := make(chan error, 1) + go func() { + defer func() { + if r := recover(); r != nil { + if _, ok := r.(exitPanic); ok { + errCh <- nil + return + } + errCh <- fmt.Errorf("unexpected panic: %v", r) + return + } + }() + errCh <- runWithConfig(context.Background(), cfg) + }() + + select { + case err := <-errCh: + if err != nil { + t.Fatalf("runWithConfig returned error: %v", err) + } + case <-time.After(2 * time.Second): + t.Fatal("timeout waiting for runWithConfig to exit") + } + + if !exitPanicked { + t.Fatal("expected os.Exit to be called on healthz bind failure") + } + + if exitCode != 1 { + t.Errorf("os.Exit code = %d, want 1", exitCode) + } +} diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile new file mode 100644 index 0000000..02a0e87 --- /dev/null +++ b/deploy/docker/Dockerfile @@ -0,0 +1,17 @@ +FROM golang:1.26-alpine AS builder +WORKDIR /src +COPY go.mod go.sum ./ +RUN --mount=type=cache,target=/root/go/pkg/mod go mod download +COPY . . +RUN --mount=type=cache,target=/root/go/pkg/mod CGO_ENABLED=0 go build -o /out/synapse-backupper ./cmd/synapse-backupper + +FROM alpine:3.24 +RUN apk add --no-cache postgresql18-client ca-certificates && update-ca-certificates +RUN addgroup -S app && adduser -S -G app app +COPY --from=builder --chown=app:app /out/synapse-backupper /usr/local/bin/synapse-backupper +USER app +EXPOSE 8080 +HEALTHCHECK --interval=30s --timeout=3s --start-period=10s CMD wget -qO- http://localhost:8080/healthz || exit 1 +LABEL maintainer="infra@tswf.io" version="0.1.0" description="Synapse PostgreSQL backup tool with composite dual-KEM encryption" +ENTRYPOINT ["/usr/local/bin/synapse-backupper"] +CMD ["run"] diff --git a/deploy/docker/docker-compose.yml b/deploy/docker/docker-compose.yml new file mode 100644 index 0000000..ea96577 --- /dev/null +++ b/deploy/docker/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3.8' +services: + synapse-backupper: + image: synapse-backupper:latest + volumes: + - ./backups:/backups + - ./keys:/keys:ro + environment: + - APP_PG_HOST=db + - APP_PG_DATABASE=postgres + - APP_PG_USER=synapse + - APP_PG_PASSWORD=changeme + - APP_PQ_PUBLIC_KEY_PATH=/keys/synapse.pq.pub.pem + - APP_CLASSICAL_PUBLIC_KEY_PATH=/keys/synapse.classical.pub.pem + - APP_BACKUP_DIR=/backups + - APP_BACKUP_CRON=0 0 3 * * * + networks: + - my-network + healthcheck: + test: ["CMD", "wget", "-qO-", "http://localhost:8080/healthz"] + interval: 30s + timeout: 3s + start_period: 10s + restart: unless-stopped + +networks: + my-network: + external: true diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..1b797c9 --- /dev/null +++ b/go.mod @@ -0,0 +1,26 @@ +module git.tswf.io/infra/go-synapse-backupper + +go 1.26 + +require ( + github.com/google/uuid v1.6.0 + github.com/robfig/cron/v3 v3.0.1 + github.com/spf13/cobra v1.10.2 + github.com/spf13/viper v1.21.0 +) + +require ( + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/sagikazarmark/locafero v0.11.0 // indirect + github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect + github.com/spf13/afero v1.15.0 // indirect + github.com/spf13/cast v1.10.0 // indirect + github.com/spf13/pflag v1.0.10 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/sys v0.29.0 // indirect + golang.org/x/text v0.28.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..127b5e6 --- /dev/null +++ b/go.sum @@ -0,0 +1,58 @@ +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= +github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= +github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= +github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= +github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/adapters/config/config.go b/pkg/adapters/config/config.go new file mode 100644 index 0000000..217228d --- /dev/null +++ b/pkg/adapters/config/config.go @@ -0,0 +1,161 @@ +package config + +import ( + "fmt" + "io" + "os" + "path/filepath" + "strings" + "time" + + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +// outputWriter is used for logging so tests can capture output. +var outputWriter io.Writer = os.Stderr + +func logf(format string, args ...interface{}) { + _, _ = fmt.Fprintf(outputWriter, format+"\n", args...) +} + +// Config holds the full application configuration. +type Config struct { + PG struct { + Host string `mapstructure:"host"` + Port int `mapstructure:"port"` + User string `mapstructure:"user"` + Password string `mapstructure:"password"` + Database string `mapstructure:"database"` + SSLMode string `mapstructure:"sslmode"` + ExcludeTables []string `mapstructure:"exclude_tables"` + } `mapstructure:"pg"` + Backup struct { + Dir string `mapstructure:"dir"` + RetentionDays int `mapstructure:"retention_days"` + Cron string `mapstructure:"cron"` + } `mapstructure:"backup"` + PQScheme uint16 `mapstructure:"pq_scheme"` + ClassicalScheme uint16 `mapstructure:"classical_scheme"` + PQPublicKeyPath string `mapstructure:"pq_public_key_path"` + ClassicalPublicKeyPath string `mapstructure:"classical_public_key_path"` + Healthz struct { + Port int `mapstructure:"port"` + } `mapstructure:"healthz"` + Log struct { + Level string `mapstructure:"level"` + } `mapstructure:"log"` + ShutdownTimeout time.Duration `mapstructure:"shutdown_timeout"` +} + +// RegisterFlags adds all configuration flags to the provided Cobra command. +func RegisterFlags(cmd *cobra.Command) { + flags := cmd.Flags() + + flags.String("pg-host", "", "PostgreSQL host") + flags.Int("pg-port", 0, "PostgreSQL port") + flags.String("pg-user", "", "PostgreSQL user") + flags.String("pg-password", "", "PostgreSQL password") + flags.String("pg-database", "", "PostgreSQL database name") + flags.String("pg-sslmode", "", "PostgreSQL SSL mode") + flags.StringSlice("pg-exclude-tables", nil, "PostgreSQL tables to exclude from backup") + flags.String("backup-dir", "", "Backup directory") + flags.Int("backup-retention-days", 0, "Backup retention period in days") + flags.String("backup-cron", "", "Cron expression for backup schedule") + flags.Uint16("pq-scheme", 0, "Post-quantum KEM scheme ID") + flags.Uint16("classical-scheme", 0, "Classical KEM scheme ID") + flags.String("pq-public-key-path", "", "Path to post-quantum public key") + flags.String("classical-public-key-path", "", "Path to classical public key") + flags.Int("healthz-port", 0, "Health check HTTP port") + flags.String("log-level", "", "Log level") + flags.Duration("shutdown-timeout", 0, "Graceful shutdown timeout") +} + +// Load reads configuration from all sources in priority order: +// launch arguments (Cobra flags) → APP_* env variables → config file → defaults. +func Load(cmd *cobra.Command) (*Config, error) { + // Use a fresh Viper instance so that successive calls do not leak state. + v := viper.New() + + // Defaults (lowest priority). + v.SetDefault("pg.port", 5432) + v.SetDefault("pg.sslmode", "prefer") + v.SetDefault("pg.exclude_tables", []string{"e2e_one_time_keys_json"}) + v.SetDefault("backup.retention_days", 180) + v.SetDefault("backup.cron", "0 0 3 * * *") + v.SetDefault("pq_scheme", uint16(0x0006)) + v.SetDefault("classical_scheme", uint16(0x0007)) + v.SetDefault("healthz.port", 8080) + v.SetDefault("log.level", "info") + v.SetDefault("shutdown_timeout", 30*time.Second) + + // Bind parsed Cobra flags to Viper keys. + if cmd != nil { + _ = v.BindPFlag("pg.host", cmd.Flags().Lookup("pg-host")) + _ = v.BindPFlag("pg.port", cmd.Flags().Lookup("pg-port")) + _ = v.BindPFlag("pg.user", cmd.Flags().Lookup("pg-user")) + _ = v.BindPFlag("pg.password", cmd.Flags().Lookup("pg-password")) + _ = v.BindPFlag("pg.database", cmd.Flags().Lookup("pg-database")) + _ = v.BindPFlag("pg.sslmode", cmd.Flags().Lookup("pg-sslmode")) + _ = v.BindPFlag("pg.exclude_tables", cmd.Flags().Lookup("pg-exclude-tables")) + _ = v.BindPFlag("backup.dir", cmd.Flags().Lookup("backup-dir")) + _ = v.BindPFlag("backup.retention_days", cmd.Flags().Lookup("backup-retention-days")) + _ = v.BindPFlag("backup.cron", cmd.Flags().Lookup("backup-cron")) + _ = v.BindPFlag("pq_scheme", cmd.Flags().Lookup("pq-scheme")) + _ = v.BindPFlag("classical_scheme", cmd.Flags().Lookup("classical-scheme")) + _ = v.BindPFlag("pq_public_key_path", cmd.Flags().Lookup("pq-public-key-path")) + _ = v.BindPFlag("classical_public_key_path", cmd.Flags().Lookup("classical-public-key-path")) + _ = v.BindPFlag("healthz.port", cmd.Flags().Lookup("healthz-port")) + _ = v.BindPFlag("log.level", cmd.Flags().Lookup("log-level")) + _ = v.BindPFlag("shutdown_timeout", cmd.Flags().Lookup("shutdown-timeout")) + } + + // Config file search with logging. + v.SetConfigName("config") + v.SetConfigType("yaml") + + if envLoc := os.Getenv("APP_CONFIG_LOCATION"); envLoc != "" { + v.SetConfigFile(envLoc) + if err := v.ReadInConfig(); err == nil { + logf("Config file found: %s (from APP_CONFIG_LOCATION)", v.ConfigFileUsed()) + } else { + return nil, fmt.Errorf("config file specified in APP_CONFIG_LOCATION not found: %s", envLoc) + } + } else { + v.AddConfigPath(".") + + homeDir, _ := os.UserHomeDir() + appName := "synapse-backupper" + userConfigPath := filepath.Join(homeDir, ".config", appName) + v.AddConfigPath(userConfigPath) + + exePath, _ := os.Executable() + exeDir := filepath.Dir(exePath) + v.AddConfigPath(exeDir) + + etcPath := filepath.Join("/etc", appName) + v.AddConfigPath(etcPath) + + if err := v.ReadInConfig(); err != nil { + if _, ok := err.(viper.ConfigFileNotFoundError); ok { + logf("Configuration file not found. Using defaults and env/args.") + } else { + return nil, fmt.Errorf("error reading config: %w", err) + } + } else { + logf("Config file found: %s", v.ConfigFileUsed()) + } + } + + // Environment variables. + v.SetEnvPrefix("APP") + v.SetEnvKeyReplacer(strings.NewReplacer(".", "_", "-", "_")) + v.AutomaticEnv() + + var cfg Config + if err := v.Unmarshal(&cfg); err != nil { + return nil, fmt.Errorf("config unmarshal failed: %w", err) + } + + return &cfg, nil +} diff --git a/pkg/adapters/config/config_test.go b/pkg/adapters/config/config_test.go new file mode 100644 index 0000000..14c8b71 --- /dev/null +++ b/pkg/adapters/config/config_test.go @@ -0,0 +1,224 @@ +package config + +import ( + "bytes" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/spf13/cobra" +) + +func TestEnvOverridesYAML(t *testing.T) { + tempDir := t.TempDir() + configPath := filepath.Join(tempDir, "config.yaml") + content := ` +pg: + host: localhost + port: 5433 +backup: + retention_days: 90 +` + if err := os.WriteFile(configPath, []byte(content), 0o644); err != nil { + t.Fatalf("failed to write test config: %v", err) + } + + t.Setenv("APP_CONFIG_LOCATION", configPath) + t.Setenv("APP_PG_HOST", "remote") + + cmd := &cobra.Command{} + RegisterFlags(cmd) + + var buf bytes.Buffer + oldOutput := outputWriter + outputWriter = &buf + defer func() { outputWriter = oldOutput }() + + cfg, err := Load(cmd) + if err != nil { + t.Fatalf("Load failed: %v", err) + } + + if cfg.PG.Host != "remote" { + t.Errorf("PG.Host = %q, want %q (env should override YAML)", cfg.PG.Host, "remote") + } + if cfg.PG.Port != 5433 { + t.Errorf("PG.Port = %d, want %d (YAML value should be preserved when env not set)", cfg.PG.Port, 5433) + } + if cfg.Backup.RetentionDays != 90 { + t.Errorf("Backup.RetentionDays = %d, want %d (from YAML)", cfg.Backup.RetentionDays, 90) + } + + logOutput := buf.String() + if !strings.Contains(logOutput, configPath) { + t.Errorf("log output did not contain config path %q: %s", configPath, logOutput) + } +} + +func TestDefaults(t *testing.T) { + cmd := &cobra.Command{} + RegisterFlags(cmd) + + var buf bytes.Buffer + oldOutput := outputWriter + outputWriter = &buf + defer func() { outputWriter = oldOutput }() + + cfg, err := Load(cmd) + if err != nil { + t.Fatalf("Load failed: %v", err) + } + + if cfg.PG.Port != 5432 { + t.Errorf("PG.Port = %d, want %d", cfg.PG.Port, 5432) + } + if cfg.PG.SSLMode != "prefer" { + t.Errorf("PG.SSLMode = %q, want %q", cfg.PG.SSLMode, "prefer") + } + if len(cfg.PG.ExcludeTables) != 1 || cfg.PG.ExcludeTables[0] != "e2e_one_time_keys_json" { + t.Errorf("PG.ExcludeTables = %v, want [e2e_one_time_keys_json]", cfg.PG.ExcludeTables) + } + if cfg.Backup.RetentionDays != 180 { + t.Errorf("Backup.RetentionDays = %d, want %d", cfg.Backup.RetentionDays, 180) + } + if cfg.Backup.Cron != "0 0 3 * * *" { + t.Errorf("Backup.Cron = %q, want %q", cfg.Backup.Cron, "0 0 3 * * *") + } + if cfg.PQScheme != 0x0006 { + t.Errorf("PQScheme = 0x%04x, want 0x%04x", cfg.PQScheme, 0x0006) + } + if cfg.ClassicalScheme != 0x0007 { + t.Errorf("ClassicalScheme = 0x%04x, want 0x%04x", cfg.ClassicalScheme, 0x0007) + } + if cfg.Healthz.Port != 8080 { + t.Errorf("Healthz.Port = %d, want %d", cfg.Healthz.Port, 8080) + } + if cfg.Log.Level != "info" { + t.Errorf("Log.Level = %q, want %q", cfg.Log.Level, "info") + } + + logOutput := buf.String() + if !strings.Contains(logOutput, "Configuration file not found") { + t.Errorf("log output did not contain 'Configuration file not found': %s", logOutput) + } +} + +func TestFlagsOverrideEnv(t *testing.T) { + t.Setenv("APP_PG_HOST", "env-host") + + cmd := &cobra.Command{} + RegisterFlags(cmd) + if err := cmd.ParseFlags([]string{"--pg-host", "flag-host"}); err != nil { + t.Fatalf("ParseFlags failed: %v", err) + } + + var buf bytes.Buffer + oldOutput := outputWriter + outputWriter = &buf + defer func() { outputWriter = oldOutput }() + + cfg, err := Load(cmd) + if err != nil { + t.Fatalf("Load failed: %v", err) + } + + if cfg.PG.Host != "flag-host" { + t.Errorf("PG.Host = %q, want %q (flag should override env)", cfg.PG.Host, "flag-host") + } +} + +func TestAllConfigFields(t *testing.T) { + tempDir := t.TempDir() + configPath := filepath.Join(tempDir, "config.yaml") + content := ` +pg: + host: db.example.com + port: 5432 + user: synapse + password: secret + database: synapse_db + sslmode: require + exclude_tables: + - table1 + - table2 +backup: + dir: /backups + retention_days: 30 + cron: "0 0 * * *" +pq_scheme: 0x0001 +classical_scheme: 0x0002 +pq_public_key_path: /keys/pq.pub +classical_public_key_path: /keys/classical.pub +healthz: + port: 9090 +log: + level: debug +` + if err := os.WriteFile(configPath, []byte(content), 0o644); err != nil { + t.Fatalf("failed to write test config: %v", err) + } + + t.Setenv("APP_CONFIG_LOCATION", configPath) + + cmd := &cobra.Command{} + RegisterFlags(cmd) + + var buf bytes.Buffer + oldOutput := outputWriter + outputWriter = &buf + defer func() { outputWriter = oldOutput }() + + cfg, err := Load(cmd) + if err != nil { + t.Fatalf("Load failed: %v", err) + } + + if cfg.PG.Host != "db.example.com" { + t.Errorf("PG.Host = %q, want %q", cfg.PG.Host, "db.example.com") + } + if cfg.PG.User != "synapse" { + t.Errorf("PG.User = %q, want %q", cfg.PG.User, "synapse") + } + if cfg.PG.Password != "secret" { + t.Errorf("PG.Password = %q, want %q", cfg.PG.Password, "secret") + } + if cfg.PG.Database != "synapse_db" { + t.Errorf("PG.Database = %q, want %q", cfg.PG.Database, "synapse_db") + } + if cfg.PG.SSLMode != "require" { + t.Errorf("PG.SSLMode = %q, want %q", cfg.PG.SSLMode, "require") + } + if len(cfg.PG.ExcludeTables) != 2 || cfg.PG.ExcludeTables[0] != "table1" { + t.Errorf("PG.ExcludeTables = %v, want [table1 table2]", cfg.PG.ExcludeTables) + } + if cfg.Backup.Dir != "/backups" { + t.Errorf("Backup.Dir = %q, want %q", cfg.Backup.Dir, "/backups") + } + if cfg.Backup.Cron != "0 0 * * *" { + t.Errorf("Backup.Cron = %q, want %q", cfg.Backup.Cron, "0 0 * * *") + } + if cfg.PQScheme != 0x0001 { + t.Errorf("PQScheme = 0x%04x, want 0x%04x", cfg.PQScheme, 0x0001) + } + if cfg.ClassicalScheme != 0x0002 { + t.Errorf("ClassicalScheme = 0x%04x, want 0x%04x", cfg.ClassicalScheme, 0x0002) + } + if cfg.PQPublicKeyPath != "/keys/pq.pub" { + t.Errorf("PQPublicKeyPath = %q, want %q", cfg.PQPublicKeyPath, "/keys/pq.pub") + } + if cfg.ClassicalPublicKeyPath != "/keys/classical.pub" { + t.Errorf("ClassicalPublicKeyPath = %q, want %q", cfg.ClassicalPublicKeyPath, "/keys/classical.pub") + } + if cfg.Healthz.Port != 9090 { + t.Errorf("Healthz.Port = %d, want %d", cfg.Healthz.Port, 9090) + } + if cfg.Log.Level != "debug" { + t.Errorf("Log.Level = %q, want %q", cfg.Log.Level, "debug") + } + + logOutput := buf.String() + if !strings.Contains(logOutput, configPath) { + t.Errorf("log output did not contain config path %q: %s", configPath, logOutput) + } +} diff --git a/pkg/adapters/crypto/composite/composite.go b/pkg/adapters/crypto/composite/composite.go new file mode 100644 index 0000000..9f476c0 --- /dev/null +++ b/pkg/adapters/crypto/composite/composite.go @@ -0,0 +1,624 @@ +// Package composite implements the v2 .pqenc artifact format: a dual-KEM +// (post-quantum + classical) hybrid AEAD with inherent downgrade resistance. +// +// Layout of an artifact (all multi-byte fields are big-endian): +// +// [magic u32 = 0x47535051 "GSPQ"] [0:4] +// [version u16 = 0x0002] [4:6] +// [flags u32 = 0x00000000 (reserved, must==0)] [6:10] +// [nRecipients u8] [10] +// +// for each recipient slot i (positional: slot 0 = PQ, slot 1 = classical): +// [schemeID u16] [keyID 8B] [ctLen u32] [ciphertext ctLen bytes] +// +// [wrapNonce 12B] [wrappedCEK 48B] [firstPayloadNonce 12B] +// +// chunk records (until a chunk with flags&0x01==1 is seen): +// [len u32 = ciphertext length incl. 16B tag] [flags u8] [ciphertext] +// +// The content key (CEK, 32B) is wrapped with kekFinal — the HKDF combiner +// of the two KEM shared secrets — using AES-256-GCM (AAD = version u16 BE). +// Payload is encrypted with AES-256-GCM under CEK in 64 KiB chunks; a +// zero-length final marker chunk (flags&0x01==1) is ALWAYS emitted on EOF +// regardless of the previous chunk's fullness, providing explicit AEAD +// integrity for the logical end-of-stream. +package composite + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/hkdf" + "crypto/sha256" + "encoding/binary" + "errors" + "io" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +// Sentinel errors surfaced by the composite Encryptor/Decryptor. +var ( + // ErrMalformedHeader indicates the artifact header is structurally + // invalid (bad magic, reserved flags, out-of-range nRecipients, oversized + // recipient ciphertext length, or premature EOF while reading fixed + // metadata). + ErrMalformedHeader = errors.New("composite: malformed header") + + // ErrUnsupportedVersion indicates the artifact's version field is not + // 0x0002. Decryption stops at the version check — no AES/GCM operations + // are attempted and no recipient state is allocated. + ErrUnsupportedVersion = errors.New("composite: unsupported artifact version") + + // ErrWrongKeys indicates one of the supplied private keys does not match + // the recipient slot it was routed to (positional). Signal: the priv's + // KeyID() does not equal the slot's keyID, OR the KEM Decapsulate failed + // for the slot's ciphertext. + ErrWrongKeys = errors.New("composite: wrong recipient keys") + + // ErrTamperingDetected indicates the wrappedCEK or a payload chunk failed + // AES-GCM authentication: the cancellation or modification of ciphertext + // bytes is cryptographically rejected. + ErrTamperingDetected = errors.New("composite: tampering detected") + + // ErrNonceCounterWrapped indicates the per-chunk 64-bit counter + // (chunkNonce[4:12]) wrapped around to zero while encrypting or + // decrypting an additional chunk — the nonce sequence is exhausted. + ErrNonceCounterWrapped = errors.New("composite: nonce counter wrapped") + + // ErrMalformedChunk indicates a chunk record failed structural + // validation: zero-length non-final chunk (infinite-loop DoS) or + // oversized ciphertext (over the 64 KiB+16 maximum). + ErrMalformedChunk = errors.New("composite: malformed chunk") + + // ErrUnexpectedEOF indicates the chunk stream ended before any chunk + // with flags&0x01==1 (logical end-of-stream marker) was observed. + ErrUnexpectedEOF = errors.New("composite: unexpected end of stream") +) + +// Format constants. +const ( + magic uint32 = 0x47535051 // "GSPQ" + version uint16 = 0x0002 + flags uint32 = 0x00000000 + maxRecipients int = 2 + chunkSize int = 64 * 1024 + gcmTagLen int = 16 + maxRecipientCiphertextLen int = 1 << 20 // MiB cap on a single recipient ciphertext + wrapNonceLen int = 12 + wrappedCekLen int = 48 // 32-byte CEK + 16-byte GCM tag + firstPayloadNonceLen int = 12 + kekLen int = 32 + infoPq string = "git.tswf.io/infra/go-synapse-backupper/v2/kek/pq" + infoComposite string = "git.tswf.io/infra/go-synapse-backupper/v2/kek/composite" +) + +// Chunk flag bits. +const ( + flagFinal byte = 0x01 +) + +// encryptor is the composite Encryptor implementation backed by a Registry +// of KEM factories. Recipients are routed positionally: slot 0 = PQ, slot 1 +// = classical. +type encryptor struct { + registry crypto.Registry +} + +// NewEncryptor returns a composite Encryptor that resolves KEM schemes via +// the provided Registry (Registry.Lookup(schemeID)). +func NewEncryptor( + registry crypto.Registry, +) crypto.Encryptor { + return &encryptor{ + registry: registry, + } +} + +// Encrypt encrypts plaintext to multiple recipients under the v2 artifact +// format and streams the result to sink. Exactly two recipients must be +// supplied — slot 0 (PQ) and slot 1 (classical). +func (e *encryptor) Encrypt( + plaintext io.Reader, + recipients []crypto.RecipientPub, + sink io.Writer, + rand io.Reader, +) error { + if len(recipients) != maxRecipients { + return ErrMalformedHeader + } + pqPub, classicalPub := recipients[0], recipients[1] + + // Generate the per-message content key (32B for AES-256). + cek := make([]byte, kekLen) + if _, err := io.ReadFull(rand, cek); err != nil { + return err + } + + // Bind KEM adapters through the registry — no direct adapter imports. + pqFactory, err := e.registry.Lookup(pqPub.SchemeID()) + if err != nil { + return err + } + classicalFactory, err := e.registry.Lookup(classicalPub.SchemeID()) + if err != nil { + return err + } + pqKem := pqFactory() + classicalKem := classicalFactory() + + // Encapsulate to each recipient. + // ADAPTER CONTRACT (pinned verbatim): adapters return (ct, ss) — + // composite unpacks in that order at each call site. + pqCt, ssPq, err := pqKem.Encapsulate(pqPub, rand) + if err != nil { + return err + } + classicalCt, ssClassical, err := classicalKem.Encapsulate(classicalPub, rand) + if err != nil { + return err + } + + // HKDF combiner (verbatim per plan Metis B1): + // PRK1 = HKDF-Extract(ssPq, salt=nil) + // kek1 = HKDF-Expand(prk1, infoPq, 32) + // IKM = kek1 || ssClassical (with defensive copy of kek1) + // PRK2 = HKDF-Extract(IKM, salt=nil) + // kekFinal = HKDF-Expand(prk2, infoComposite, 32) + kekFinal, err := deriveCompositeKEK(ssPq, ssClassical) + if err != nil { + return err + } + + // Wrap the CEK via AES-256-GCM with AAD = version u16 BE = {0x00, 0x02}. + wrapNonce := make([]byte, wrapNonceLen) + if _, err := io.ReadFull(rand, wrapNonce); err != nil { + return err + } + kekBlock, err := aes.NewCipher(kekFinal) + if err != nil { + return err + } + wrapGcm, err := cipher.NewGCM(kekBlock) + if err != nil { + return err + } + wrappedCek := wrapGcm.Seal(nil, wrapNonce, cek, []byte{0x00, 0x02}) + + // firstPayloadNonce seeds the per-chunk nonce stream. + firstPayloadNonce := make([]byte, firstPayloadNonceLen) + if _, err := io.ReadFull(rand, firstPayloadNonce); err != nil { + return err + } + + // Emit the artifact header. + if err := writeHeader( + sink, + pqPub, classicalPub, + pqCt, classicalCt, + wrapNonce, wrappedCek, firstPayloadNonce, + ); err != nil { + return err + } + + // Encrypt the payload into chunks. + payloadBlock, err := aes.NewCipher(cek) + if err != nil { + return err + } + payloadGcm, err := cipher.NewGCM(payloadBlock) + if err != nil { + return err + } + return encryptChunks(plaintext, sink, payloadGcm, firstPayloadNonce) +} + +// writeHeader serializes the v2 artifact header. +// +// Layout (see package doc): +// +// magic(4) + version(2) + flags(4) + nRecipients(1) +// + per-recipient: schemeID(2) + keyID(8) + ctLen(4) + ciphertext +// + wrapNonce(12) + wrappedCEK(48) + firstPayloadNonce(12) +func writeHeader( + w io.Writer, + pqPub, classicalPub crypto.RecipientPub, + pqCt, classicalCt, + wrapNonce, wrappedCek, firstPayloadNonce []byte, +) error { + var buf bytes.Buffer + var b4 [4]byte + + binary.BigEndian.PutUint32(b4[:], magic) + buf.Write(b4[:]) // [0:4] magic + + binary.BigEndian.PutUint16(b4[:2], version) + buf.Write(b4[:2]) // [4:6] version + + binary.BigEndian.PutUint32(b4[:], flags) + buf.Write(b4[:]) // [6:10] flags + + // [10] nRecipients — composite v2 always carries exactly two slots. + buf.WriteByte(byte(maxRecipients)) + + // Slot 0 (PQ). + binary.BigEndian.PutUint16(b4[:2], pqPub.SchemeID()) + buf.Write(b4[:2]) + if len(pqPub.KeyID()) != 8 { + return ErrMalformedHeader + } + buf.Write(pqPub.KeyID()) + binary.BigEndian.PutUint32(b4[:], uint32(len(pqCt))) + buf.Write(b4[:]) + buf.Write(pqCt) + + // Slot 1 (classical). + binary.BigEndian.PutUint16(b4[:2], classicalPub.SchemeID()) + buf.Write(b4[:2]) + if len(classicalPub.KeyID()) != 8 { + return ErrMalformedHeader + } + buf.Write(classicalPub.KeyID()) + binary.BigEndian.PutUint32(b4[:], uint32(len(classicalCt))) + buf.Write(b4[:]) + buf.Write(classicalCt) + + // wrapNonce + wrappedCEK + firstPayloadNonce. + buf.Write(wrapNonce) + buf.Write(wrappedCek) + buf.Write(firstPayloadNonce) + + _, err := w.Write(buf.Bytes()) + return err +} + +// encryptChunks encrypts plaintext into 64 KiB AES-256-GCM chunks under CEK +// and streams them to w. A zero-length final marker chunk (flags&0x01==1) +// is ALWAYS emitted on EOF regardless of the previous chunk's fullness. +func encryptChunks( + plaintext io.Reader, + w io.Writer, + gcm cipher.AEAD, + firstPayloadNonce []byte, +) error { + chunkNonce := make([]byte, gcm.NonceSize()) + copy(chunkNonce, firstPayloadNonce) + + buf := make([]byte, chunkSize) + var lenB [4]byte + + for { + readN, readErr := io.ReadFull(plaintext, buf) + hasData := readN > 0 + eof := readErr == io.EOF || readErr == io.ErrUnexpectedEOF + + if hasData { + // Body chunk, flags = 0x00. + ciphertext := gcm.Seal(nil, chunkNonce, buf[:readN], nil) + binary.BigEndian.PutUint32(lenB[:], uint32(len(ciphertext))) + if _, err := w.Write(lenB[:]); err != nil { + return err + } + if _, err := w.Write([]byte{0x00}); err != nil { + return err + } + if _, err := w.Write(ciphertext); err != nil { + return err + } + // Increment counter for the next chunk; the top 4 bytes of the + // nonce ([0:4]) are untouched. + if err := incrementCounter(chunkNonce); err != nil { + return err + } + } + + if eof { + // Final marker chunk — zero-length plaintext, flags = 0x01, + // ciphertext is just the 16-byte GCM tag. ALWAYS emitted. + ciphertext := gcm.Seal(nil, chunkNonce, nil, nil) + binary.BigEndian.PutUint32(lenB[:], uint32(len(ciphertext))) + if _, err := w.Write(lenB[:]); err != nil { + return err + } + if _, err := w.Write([]byte{flagFinal}); err != nil { + return err + } + if _, err := w.Write(ciphertext); err != nil { + return err + } + return nil + } + if readErr != nil { + return readErr + } + } +} + +// incrementCounter mutates chunkNonce in place: reads the 64-bit big-endian +// counter at chunkNonce[4:12], adds one, rejects wrap, writes back. +// chunkNonce[0:4] (the random base) is preserved. +func incrementCounter(chunkNonce []byte) error { + counter := binary.BigEndian.Uint64(chunkNonce[4:12]) + newCounter := counter + 1 + if newCounter <= counter { + return ErrNonceCounterWrapped + } + binary.BigEndian.PutUint64(chunkNonce[4:12], newCounter) + return nil +} + +// decryptor is the composite Decryptor implementation. Slot routing is +// positional; keyID equality is enforced as a fast wrong-key reject before +// any AEAD operation. +type decryptor struct { + registry crypto.Registry +} + +// NewDecryptor returns a composite Decryptor that resolves KEM schemes via +// the provided Registry. +func NewDecryptor( + registry crypto.Registry, +) crypto.Decryptor { + return &decryptor{ + registry: registry, + } +} + +// Decrypt parses the v2 artifact from src, decapsulates per slot using the +// supplied private keys (positional: slot 0 ← privs[0], slot 1 ← privs[1]), +// re-derives the composite KEK, unwraps the CEK, and streams decrypted +// plaintext chunks to plaintext. +func (d *decryptor) Decrypt( + src io.Reader, + privs []crypto.RecipientPriv, + plaintext io.Writer, +) error { + // Prefix: magic(4) + version(2) + flags(4) + nRecipients(1) = 11 bytes. + const prefixLen = 11 + var prefix [prefixLen]byte + if _, err := io.ReadFull(src, prefix[:]); err != nil { + return ErrMalformedHeader + } + + if binary.BigEndian.Uint32(prefix[0:4]) != magic { + return ErrMalformedHeader + } + + fileVersion := binary.BigEndian.Uint16(prefix[4:6]) + if fileVersion != version { + // Stops BEFORE any flags/nRecipients validation, before any GCM + // work, before any recipient allocation. + return ErrUnsupportedVersion + } + + if binary.BigEndian.Uint32(prefix[6:10]) != flags { + return ErrMalformedHeader + } + + nRecipients := int(prefix[10]) + if nRecipients < 1 || nRecipients > maxRecipients { + return ErrMalformedHeader + } + if nRecipients != maxRecipients { + // Composite v2 mandates exactly two slots. + return ErrMalformedHeader + } + + // Per-recipient: each slot is `(meta 14B) (ciphertext ctLen B)` INLINE — + // slot0's ciphertext lives BETWEEN slot0's metadata and slot1's metadata + // (the inline-ct layout; see package doc). So parse strictly per-slot: + // read metadata → validate ctLen ≤ max → read ct → advance to next slot. + // The ctLen ≤ maxRecipientCiphertextLen check must fire BEFORE allocating/reading + // the per-slot ciphertext (test l: no OOM on malicious oversized value). + const perSlotMetaLen = 14 + type slotMeta struct { + schemeID uint16 + keyID []byte + ctLen uint32 + ct []byte + } + slots := make([]slotMeta, nRecipients) + for slotIndex := 0; slotIndex < nRecipients; slotIndex++ { + var meta [perSlotMetaLen]byte + if _, err := io.ReadFull(src, meta[:]); err != nil { + return ErrMalformedHeader + } + slot := &slots[slotIndex] + slot.schemeID = binary.BigEndian.Uint16(meta[0:2]) + slot.keyID = append([]byte(nil), meta[2:10]...) + slot.ctLen = binary.BigEndian.Uint32(meta[10:14]) + if int(slot.ctLen) > maxRecipientCiphertextLen { + return ErrMalformedHeader + } + slot.ct = make([]byte, slot.ctLen) + if slot.ctLen > 0 { + if _, err := io.ReadFull(src, slot.ct); err != nil { + return ErrMalformedHeader + } + } + } + + // Trailing fixed region: wrapNonce(12) + wrappedCEK(48) + firstPayloadNonce(12) = 72B. + var tail [wrapNonceLen + wrappedCekLen + firstPayloadNonceLen]byte + if _, err := io.ReadFull(src, tail[:]); err != nil { + return ErrMalformedHeader + } + wrapNonce := tail[:wrapNonceLen] + wrappedCek := tail[wrapNonceLen : wrapNonceLen+wrappedCekLen] + firstPayloadNonce := tail[wrapNonceLen+wrappedCekLen:] + + // Decapsulate per slot, routing privs positionally. + if len(privs) < nRecipients { + return ErrWrongKeys + } + sharedSecrets := make([][]byte, nRecipients) + for slotIndex := 0; slotIndex < nRecipients; slotIndex++ { + slot := slots[slotIndex] + priv := privs[slotIndex] + if priv == nil { + return ErrWrongKeys + } + if priv.SchemeID() != slot.schemeID { + return ErrWrongKeys + } + if !bytes.Equal(priv.KeyID(), slot.keyID) { + return ErrWrongKeys + } + factory, err := d.registry.Lookup(slot.schemeID) + if err != nil { + return ErrWrongKeys + } + kem := factory() + ss, err := kem.Decapsulate(priv, slot.ct) + if err != nil { + return ErrWrongKeys + } + sharedSecrets[slotIndex] = ss + } + + kekFinal, err := deriveCompositeKEK(sharedSecrets[0], sharedSecrets[1]) + if err != nil { + return err + } + + // Unwrap CEK via AES-256-GCM. AAD = version u16 BE. + kekBlock, err := aes.NewCipher(kekFinal) + if err != nil { + return err + } + wrapGcm, err := cipher.NewGCM(kekBlock) + if err != nil { + return err + } + cek, err := wrapGcm.Open(nil, wrapNonce, wrappedCek, []byte{0x00, 0x02}) + if err != nil { + return ErrTamperingDetected + } + + // Setup payload AEAD under CEK. + payloadBlock, err := aes.NewCipher(cek) + if err != nil { + return err + } + payloadGcm, err := cipher.NewGCM(payloadBlock) + if err != nil { + return err + } + + return decryptChunks(src, plaintext, payloadGcm, firstPayloadNonce) +} + +// decryptChunks reads and decrypts chunk records until a final chunk +// (flags & flagFinal != 0) is observed. +func decryptChunks( + src io.Reader, + plaintext io.Writer, + gcm cipher.AEAD, + firstPayloadNonce []byte, +) error { + chunkNonce := make([]byte, gcm.NonceSize()) + copy(chunkNonce, firstPayloadNonce) + + var lenB [4]byte + var flagB [1]byte + + maxChunkCtLen := uint32(chunkSize + gcmTagLen) + + for { + // Read chunk length u32 BE. + _, err := io.ReadFull(src, lenB[:]) + if err == io.EOF || err == io.ErrUnexpectedEOF { + // No final marker chunk observed — premature end of stream. + return ErrUnexpectedEOF + } + if err != nil { + return err + } + length := binary.BigEndian.Uint32(lenB[:]) + + // Read flags u8. + _, err = io.ReadFull(src, flagB[:]) + if err == io.EOF || err == io.ErrUnexpectedEOF { + return ErrUnexpectedEOF + } + if err != nil { + return err + } + flagsByte := flagB[0] + isFinal := flagsByte&flagFinal != 0 + + // Structural validation. + if length == 0 && !isFinal { + // Zero-length non-final chunk — infinite-loop DoS. + return ErrMalformedChunk + } + if length > maxChunkCtLen { + return ErrMalformedChunk + } + + // Read ciphertext. + ciphertext := make([]byte, length) + if length > 0 { + if _, err := io.ReadFull(src, ciphertext); err != nil { + return ErrUnexpectedEOF + } + } + + // AEAD open. + plaintextChunk, err := gcm.Open(nil, chunkNonce, ciphertext, nil) + if err != nil { + return ErrTamperingDetected + } + + if len(plaintextChunk) > 0 { + if _, err := plaintext.Write(plaintextChunk); err != nil { + return err + } + } + + if isFinal { + return nil + } + + if err := incrementCounter(chunkNonce); err != nil { + return err + } + } +} + +// deriveCompositeKEK applies the verbatim HKDF combiner from the plan: +// +// PRK1 = HKDF-Extract(IKM=ss_pq, salt=nil) +// kek1 = HKDF-Expand(prk1, infoPq, 32) +// IKM = kek1 || ss_classical // defensive copy of kek1 +// PRK2 = HKDF-Extract(IKM, salt=nil) +// kekFinal = HKDF-Expand(prk2, infoComposite, 32) +// +// Go 1.26 stdlib crypto/hkdf returns ([]byte, error) directly from Extract +// and Expand — no infinite io.Reader is involved, so neither io.ReadAll nor +// io.ReadFull is needed; the spirit of the plan's "do not use io.ReadAll on +// hkdf.Expand" guidance is preserved trivially. +func deriveCompositeKEK( + ssPq, ssClassical []byte, +) ([]byte, error) { + prk1, err := hkdf.Extract(sha256.New, ssPq, nil) + if err != nil { + return nil, err + } + kek1, err := hkdf.Expand(sha256.New, prk1, infoPq, kekLen) + if err != nil { + return nil, err + } + // Defensive copy of kek1 — append([]byte(nil), ...) avoids aliasing + // kek1's backing array when concatenating ssClassical (Metis B1). + ikmComposite := append(append([]byte(nil), kek1...), ssClassical...) + prk2, err := hkdf.Extract(sha256.New, ikmComposite, nil) + if err != nil { + return nil, err + } + kekFinal, err := hkdf.Expand(sha256.New, prk2, infoComposite, kekLen) + if err != nil { + return nil, err + } + return kekFinal, nil +} diff --git a/pkg/adapters/crypto/composite/composite_test.go b/pkg/adapters/crypto/composite/composite_test.go new file mode 100644 index 0000000..2577109 --- /dev/null +++ b/pkg/adapters/crypto/composite/composite_test.go @@ -0,0 +1,949 @@ +package composite + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "crypto/sha256" + "encoding/base64" + "encoding/binary" + "encoding/json" + "errors" + "fmt" + "io" + "os" + "testing" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +// --------------------------------------------------------------------------- +// Test KEM harness +// +// The composite format pins slot 0 = PQ (schemeID 0x0006, ciphertext length +// 1088) and slot 1 = classical (schemeID 0x0007, ciphertext length 32), +// matching the real mlkem768 + x25519 adapter contracts. Adapters' priv types +// are unexported and reject type-asserted impostors at Decapsulate, and the +// composite todo's scope forbids touching adapter packages — so tests exercise +// the composite with deterministic fake KEMs (registered under the SAME +// schemeIDs as the real adapters). The committed golden fixture uses these +// fakes; the composite production code is exercised end-to-end on the format, +// the HKDF combiner, AES-256-GCM wrapping, and chunked AEAD. +// --------------------------------------------------------------------------- + +const ( + fakePqSchemeID uint16 = 0x0006 + fakeClassicalSchemeID uint16 = 0x0007 + fakePqCtLen int = 1088 // matches crypto/mlkem EncapsulateKey768 ciphertext length + fakeClassicalCtLen int = 32 // matches X25519 ephemeral pubkey length + fakeSeedLen int = 32 +) + +// fakeKem derives a deterministic shared secret per pub/ct pair: +// +// ss = SHA256(pub_raw_or_priv_raw || ct) +// +// where pub.raw and priv.raw are both the random seed; randomness lives only +// in the ct (the call site's rand supplies ct bytes), so decapsulation with +// the matching priv always recovers the encryption-time ss. +type fakeKem struct { + schemeIDValue uint16 + ctLenValue int +} + +func newFakePqKem() crypto.KEM { + return &fakeKem{schemeIDValue: fakePqSchemeID, ctLenValue: fakePqCtLen} +} + +func newFakeClassicalKem() crypto.KEM { + return &fakeKem{schemeIDValue: fakeClassicalSchemeID, ctLenValue: fakeClassicalCtLen} +} + +func (k *fakeKem) SchemeID() uint16 { return k.schemeIDValue } + +func (k *fakeKem) GenerateKeyPair( + rand io.Reader, +) ( + crypto.RecipientPub, + crypto.RecipientPriv, + error, +) { + seed := make([]byte, fakeSeedLen) + if _, err := io.ReadFull(rand, seed); err != nil { + return nil, nil, err + } + return newFakePub(k.schemeIDValue, seed), newFakePriv(k.schemeIDValue, seed), nil +} + +func (k *fakeKem) Encapsulate( + pub crypto.RecipientPub, + rand io.Reader, +) ( + ciphertext []byte, + sharedSecret []byte, + err error, +) { + p, ok := pub.(*fakePub) + if !ok { + return nil, nil, errors.New("fakeKem: invalid pub type") + } + ciphertext = make([]byte, k.ctLenValue) + if _, err := io.ReadFull(rand, ciphertext); err != nil { + return nil, nil, err + } + return ciphertext, deriveFakeSS(p.raw, ciphertext), nil +} + +func (k *fakeKem) Decapsulate( + priv crypto.RecipientPriv, + ciphertext []byte, +) ( + sharedSecret []byte, + err error, +) { + p, ok := priv.(*fakePriv) + if !ok { + return nil, errors.New("fakeKem: invalid priv type") + } + if len(ciphertext) != k.ctLenValue { + return nil, errors.New("fakeKem: invalid ciphertext length") + } + return deriveFakeSS(p.raw, ciphertext), nil +} + +func (k *fakeKem) LoadPriv( + raw []byte, +) ( + crypto.RecipientPriv, + error, +) { + return newFakePriv(k.schemeIDValue, raw), nil +} + +func deriveFakeSS( + raw, ciphertext []byte, +) []byte { + h := sha256.New() + h.Write(raw) + h.Write(ciphertext) + return h.Sum(nil) +} + +// fakePub / fakePriv — deterministic raw-bytes-backed recipients. +type fakePub struct { + scheme uint16 + raw []byte + keyID []byte +} + +func newFakePub( + scheme uint16, + raw []byte, +) *fakePub { + h := sha256.Sum256(raw) + return &fakePub{ + scheme: scheme, + raw: append([]byte(nil), raw...), + keyID: h[:8], + } +} + +func (f *fakePub) SchemeID() uint16 { return f.scheme } +func (f *fakePub) KeyID() []byte { return f.keyID } +func (f *fakePub) Raw() []byte { return f.raw } + +type fakePriv struct { + scheme uint16 + raw []byte + keyID []byte +} + +func newFakePriv( + scheme uint16, + raw []byte, +) *fakePriv { + h := sha256.Sum256(raw) + return &fakePriv{ + scheme: scheme, + raw: append([]byte(nil), raw...), + keyID: h[:8], + } +} + +func (f *fakePriv) SchemeID() uint16 { return f.scheme } +func (f *fakePriv) KeyID() []byte { return f.keyID } +func (f *fakePriv) Raw() []byte { return f.raw } + +// fakeRegistry returns a Registry with the two fake KEMs registered under +// the v2 slot schemeIDs. +func fakeRegistry( + t *testing.T, +) crypto.Registry { + t.Helper() + reg := crypto.NewRegistry() + if err := reg.Register(fakePqSchemeID, newFakePqKem); err != nil { + t.Fatalf("register pq fake: %v", err) + } + if err := reg.Register(fakeClassicalSchemeID, newFakeClassicalKem); err != nil { + t.Fatalf("register classical fake: %v", err) + } + return reg +} + +// generateFakeKeyPair generates (pub, priv) for slot schemeID from rand. +func generateFakeKeyPair( + t *testing.T, + reg crypto.Registry, + schemeID uint16, + rand io.Reader, +) ( + crypto.RecipientPub, + crypto.RecipientPriv, +) { + t.Helper() + factory, err := reg.Lookup(schemeID) + if err != nil { + t.Fatalf("lookup 0x%04x: %v", schemeID, err) + } + pub, priv, err := factory().GenerateKeyPair(rand) + if err != nil { + t.Fatalf("generate 0x%04x: %v", schemeID, err) + } + return pub, priv +} + +// standardHeaderLen returns the fixed artifact-header length given the two +// slot ciphertext lengths: 11 (magic+version+flags+nRecipients) + +// per-slot (14 + ctLen) + 72 (wrapNonce+wrappedCEK+firstPayloadNonce). +func standardHeaderLen( + pqCtLen, classicalCtLen int, +) int { + return 11 + (14 + pqCtLen) + (14 + classicalCtLen) + (12 + 48 + 12) +} + +// countingReader wraps an io.Reader and counts how many bytes have been read +// — used by the adversarial-parser tests to assert the parser does NOT +// consume past the header before bailing out. +type countingReader struct { + r io.Reader + n int64 +} + +func (c *countingReader) Read( + p []byte, +) (int, error) { + readN, err := c.r.Read(p) + c.n += int64(readN) + return readN, err +} + +// --------------------------------------------------------------------------- +// Tests (a) through (p) +// --------------------------------------------------------------------------- + +// (a) Golden format fixture. +func TestGoldenFormat( + t *testing.T, +) { + goldenBytes := mustReadFile(t, "testdata/golden-1byte.pqenc") + + // Header byte offsets pinned verbatim — if any of these breaks, the + // on-disk format has drifted and old .pqenc files won't decrypt. + // [0:4] magic u32 BE = 0x47535051 + // [4:6] version u16 BE = 0x0002 + // [6:10] flags u32 BE = 0x00000000 + // [10] nRecipients u8 = 0x02 + // [11:13] slot0 schemeID = 0x0006 + // [13:21] slot0 keyID 8B + // [21:25] slot0 ctLen u32 = 1088 + // [25:1113] slot0 ciphertext (1088 bytes) + // [1113:1115] slot1 schemeID = 0x0007 + if binary.BigEndian.Uint32(goldenBytes[0:4]) != 0x47535051 { + t.Errorf("magic = 0x%08x, want 0x47535051", binary.BigEndian.Uint32(goldenBytes[0:4])) + } + if binary.BigEndian.Uint16(goldenBytes[4:6]) != 0x0002 { + t.Errorf("version = 0x%04x, want 0x0002", binary.BigEndian.Uint16(goldenBytes[4:6])) + } + if binary.BigEndian.Uint32(goldenBytes[6:10]) != 0x00000000 { + t.Errorf("flags = 0x%08x, want 0", binary.BigEndian.Uint32(goldenBytes[6:10])) + } + if goldenBytes[10] != 0x02 { + t.Errorf("nRecipients = 0x%02x, want 0x02", goldenBytes[10]) + } + if binary.BigEndian.Uint16(goldenBytes[11:13]) != 0x0006 { + t.Errorf("slot0 schemeID = 0x%04x, want 0x0006", binary.BigEndian.Uint16(goldenBytes[11:13])) + } + if binary.BigEndian.Uint16(goldenBytes[1113:1115]) != 0x0007 { + t.Errorf("slot1 schemeID = 0x%04x, want 0x0007", binary.BigEndian.Uint16(goldenBytes[1113:1115])) + } + + // Decrypt-equality: reconstruct privs from committed golden-keys.json + // and assert Decrypt yields the 0xAA plaintext committed via golden_generate. + pqPriv, classicalPriv := loadGoldenPrivs(t, "testdata/golden-keys.json") + + dec := NewDecryptor(fakeRegistry(t)) + out := &bytes.Buffer{} + if err := dec.Decrypt( + bytes.NewReader(goldenBytes), + []crypto.RecipientPriv{pqPriv, classicalPriv}, + out, + ); err != nil { + t.Fatalf("Decrypt(golden) failed: %v", err) + } + if !bytes.Equal(out.Bytes(), []byte{0xAA}) { + t.Errorf("decrypted = %x, want [0xAA]", out.Bytes()) + } +} + +// (b) Round-trip on canonical input sizes. +func TestRoundTrip( + t *testing.T, +) { + sizes := []int{0, 1, 64*1024 - 1, 64 * 1024, 64*1024 + 1, 1 << 20} + for _, size := range sizes { + t.Run(fmt.Sprintf("size=%d", size), func(t *testing.T) { + plaintext := make([]byte, size) + for i := 0; i < size; i++ { + plaintext[i] = byte(i) + } + + reg := fakeRegistry(t) + enc := NewEncryptor(reg) + dec := NewDecryptor(reg) + + pqPub, pqPriv := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + classicalPub, classicalPriv := generateFakeKeyPair(t, reg, fakeClassicalSchemeID, rand.Reader) + + var encrypted bytes.Buffer + if err := enc.Encrypt( + bytes.NewReader(plaintext), + []crypto.RecipientPub{pqPub, classicalPub}, + &encrypted, + rand.Reader, + ); err != nil { + t.Fatalf("Encrypt: %v", err) + } + + out := &bytes.Buffer{} + if err := dec.Decrypt( + bytes.NewReader(encrypted.Bytes()), + []crypto.RecipientPriv{pqPriv, classicalPriv}, + out, + ); err != nil { + t.Fatalf("Decrypt: %v", err) + } + if !bytes.Equal(out.Bytes(), plaintext) { + t.Errorf("round-trip mismatch: got %d bytes, want %d", out.Len(), len(plaintext)) + } + }) + } +} + +// (c) Empty plaintext produces exactly ONE chunk with flags=0x01 and a 16B +// (tag-only) ciphertext. +func TestEmptyPlaintextSingleFinalChunk( + t *testing.T, +) { + reg := fakeRegistry(t) + enc := NewEncryptor(reg) + + pqPub, _ := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + classicalPub, _ := generateFakeKeyPair(t, reg, fakeClassicalSchemeID, rand.Reader) + + var encrypted bytes.Buffer + if err := enc.Encrypt( + bytes.NewReader(nil), + []crypto.RecipientPub{pqPub, classicalPub}, + &encrypted, + rand.Reader, + ); err != nil { + t.Fatalf("Encrypt: %v", err) + } + + headerLen := standardHeaderLen(fakePqCtLen, fakeClassicalCtLen) + chunks := encrypted.Bytes()[headerLen:] + + // Expected record: [len=16 u32 (4B)][flags=0x01 (1B)][ciphertext (16B)]. + if len(chunks) != 4+1+16 { + t.Fatalf("expected 21-byte chunk record, got %d bytes", len(chunks)) + } + if ctLen := binary.BigEndian.Uint32(chunks[0:4]); ctLen != 16 { + t.Errorf("ctLen = %d, want 16 (tag-only)", ctLen) + } + if chunks[4] != 0x01 { + t.Errorf("flags = 0x%02x, want 0x01", chunks[4]) + } + if len(chunks[5:]) != 16 { + t.Errorf("ciphertext = %d bytes, want 16 (tag-only)", len(chunks[5:])) + } +} + +// (d) Exactly-64KiB input produces TWO chunks: full body (flags=0x00) and +// zero-length final marker (flags=0x01). +func TestExactly64KiBTwoChunks( + t *testing.T, +) { + reg := fakeRegistry(t) + enc := NewEncryptor(reg) + + pqPub, _ := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + classicalPub, _ := generateFakeKeyPair(t, reg, fakeClassicalSchemeID, rand.Reader) + + plaintext := bytes.Repeat([]byte{0xCC}, 64*1024) + var encrypted bytes.Buffer + if err := enc.Encrypt( + bytes.NewReader(plaintext), + []crypto.RecipientPub{pqPub, classicalPub}, + &encrypted, + rand.Reader, + ); err != nil { + t.Fatalf("Encrypt: %v", err) + } + + headerLen := standardHeaderLen(fakePqCtLen, fakeClassicalCtLen) + chunks := encrypted.Bytes()[headerLen:] + + // Chunk 1: full body. ct = 64 KiB plaintext + 16B tag. + const bodyCtLen = 64*1024 + 16 + if ctLen := binary.BigEndian.Uint32(chunks[0:4]); ctLen != bodyCtLen { + t.Errorf("chunk1 ctLen = %d, want %d", ctLen, bodyCtLen) + } + if chunks[4] != 0x00 { + t.Errorf("chunk1 flags = 0x%02x, want 0x00", chunks[4]) + } + + // Chunk 2: zero-length final marker (ct = 16B tag), flags = 0x01. + chunk2Start := 4 + 1 + bodyCtLen + if chunk2Start+5 > len(chunks) { + t.Fatalf("file truncated before chunk 2: need offset %d, have %d", chunk2Start+5, len(chunks)) + } + if ctLen := binary.BigEndian.Uint32(chunks[chunk2Start : chunk2Start+4]); ctLen != 16 { + t.Errorf("chunk2 ctLen = %d, want 16 (zero-length marker)", ctLen) + } + if chunks[chunk2Start+4] != 0x01 { + t.Errorf("chunk2 flags = 0x%02x, want 0x01", chunks[chunk2Start+4]) + } + + chunk3Start := chunk2Start + 4 + 1 + 16 + if chunk3Start != len(chunks) { + t.Errorf("expected exactly 2 chunks; remaining = %d bytes after chunk 2", len(chunks)-chunk3Start) + } +} + +// (e) Counter wrap-around: with chunkNonce[4:12]=0xFFFFFFFFFFFFFFFF, an +// attempt to encrypt a SECOND body chunk fails on counter increment and +// returns ErrNonceCounterWrapped. +func TestCounterWraparound( + t *testing.T, +) { + // firstPayloadNonce: slot 0..3 = arbitrary base; slot 4..11 = 0xFF*8. + firstPayloadNonce := make([]byte, 12) + firstPayloadNonce[0] = 0xde + firstPayloadNonce[1] = 0xad + firstPayloadNonce[2] = 0xbe + firstPayloadNonce[3] = 0xef + for i := 4; i < 12; i++ { + firstPayloadNonce[i] = 0xFF + } + + cek := make([]byte, 32) + if _, err := io.ReadFull(rand.Reader, cek); err != nil { + t.Fatalf("rand: %v", err) + } + block, err := aes.NewCipher(cek) + if err != nil { + t.Fatalf("aes: %v", err) + } + gcm, err := cipher.NewGCM(block) + if err != nil { + t.Fatalf("gcm: %v", err) + } + + // 64 KiB + 1 byte forces 2 body chunks; incrementing after chunk 1 + // wraps to 0 and ErrNonceCounterWrapped (the second chunk's emission + // never happens). + input := make([]byte, chunkSize+1) + var out bytes.Buffer + err = encryptChunks(bytes.NewReader(input), &out, gcm, firstPayloadNonce) + if !errors.Is(err, ErrNonceCounterWrapped) { + t.Errorf("expected ErrNonceCounterWrapped, got %v", err) + } +} + +// (f) Tamper 1 byte in payload → ErrTamperingDetected. +func TestTamperPayload( + t *testing.T, +) { + reg := fakeRegistry(t) + enc := NewEncryptor(reg) + dec := NewDecryptor(reg) + + pqPub, pqPriv := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + classicalPub, classicalPriv := generateFakeKeyPair(t, reg, fakeClassicalSchemeID, rand.Reader) + + plaintext := bytes.Repeat([]byte{0x88}, 64*1024+1) // enough to produce a body chunk + final + var encrypted bytes.Buffer + if err := enc.Encrypt( + bytes.NewReader(plaintext), + []crypto.RecipientPub{pqPub, classicalPub}, + &encrypted, + rand.Reader, + ); err != nil { + t.Fatalf("Encrypt: %v", err) + } + + buf := encrypted.Bytes() + headerLen := standardHeaderLen(fakePqCtLen, fakeClassicalCtLen) + tamperIdx := headerLen + 4 + 1 + 8 // into first chunk ciphertext, past len + flags + if tamperIdx >= len(buf) { + t.Fatalf("file too small to tamper: idx=%d len=%d", tamperIdx, len(buf)) + } + buf[tamperIdx] ^= 0x01 + + out := &bytes.Buffer{} + err := dec.Decrypt( + bytes.NewReader(buf), + []crypto.RecipientPriv{pqPriv, classicalPriv}, + out, + ) + if !errors.Is(err, ErrTamperingDetected) { + t.Errorf("expected ErrTamperingDetected, got %v", err) + } +} + +// (g) Tamper 1 byte in wrappedCEK → ErrTamperingDetected. +func TestTamperWrappedCEK( + t *testing.T, +) { + reg := fakeRegistry(t) + enc := NewEncryptor(reg) + dec := NewDecryptor(reg) + + pqPub, pqPriv := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + classicalPub, classicalPriv := generateFakeKeyPair(t, reg, fakeClassicalSchemeID, rand.Reader) + + var encrypted bytes.Buffer + if err := enc.Encrypt( + bytes.NewReader([]byte{0xAA}), + []crypto.RecipientPub{pqPub, classicalPub}, + &encrypted, + rand.Reader, + ); err != nil { + t.Fatalf("Encrypt: %v", err) + } + + buf := encrypted.Bytes() + + // wrappedCEK starts at: header-prefix (11) + slot0 (+ct) + slot1 (+ct) + wrapNonce (12). + wrapOffset := 11 + (14 + fakePqCtLen) + (14 + fakeClassicalCtLen) + 12 + if wrapOffset+wrappedCekLen > len(buf) { + t.Fatalf("file too short for wrappedCEK") + } + buf[wrapOffset+5] ^= 0x01 + + out := &bytes.Buffer{} + err := dec.Decrypt( + bytes.NewReader(buf), + []crypto.RecipientPriv{pqPriv, classicalPriv}, + out, + ) + if !errors.Is(err, ErrTamperingDetected) { + t.Errorf("expected ErrTamperingDetected, got %v", err) + } +} + +// (h) Wrong priv key (swap pq.priv with another) → ErrWrongKeys. +func TestWrongPrivKey( + t *testing.T, +) { + reg := fakeRegistry(t) + enc := NewEncryptor(reg) + dec := NewDecryptor(reg) + + pqPub, _ := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + classicalPub, classicalPriv := generateFakeKeyPair(t, reg, fakeClassicalSchemeID, rand.Reader) + + // Different PQ priv — fresh seed, hence different KeyID. + _, wrongPqPriv := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + // Sanity: the wrong priv's keyID must not collide with the original + // pub's (otherwise this test would degrade into a keyID-collision case). + if bytes.Equal(wrongPqPriv.KeyID(), pqPub.KeyID()) { + t.Fatalf("wrongPqPriv keyID accidentally collides with pqPub keyID; reseed") + } + + var encrypted bytes.Buffer + if err := enc.Encrypt( + bytes.NewReader([]byte{0x11, 0x22, 0x33}), + []crypto.RecipientPub{pqPub, classicalPub}, + &encrypted, + rand.Reader, + ); err != nil { + t.Fatalf("Encrypt: %v", err) + } + + out := &bytes.Buffer{} + err := dec.Decrypt( + bytes.NewReader(encrypted.Bytes()), + []crypto.RecipientPriv{wrongPqPriv, classicalPriv}, + out, + ) + if !errors.Is(err, ErrWrongKeys) { + t.Errorf("expected ErrWrongKeys, got %v", err) + } +} + +// (i) Format conformance: magic, version, nRecipients. +func TestFormatConformance( + t *testing.T, +) { + reg := fakeRegistry(t) + enc := NewEncryptor(reg) + pqPub, _ := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + classicalPub, _ := generateFakeKeyPair(t, reg, fakeClassicalSchemeID, rand.Reader) + + var out bytes.Buffer + if err := enc.Encrypt( + bytes.NewReader([]byte{0x42}), + []crypto.RecipientPub{pqPub, classicalPub}, + &out, + rand.Reader, + ); err != nil { + t.Fatalf("Encrypt: %v", err) + } + + outBytes := out.Bytes() + if binary.BigEndian.Uint32(outBytes[0:4]) != 0x47535051 { + t.Errorf("magic = 0x%08x, want 0x47535051", binary.BigEndian.Uint32(outBytes[0:4])) + } + if binary.BigEndian.Uint16(outBytes[4:6]) != 0x0002 { + t.Errorf("version = 0x%04x, want 0x0002", binary.BigEndian.Uint16(outBytes[4:6])) + } + if outBytes[10] != 0x02 { + t.Errorf("nRecipients = 0x%02x, want 0x02", outBytes[10]) + } +} + +// (j) Adversarial parser: version==0x0001 → ErrUnsupportedVersion, with no +// GCM operations attempted (proven by the post-validation byte counter +// remaining at the prefix length — the parser does not consume past the +// header before bailing). +func TestUnsupportedVersionNoGCM( + t *testing.T, +) { + reg := fakeRegistry(t) + dec := NewDecryptor(reg) + + // File: magic + version=0x0001 + flags + nRecipients=0x02 + filler. + var buf bytes.Buffer + _ = binary.Write(&buf, binary.BigEndian, uint32(0x47535051)) // magic + _ = binary.Write(&buf, binary.BigEndian, uint16(0x0001)) // version (downgrade probe) + buf.Write(make([]byte, 200)) // filler + + // Dummy privs — irrelevant because the parser bails at version check, + // but Decrypt accepts the slice shape. + _, pqPriv := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + _, classicalPriv := generateFakeKeyPair(t, reg, fakeClassicalSchemeID, rand.Reader) + + reader := &countingReader{r: bytes.NewReader(buf.Bytes())} + out := &bytes.Buffer{} + err := dec.Decrypt( + reader, + []crypto.RecipientPriv{pqPriv, classicalPriv}, + out, + ) + if !errors.Is(err, ErrUnsupportedVersion) { + t.Errorf("expected ErrUnsupportedVersion, got %v", err) + } + + // The parser consumed only the 11-byte prefix — no further bytes read, + // hence no GCM operations attempted. + if reader.n != 11 { + t.Errorf("Decrypt consumed %d bytes post-validation; expected exactly 11 (the fixed prefix)", reader.n) + } +} + +// (k) nRecipients==0 → ErrMalformedHeader. +func TestZeroRecipients( + t *testing.T, +) { + var buf bytes.Buffer + _ = binary.Write(&buf, binary.BigEndian, uint32(0x47535051)) // magic + _ = binary.Write(&buf, binary.BigEndian, uint16(0x0002)) // version + _ = binary.Write(&buf, binary.BigEndian, uint32(0)) // flags + buf.WriteByte(0x00) // nRecipients = 0 + buf.Write(make([]byte, 64)) // filler + + dec := NewDecryptor(fakeRegistry(t)) + err := dec.Decrypt(bytes.NewReader(buf.Bytes()), nil, &bytes.Buffer{}) + if !errors.Is(err, ErrMalformedHeader) { + t.Errorf("expected ErrMalformedHeader, got %v", err) + } +} + +// (l) nRecipients>2 OR ctLen > maxRecipientCiphertextLen → +// ErrMalformedHeader BEFORE io.ReadFull attempts to allocate the +// oversized ciphertext buffer. +func TestMalformedHeaderCtLenOverflow( + t *testing.T, +) { + t.Run("nRecipients_gt_2", func(t *testing.T) { + var buf bytes.Buffer + _ = binary.Write(&buf, binary.BigEndian, uint32(0x47535051)) // magic + _ = binary.Write(&buf, binary.BigEndian, uint16(0x0002)) // version + _ = binary.Write(&buf, binary.BigEndian, uint32(0)) // flags + buf.WriteByte(0x03) // nRecipients = 3 + buf.Write(make([]byte, 200)) // filler + + dec := NewDecryptor(fakeRegistry(t)) + err := dec.Decrypt(bytes.NewReader(buf.Bytes()), nil, &bytes.Buffer{}) + if !errors.Is(err, ErrMalformedHeader) { + t.Errorf("expected ErrMalformedHeader, got %v", err) + } + }) + + t.Run("ctLen_overflow", func(t *testing.T) { + var buf bytes.Buffer + _ = binary.Write(&buf, binary.BigEndian, uint32(0x47535051)) // magic + _ = binary.Write(&buf, binary.BigEndian, uint16(0x0002)) // version + _ = binary.Write(&buf, binary.BigEndian, uint32(0)) // flags + buf.WriteByte(0x02) // nRecipients = 2 + + // Slot 0 metadata only — schemeID, keyID, ctLen = 2 MiB (over the + // 1<<20 cap). The parser validates ctLen BEFORE allocating and + // reading per-slot ciphertext bytes, so it must reject at this + // point without attempting io.ReadFull of an oversized buffer. + _ = binary.Write(&buf, binary.BigEndian, uint16(0x0006)) + buf.Write(make([]byte, 8)) // keyID + _ = binary.Write(&buf, binary.BigEndian, uint32(2*1024*1024)) // ctLen + + reader := &countingReader{r: bytes.NewReader(buf.Bytes())} + dec := NewDecryptor(fakeRegistry(t)) + _, pqPriv := generateFakeKeyPair(t, fakeRegistry(t), fakePqSchemeID, rand.Reader) + _, classicalPriv := generateFakeKeyPair(t, fakeRegistry(t), fakeClassicalSchemeID, rand.Reader) + err := dec.Decrypt( + reader, + []crypto.RecipientPriv{pqPriv, classicalPriv}, + &bytes.Buffer{}, + ) + if !errors.Is(err, ErrMalformedHeader) { + t.Errorf("expected ErrMalformedHeader, got %v", err) + } + // Consumed exactly prefix(11) + slot0 metadata(14) = 25 bytes — the + // ctLen validation fired before reading any slot1 metadata or any + // per-slot ciphertext. + if reader.n != 25 { + t.Errorf("Decrypt consumed %d bytes; expected 25 (no io.ReadFull of oversized ct)", reader.n) + } + }) +} + +// (m) Chunk record with length==0 AND flags&0x01==0 → ErrMalformedChunk +// (prevents an infinite-loop DoS where the parser keeps scanning zero-size +// non-final chunks). +func TestZeroLengthNonFinalChunk( + t *testing.T, +) { + reg := fakeRegistry(t) + enc := NewEncryptor(reg) + dec := NewDecryptor(reg) + + pqPub, pqPriv := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + classicalPub, classicalPriv := generateFakeKeyPair(t, reg, fakeClassicalSchemeID, rand.Reader) + + var encrypted bytes.Buffer + if err := enc.Encrypt( + bytes.NewReader([]byte{0xAA}), + []crypto.RecipientPub{pqPub, classicalPub}, + &encrypted, + rand.Reader, + ); err != nil { + t.Fatalf("Encrypt: %v", err) + } + + headerLen := standardHeaderLen(fakePqCtLen, fakeClassicalCtLen) + var corrupt bytes.Buffer + corrupt.Write(encrypted.Bytes()[:headerLen]) + _ = binary.Write(&corrupt, binary.BigEndian, uint32(0)) // ctLen = 0 + corrupt.WriteByte(0x00) // flags = 0x00 (NOT final) + + out := &bytes.Buffer{} + err := dec.Decrypt( + bytes.NewReader(corrupt.Bytes()), + []crypto.RecipientPriv{pqPriv, classicalPriv}, + out, + ) + if !errors.Is(err, ErrMalformedChunk) { + t.Errorf("expected ErrMalformedChunk, got %v", err) + } +} + +// (n) Chunk record with length > 64*1024+16 → ErrMalformedChunk. +func TestOversizedChunk( + t *testing.T, +) { + reg := fakeRegistry(t) + enc := NewEncryptor(reg) + dec := NewDecryptor(reg) + + pqPub, pqPriv := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + classicalPub, classicalPriv := generateFakeKeyPair(t, reg, fakeClassicalSchemeID, rand.Reader) + + var encrypted bytes.Buffer + if err := enc.Encrypt( + bytes.NewReader([]byte{0xAA}), + []crypto.RecipientPub{pqPub, classicalPub}, + &encrypted, + rand.Reader, + ); err != nil { + t.Fatalf("Encrypt: %v", err) + } + + headerLen := standardHeaderLen(fakePqCtLen, fakeClassicalCtLen) + var corrupt bytes.Buffer + corrupt.Write(encrypted.Bytes()[:headerLen]) + _ = binary.Write(&corrupt, binary.BigEndian, uint32(chunkSize+gcmTagLen+1)) // oversized + corrupt.WriteByte(0x00) // flags = 0x00 + + out := &bytes.Buffer{} + err := dec.Decrypt( + bytes.NewReader(corrupt.Bytes()), + []crypto.RecipientPriv{pqPriv, classicalPriv}, + out, + ) + if !errors.Is(err, ErrMalformedChunk) { + t.Errorf("expected ErrMalformedChunk, got %v", err) + } +} + +// (o) End-of-stream reached BEFORE any chunk with flags&0x01==1 +// (truncated file after a body chunk with no final marker) → +// ErrUnexpectedEOF. +func TestPrematureEOF( + t *testing.T, +) { + reg := fakeRegistry(t) + enc := NewEncryptor(reg) + dec := NewDecryptor(reg) + + pqPub, pqPriv := generateFakeKeyPair(t, reg, fakePqSchemeID, rand.Reader) + classicalPub, classicalPriv := generateFakeKeyPair(t, reg, fakeClassicalSchemeID, rand.Reader) + + plaintext := bytes.Repeat([]byte{0xAB}, 64*1024+1) // 2 body chunks + final marker + var encrypted bytes.Buffer + if err := enc.Encrypt( + bytes.NewReader(plaintext), + []crypto.RecipientPub{pqPub, classicalPub}, + &encrypted, + rand.Reader, + ); err != nil { + t.Fatalf("Encrypt: %v", err) + } + + headerLen := standardHeaderLen(fakePqCtLen, fakeClassicalCtLen) + bodyCtLen := 64*1024 + 1 + gcmTagLen + bodyChunkRecord := 4 + 1 + bodyCtLen + truncatedLen := headerLen + bodyChunkRecord + + if truncatedLen >= len(encrypted.Bytes()) { + t.Fatalf("encrypted file shorter than expected: %d vs expected truncation at %d", + len(encrypted.Bytes()), truncatedLen) + } + + out := &bytes.Buffer{} + err := dec.Decrypt( + bytes.NewReader(encrypted.Bytes()[:truncatedLen]), + []crypto.RecipientPriv{pqPriv, classicalPriv}, + out, + ) + if !errors.Is(err, ErrUnexpectedEOF) { + t.Errorf("expected ErrUnexpectedEOF, got %v", err) + } +} + +// (p) Truncated header → ErrMalformedHeader BEFORE any recipient allocation. +func TestTruncatedHeader( + t *testing.T, +) { + dec := NewDecryptor(fakeRegistry(t)) + + // File is shorter than the fixed 11-byte prefix + per-recipient metadata + // (2×14=28 = 39 bytes minimum): only 30 bytes total. + var buf bytes.Buffer + _ = binary.Write(&buf, binary.BigEndian, uint32(0x47535051)) // magic + _ = binary.Write(&buf, binary.BigEndian, uint16(0x0002)) // version + _ = binary.Write(&buf, binary.BigEndian, uint32(0)) // flags + buf.WriteByte(0x02) // nRecipients = 2 + buf.Write(make([]byte, 20)) // only 20 of the needed 28 metadata bytes + + reader := &countingReader{r: bytes.NewReader(buf.Bytes())} + err := dec.Decrypt(reader, nil, &bytes.Buffer{}) + if !errors.Is(err, ErrMalformedHeader) { + t.Errorf("expected ErrMalformedHeader, got %v", err) + } + // No recipient ct allocation happened — only the prefix (11) + partial + // metadata (20) = 31 bytes consumed; well shy of a full prefix+meta + // read that would precede any per-recipient ct allocation. + if reader.n > 39 { + t.Errorf("Decrypt consumed %d bytes; expected ≤ 39 — no recipient allocation occurred", reader.n) + } +} + +// --------------------------------------------------------------------------- +// Shared test helpers +// --------------------------------------------------------------------------- + +func mustReadFile( + t *testing.T, + path string, +) []byte { + t.Helper() + data, err := os.ReadFile(path) + if err != nil { + t.Fatalf("read %s: %v", path, err) + } + return data +} + +func mustB64Decode( + t *testing.T, + s string, +) []byte { + t.Helper() + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + t.Fatalf("base64 decode: %v", err) + } + return b +} + +// loadGoldenPrivs reconstructs the two fake privs from the committed +// golden-keys.json (the file produced by //go:build golden_generate). +type goldenKeyFile struct { + Pq string `json:"pq"` + Classical string `json:"classical"` +} + +func loadGoldenPrivs( + t *testing.T, + path string, +) ( + *fakePriv, + *fakePriv, +) { + t.Helper() + data := mustReadFile(t, path) + var keys goldenKeyFile + if err := json.Unmarshal(data, &keys); err != nil { + t.Fatalf("unmarshal golden keys: %v", err) + } + pqRaw := mustB64Decode(t, keys.Pq) + classicalRaw := mustB64Decode(t, keys.Classical) + if len(pqRaw) != fakeSeedLen { + t.Fatalf("pq raw len = %d, want %d", len(pqRaw), fakeSeedLen) + } + if len(classicalRaw) != fakeSeedLen { + t.Fatalf("classical raw len = %d, want %d", len(classicalRaw), fakeSeedLen) + } + return newFakePriv(fakePqSchemeID, pqRaw), newFakePriv(fakeClassicalSchemeID, classicalRaw) +} diff --git a/pkg/adapters/crypto/composite/golden_generate_test.go b/pkg/adapters/crypto/composite/golden_generate_test.go new file mode 100644 index 0000000..75bb106 --- /dev/null +++ b/pkg/adapters/crypto/composite/golden_generate_test.go @@ -0,0 +1,120 @@ +//go:build golden_generate + +// The golden_generate build tag is intentionally separate so CI never +// regenerates the committed fixture. Run ONCE locally to (re)commit: +// +// ~/sdk/go1.26.5/bin/go test -tags golden_generate \ +// -run TestGenerateGoldenFixture -v \ +// ./pkg/adapters/crypto/composite/... +// +// Then commit the produced testdata/golden-1byte.pqenc and +// testdata/golden-keys.json. Non-`-update` runs of TestGoldenFormat load +// the committed artifacts and verify decrypt-equality. +package composite + +import ( + "bytes" + "crypto/sha256" + "encoding/base64" + "encoding/binary" + "encoding/json" + "fmt" + "os" + "testing" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +// deterministicRand implements io.Reader via a SHA-256 counter stream so the +// golden fixture is byte-for-byte reproducible across machines and Go +// toolchain versions. +type deterministicRand struct { + seq uint64 +} + +func (d *deterministicRand) Read( + p []byte, +) (int, error) { + for offset := 0; offset < len(p); { + var b [8]byte + binary.BigEndian.PutUint64(b[:], d.seq) + d.seq++ + out := sha256.New() + out.Write(b[:]) + hashed := out.Sum(nil) + n := copy(p[offset:], hashed) + offset += n + } + return len(p), nil +} + +// Hard-coded priv seeds so the committed golden-keys.json stays stable across +// builds — these are the test-only private "keys" the committed golden file +// decrypts against. +var ( + goldenPqSeed = [32]byte{ + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + } + goldenClassicalSeed = [32]byte{ + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, + } +) + +func TestGenerateGoldenFixture( + t *testing.T, +) { + pqPub := newFakePub(fakePqSchemeID, goldenPqSeed[:]) + pqPriv := newFakePriv(fakePqSchemeID, goldenPqSeed[:]) + classicalPub := newFakePub(fakeClassicalSchemeID, goldenClassicalSeed[:]) + classicalPriv := newFakePriv(fakeClassicalSchemeID, goldenClassicalSeed[:]) + + reg := crypto.NewRegistry() + if err := reg.Register(fakePqSchemeID, newFakePqKem); err != nil { + t.Fatalf("register pq fake: %v", err) + } + if err := reg.Register(fakeClassicalSchemeID, newFakeClassicalKem); err != nil { + t.Fatalf("register classical fake: %v", err) + } + + enc := NewEncryptor(reg) + rng := &deterministicRand{} + + var encrypted bytes.Buffer + if err := enc.Encrypt( + bytes.NewReader([]byte{0xAA}), + []crypto.RecipientPub{pqPub, classicalPub}, + &encrypted, + rng, + ); err != nil { + t.Fatalf("Encrypt: %v", err) + } + + if err := os.MkdirAll("testdata", 0o755); err != nil { + t.Fatalf("mkdir testdata: %v", err) + } + if err := os.WriteFile("testdata/golden-1byte.pqenc", encrypted.Bytes(), 0o644); err != nil { + t.Fatalf("write golden file: %v", err) + } + + keys := goldenKeyFile{ + Pq: base64.StdEncoding.EncodeToString(pqPriv.Raw()), + Classical: base64.StdEncoding.EncodeToString(classicalPriv.Raw()), + } + marshalled, err := json.MarshalIndent(keys, "", " ") + if err != nil { + t.Fatalf("marshal keys: %v", err) + } + marshalled = append(marshalled, '\n') + if err := os.WriteFile("testdata/golden-keys.json", marshalled, 0o644); err != nil { + t.Fatalf("write keys json: %v", err) + } + + fmt.Printf("Golden fixture written: testdata/golden-1byte.pqenc (%d bytes), "+ + "testdata/golden-keys.json (%d bytes)\n", len(encrypted.Bytes()), len(marshalled)) +} diff --git a/pkg/adapters/crypto/composite/testdata/golden-keys.json b/pkg/adapters/crypto/composite/testdata/golden-keys.json new file mode 100644 index 0000000..956846b --- /dev/null +++ b/pkg/adapters/crypto/composite/testdata/golden-keys.json @@ -0,0 +1,4 @@ +{ + "pq": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=", + "classical": "ISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0A=" +} diff --git a/pkg/adapters/crypto/keymanager/keymanager.go b/pkg/adapters/crypto/keymanager/keymanager.go new file mode 100644 index 0000000..7d2305b --- /dev/null +++ b/pkg/adapters/crypto/keymanager/keymanager.go @@ -0,0 +1,214 @@ +package keymanager + +import ( + "crypto/sha256" + "encoding/pem" + "errors" + "fmt" + "io" + "os" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +var ( + // ErrPEMTypeMismatch is returned when the PEM block type does not match + // the expected type for the given schemeID. + ErrPEMTypeMismatch = errors.New("PEM type does not match scheme") + // ErrInvalidPEM is returned when the file does not contain a valid PEM block. + ErrInvalidPEM = errors.New("invalid PEM data") +) + +var pubPEMTypes = map[uint16]string{ + 0x0006: "ML-KEM-768 PUBLIC KEY", + 0x0007: "X25519 PUBLIC KEY", +} + +var privPEMTypes = map[uint16]string{ + 0x0006: "ML-KEM-768 PRIVATE KEY", + 0x0007: "X25519 PRIVATE KEY", +} + +// keyManager handles PEM encoding and decoding of recipient keys. +type keyManager struct { + registry crypto.Registry +} + +// NewKeyManager creates a new KeyManager backed by the provided Registry. +func NewKeyManager( + registry crypto.Registry, +) crypto.KeyManager { + return &keyManager{ + registry: registry, + } +} + +// Generate creates a new key pair for the given schemeID and writes them +// as PEM blocks to pubOut and privOut. +func (k *keyManager) Generate( + schemeID uint16, + pubOut io.Writer, + privOut io.Writer, + rand io.Reader, +) error { + factory, err := k.registry.Lookup(schemeID) + if err != nil { + return err + } + + kem := factory() + pub, priv, err := kem.GenerateKeyPair(rand) + if err != nil { + return err + } + + pubType, ok := pubPEMTypes[schemeID] + if !ok { + return fmt.Errorf( + "unsupported scheme 0x%04x for public key PEM", + schemeID, + ) + } + + privType, ok := privPEMTypes[schemeID] + if !ok { + return fmt.Errorf( + "unsupported scheme 0x%04x for private key PEM", + schemeID, + ) + } + + pubBlock := &pem.Block{ + Type: pubType, + Bytes: pub.Raw(), + } + if err := pem.Encode(pubOut, pubBlock); err != nil { + return fmt.Errorf("encode public key PEM: %w", err) + } + + privBlock := &pem.Block{ + Type: privType, + Bytes: priv.Raw(), + } + if err := pem.Encode(privOut, privBlock); err != nil { + return fmt.Errorf("encode private key PEM: %w", err) + } + + return nil +} + +// LoadPub reads a PEM-encoded public key from path and validates that its +// type matches the expected type for schemeID. +func (k *keyManager) LoadPub( + path string, + schemeID uint16, +) ( + crypto.RecipientPub, + error, +) { + data, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("read public key file: %w", err) + } + + block, _ := pem.Decode(data) + if block == nil { + return nil, fmt.Errorf("%w: no valid PEM block found", ErrInvalidPEM) + } + + expectedType, ok := pubPEMTypes[schemeID] + if !ok { + return nil, fmt.Errorf( + "unsupported scheme 0x%04x for public key PEM", + schemeID, + ) + } + + if block.Type != expectedType { + return nil, fmt.Errorf( + "expected PEM type %q, got %q: %w", + expectedType, + block.Type, + ErrPEMTypeMismatch, + ) + } + + return newRecipientPub(schemeID, block.Bytes), nil +} + +// LoadPriv reads a PEM-encoded private key from path and validates that its +// type matches the expected type for schemeID. +func (k *keyManager) LoadPriv( + path string, + schemeID uint16, +) ( + crypto.RecipientPriv, + error, +) { + data, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("read private key file: %w", err) + } + + block, _ := pem.Decode(data) + if block == nil { + return nil, fmt.Errorf("%w: no valid PEM block found", ErrInvalidPEM) + } + + expectedType, ok := privPEMTypes[schemeID] + if !ok { + return nil, fmt.Errorf( + "unsupported scheme 0x%04x for private key PEM", + schemeID, + ) + } + + if block.Type != expectedType { + return nil, fmt.Errorf( + "expected PEM type %q, got %q: %w", + expectedType, + block.Type, + ErrPEMTypeMismatch, + ) + } + + factory, err := k.registry.Lookup(schemeID) + if err != nil { + return nil, err + } + kem := factory() + return kem.LoadPriv(block.Bytes) +} + +// recipientPub is a generic RecipientPub implementation backed by raw bytes. +type recipientPub struct { + schemeID uint16 + raw []byte + keyID []byte +} + +func newRecipientPub( + schemeID uint16, + raw []byte, +) crypto.RecipientPub { + var keyID []byte + + switch schemeID { + case 0x0006: + h := sha256.Sum256(raw[:8]) + keyID = h[:8] + case 0x0007: + h := sha256.Sum256(raw) + keyID = h[:8] + } + + return &recipientPub{ + schemeID: schemeID, + raw: append([]byte(nil), raw...), + keyID: keyID, + } +} + +func (r *recipientPub) SchemeID() uint16 { return r.schemeID } +func (r *recipientPub) KeyID() []byte { return r.keyID } +func (r *recipientPub) Raw() []byte { return r.raw } diff --git a/pkg/adapters/crypto/keymanager/keymanager_test.go b/pkg/adapters/crypto/keymanager/keymanager_test.go new file mode 100644 index 0000000..b984fea --- /dev/null +++ b/pkg/adapters/crypto/keymanager/keymanager_test.go @@ -0,0 +1,362 @@ +package keymanager + +import ( + "bytes" + "crypto/rand" + "crypto/sha256" + "encoding/pem" + "errors" + "os" + "path/filepath" + "testing" + + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/mlkem768" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/x25519" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +func makeRegistry( + t *testing.T, +) crypto.Registry { + reg := crypto.NewRegistry() + + if err := reg.Register( + 0x0006, + func() crypto.KEM { + return mlkem768.New() + }, + ); err != nil { + t.Fatalf("register mlkem768: %v", err) + } + + if err := reg.Register( + 0x0007, + func() crypto.KEM { + return x25519.New() + }, + ); err != nil { + t.Fatalf("register x25519: %v", err) + } + + return reg +} + +func TestGenerateMLKEM768(t *testing.T) { + reg := makeRegistry(t) + km := NewKeyManager(reg) + + var pubOut, privOut bytes.Buffer + + err := km.Generate( + 0x0006, + &pubOut, + &privOut, + rand.Reader, + ) + if err != nil { + t.Fatalf("Generate failed: %v", err) + } + + pubBlock, _ := pem.Decode(pubOut.Bytes()) + if pubBlock == nil { + t.Fatal("failed to decode public key PEM") + } + if pubBlock.Type != "ML-KEM-768 PUBLIC KEY" { + t.Errorf("pub PEM type = %q, want %q", pubBlock.Type, "ML-KEM-768 PUBLIC KEY") + } + if len(pubBlock.Bytes) != 1184 { + t.Errorf("pub raw len = %d, want 1184", len(pubBlock.Bytes)) + } + + privBlock, _ := pem.Decode(privOut.Bytes()) + if privBlock == nil { + t.Fatal("failed to decode private key PEM") + } + if privBlock.Type != "ML-KEM-768 PRIVATE KEY" { + t.Errorf("priv PEM type = %q, want %q", privBlock.Type, "ML-KEM-768 PRIVATE KEY") + } + if len(privBlock.Bytes) != 64 { + t.Errorf("priv raw len = %d, want 64", len(privBlock.Bytes)) + } +} + +func TestGenerateX25519(t *testing.T) { + reg := makeRegistry(t) + km := NewKeyManager(reg) + + var pubOut, privOut bytes.Buffer + + err := km.Generate( + 0x0007, + &pubOut, + &privOut, + rand.Reader, + ) + if err != nil { + t.Fatalf("Generate failed: %v", err) + } + + pubBlock, _ := pem.Decode(pubOut.Bytes()) + if pubBlock == nil { + t.Fatal("failed to decode public key PEM") + } + if pubBlock.Type != "X25519 PUBLIC KEY" { + t.Errorf("pub PEM type = %q, want %q", pubBlock.Type, "X25519 PUBLIC KEY") + } + if len(pubBlock.Bytes) != 32 { + t.Errorf("pub raw len = %d, want 32", len(pubBlock.Bytes)) + } + + privBlock, _ := pem.Decode(privOut.Bytes()) + if privBlock == nil { + t.Fatal("failed to decode private key PEM") + } + if privBlock.Type != "X25519 PRIVATE KEY" { + t.Errorf("priv PEM type = %q, want %q", privBlock.Type, "X25519 PRIVATE KEY") + } + if len(privBlock.Bytes) != 32 { + t.Errorf("priv raw len = %d, want 32", len(privBlock.Bytes)) + } +} + +func TestLoadPubMLKEM768(t *testing.T) { + reg := makeRegistry(t) + km := NewKeyManager(reg) + + var pubOut, privOut bytes.Buffer + + err := km.Generate( + 0x0006, + &pubOut, + &privOut, + rand.Reader, + ) + if err != nil { + t.Fatalf("Generate failed: %v", err) + } + + dir := t.TempDir() + pubPath := filepath.Join(dir, "test.pub.pem") + + if err := os.WriteFile(pubPath, pubOut.Bytes(), 0o644); err != nil { + t.Fatalf("write pub file: %v", err) + } + + pub, err := km.LoadPub(pubPath, 0x0006) + if err != nil { + t.Fatalf("LoadPub failed: %v", err) + } + if pub.SchemeID() != 0x0006 { + t.Errorf("pub.SchemeID() = 0x%04x, want 0x0006", pub.SchemeID()) + } + if len(pub.Raw()) != 1184 { + t.Errorf("pub.Raw() len = %d, want 1184", len(pub.Raw())) + } + + expectedKeyID := sha256.Sum256(pub.Raw()[:8]) + if !bytes.Equal(pub.KeyID(), expectedKeyID[:8]) { + t.Errorf("pub.KeyID() = %x, want %x", pub.KeyID(), expectedKeyID[:8]) + } +} + +func TestLoadPrivMLKEM768(t *testing.T) { + reg := makeRegistry(t) + km := NewKeyManager(reg) + + var pubOut, privOut bytes.Buffer + + err := km.Generate( + 0x0006, + &pubOut, + &privOut, + rand.Reader, + ) + if err != nil { + t.Fatalf("Generate failed: %v", err) + } + + dir := t.TempDir() + privPath := filepath.Join(dir, "test.priv.pem") + + if err := os.WriteFile(privPath, privOut.Bytes(), 0o600); err != nil { + t.Fatalf("write priv file: %v", err) + } + + priv, err := km.LoadPriv(privPath, 0x0006) + if err != nil { + t.Fatalf("LoadPriv failed: %v", err) + } + if priv.SchemeID() != 0x0006 { + t.Errorf("priv.SchemeID() = 0x%04x, want 0x0006", priv.SchemeID()) + } + if len(priv.Raw()) != 64 { + t.Errorf("priv.Raw() len = %d, want 64", len(priv.Raw())) + } +} + +func TestLoadPubX25519(t *testing.T) { + reg := makeRegistry(t) + km := NewKeyManager(reg) + + var pubOut, privOut bytes.Buffer + + err := km.Generate( + 0x0007, + &pubOut, + &privOut, + rand.Reader, + ) + if err != nil { + t.Fatalf("Generate failed: %v", err) + } + + dir := t.TempDir() + pubPath := filepath.Join(dir, "test.pub.pem") + + if err := os.WriteFile(pubPath, pubOut.Bytes(), 0o644); err != nil { + t.Fatalf("write pub file: %v", err) + } + + pub, err := km.LoadPub(pubPath, 0x0007) + if err != nil { + t.Fatalf("LoadPub failed: %v", err) + } + if pub.SchemeID() != 0x0007 { + t.Errorf("pub.SchemeID() = 0x%04x, want 0x0007", pub.SchemeID()) + } + if len(pub.Raw()) != 32 { + t.Errorf("pub.Raw() len = %d, want 32", len(pub.Raw())) + } + + expectedKeyID := sha256.Sum256(pub.Raw()) + if !bytes.Equal(pub.KeyID(), expectedKeyID[:8]) { + t.Errorf("pub.KeyID() = %x, want %x", pub.KeyID(), expectedKeyID[:8]) + } +} + +func TestLoadPrivX25519(t *testing.T) { + reg := makeRegistry(t) + km := NewKeyManager(reg) + + var pubOut, privOut bytes.Buffer + + err := km.Generate( + 0x0007, + &pubOut, + &privOut, + rand.Reader, + ) + if err != nil { + t.Fatalf("Generate failed: %v", err) + } + + dir := t.TempDir() + privPath := filepath.Join(dir, "test.priv.pem") + + if err := os.WriteFile(privPath, privOut.Bytes(), 0o600); err != nil { + t.Fatalf("write priv file: %v", err) + } + + priv, err := km.LoadPriv(privPath, 0x0007) + if err != nil { + t.Fatalf("LoadPriv failed: %v", err) + } + if priv.SchemeID() != 0x0007 { + t.Errorf("priv.SchemeID() = 0x%04x, want 0x0007", priv.SchemeID()) + } + if len(priv.Raw()) != 32 { + t.Errorf("priv.Raw() len = %d, want 32", len(priv.Raw())) + } +} + +func TestLoadPubWrongPEMType(t *testing.T) { + reg := makeRegistry(t) + km := NewKeyManager(reg) + + dir := t.TempDir() + pubPath := filepath.Join(dir, "wrong.pub.pem") + + block := &pem.Block{ + Type: "X25519 PUBLIC KEY", + Bytes: make([]byte, 32), + } + data := pem.EncodeToMemory(block) + + if err := os.WriteFile(pubPath, data, 0o644); err != nil { + t.Fatalf("write pub file: %v", err) + } + + _, err := km.LoadPub(pubPath, 0x0006) + if err == nil { + t.Fatal("expected error for wrong PEM type") + } + if !errors.Is(err, ErrPEMTypeMismatch) { + t.Errorf("error = %v, want ErrPEMTypeMismatch", err) + } +} + +func TestLoadPrivWrongPEMType(t *testing.T) { + reg := makeRegistry(t) + km := NewKeyManager(reg) + + dir := t.TempDir() + privPath := filepath.Join(dir, "wrong.priv.pem") + + block := &pem.Block{ + Type: "ML-KEM-768 PRIVATE KEY", + Bytes: make([]byte, 64), + } + data := pem.EncodeToMemory(block) + + if err := os.WriteFile(privPath, data, 0o600); err != nil { + t.Fatalf("write priv file: %v", err) + } + + _, err := km.LoadPriv(privPath, 0x0007) + if err == nil { + t.Fatal("expected error for wrong PEM type") + } + if !errors.Is(err, ErrPEMTypeMismatch) { + t.Errorf("error = %v, want ErrPEMTypeMismatch", err) + } +} + +func TestLoadPubTruncatedPEM(t *testing.T) { + reg := makeRegistry(t) + km := NewKeyManager(reg) + + dir := t.TempDir() + pubPath := filepath.Join(dir, "truncated.pub.pem") + + if err := os.WriteFile(pubPath, []byte("-----BEGIN ML-KEM-768 PUBLIC KEY-----\nnotbase64\n"), 0o644); err != nil { + t.Fatalf("write pub file: %v", err) + } + + _, err := km.LoadPub(pubPath, 0x0006) + if err == nil { + t.Fatal("expected error for truncated PEM") + } + if !errors.Is(err, ErrInvalidPEM) { + t.Errorf("error = %v, want ErrInvalidPEM", err) + } +} + +func TestLoadPrivTruncatedPEM(t *testing.T) { + reg := makeRegistry(t) + km := NewKeyManager(reg) + + dir := t.TempDir() + privPath := filepath.Join(dir, "truncated.priv.pem") + + if err := os.WriteFile(privPath, []byte("-----BEGIN X25519 PRIVATE KEY-----\nnotbase64\n"), 0o600); err != nil { + t.Fatalf("write priv file: %v", err) + } + + _, err := km.LoadPriv(privPath, 0x0007) + if err == nil { + t.Fatal("expected error for truncated PEM") + } + if !errors.Is(err, ErrInvalidPEM) { + t.Errorf("error = %v, want ErrInvalidPEM", err) + } +} diff --git a/pkg/adapters/crypto/mlkem768/mlkem768.go b/pkg/adapters/crypto/mlkem768/mlkem768.go new file mode 100644 index 0000000..8f31f41 --- /dev/null +++ b/pkg/adapters/crypto/mlkem768/mlkem768.go @@ -0,0 +1,194 @@ +package mlkem768 + +import ( + "bytes" + "crypto/mlkem" + "crypto/sha256" + "crypto/sha3" + "errors" + "fmt" + "io" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +// suiteID is the scheme identifier for ML-KEM-768. +const suiteID uint16 = 0x0006 + +// ErrDecapsulationFailed is returned when ciphertext decapsulation fails, +// typically due to a tampered or invalid ciphertext. +var ErrDecapsulationFailed = errors.New("decapsulation failed") + +// DefaultRegistry is the package-level registry for ML-KEM-768. +var DefaultRegistry = crypto.NewRegistry() + +// kemAdapter wraps the Go stdlib crypto/mlkem implementation to satisfy +// the pkg/domain/crypto.KEM interface. +type kemAdapter struct{} + +// New creates a new KEM adapter instance. +func New() crypto.KEM { + return &kemAdapter{} +} + +// SchemeID returns the ML-KEM-768 scheme identifier (0x0006). +func (k *kemAdapter) SchemeID() uint16 { + return suiteID +} + +// GenerateKeyPair generates a new ML-KEM-768 key pair. +// +// Note: the rand parameter is part of the KEM interface contract but is +// ignored here because the stdlib crypto/mlkem.GenerateKey768 uses +// crypto/rand internally. +func (k *kemAdapter) GenerateKeyPair( + rand io.Reader, +) ( + crypto.RecipientPub, + crypto.RecipientPriv, + error, +) { + dk, err := mlkem.GenerateKey768() + if err != nil { + return nil, nil, err + } + + ek := dk.EncapsulationKey() + rawPub := ek.Bytes() + keyID := computeKeyID(rawPub) + + pub := &pubKey{ + key: ek, + keyID: keyID, + } + priv := &privKey{ + key: dk, + keyID: keyID, + } + + return pub, priv, nil +} + +// Encapsulate generates a shared secret and ciphertext for the given public key. +// +// Note: the rand parameter is part of the KEM interface contract but is +// ignored here because the stdlib (*EncapsulationKey768).Encapsulate uses +// crypto/rand internally. +// +// CRITICAL: the stdlib returns (sharedKey, ciphertext) but this adapter +// swaps the order to (ciphertext, sharedSecret) to match the domain KEM +// interface contract. +func (k *kemAdapter) Encapsulate( + pub crypto.RecipientPub, + rand io.Reader, +) ( + ciphertext []byte, + sharedSecret []byte, + err error, +) { + p, ok := pub.(*pubKey) + if !ok { + raw := pub.Raw() + ek, parseErr := mlkem.NewEncapsulationKey768(raw) + if parseErr != nil { + return nil, nil, fmt.Errorf("invalid public key for ML-KEM-768: %w", parseErr) + } + p = &pubKey{key: ek, keyID: computeKeyID(raw)} + } + + // stdlib returns (sharedKey, ciphertext); we swap to (ciphertext, sharedSecret). + ss, ct := p.key.Encapsulate() + + return ct, ss, nil +} + +// LoadPriv loads an ML-KEM-768 private key from raw bytes. +func (k *kemAdapter) LoadPriv( + raw []byte, +) ( + crypto.RecipientPriv, + error, +) { + dk, err := mlkem.NewDecapsulationKey768(raw) + if err != nil { + return nil, fmt.Errorf("invalid ML-KEM-768 private key: %w", err) + } + pubRaw := dk.EncapsulationKey().Bytes() + return &privKey{key: dk, keyID: computeKeyID(pubRaw)}, nil +} + +// Decapsulate recovers the shared secret from a ciphertext using the private key. +// For tampered ciphertexts, it returns ErrDecapsulationFailed. +func (k *kemAdapter) Decapsulate( + priv crypto.RecipientPriv, + ciphertext []byte, +) ( + sharedSecret []byte, + err error, +) { + p, ok := priv.(*privKey) + if !ok { + return nil, fmt.Errorf("invalid private key type for ML-KEM-768") + } + + ss, err := p.key.Decapsulate(ciphertext) + if err != nil { + return nil, errors.Join(ErrDecapsulationFailed, err) + } + + // crypto/mlkem.Decapsulate implements implicit rejection: it returns a + // pseudorandom shared secret instead of an error for invalid ciphertexts. + // Perform explicit rejection by recomputing the implicit-rejection value + // Kout = SHAKE256(z || ciphertext) and comparing it with the result. + // If they match, the ciphertext was invalid. + seed := p.key.Bytes() + z := seed[32:] + shake := sha3.NewSHAKE256() + // sha3.ShakeHash.Write/Read never return an error; explicitly ignore to satisfy errcheck. + _, _ = shake.Write(z) + _, _ = shake.Write(ciphertext) + computedKout := make([]byte, mlkem.SharedKeySize) + _, _ = shake.Read(computedKout) + + if bytes.Equal(ss, computedKout) { + return nil, ErrDecapsulationFailed + } + + return ss, nil +} + +// pubKey wraps *mlkem.EncapsulationKey768 to satisfy crypto.RecipientPub. +type pubKey struct { + key *mlkem.EncapsulationKey768 + keyID []byte +} + +func (p *pubKey) SchemeID() uint16 { return suiteID } +func (p *pubKey) KeyID() []byte { return p.keyID } +func (p *pubKey) Raw() []byte { return p.key.Bytes() } + +// privKey wraps *mlkem.DecapsulationKey768 to satisfy crypto.RecipientPriv. +type privKey struct { + key *mlkem.DecapsulationKey768 + keyID []byte +} + +func (p *privKey) SchemeID() uint16 { return suiteID } +func (p *privKey) KeyID() []byte { return p.keyID } +func (p *privKey) Raw() []byte { return p.key.Bytes() } + +// computeKeyID derives the first 8 bytes of SHA-256 over the first 8 bytes of raw key material. +func computeKeyID(raw []byte) []byte { + h := sha256.Sum256(raw[:8]) + return h[:8] +} + +// init registers the ML-KEM-768 factory under suiteID 0x0006. +func init() { + _ = DefaultRegistry.Register( + suiteID, + func() crypto.KEM { + return New() + }, + ) +} diff --git a/pkg/adapters/crypto/mlkem768/mlkem768_test.go b/pkg/adapters/crypto/mlkem768/mlkem768_test.go new file mode 100644 index 0000000..4fc4cdf --- /dev/null +++ b/pkg/adapters/crypto/mlkem768/mlkem768_test.go @@ -0,0 +1,140 @@ +package mlkem768 + +import ( + "bytes" + "crypto/sha256" + "errors" + "testing" +) + +func TestGenerateKeyPair(t *testing.T) { + adapter := New() + + pub, priv, err := adapter.GenerateKeyPair(nil) + if err != nil { + t.Fatalf("GenerateKeyPair failed: %v", err) + } + + if pub.SchemeID() != suiteID { + t.Errorf("pub.SchemeID() = 0x%04x, want 0x%04x", pub.SchemeID(), suiteID) + } + + if priv.SchemeID() != suiteID { + t.Errorf("priv.SchemeID() = 0x%04x, want 0x%04x", priv.SchemeID(), suiteID) + } + + rawPub := pub.Raw() + if len(rawPub) != 1184 { + t.Errorf("pub.Raw() len = %d, want 1184", len(rawPub)) + } + + rawPriv := priv.Raw() + if len(rawPriv) != 64 { + t.Errorf("priv.Raw() len = %d, want 64", len(rawPriv)) + } + + expectedKeyID := sha256.Sum256(rawPub[:8]) + if !bytes.Equal(pub.KeyID(), expectedKeyID[:8]) { + t.Errorf("pub.KeyID() = %x, want %x", pub.KeyID(), expectedKeyID[:8]) + } + + if !bytes.Equal(priv.KeyID(), pub.KeyID()) { + t.Errorf("priv.KeyID() = %x, want %x", priv.KeyID(), pub.KeyID()) + } +} + +func TestEncapsulateReturnOrder(t *testing.T) { + adapter := New() + + pub, _, err := adapter.GenerateKeyPair(nil) + if err != nil { + t.Fatalf("GenerateKeyPair failed: %v", err) + } + + ct, ss, err := adapter.Encapsulate(pub, nil) + if err != nil { + t.Fatalf("Encapsulate failed: %v", err) + } + + if len(ct) != 1088 { + t.Errorf("ciphertext len = %d, want 1088", len(ct)) + } + + if len(ss) != 32 { + t.Errorf("sharedSecret len = %d, want 32", len(ss)) + } +} + +func TestRoundTrip(t *testing.T) { + adapter := New() + + pub, priv, err := adapter.GenerateKeyPair(nil) + if err != nil { + t.Fatalf("GenerateKeyPair failed: %v", err) + } + + ct, ssEnc, err := adapter.Encapsulate(pub, nil) + if err != nil { + t.Fatalf("Encapsulate failed: %v", err) + } + + ssDec, err := adapter.Decapsulate(priv, ct) + if err != nil { + t.Fatalf("Decapsulate failed: %v", err) + } + + if !bytes.Equal(ssEnc, ssDec) { + t.Fatalf("shared secret mismatch: encapsulate=%x, decapsulate=%x", ssEnc, ssDec) + } +} + +func TestDecapsulateTamperedCiphertext(t *testing.T) { + adapter := New() + + pub, priv, err := adapter.GenerateKeyPair(nil) + if err != nil { + t.Fatalf("GenerateKeyPair failed: %v", err) + } + + ct, _, err := adapter.Encapsulate(pub, nil) + if err != nil { + t.Fatalf("Encapsulate failed: %v", err) + } + + ct[0] ^= 0xFF + + _, err = adapter.Decapsulate(priv, ct) + if err == nil { + t.Fatal("Decapsulate with tampered ciphertext: expected error, got nil") + } + + if !errors.Is(err, ErrDecapsulationFailed) { + t.Errorf("Decapsulate error = %v, want ErrDecapsulationFailed", err) + } +} + +func TestRegistryRegistration(t *testing.T) { + factory, err := DefaultRegistry.Lookup(suiteID) + if err != nil { + t.Fatalf("Lookup suiteID 0x%04x failed: %v", suiteID, err) + } + + instance := factory() + if instance.SchemeID() != suiteID { + t.Errorf("factory() SchemeID = 0x%04x, want 0x%04x", instance.SchemeID(), suiteID) + } +} + +func TestFactoryReturnsIndependentInstances(t *testing.T) { + factory, err := DefaultRegistry.Lookup(suiteID) + if err != nil { + t.Fatalf("Lookup suiteID 0x%04x failed: %v", suiteID, err) + } + + one := factory() + two := factory() + + if one.SchemeID() != two.SchemeID() { + t.Error("factory() returned instances with different scheme IDs") + } +} diff --git a/pkg/adapters/crypto/x25519/x25519.go b/pkg/adapters/crypto/x25519/x25519.go new file mode 100644 index 0000000..24a1049 --- /dev/null +++ b/pkg/adapters/crypto/x25519/x25519.go @@ -0,0 +1,196 @@ +package x25519 + +import ( + "crypto/ecdh" + "crypto/sha256" + "errors" + "fmt" + "io" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +// suiteID is the scheme identifier for X25519 ECDH KEM. +const suiteID uint16 = 0x0007 + +// ErrDecapsulationFailed is returned when ciphertext decapsulation fails, +// typically because the ciphertext is not a valid X25519 public key. +var ErrDecapsulationFailed = errors.New("decapsulation failed") + +// DefaultRegistry is the package-level registry for X25519. +var DefaultRegistry = crypto.NewRegistry() + +// kemAdapter wraps the Go stdlib crypto/ecdh X25519 implementation to satisfy +// the pkg/domain/crypto.KEM interface. +type kemAdapter struct{} + +// New creates a new KEM adapter instance. +func New() crypto.KEM { + return &kemAdapter{} +} + +// SchemeID returns the X25519 scheme identifier (0x0007). +func (k *kemAdapter) SchemeID() uint16 { + return suiteID +} + +// GenerateKeyPair generates a new X25519 key pair. +func (k *kemAdapter) GenerateKeyPair( + rand io.Reader, +) ( + crypto.RecipientPub, + crypto.RecipientPriv, + error, +) { + ecdhPriv, err := ecdh.X25519().GenerateKey(rand) + if err != nil { + return nil, nil, err + } + + rawPub := ecdhPriv.PublicKey().Bytes() + keyID := computeKeyID(rawPub) + + pub := &pubKey{ + key: ecdhPriv.PublicKey(), + keyID: keyID, + } + priv := &privKey{ + key: ecdhPriv, + keyID: keyID, + } + + return pub, priv, nil +} + +// Encapsulate generates a shared secret and ciphertext for the given public key. +// The ciphertext is the ephemeral public key (32 bytes). +func (k *kemAdapter) Encapsulate( + pub crypto.RecipientPub, + rand io.Reader, +) ( + ciphertext []byte, + sharedSecret []byte, + err error, +) { + p, ok := pub.(*pubKey) + if !ok { + raw := pub.Raw() + ek, parseErr := ecdh.X25519().NewPublicKey(raw) + if parseErr != nil { + return nil, nil, fmt.Errorf("invalid public key for X25519: %w", parseErr) + } + p = &pubKey{key: ek, keyID: computeKeyID(raw)} + } + + ephPriv, err := ecdh.X25519().GenerateKey(rand) + if err != nil { + return nil, nil, err + } + + ct := ephPriv.PublicKey().Bytes() + ss, err := ephPriv.ECDH(p.key) + if err != nil { + return nil, nil, err + } + + return ct, ss, nil +} + +// LoadPriv loads an X25519 private key from raw bytes. +func (k *kemAdapter) LoadPriv( + raw []byte, +) ( + crypto.RecipientPriv, + error, +) { + dk, err := ecdh.X25519().NewPrivateKey(raw) + if err != nil { + return nil, fmt.Errorf("invalid X25519 private key: %w", err) + } + pubRaw := dk.PublicKey().Bytes() + return &privKey{key: dk, keyID: computeKeyID(pubRaw)}, nil +} + +// Decapsulate recovers the shared secret from a ciphertext using the private key. +// The ciphertext must be a valid 32-byte X25519 public key. +func (k *kemAdapter) Decapsulate( + priv crypto.RecipientPriv, + ciphertext []byte, +) ( + sharedSecret []byte, + err error, +) { + p, ok := priv.(*privKey) + if !ok { + return nil, fmt.Errorf("invalid private key type for X25519") + } + + if len(ciphertext) != 32 { + return nil, errors.Join(ErrDecapsulationFailed, errors.New("invalid ciphertext length")) + } + + // X25519 public keys are 255-bit Montgomery u-coordinates; bit 255 must be zero. + if ciphertext[31]&0x80 != 0 { + return nil, ErrDecapsulationFailed + } + + // Reject the all-zero public key (identity point), which yields an all-zero shared secret. + allZero := true + for _, b := range ciphertext { + if b != 0 { + allZero = false + break + } + } + if allZero { + return nil, ErrDecapsulationFailed + } + + ephPub, err := ecdh.X25519().NewPublicKey(ciphertext) + if err != nil { + return nil, errors.Join(ErrDecapsulationFailed, err) + } + + ss, err := p.key.ECDH(ephPub) + if err != nil { + return nil, errors.Join(ErrDecapsulationFailed, err) + } + + return ss, nil +} + +// pubKey wraps *ecdh.PublicKey to satisfy crypto.RecipientPub. +type pubKey struct { + key *ecdh.PublicKey + keyID []byte +} + +func (p *pubKey) SchemeID() uint16 { return suiteID } +func (p *pubKey) KeyID() []byte { return p.keyID } +func (p *pubKey) Raw() []byte { return p.key.Bytes() } + +// privKey wraps *ecdh.PrivateKey to satisfy crypto.RecipientPriv. +type privKey struct { + key *ecdh.PrivateKey + keyID []byte +} + +func (p *privKey) SchemeID() uint16 { return suiteID } +func (p *privKey) KeyID() []byte { return p.keyID } +func (p *privKey) Raw() []byte { return p.key.Bytes() } + +// computeKeyID derives the first 8 bytes of SHA-256 over the raw public key. +func computeKeyID(raw []byte) []byte { + h := sha256.Sum256(raw) + return h[:8] +} + +// init registers the X25519 factory under suiteID 0x0007. +func init() { + _ = DefaultRegistry.Register( + suiteID, + func() crypto.KEM { + return New() + }, + ) +} diff --git a/pkg/adapters/crypto/x25519/x25519_test.go b/pkg/adapters/crypto/x25519/x25519_test.go new file mode 100644 index 0000000..4fac655 --- /dev/null +++ b/pkg/adapters/crypto/x25519/x25519_test.go @@ -0,0 +1,189 @@ +package x25519 + +import ( + "bytes" + "crypto/ecdh" + "crypto/rand" + "crypto/sha256" + "errors" + "io" + "testing" +) + +func TestGenerateKeyPair(t *testing.T) { + adapter := New() + + pub, priv, err := adapter.GenerateKeyPair(rand.Reader) + if err != nil { + t.Fatalf("GenerateKeyPair failed: %v", err) + } + + if pub.SchemeID() != suiteID { + t.Errorf("pub.SchemeID() = 0x%04x, want 0x%04x", pub.SchemeID(), suiteID) + } + + if priv.SchemeID() != suiteID { + t.Errorf("priv.SchemeID() = 0x%04x, want 0x%04x", priv.SchemeID(), suiteID) + } + + rawPub := pub.Raw() + if len(rawPub) != 32 { + t.Errorf("pub.Raw() len = %d, want 32", len(rawPub)) + } + + rawPriv := priv.Raw() + if len(rawPriv) != 32 { + t.Errorf("priv.Raw() len = %d, want 32", len(rawPriv)) + } + + expectedKeyID := sha256.Sum256(rawPub) + if !bytes.Equal(pub.KeyID(), expectedKeyID[:8]) { + t.Errorf("pub.KeyID() = %x, want %x", pub.KeyID(), expectedKeyID[:8]) + } + + if !bytes.Equal(priv.KeyID(), pub.KeyID()) { + t.Errorf("priv.KeyID() = %x, want %x", priv.KeyID(), pub.KeyID()) + } +} + +func TestEncapsulate(t *testing.T) { + adapter := New() + + pub, priv, err := adapter.GenerateKeyPair(rand.Reader) + if err != nil { + t.Fatalf("GenerateKeyPair failed: %v", err) + } + + ct, ss, err := adapter.Encapsulate(pub, rand.Reader) + if err != nil { + t.Fatalf("Encapsulate failed: %v", err) + } + + if len(ct) != 32 { + t.Errorf("ciphertext len = %d, want 32", len(ct)) + } + + if len(ss) != 32 { + t.Errorf("sharedSecret len = %d, want 32", len(ss)) + } + + // Verify ss by independently computing priv.ECDH(ephemeralPubParsedFromCt). + ephPub, err := ecdh.X25519().NewPublicKey(ct) + if err != nil { + t.Fatalf("failed to parse ephemeral public key from ciphertext: %v", err) + } + + parsedPriv, err := ecdh.X25519().NewPrivateKey(priv.Raw()) + if err != nil { + t.Fatalf("failed to parse private key: %v", err) + } + + computedSS, err := parsedPriv.ECDH(ephPub) + if err != nil { + t.Fatalf("independent ECDH computation failed: %v", err) + } + + if !bytes.Equal(ss, computedSS) { + t.Errorf("shared secret mismatch: encapsulate=%x, independent=%x", ss, computedSS) + } +} + +func TestRoundTrip(t *testing.T) { + adapter := New() + + pub, priv, err := adapter.GenerateKeyPair(rand.Reader) + if err != nil { + t.Fatalf("GenerateKeyPair failed: %v", err) + } + + ct, ssEnc, err := adapter.Encapsulate(pub, rand.Reader) + if err != nil { + t.Fatalf("Encapsulate failed: %v", err) + } + + ssDec, err := adapter.Decapsulate(priv, ct) + if err != nil { + t.Fatalf("Decapsulate failed: %v", err) + } + + if !bytes.Equal(ssEnc, ssDec) { + t.Fatalf("shared secret mismatch: encapsulate=%x, decapsulate=%x", ssEnc, ssDec) + } +} + +func TestRoundTripMany(t *testing.T) { + adapter := New() + + for i := 0; i < 1000; i++ { + pub, priv, err := adapter.GenerateKeyPair(rand.Reader) + if err != nil { + t.Fatalf("iteration %d: GenerateKeyPair failed: %v", i, err) + } + + ct, ssEnc, err := adapter.Encapsulate(pub, rand.Reader) + if err != nil { + t.Fatalf("iteration %d: Encapsulate failed: %v", i, err) + } + + ssDec, err := adapter.Decapsulate(priv, ct) + if err != nil { + t.Fatalf("iteration %d: Decapsulate failed: %v", i, err) + } + + if !bytes.Equal(ssEnc, ssDec) { + t.Fatalf("iteration %d: shared secret mismatch", i) + } + } +} + +func TestDecapsulateRandomCiphertext(t *testing.T) { + adapter := New() + + _, priv, err := adapter.GenerateKeyPair(rand.Reader) + if err != nil { + t.Fatalf("GenerateKeyPair failed: %v", err) + } + + // Generate a random 32-byte string that is unlikely to be a valid X25519 public key. + // Setting the high bit makes it invalid for X25519 (Montgomery u-coordinate must be < 2^255). + randomCT := make([]byte, 32) + if _, err := io.ReadFull(rand.Reader, randomCT); err != nil { + t.Fatalf("failed to read random bytes: %v", err) + } + randomCT[31] |= 0x80 // set high bit to guarantee invalidity + + _, err = adapter.Decapsulate(priv, randomCT) + if err == nil { + t.Fatal("Decapsulate with random ciphertext: expected error, got nil") + } + + if !errors.Is(err, ErrDecapsulationFailed) { + t.Errorf("Decapsulate error = %v, want ErrDecapsulationFailed", err) + } +} + +func TestRegistryRegistration(t *testing.T) { + factory, err := DefaultRegistry.Lookup(suiteID) + if err != nil { + t.Fatalf("Lookup suiteID 0x%04x failed: %v", suiteID, err) + } + + instance := factory() + if instance.SchemeID() != suiteID { + t.Errorf("factory() SchemeID = 0x%04x, want 0x%04x", instance.SchemeID(), suiteID) + } +} + +func TestFactoryReturnsIndependentInstances(t *testing.T) { + factory, err := DefaultRegistry.Lookup(suiteID) + if err != nil { + t.Fatalf("Lookup suiteID 0x%04x failed: %v", suiteID, err) + } + + one := factory() + two := factory() + + if one.SchemeID() != two.SchemeID() { + t.Error("factory() returned instances with different scheme IDs") + } +} diff --git a/pkg/adapters/healthz/healthz.go b/pkg/adapters/healthz/healthz.go new file mode 100644 index 0000000..0bac76a --- /dev/null +++ b/pkg/adapters/healthz/healthz.go @@ -0,0 +1,67 @@ +package healthz + +import ( + "context" + "fmt" + "net" + "net/http" + "sync/atomic" + "time" +) + +// Server is a minimal HTTP health check server. +type Server struct { + listener net.Listener + server *http.Server + shuttingDown atomic.Bool +} + +// New creates a health check server listening on the given port. +// Passing port 0 binds to an available ephemeral port. +func New(port int) (*Server, error) { + listener, err := net.Listen("tcp", fmt.Sprintf("127.0.0.1:%d", port)) + if err != nil { + return nil, fmt.Errorf("failed to create listener: %w", err) + } + + s := &Server{listener: listener} + s.server = &http.Server{ + Handler: http.HandlerFunc(s.handleHealthz), + } + return s, nil +} + +// Addr returns the bound network address (e.g. "127.0.0.1:8080"). +func (s *Server) Addr() string { + if s.listener == nil { + return "" + } + return s.listener.Addr().String() +} + +// Start begins serving HTTP requests. It blocks until Stop is called. +func (s *Server) Start() error { + return s.server.Serve(s.listener) +} + +// Stop initiates graceful shutdown. After Stop is called the /healthz +// endpoint returns 503 while in-flight requests complete. +func (s *Server) Stop(ctx context.Context) error { + s.shuttingDown.Store(true) + // Grace period so that health checks can observe the 503 state + // before the listener is closed. + time.Sleep(100 * time.Millisecond) + return s.server.Shutdown(ctx) +} + +func (s *Server) handleHealthz(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/healthz" { + http.NotFound(w, r) + return + } + if s.shuttingDown.Load() { + w.WriteHeader(http.StatusServiceUnavailable) + return + } + w.WriteHeader(http.StatusOK) +} diff --git a/pkg/adapters/healthz/healthz_test.go b/pkg/adapters/healthz/healthz_test.go new file mode 100644 index 0000000..a056a77 --- /dev/null +++ b/pkg/adapters/healthz/healthz_test.go @@ -0,0 +1,77 @@ +package healthz + +import ( + "context" + "fmt" + "net/http" + "testing" + "time" +) + +func TestHealthzReturns200WhileAlive(t *testing.T) { + srv, err := New(0) + if err != nil { + t.Fatalf("New failed: %v", err) + } + + go func() { + if err := srv.Start(); err != nil && err != http.ErrServerClosed { + t.Errorf("Start returned unexpected error: %v", err) + } + }() + + // Give the server a moment to start listening. + time.Sleep(50 * time.Millisecond) + + url := fmt.Sprintf("http://%s/healthz", srv.Addr()) + resp, err := http.Get(url) + if err != nil { + t.Fatalf("GET /healthz failed: %v", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + t.Errorf("/healthz status = %d, want %d", resp.StatusCode, http.StatusOK) + } + + if err := srv.Stop(context.Background()); err != nil { + t.Fatalf("Stop failed: %v", err) + } +} + +func TestHealthzReturns503WhileShuttingDown(t *testing.T) { + srv, err := New(0) + if err != nil { + t.Fatalf("New failed: %v", err) + } + + go func() { + if err := srv.Start(); err != nil && err != http.ErrServerClosed { + t.Errorf("Start returned unexpected error: %v", err) + } + }() + + time.Sleep(50 * time.Millisecond) + + // Initiate shutdown but don't wait for it to finish. + shutdownCtx, cancel := context.WithCancel(context.Background()) + go func() { + _ = srv.Stop(shutdownCtx) + }() + + // Give the shutdown flag time to flip. + time.Sleep(50 * time.Millisecond) + + url := fmt.Sprintf("http://%s/healthz", srv.Addr()) + resp, err := http.Get(url) + if err != nil { + t.Fatalf("GET /healthz during shutdown failed: %v", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusServiceUnavailable { + t.Errorf("/healthz status during shutdown = %d, want %d", resp.StatusCode, http.StatusServiceUnavailable) + } + + cancel() +} diff --git a/pkg/adapters/pgdump/pgdump.go b/pkg/adapters/pgdump/pgdump.go new file mode 100644 index 0000000..29bc84c --- /dev/null +++ b/pkg/adapters/pgdump/pgdump.go @@ -0,0 +1,100 @@ +package pgdump + +import ( + "context" + "fmt" + "io" + "os" + "os/exec" + "strings" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/pgdump" +) + +// adapter provides pg_dump functionality using the system's pg_dump binary. +type adapter struct { + commandContext func(ctx context.Context, name string, arg ...string) *exec.Cmd +} + +// New creates a new pg_dump adapter. +func New() pgdump.Dumper { + return &adapter{ + commandContext: exec.CommandContext, + } +} + +// Dump executes pg_dump and writes the output to sink. +func (a *adapter) Dump( + ctx context.Context, + opts pgdump.Options, + sink io.Writer, +) (retErr error) { + defer func() { + if pipeWriter, ok := sink.(*io.PipeWriter); ok { + if retErr != nil { + _ = pipeWriter.CloseWithError(retErr) + } else { + _ = pipeWriter.Close() + } + } + }() + + args := buildArgs(opts) + + cmd := a.commandContext(ctx, "pg_dump", args...) + + env := os.Environ() + if opts.Password != "" { + env = append(env, fmt.Sprintf("PGPASSWORD=%s", opts.Password)) + } + if opts.Host != "" { + env = append(env, fmt.Sprintf("PGHOST=%s", opts.Host)) + } + if opts.Port != 0 { + env = append(env, fmt.Sprintf("PGPORT=%d", opts.Port)) + } + if opts.User != "" { + env = append(env, fmt.Sprintf("PGUSER=%s", opts.User)) + } + if opts.Database != "" { + env = append(env, fmt.Sprintf("PGDATABASE=%s", opts.Database)) + } + cmd.Env = env + + var stderrBuilder strings.Builder + cmd.Stderr = &stderrBuilder + cmd.Stdout = sink + + runErr := cmd.Run() + stderr := strings.TrimSpace(stderrBuilder.String()) + + if runErr != nil { + if exitErr, ok := runErr.(*exec.ExitError); ok { + return fmt.Errorf("%w (exit %d): %s", pgdump.ErrPgDumpFailed(exitErr.ExitCode()), exitErr.ExitCode(), stderr) + } + return runErr + } + + if cmd.ProcessState.ExitCode() != 0 { + return fmt.Errorf("%w (exit %d): %s", pgdump.ErrPgDumpFailed(cmd.ProcessState.ExitCode()), cmd.ProcessState.ExitCode(), stderr) + } + + return nil +} + +func buildArgs(opts pgdump.Options) []string { + excludeTables := opts.ExcludeTables + if len(excludeTables) == 0 { + excludeTables = make([]string, 1) + excludeTables[0] = "e2e_one_time_keys_json" + } + + args := make([]string, 0, len(excludeTables)+1) + args = append(args, "--format=custom") + + for _, table := range excludeTables { + args = append(args, "--exclude-table="+table) + } + + return args +} diff --git a/pkg/adapters/pgdump/pgdump_test.go b/pkg/adapters/pgdump/pgdump_test.go new file mode 100644 index 0000000..0e75e31 --- /dev/null +++ b/pkg/adapters/pgdump/pgdump_test.go @@ -0,0 +1,374 @@ +package pgdump + +import ( + "bytes" + "context" + "errors" + "fmt" + "io" + "os/exec" + "reflect" + "strings" + "testing" + "time" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/pgdump" +) + +// mockCommandContext creates a test helper that asserts the command name and args, +// and returns a shell command that produces the given stdout, stderr, and exit code. +func mockCommandContext( + t *testing.T, + wantName string, + wantArgs []string, + stdout string, + stderr string, + exitCode int, +) func(ctx context.Context, name string, arg ...string) *exec.Cmd { + return func(ctx context.Context, name string, arg ...string) *exec.Cmd { + if name != wantName { + t.Errorf("command name = %q, want %q", name, wantName) + } + if !reflect.DeepEqual(arg, wantArgs) { + t.Errorf("args = %v, want %v", arg, wantArgs) + } + script := fmt.Sprintf( + "printf '%%s' '%s'; printf '%%s' '%s' >&2; exit %d", + stdout, + stderr, + exitCode, + ) + return exec.CommandContext(ctx, "sh", "-c", script) + } +} + +func TestDump_Success(t *testing.T) { + wantArgs := []string{ + "--format=custom", + "--exclude-table=e2e_one_time_keys_json", + } + + adapter := &adapter{ + commandContext: mockCommandContext( + t, + "pg_dump", + wantArgs, + "dumpdata", + "", + 0, + ), + } + + var buf bytes.Buffer + err := adapter.Dump( + context.Background(), + pgdump.Options{Database: "testdb"}, + &buf, + ) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if buf.String() != "dumpdata" { + t.Errorf("output = %q, want %q", buf.String(), "dumpdata") + } +} + +func TestDump_WaitAfterStdoutEOF(t *testing.T) { + // This test verifies that after io.Copy returns (stdout EOF), + // cmd.Wait() is called and the exit code is verified before returning. + wantArgs := []string{ + "--format=custom", + "--exclude-table=e2e_one_time_keys_json", + } + + adapter := &adapter{ + commandContext: mockCommandContext( + t, + "pg_dump", + wantArgs, + "dumpdata", + "", + 0, + ), + } + + var buf bytes.Buffer + err := adapter.Dump( + context.Background(), + pgdump.Options{Database: "testdb"}, + &buf, + ) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if buf.String() != "dumpdata" { + t.Errorf("output = %q, want %q", buf.String(), "dumpdata") + } +} + +func TestDump_NonZeroExitCode(t *testing.T) { + wantArgs := []string{ + "--format=custom", + "--exclude-table=e2e_one_time_keys_json", + } + + adapter := &adapter{ + commandContext: mockCommandContext( + t, + "pg_dump", + wantArgs, + "", + "stderr error message", + 1, + ), + } + + var buf bytes.Buffer + err := adapter.Dump( + context.Background(), + pgdump.Options{Database: "testdb"}, + &buf, + ) + if err == nil { + t.Fatal("expected error, got nil") + } + + if !errors.Is(err, pgdump.ErrPgDumpFailed(1)) { + t.Errorf("error = %v, want ErrPgDumpFailed(1)", err) + } +} + +func TestDump_StderrCaptured(t *testing.T) { + wantStderr := "stderr captured" + var capturedCmd *exec.Cmd + + adapter := &adapter{ + commandContext: func(ctx context.Context, name string, arg ...string) *exec.Cmd { + script := fmt.Sprintf("printf '%%s' '%s' >&2; exit 0", wantStderr) + capturedCmd = exec.CommandContext(ctx, "sh", "-c", script) + return capturedCmd + }, + } + + var buf bytes.Buffer + err := adapter.Dump( + context.Background(), + pgdump.Options{Database: "testdb"}, + &buf, + ) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if capturedCmd.Stderr == nil { + t.Fatal("expected cmd.Stderr to be set, got nil") + } + + stderrBuilder, ok := capturedCmd.Stderr.(*strings.Builder) + if !ok { + t.Fatalf("expected cmd.Stderr to be *strings.Builder, got %T", capturedCmd.Stderr) + } + + if stderrBuilder.String() != wantStderr { + t.Errorf("stderr = %q, want %q", stderrBuilder.String(), wantStderr) + } +} + +func TestDump_ContextCancellation(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) + defer cancel() + + adapter := &adapter{ + commandContext: func(ctx context.Context, name string, arg ...string) *exec.Cmd { + return exec.CommandContext(ctx, "sh", "-c", "while :; do :; done") + }, + } + + var buf bytes.Buffer + err := adapter.Dump(ctx, pgdump.Options{Database: "testdb"}, &buf) + if err == nil { + t.Fatal("expected error due to context cancellation, got nil") + } + + // Accept either context deadline exceeded or signal killed. + if !errors.Is(err, context.DeadlineExceeded) && !strings.Contains(err.Error(), "signal") { + t.Logf("got error: %v (acceptable variants: context.DeadlineExceeded or signal killed)", err) + } +} + +func TestDump_DefaultExcludeTables(t *testing.T) { + wantArgs := []string{ + "--format=custom", + "--exclude-table=e2e_one_time_keys_json", + } + + adapter := &adapter{ + commandContext: mockCommandContext( + t, + "pg_dump", + wantArgs, + "", + "", + 0, + ), + } + + err := adapter.Dump( + context.Background(), + pgdump.Options{Database: "testdb"}, + io.Discard, + ) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestDump_CustomExcludeTables(t *testing.T) { + wantArgs := []string{ + "--format=custom", + "--exclude-table=table_a", + "--exclude-table=table_b", + } + + adapter := &adapter{ + commandContext: mockCommandContext( + t, + "pg_dump", + wantArgs, + "", + "", + 0, + ), + } + + err := adapter.Dump( + context.Background(), + pgdump.Options{ + Database: "testdb", + ExcludeTables: []string{"table_a", "table_b"}, + }, + io.Discard, + ) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestDump_EnvVars(t *testing.T) { + var capturedCmd *exec.Cmd + + adapter := &adapter{ + commandContext: func(ctx context.Context, name string, arg ...string) *exec.Cmd { + capturedCmd = exec.CommandContext(ctx, "sh", "-c", "exit 0") + return capturedCmd + }, + } + + err := adapter.Dump( + context.Background(), + pgdump.Options{ + Host: "myhost", + Port: 5433, + User: "myuser", + Password: "mypass", + Database: "mydb", + }, + io.Discard, + ) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + envStr := strings.Join(capturedCmd.Env, "\n") + wantEnvVars := []string{ + "PGHOST=myhost", + "PGPORT=5433", + "PGUSER=myuser", + "PGPASSWORD=mypass", + "PGDATABASE=mydb", + } + for _, wantEnv := range wantEnvVars { + if !strings.Contains(envStr, wantEnv) { + t.Errorf("env missing %q", wantEnv) + } + } +} + +func TestDump_PipeWriterClosed(t *testing.T) { + adapter := &adapter{ + commandContext: mockCommandContext( + t, + "pg_dump", + []string{ + "--format=custom", + "--exclude-table=e2e_one_time_keys_json", + }, + "pipe data", + "", + 0, + ), + } + + pr, pw := io.Pipe() + readDone := make(chan struct{}) + var readData []byte + var readErr error + + go func() { + readData, readErr = io.ReadAll(pr) + close(readDone) + }() + + err := adapter.Dump( + context.Background(), + pgdump.Options{Database: "testdb"}, + pw, + ) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + <-readDone + if readErr != nil { + t.Fatalf("read error: %v", readErr) + } + if string(readData) != "pipe data" { + t.Errorf("read data = %q, want %q", string(readData), "pipe data") + } +} + +func TestDump_PipeWriterClosedWithError(t *testing.T) { + adapter := &adapter{ + commandContext: func(ctx context.Context, name string, arg ...string) *exec.Cmd { + return exec.CommandContext(ctx, "sh", "-c", "exit 1") + }, + } + + pr, pw := io.Pipe() + readDone := make(chan struct{}) + var readErr error + + go func() { + _, readErr = io.ReadAll(pr) + close(readDone) + }() + + err := adapter.Dump( + context.Background(), + pgdump.Options{Database: "testdb"}, + pw, + ) + if err == nil { + t.Fatal("expected error, got nil") + } + + <-readDone + if readErr == nil { + t.Fatal("expected read error due to pipe close with error, got nil") + } + if !errors.Is(readErr, pgdump.ErrPgDumpFailed(1)) { + t.Errorf("read error = %v, want ErrPgDumpFailed(1)", readErr) + } +} diff --git a/pkg/adapters/pipeline/pipeline.go b/pkg/adapters/pipeline/pipeline.go new file mode 100644 index 0000000..0134c0b --- /dev/null +++ b/pkg/adapters/pipeline/pipeline.go @@ -0,0 +1,102 @@ +package pipeline + +import ( + "context" + "io" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/pgdump" +) + +// Option configures a Runner. +type Option func(*runner) + +// WithDumper replaces the default pg_dump dumper. +func WithDumper(dumper pgdump.Dumper) Option { + return func(r *runner) { + r.dumper = dumper + } +} + +// WithEncryptor replaces the default encryptor. +func WithEncryptor(encryptor crypto.Encryptor) Option { + return func(r *runner) { + r.encryptor = encryptor + } +} + +// Runner orchestrates the dump → encrypt → sink pipeline. +type runner struct { + dumper pgdump.Dumper + encryptor crypto.Encryptor +} + +// NewRunner creates a pipeline runner with the given functional options. +func NewRunner(options ...Option) *runner { + r := &runner{} + for _, option := range options { + option(r) + } + return r +} + +// Run executes the full backup pipeline: pg_dump → encrypt → sink. +func (r *runner) Run( + ctx context.Context, + pgDumpOpts pgdump.Options, + recipients []crypto.RecipientPub, + sink domain.Sink, + rand io.Reader, +) (retErr error) { + tx, err := sink.Begin(pgDumpOpts.Key) + if err != nil { + return err + } + defer func() { + if retErr != nil { + _ = tx.Abort() + } + }() + + dumpCtx, dumpCancel := context.WithCancel(ctx) + defer dumpCancel() + + pipeR, pipeW := io.Pipe() + + dumpErrCh := make(chan error, 1) + go func() { + dumpErrCh <- r.dumper.Dump(dumpCtx, pgDumpOpts, pipeW) + }() + + encryptErrCh := make(chan error, 1) + go func() { + encryptErrCh <- r.encryptor.Encrypt(pipeR, recipients, tx, rand) + }() + + select { + case derr := <-dumpErrCh: + if derr != nil { + _ = pipeR.CloseWithError(derr) + _ = <-encryptErrCh + return derr + } + eerr := <-encryptErrCh + if eerr != nil { + return eerr + } + return tx.Commit() + case eerr := <-encryptErrCh: + if eerr != nil { + dumpCancel() + _ = pipeR.CloseWithError(eerr) + _ = <-dumpErrCh + return eerr + } + derr := <-dumpErrCh + if derr != nil { + return derr + } + return tx.Commit() + } +} diff --git a/pkg/adapters/pipeline/pipeline_test.go b/pkg/adapters/pipeline/pipeline_test.go new file mode 100644 index 0000000..ebb20c8 --- /dev/null +++ b/pkg/adapters/pipeline/pipeline_test.go @@ -0,0 +1,249 @@ +package pipeline + +import ( + "context" + "errors" + "io" + "runtime" + "testing" + "time" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/pgdump" +) + +var ( + errPgDumpFailed = errors.New("pg_dump failed") + errEncryptFailed = errors.New("encryption failed") +) + +type fakeSink struct { + transaction *fakeSinkTx +} + +func (sink *fakeSink) Begin(key string) (domain.SinkTx, error) { + sink.transaction = &fakeSinkTx{} + return sink.transaction, nil +} + +func (sink *fakeSink) List(prefix string) ([]string, error) { + return make([]string, 0), nil +} + +func (sink *fakeSink) Remove(key string) error { + return nil +} + +type fakeSinkTx struct { + committed bool + aborted bool + data []byte +} + +func (transaction *fakeSinkTx) Write(p []byte) (int, error) { + transaction.data = append(transaction.data, p...) + return len(p), nil +} + +func (transaction *fakeSinkTx) Commit() error { + transaction.committed = true + return nil +} + +func (transaction *fakeSinkTx) Abort() error { + transaction.aborted = true + return nil +} + +type fakeDumper struct { + writeBytes int + returnErr error + closePipe bool +} + +func (dumper *fakeDumper) Dump( + ctx context.Context, + opts pgdump.Options, + writer io.Writer, +) error { + if dumper.writeBytes > 0 { + data := make([]byte, dumper.writeBytes) + if _, err := writer.Write(data); err != nil { + return err + } + } + if dumper.closePipe { + if closer, ok := writer.(io.Closer); ok { + _ = closer.Close() + } + } + return dumper.returnErr +} + +type fakeEncryptor struct { + readBytes int + returnErr error +} + +func (encryptor *fakeEncryptor) Encrypt( + plaintext io.Reader, + recipients []crypto.RecipientPub, + sink io.Writer, + rand io.Reader, +) error { + if encryptor.readBytes > 0 { + buf := make([]byte, encryptor.readBytes) + if _, err := io.ReadFull(plaintext, buf); err != nil { + return err + } + } + return encryptor.returnErr +} + +func countGoroutines() int { + return runtime.NumGoroutine() +} + +func waitForGoroutinesStable(baseline int) bool { + deadline := time.Now().Add(time.Second) + for time.Now().Before(deadline) { + time.Sleep(10 * time.Millisecond) + if runtime.NumGoroutine() <= baseline { + return true + } + } + return false +} + +func TestPipeline_DumpReturnsWithoutClosing(t *testing.T) { + baseline := countGoroutines() + + sink := &fakeSink{} + dumper := &fakeDumper{ + writeBytes: 4 * 1024, + returnErr: errPgDumpFailed, + closePipe: false, + } + encryptor := &fakeEncryptor{ + readBytes: 4 * 1024, + } + + runner := NewRunner( + WithDumper(dumper), + WithEncryptor(encryptor), + ) + + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + + err := runner.Run( + ctx, + pgdump.Options{Key: "backup.sql"}, + make([]crypto.RecipientPub, 0), + sink, + nil, + ) + + if !errors.Is(err, errPgDumpFailed) { + t.Fatalf("expected errPgDumpFailed, got %v", err) + } + + if !sink.transaction.aborted { + t.Fatalf("expected transaction to be aborted on error") + } + + if waitForGoroutinesStable(baseline) { + return + } + + t.Fatalf("goroutine leak detected: baseline %d, current %d", baseline, countGoroutines()) +} + +func TestPipeline_EncryptFailsFirst(t *testing.T) { + baseline := countGoroutines() + + sink := &fakeSink{} + dumper := &fakeDumper{ + writeBytes: 64 * 1024, + returnErr: nil, + closePipe: false, + } + encryptor := &fakeEncryptor{ + readBytes: 1024, + returnErr: errEncryptFailed, + } + + runner := NewRunner( + WithDumper(dumper), + WithEncryptor(encryptor), + ) + + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + + err := runner.Run( + ctx, + pgdump.Options{Key: "backup.sql"}, + make([]crypto.RecipientPub, 0), + sink, + nil, + ) + + if !errors.Is(err, errEncryptFailed) { + t.Fatalf("expected errEncryptFailed, got %v", err) + } + + if !sink.transaction.aborted { + t.Fatalf("expected transaction to be aborted on error") + } + + if waitForGoroutinesStable(baseline) { + return + } + + t.Fatalf("goroutine leak detected: baseline %d, current %d", baseline, countGoroutines()) +} + +func TestPipeline_SuccessfulRunCommits(t *testing.T) { + baseline := countGoroutines() + + sink := &fakeSink{} + dumper := &fakeDumper{ + writeBytes: 4 * 1024, + returnErr: nil, + closePipe: true, + } + encryptor := &fakeEncryptor{ + readBytes: 4 * 1024, + } + + runner := NewRunner( + WithDumper(dumper), + WithEncryptor(encryptor), + ) + + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + + err := runner.Run( + ctx, + pgdump.Options{Key: "backup.sql"}, + make([]crypto.RecipientPub, 0), + sink, + nil, + ) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if !sink.transaction.committed { + t.Fatalf("expected transaction to be committed on success") + } + + if waitForGoroutinesStable(baseline) { + return + } + + t.Fatalf("goroutine leak detected: baseline %d, current %d", baseline, countGoroutines()) +} diff --git a/pkg/adapters/retention/retention.go b/pkg/adapters/retention/retention.go new file mode 100644 index 0000000..101c9dd --- /dev/null +++ b/pkg/adapters/retention/retention.go @@ -0,0 +1,109 @@ +// Package retention prunes old encrypted Postgres dump files from a backup +// directory based on their modification time. +// Package retention prunes old encrypted Postgres dump files from a backup +// directory based on their modification time. +package retention + +import ( + "context" + "io/fs" + "log/slog" + "os" + "path/filepath" + "time" +) + +// DumpGlob matches only encrypted Postgres dump artefacts produced by the +// backupper: synapse-.dump.pqenc. The pattern is intentionally +// strict — any deviation in prefix, middle, or extension is preserved. +const DumpGlob = "synapse-*.dump.pqenc" + +// PruneByAge removes every file in dir matching DumpGlob whose modification +// time is older than retentionDays relative to now. It returns the basenames +// of the files it removed. +// +// retentionDays == 0 disables pruning entirely (opt-out): the function +// returns a nil slice and a nil error without touching the directory. +// +// Subdirectories, non-matching files, and the root dir itself are never +// removed or followed. +func PruneByAge( + ctx context.Context, + dir string, + retentionDays int, + now time.Time, +) ( + []string, + error, +) { + if retentionDays == 0 { + return nil, nil + } + + if err := ctx.Err(); err != nil { + return nil, err + } + + if _, err := os.Stat(dir); err != nil { + return nil, err + } + + cutoff := now.Add(-time.Duration(retentionDays) * 24 * time.Hour) + + logger := slog.Default() + var pruned []string + + walkErr := fs.WalkDir(os.DirFS(dir), ".", func(walkPath string, entry fs.DirEntry, walkErrIn error) error { + if walkErrIn != nil { + return walkErrIn + } + + if err := ctx.Err(); err != nil { + return err + } + + if entry.IsDir() { + return nil + } + + name := filepath.Base(walkPath) + + matched, err := filepath.Match(DumpGlob, name) + if err != nil { + return err + } + if !matched { + return nil + } + + full := filepath.Join(dir, walkPath) + info, err := os.Stat(full) + if err != nil { + return err + } + + if !info.ModTime().Before(cutoff) { + return nil + } + + age := now.Sub(info.ModTime()) + if err := os.Remove(full); err != nil { + return err + } + + logger.Info( + "prune retention: removed old dump", + slog.String("file", name), + slog.Float64("age_seconds", age.Seconds()), + ) + + pruned = append(pruned, name) + + return nil + }) + if walkErr != nil { + return pruned, walkErr + } + + return pruned, nil +} diff --git a/pkg/adapters/retention/retention_test.go b/pkg/adapters/retention/retention_test.go new file mode 100644 index 0000000..7c9c212 --- /dev/null +++ b/pkg/adapters/retention/retention_test.go @@ -0,0 +1,401 @@ +package retention + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "io/fs" + "log/slog" + "os" + "path/filepath" + "sort" + "strings" + "testing" + "time" +) + +// fixedNow is the reference timestamp used by all table cases; individual +// file ages are expressed as durations relative to it. +var fixedNow = time.Date(2026, 7, 25, 12, 0, 0, 0, time.UTC) + +const day = 24 * time.Hour + +type fakeFile struct { + name string + ageOffset time.Duration +} + +func writeFakeFile(t *testing.T, dir string, f fakeFile) { + t.Helper() + + full := filepath.Join(dir, f.name) + + if err := os.WriteFile(full, []byte("backup-bytes"), 0o600); err != nil { + t.Fatalf("write %s: %v", f.name, err) + } + + mtime := fixedNow.Add(-f.ageOffset) + if err := os.Chtimes(full, mtime, mtime); err != nil { + t.Fatalf("chtimes %s: %v", f.name, err) + } +} + +func fileExists(t *testing.T, path string) bool { + t.Helper() + + _, err := os.Stat(path) + if err == nil { + return true + } + if errors.Is(err, fs.ErrNotExist) { + return false + } + t.Fatalf("stat %s: %v", path, err) + + return false +} + +func captureLogger() (*slog.Logger, *bytes.Buffer) { + buf := &bytes.Buffer{} + handler := slog.NewJSONHandler(buf, &slog.HandlerOptions{Level: slog.LevelDebug}) + + return slog.New(handler), buf +} + +func TestPruneByAge_TableDriven(t *testing.T) { + oldMtimes := []time.Duration{ + 365 * day, 200 * day, 181 * day, 250 * day, 400 * day, + } + newMtimes := []time.Duration{ + 0, 30 * day, 90 * day, 179 * day, 180 * day, + } + + var corpus []fakeFile + for index, age := range oldMtimes { + corpus = append(corpus, fakeFile{name: makeName(index), ageOffset: age}) + } + for index, age := range newMtimes { + corpus = append(corpus, fakeFile{ + name: makeName(index + len(oldMtimes)), + ageOffset: age, + }) + } + + tests := []struct { + name string + files []fakeFile + retentionDays int + wantPrunedNames []string + wantKeptNames []string + expectAnyRemoval bool + }{ + { + name: "by_age_removes_older_keeps_younger", + files: corpus, + retentionDays: 180, + wantPrunedNames: []string{makeName(0), makeName(1), makeName(2), makeName(3), makeName(4)}, + wantKeptNames: []string{makeName(5), makeName(6), makeName(7), makeName(8), makeName(9)}, + expectAnyRemoval: true, + }, + { + name: "retention_zero_is_opt_out", + files: corpus, + retentionDays: 0, + wantPrunedNames: []string{}, + wantKeptNames: allNames(len(corpus)), + expectAnyRemoval: false, + }, + { + name: "non_matching_files_never_touched", + files: append( + allCorpus(corpus), + fakeFile{name: "other-20200101-000000.dump.pqenc", ageOffset: 1000 * day}, + fakeFile{name: "synapse-foo.txt", ageOffset: 1000 * day}, + fakeFile{name: "README", ageOffset: 1000 * day}, + ), + retentionDays: 30, + wantPrunedNames: []string{ + makeName(0), makeName(1), makeName(2), makeName(3), makeName(4), + makeName(7), makeName(8), makeName(9), + }, + wantKeptNames: []string{ + makeName(5), makeName(6), + "other-20200101-000000.dump.pqenc", + "synapse-foo.txt", + "README", + }, + expectAnyRemoval: true, + }, + { + name: "strict_glob_synapse_dump_pqenc", + files: []fakeFile{ + {name: "synapse-20250101-000000.dump.pqenc", ageOffset: 1000 * day}, + {name: "synapse-20250102-000000.dump.pqenc", ageOffset: 1 * day}, + {name: "notsynapse-20250101-000000.dump.pqenc", ageOffset: 1000 * day}, + {name: "synapse-20250101-000000.dump.pqenc.bak", ageOffset: 1000 * day}, + {name: "synapse-20250101-000000.dump", ageOffset: 1000 * day}, + {name: "SYNAPSE-20250101-000000.dump.pqenc", ageOffset: 1000 * day}, + {name: "synapse-20250101-000000", ageOffset: 1000 * day}, + }, + retentionDays: 30, + wantPrunedNames: []string{"synapse-20250101-000000.dump.pqenc"}, + wantKeptNames: []string{ + "synapse-20250102-000000.dump.pqenc", + "notsynapse-20250101-000000.dump.pqenc", + "synapse-20250101-000000.dump.pqenc.bak", + "synapse-20250101-000000.dump", + "SYNAPSE-20250101-000000.dump.pqenc", + "synapse-20250101-000000", + }, + expectAnyRemoval: true, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + dir := t.TempDir() + for _, file := range tc.files { + writeFakeFile(t, dir, file) + } + + pruned, err := PruneByAge(context.Background(), dir, tc.retentionDays, fixedNow) + if err != nil { + t.Fatalf("PruneByAge: unexpected error: %v", err) + } + + gotPruned := basenames(pruned) + sort.Strings(gotPruned) + wantPruned := append([]string(nil), tc.wantPrunedNames...) + sort.Strings(wantPruned) + + if !equalStringSlices(gotPruned, wantPruned) { + t.Errorf("pruned mismatch\n got: %v\n want: %v", gotPruned, wantPruned) + } + + for _, name := range pruned { + if fileExists(t, filepath.Join(dir, name)) { + t.Errorf("PruneByAge returned %q but file still exists on disk", name) + } + } + + for _, name := range tc.wantKeptNames { + if !fileExists(t, filepath.Join(dir, name)) { + t.Errorf("expected to keep %q, but it is missing", name) + } + } + + if tc.expectAnyRemoval && len(pruned) == 0 { + t.Errorf("expected at least one file to be removed, got none") + } + }) + } +} + +func TestPruneByAge_EmptyDirectory(t *testing.T) { + dir := t.TempDir() + + pruned, err := PruneByAge(context.Background(), dir, 30, fixedNow) + if err != nil { + t.Fatalf("PruneByAge on empty dir: unexpected error: %v", err) + } + + if len(pruned) != 0 { + t.Errorf("expected no pruned files in empty dir, got %v", pruned) + } +} + +func TestPruneByAge_EmptyDirectoryMissing(t *testing.T) { + dir := filepath.Join(t.TempDir(), "does-not-exist") + + _, err := PruneByAge(context.Background(), dir, 30, fixedNow) + if err == nil { + t.Fatal("expected error for missing directory, got nil") + } +} + +func TestPruneByAge_LogsEachPrunedFile(t *testing.T) { + // PruneByAge logs through slog.Default(); swap it for a JSON-writing + // capture handler for the duration of the test and restore afterwards. + dir := t.TempDir() + writeFakeFile(t, dir, fakeFile{name: makeName(0), ageOffset: 365 * day}) + writeFakeFile(t, dir, fakeFile{name: makeName(1), ageOffset: 200 * day}) + writeFakeFile(t, dir, fakeFile{name: makeName(2), ageOffset: 30 * day}) + + prevLogger := slog.Default() + logger, buf := captureLogger() + slog.SetDefault(logger) + t.Cleanup(func() { + slog.SetDefault(prevLogger) + }) + + pruned, err := PruneByAge( + context.Background(), + dir, + 180, + fixedNow, + ) + if err != nil { + t.Fatalf("PruneByAge: unexpected error: %v", err) + } + + if len(pruned) != 2 { + t.Fatalf("expected 2 pruned files, got %d (%v)", len(pruned), pruned) + } + + lines := splitNonEmpty(buf.String()) + if len(lines) != len(pruned) { + t.Fatalf( + "expected %d log lines (one per pruned file), got %d:\n%s", + len(pruned), + len(lines), + buf.String(), + ) + } + + seen := make(map[string]bool) + for _, line := range lines { + var record map[string]any + if err := json.Unmarshal([]byte(line), &record); err != nil { + t.Fatalf("log line is not valid JSON: %q: %v", line, err) + } + + msg, _ := record["msg"].(string) + if !strings.Contains(msg, "prune") && !strings.Contains(msg, "remove") { + t.Errorf("log msg %q does not mention prune/remove", msg) + } + + nameVal, ok := record["file"].(string) + if !ok { + t.Fatalf("log record missing string field \"file\": %s", line) + } + seen[nameVal] = true + + ageSeconds, ok := record["age_seconds"].(float64) + if !ok { + t.Fatalf("log record missing numeric field \"age_seconds\": %s", line) + } + if ageSeconds <= 0 { + t.Errorf("age_seconds must be positive, got %v", ageSeconds) + } + } + + for _, name := range pruned { + if !seen[name] { + t.Errorf("expected a log record for pruned file %q, saw none", name) + } + } +} + +func TestPruneByAge_DirectoryItselfNotRemoved(t *testing.T) { + dir := t.TempDir() + writeFakeFile(t, dir, fakeFile{name: makeName(0), ageOffset: 1000 * day}) + + if _, err := PruneByAge(context.Background(), dir, 30, fixedNow); err != nil { + t.Fatalf("PruneByAge: %v", err) + } + + info, err := os.Stat(dir) + if err != nil { + t.Fatalf("stat root dir: %v", err) + } + if !info.IsDir() { + t.Errorf("root path is no longer a directory after prune") + } +} + +func TestPruneByAge_ContextCancelled(t *testing.T) { + dir := t.TempDir() + for index := range 5 { + writeFakeFile(t, dir, fakeFile{name: makeName(index), ageOffset: 1000 * day}) + } + + ctx, cancel := context.WithCancel(context.Background()) + cancel() + + // Cancelled context must short-circuit; whether it removes any files + // before checking the context is implementation-defined, but it must + // return ctx.Err() and must not panic. + _, err := PruneByAge(ctx, dir, 30, fixedNow) + if err != nil && !errors.Is(err, context.Canceled) { + // Acceptable: some files may already have been pruned before the + // context check; we only require the function to surface the error + // in some form. Anything else is a real failure. + t.Logf("PruneByAge returned non-cancel error: %v", err) + } +} + +// --- helpers --- + +func makeName(index int) string { + // Deterministic, sorted-friendly names like synapse-0001-... .dump.pqenc + // so test diffs are easy to read. + return "synapse-" + zeroPad(index) + "-000000.dump.pqenc" +} + +func zeroPad(index int) string { + const width = 4 + digits := "0123456789" + if index < 0 { + return "neg" + } + if index >= 10000 { + return "ovf" + } + out := make([]byte, width) + for pos := width - 1; pos >= 0; pos-- { + out[pos] = digits[index%10] + index /= 10 + } + + return string(out) +} + +func allNames(count int) []string { + names := make([]string, 0, count) + for index := range count { + names = append(names, makeName(index)) + } + + return names +} + +func allCorpus(in []fakeFile) []fakeFile { + out := make([]fakeFile, len(in)) + copy(out, in) + + return out +} + +func basenames(paths []string) []string { + out := make([]string, 0, len(paths)) + for _, p := range paths { + out = append(out, filepath.Base(p)) + } + + return out +} + +func equalStringSlices(a, b []string) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if a[i] != b[i] { + return false + } + } + + return true +} + +func splitNonEmpty(s string) []string { + var out []string + for _, line := range strings.Split(s, "\n") { + if strings.TrimSpace(line) != "" { + out = append(out, line) + } + } + + return out +} diff --git a/pkg/adapters/scheduler/cron/cron.go b/pkg/adapters/scheduler/cron/cron.go new file mode 100644 index 0000000..8bf5ed5 --- /dev/null +++ b/pkg/adapters/scheduler/cron/cron.go @@ -0,0 +1,66 @@ +package cron + +import ( + "context" + "fmt" + "sync" + + "github.com/robfig/cron/v3" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain" +) + +// cronScheduler wraps robfig/cron/v3 to implement domain.Scheduler. +type cronScheduler struct { + cron *cron.Cron + waitGroup sync.WaitGroup + stopCancel context.CancelFunc + stoppedCtx context.Context +} + +// NewCronScheduler creates a new cron-based scheduler. +// The expr must be a valid cron expression. When WithSeconds is used +// (as in this implementation) the expression should contain six fields. +func NewCronScheduler( + expr string, + job func(), +) ( + domain.Scheduler, + error, +) { + scheduler := &cronScheduler{ + cron: cron.New(cron.WithSeconds()), + } + + _, err := scheduler.cron.AddFunc( + expr, + func() { + scheduler.waitGroup.Add(1) + defer scheduler.waitGroup.Done() + job() + }, + ) + if err != nil { + return nil, fmt.Errorf("invalid cron expression %q: %w", expr, err) + } + + scheduler.stoppedCtx, scheduler.stopCancel = context.WithCancel(context.Background()) + + return scheduler, nil +} + +// Start begins executing the scheduled job. +func (s *cronScheduler) Start() { + s.cron.Start() +} + +// Stop halts the scheduler and returns a context that is cancelled +// once all in-flight jobs have completed. +func (s *cronScheduler) Stop() context.Context { + s.cron.Stop() + go func() { + s.waitGroup.Wait() + s.stopCancel() + }() + return s.stoppedCtx +} diff --git a/pkg/adapters/scheduler/cron/cron_test.go b/pkg/adapters/scheduler/cron/cron_test.go new file mode 100644 index 0000000..6a3a263 --- /dev/null +++ b/pkg/adapters/scheduler/cron/cron_test.go @@ -0,0 +1,61 @@ +package cron + +import ( + "testing" + "time" +) + +func TestJobFiresAtExpectedTime(t *testing.T) { + fired := make(chan struct{}, 1) + + job := func() { + select { + case fired <- struct{}{}: + default: + } + } + + // Every second (6 fields because cron is created with WithSeconds). + scheduler, err := NewCronScheduler("* * * * * *", job) + if err != nil { + t.Fatalf("NewCronScheduler failed: %v", err) + } + + scheduler.Start() + + select { + case <-fired: + // Job fired as expected. + case <-time.After(3 * time.Second): + t.Fatal("job did not fire within expected time") + } + + stoppedCtx := scheduler.Stop() + select { + case <-stoppedCtx.Done(): + // Scheduler stopped cleanly. + case <-time.After(2 * time.Second): + t.Fatal("scheduler did not stop within expected time") + } +} + +func TestStopReturnsContext(t *testing.T) { + scheduler, err := NewCronScheduler("* * * * * *", func() {}) + if err != nil { + t.Fatalf("NewCronScheduler failed: %v", err) + } + + scheduler.Start() + + stoppedCtx := scheduler.Stop() + if stoppedCtx == nil { + t.Fatal("Stop returned nil context") + } + + select { + case <-stoppedCtx.Done(): + // Expected. + case <-time.After(2 * time.Second): + t.Fatal("stopped context was not cancelled") + } +} diff --git a/pkg/adapters/storage/local/local.go b/pkg/adapters/storage/local/local.go new file mode 100644 index 0000000..6441c6c --- /dev/null +++ b/pkg/adapters/storage/local/local.go @@ -0,0 +1,132 @@ +package local + +import ( + "errors" + "os" + "path/filepath" + "strings" + "sync" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain" +) + +// NewLocalSink creates a new local filesystem sink that writes into the given directory. +func NewLocalSink(dir string) domain.Sink { + return &localSink{dir: dir} +} + +type localSink struct { + dir string +} + +func (sink *localSink) Begin(key string) (domain.SinkTx, error) { + tmpPath := filepath.Join(sink.dir, key+".tmp") + finalPath := filepath.Join(sink.dir, key) + + file, err := os.Create(tmpPath) + if err != nil { + return nil, err + } + + return &localSinkTx{ + file: file, + tmpPath: tmpPath, + finalPath: finalPath, + }, nil +} + +func (sink *localSink) List(prefix string) ([]string, error) { + entries, err := os.ReadDir(sink.dir) + if err != nil { + return nil, err + } + + keys := make([]string, 0, len(entries)) + for _, entry := range entries { + if entry.IsDir() { + continue + } + name := entry.Name() + if prefix != "" && !strings.HasPrefix(name, prefix) { + continue + } + keys = append(keys, name) + } + + return keys, nil +} + +func (sink *localSink) Remove(key string) error { + path := filepath.Join(sink.dir, key) + return os.Remove(path) +} + +type localSinkTx struct { + file *os.File + tmpPath string + finalPath string + committed bool + aborted bool + mu sync.Mutex +} + +func (transaction *localSinkTx) Write(p []byte) (int, error) { + transaction.mu.Lock() + defer transaction.mu.Unlock() + + if transaction.committed || transaction.aborted { + return 0, errors.New("transaction already finished") + } + + return transaction.file.Write(p) +} + +func (transaction *localSinkTx) Commit() error { + transaction.mu.Lock() + defer transaction.mu.Unlock() + + if transaction.committed || transaction.aborted { + return nil + } + + transaction.committed = true + + if err := transaction.file.Sync(); err != nil { + return err + } + if err := transaction.file.Close(); err != nil { + return err + } + + if err := os.Rename(transaction.tmpPath, transaction.finalPath); err != nil { + return err + } + + parent, err := os.Open(filepath.Dir(transaction.tmpPath)) + if err != nil { + return err + } + defer parent.Close() + + if err := parent.Sync(); err != nil { + return err + } + + return nil +} + +func (transaction *localSinkTx) Abort() error { + transaction.mu.Lock() + defer transaction.mu.Unlock() + + if transaction.committed || transaction.aborted { + return nil + } + + transaction.aborted = true + + _ = transaction.file.Close() + _ = os.Remove(transaction.tmpPath) + + return nil +} diff --git a/pkg/adapters/storage/local/local_test.go b/pkg/adapters/storage/local/local_test.go new file mode 100644 index 0000000..0f6ee3f --- /dev/null +++ b/pkg/adapters/storage/local/local_test.go @@ -0,0 +1,255 @@ +package local + +import ( + "os" + "path/filepath" + "testing" + + "git.tswf.io/infra/go-synapse-backupper/pkg/domain" +) + +func TestLocalSink_BeginOpensTmpInSameDirectory(t *testing.T) { + dir := t.TempDir() + sink := NewLocalSink(dir) + + transaction, err := sink.Begin("backup.sql") + if err != nil { + t.Fatalf("Begin failed: %v", err) + } + defer func() { _ = transaction.Abort() }() + + tmpPath := filepath.Join(dir, "backup.sql.tmp") + if _, err := os.Stat(tmpPath); os.IsNotExist(err) { + t.Fatalf("expected tmp file to exist at %s", tmpPath) + } +} + +func TestLocalSink_WriteStreamsBytes(t *testing.T) { + dir := t.TempDir() + sink := NewLocalSink(dir) + + transaction, err := sink.Begin("backup.sql") + if err != nil { + t.Fatalf("Begin failed: %v", err) + } + defer func() { _ = transaction.Abort() }() + + data := []byte("hello world") + written, err := transaction.Write(data) + if err != nil { + t.Fatalf("Write failed: %v", err) + } + if written != len(data) { + t.Fatalf("expected %d bytes written, got %d", len(data), written) + } +} + +func TestLocalSink_CommitSequence(t *testing.T) { + dir := t.TempDir() + sink := NewLocalSink(dir) + + transaction, err := sink.Begin("backup.sql") + if err != nil { + t.Fatalf("Begin failed: %v", err) + } + + data := []byte("persistent data") + if _, err := transaction.Write(data); err != nil { + t.Fatalf("Write failed: %v", err) + } + + tmpPath := filepath.Join(dir, "backup.sql.tmp") + tmpInfo, err := os.Stat(tmpPath) + if err != nil { + t.Fatalf("stat tmp file failed: %v", err) + } + + if err := transaction.Commit(); err != nil { + t.Fatalf("Commit failed: %v", err) + } + + finalPath := filepath.Join(dir, "backup.sql") + if _, err := os.Stat(tmpPath); !os.IsNotExist(err) { + t.Fatalf("expected tmp file to be absent after commit") + } + + finalInfo, err := os.Stat(finalPath) + if err != nil { + t.Fatalf("expected final file to exist after commit: %v", err) + } + + if !os.SameFile(tmpInfo, finalInfo) { + t.Fatalf("expected final file to be the same inode as tmp file before rename") + } +} + +func TestLocalSink_AbortIsIdempotent(t *testing.T) { + dir := t.TempDir() + sink := NewLocalSink(dir) + + transaction, err := sink.Begin("backup.sql") + if err != nil { + t.Fatalf("Begin failed: %v", err) + } + + if _, err := transaction.Write([]byte("discard me")); err != nil { + t.Fatalf("Write failed: %v", err) + } + + if err := transaction.Abort(); err != nil { + t.Fatalf("first Abort failed: %v", err) + } + if err := transaction.Abort(); err != nil { + t.Fatalf("second Abort should be idempotent: %v", err) + } + + tmpPath := filepath.Join(dir, "backup.sql.tmp") + finalPath := filepath.Join(dir, "backup.sql") + if _, err := os.Stat(tmpPath); !os.IsNotExist(err) { + t.Fatalf("expected tmp file to be absent after abort") + } + if _, err := os.Stat(finalPath); !os.IsNotExist(err) { + t.Fatalf("expected final file to be absent after abort") + } +} + +func TestLocalSink_AbortAfterCommitIsSafe(t *testing.T) { + dir := t.TempDir() + sink := NewLocalSink(dir) + + transaction, err := sink.Begin("backup.sql") + if err != nil { + t.Fatalf("Begin failed: %v", err) + } + + if _, err := transaction.Write([]byte("data")); err != nil { + t.Fatalf("Write failed: %v", err) + } + + if err := transaction.Commit(); err != nil { + t.Fatalf("Commit failed: %v", err) + } + + if err := transaction.Abort(); err != nil { + t.Fatalf("Abort after commit should be safe: %v", err) + } + + finalPath := filepath.Join(dir, "backup.sql") + if _, err := os.Stat(finalPath); err != nil { + t.Fatalf("expected final file to still exist after abort-after-commit: %v", err) + } +} + +func TestLocalSink_KillWriterMidStreamThenAbortLeavesNoFinal(t *testing.T) { + dir := t.TempDir() + sink := NewLocalSink(dir) + + transaction, err := sink.Begin("backup.sql") + if err != nil { + t.Fatalf("Begin failed: %v", err) + } + + if _, err := transaction.Write([]byte("partial")); err != nil { + t.Fatalf("Write failed: %v", err) + } + + if err := transaction.Abort(); err != nil { + t.Fatalf("Abort failed: %v", err) + } + + tmpPath := filepath.Join(dir, "backup.sql.tmp") + finalPath := filepath.Join(dir, "backup.sql") + if _, err := os.Stat(tmpPath); !os.IsNotExist(err) { + t.Fatalf("expected tmp file to be absent after abort") + } + if _, err := os.Stat(finalPath); !os.IsNotExist(err) { + t.Fatalf("expected final file to be absent after abort") + } +} + +func TestLocalSink_ListAndRemove(t *testing.T) { + dir := t.TempDir() + sink := NewLocalSink(dir) + + if err := os.WriteFile(filepath.Join(dir, "a.sql"), []byte("a"), 0o644); err != nil { + t.Fatalf("setup failed: %v", err) + } + if err := os.WriteFile(filepath.Join(dir, "b.sql"), []byte("b"), 0o644); err != nil { + t.Fatalf("setup failed: %v", err) + } + + keys, err := sink.List("") + if err != nil { + t.Fatalf("List failed: %v", err) + } + if len(keys) != 2 { + t.Fatalf("expected 2 keys, got %d", len(keys)) + } + + if err := sink.Remove("a.sql"); err != nil { + t.Fatalf("Remove failed: %v", err) + } + + keys, err = sink.List("") + if err != nil { + t.Fatalf("List after remove failed: %v", err) + } + if len(keys) != 1 { + t.Fatalf("expected 1 key after remove, got %d", len(keys)) + } +} + +func TestLocalSink_RemoveMissingIsError(t *testing.T) { + dir := t.TempDir() + sink := NewLocalSink(dir) + + err := sink.Remove("nonexistent.sql") + if err == nil { + t.Fatalf("expected error removing missing file") + } +} + +func TestLocalSink_WriteAfterCommitIsError(t *testing.T) { + dir := t.TempDir() + sink := NewLocalSink(dir) + + transaction, err := sink.Begin("backup.sql") + if err != nil { + t.Fatalf("Begin failed: %v", err) + } + + if _, err := transaction.Write([]byte("data")); err != nil { + t.Fatalf("Write failed: %v", err) + } + + if err := transaction.Commit(); err != nil { + t.Fatalf("Commit failed: %v", err) + } + + if _, err := transaction.Write([]byte("more")); err == nil { + t.Fatalf("expected error writing after commit") + } +} + +func TestLocalSink_WriteAfterAbortIsError(t *testing.T) { + dir := t.TempDir() + sink := NewLocalSink(dir) + + transaction, err := sink.Begin("backup.sql") + if err != nil { + t.Fatalf("Begin failed: %v", err) + } + + if err := transaction.Abort(); err != nil { + t.Fatalf("Abort failed: %v", err) + } + + if _, err := transaction.Write([]byte("more")); err == nil { + t.Fatalf("expected error writing after abort") + } +} + +var ( + _ domain.Sink = (*localSink)(nil) + _ domain.SinkTx = (*localSinkTx)(nil) +) diff --git a/pkg/domain/backup/backup.go b/pkg/domain/backup/backup.go new file mode 100644 index 0000000..13d1fad --- /dev/null +++ b/pkg/domain/backup/backup.go @@ -0,0 +1,75 @@ +package backup + +import ( + "context" + "crypto/rand" + "fmt" + "time" + + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/config" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/composite" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/keymanager" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/mlkem768" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/x25519" + adapterpgdump "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/pgdump" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/pipeline" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/retention" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/storage/local" + domaincrypto "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" + domainpgdump "git.tswf.io/infra/go-synapse-backupper/pkg/domain/pgdump" +) + +func RunOnce(ctx context.Context, cfg *config.Config) error { + registry := domaincrypto.NewRegistry() + if err := registry.Register(0x0006, func() domaincrypto.KEM { return mlkem768.New() }); err != nil { + return fmt.Errorf("register mlkem768: %w", err) + } + if err := registry.Register(0x0007, func() domaincrypto.KEM { return x25519.New() }); err != nil { + return fmt.Errorf("register x25519: %w", err) + } + + keyMgr := keymanager.NewKeyManager(registry) + + pqPub, err := keyMgr.LoadPub(cfg.PQPublicKeyPath, cfg.PQScheme) + if err != nil { + return fmt.Errorf("load pq public key: %w", err) + } + + classicalPub, err := keyMgr.LoadPub(cfg.ClassicalPublicKeyPath, cfg.ClassicalScheme) + if err != nil { + return fmt.Errorf("load classical public key: %w", err) + } + + recipients := []domaincrypto.RecipientPub{pqPub, classicalPub} + + encryptor := composite.NewEncryptor(registry) + dumper := adapterpgdump.New() + sink := local.NewLocalSink(cfg.Backup.Dir) + + runner := pipeline.NewRunner( + pipeline.WithDumper(dumper), + pipeline.WithEncryptor(encryptor), + ) + + now := time.Now() + timestamp := now.UTC().Format("20060102-150405") + pgDumpOpts := domainpgdump.Options{ + Host: cfg.PG.Host, + Port: cfg.PG.Port, + Database: cfg.PG.Database, + User: cfg.PG.User, + Password: cfg.PG.Password, + ExcludeTables: cfg.PG.ExcludeTables, + Key: fmt.Sprintf("synapse-%s.dump.pqenc", timestamp), + } + + if err := runner.Run(ctx, pgDumpOpts, recipients, sink, rand.Reader); err != nil { + return fmt.Errorf("backup pipeline failed: %w", err) + } + + if _, err := retention.PruneByAge(ctx, cfg.Backup.Dir, cfg.Backup.RetentionDays, now); err != nil { + return fmt.Errorf("retention pruning failed: %w", err) + } + + return nil +} diff --git a/pkg/domain/backup/backup_test.go b/pkg/domain/backup/backup_test.go new file mode 100644 index 0000000..8dadbcf --- /dev/null +++ b/pkg/domain/backup/backup_test.go @@ -0,0 +1,129 @@ +package backup + +import ( + "context" + "os" + "strings" + "testing" + + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/config" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/keymanager" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/mlkem768" + "git.tswf.io/infra/go-synapse-backupper/pkg/adapters/crypto/x25519" + "git.tswf.io/infra/go-synapse-backupper/pkg/domain/crypto" +) + +// TestRunOnce_MissingKeys verifies that RunOnce surfaces a configuration error +// when the public key paths are not provided, exercising the early validation +// path (registry build, keymanager construction, key load). +func TestRunOnce_MissingKeys(t *testing.T) { + cfg := &config.Config{} + // PQPublicKeyPath and ClassicalPublicKeyPath intentionally left empty. + + err := RunOnce(context.Background(), cfg) + if err == nil { + t.Fatal("RunOnce returned nil error with empty config, want error") + } + + if !strings.Contains(err.Error(), "load pq public key") { + t.Fatalf("RunOnce error = %q, want it to mention %q", err, "load pq public key") + } +} + +// TestRunOnce_PQKeyNotFound verifies the error returned when the post-quantum +// public key path is set but the file does not exist on disk. +func TestRunOnce_PQKeyNotFound(t *testing.T) { + cfg := &config.Config{ + PQScheme: 0x0006, + // Path points to a file that does not exist; use t.TempDir() to keep + // the test hermetic regardless of the working directory. + PQPublicKeyPath: t.TempDir() + "/does-not-exist-pq.pem", + ClassicalPublicKeyPath: t.TempDir() + "/does-not-exist-classical.pem", + } + + err := RunOnce(context.Background(), cfg) + if err == nil { + t.Fatal("RunOnce returned nil error when keys are missing on disk, want error") + } + + if !strings.Contains(err.Error(), "load pq public key") { + t.Fatalf("RunOnce error = %q, want it to mention %q", err, "load pq public key") + } +} + +// TestRunOnce_ValidKeys_PgDumpMissing generates real dual-KEM keys, builds a +// fully valid config, and calls RunOnce. Since pg_dump is not installed in the +// test environment, the pipeline fails at the dump step, giving coverage of +// the full orchestration path (registry, keymanager, encryptor, sink, runner, +// pgDumpOpts assembly) while still asserting the expected error. +func TestRunOnce_ValidKeys_PgDumpMissing(t *testing.T) { + dir := t.TempDir() + keyDir := dir + "/keys" + backupDir := dir + "/backups" + _ = os.MkdirAll(keyDir, 0o755) + _ = os.MkdirAll(backupDir, 0o755) + + reg := crypto.NewRegistry() + _ = reg.Register(0x0006, func() crypto.KEM { return mlkem768.New() }) + _ = reg.Register(0x0007, func() crypto.KEM { return x25519.New() }) + + km := keymanager.NewKeyManager(reg) + + pqPubFile, _ := os.Create(keyDir + "/pq.pub.pem") + pqPrivFile, _ := os.Create(keyDir + "/pq.priv.pem") + _ = km.Generate(0x0006, pqPubFile, pqPrivFile, nil) + _ = pqPubFile.Close() + _ = pqPrivFile.Close() + + classicalPubFile, _ := os.Create(keyDir + "/classical.pub.pem") + classicalPrivFile, _ := os.Create(keyDir + "/classical.priv.pem") + _ = km.Generate(0x0007, classicalPubFile, classicalPrivFile, nil) + _ = classicalPubFile.Close() + _ = classicalPrivFile.Close() + + cfg := &config.Config{ + PQScheme: 0x0006, + ClassicalScheme: 0x0007, + PQPublicKeyPath: keyDir + "/pq.pub.pem", + ClassicalPublicKeyPath: keyDir + "/classical.pub.pem", + Backup: struct { + Dir string `mapstructure:"dir"` + RetentionDays int `mapstructure:"retention_days"` + Cron string `mapstructure:"cron"` + }{ + Dir: backupDir, + RetentionDays: 180, + }, + PG: struct { + Host string `mapstructure:"host"` + Port int `mapstructure:"port"` + User string `mapstructure:"user"` + Password string `mapstructure:"password"` + Database string `mapstructure:"database"` + SSLMode string `mapstructure:"sslmode"` + ExcludeTables []string `mapstructure:"exclude_tables"` + }{ + Host: "localhost", + Port: 5432, + User: "test", + Password: "test", + Database: "test", + ExcludeTables: []string{"e2e_one_time_keys_json"}, + }, + } + + err := RunOnce(context.Background(), cfg) + if err == nil { + t.Fatal("expected error because pg_dump is not installed in the test environment") + } + if !strings.Contains(err.Error(), "backup pipeline failed") { + t.Fatalf("expected error containing 'backup pipeline failed', got: %v", err) + } + + entries, _ := os.ReadDir(backupDir) + for _, e := range entries { + if strings.HasSuffix(e.Name(), ".tmp") { + t.Fatalf("unexpected .tmp file after failed backup: %s", e.Name()) + } + } +} diff --git a/pkg/domain/crypto/decryptor.go b/pkg/domain/crypto/decryptor.go new file mode 100644 index 0000000..ffdf117 --- /dev/null +++ b/pkg/domain/crypto/decryptor.go @@ -0,0 +1,12 @@ +package crypto + +import "io" + +// Decryptor defines the contract for decrypting ciphertext using private keys. +type Decryptor interface { + Decrypt( + src io.Reader, + privs []RecipientPriv, + plaintext io.Writer, + ) error +} diff --git a/pkg/domain/crypto/encryptor.go b/pkg/domain/crypto/encryptor.go new file mode 100644 index 0000000..8c5ec4c --- /dev/null +++ b/pkg/domain/crypto/encryptor.go @@ -0,0 +1,13 @@ +package crypto + +import "io" + +// Encryptor defines the contract for encrypting plaintext to multiple recipients. +type Encryptor interface { + Encrypt( + plaintext io.Reader, + recipients []RecipientPub, + sink io.Writer, + rand io.Reader, + ) error +} diff --git a/pkg/domain/crypto/kem.go b/pkg/domain/crypto/kem.go new file mode 100644 index 0000000..0722a8e --- /dev/null +++ b/pkg/domain/crypto/kem.go @@ -0,0 +1,50 @@ +package crypto + +import "io" + +// KEM defines the contract for a Key Encapsulation Mechanism. +type KEM interface { + SchemeID() uint16 + GenerateKeyPair( + rand io.Reader, + ) ( + RecipientPub, + RecipientPriv, + error, + ) + Encapsulate( + pub RecipientPub, + rand io.Reader, + ) ( + ciphertext []byte, + sharedSecret []byte, + err error, + ) + Decapsulate( + priv RecipientPriv, + ciphertext []byte, + ) ( + sharedSecret []byte, + err error, + ) + LoadPriv( + raw []byte, + ) ( + RecipientPriv, + error, + ) +} + +// RecipientPub represents a public recipient key. +type RecipientPub interface { + SchemeID() uint16 + KeyID() []byte + Raw() []byte +} + +// RecipientPriv represents a private recipient key. +type RecipientPriv interface { + SchemeID() uint16 + KeyID() []byte + Raw() []byte +} diff --git a/pkg/domain/crypto/keymanager.go b/pkg/domain/crypto/keymanager.go new file mode 100644 index 0000000..a2e5950 --- /dev/null +++ b/pkg/domain/crypto/keymanager.go @@ -0,0 +1,27 @@ +package crypto + +import "io" + +// KeyManager defines the contract for loading and generating recipient keys. +type KeyManager interface { + LoadPub( + path string, + schemeID uint16, + ) ( + RecipientPub, + error, + ) + LoadPriv( + path string, + schemeID uint16, + ) ( + RecipientPriv, + error, + ) + Generate( + schemeID uint16, + pubOut io.Writer, + privOut io.Writer, + rand io.Reader, + ) error +} diff --git a/pkg/domain/crypto/registry.go b/pkg/domain/crypto/registry.go new file mode 100644 index 0000000..4da9318 --- /dev/null +++ b/pkg/domain/crypto/registry.go @@ -0,0 +1,84 @@ +package crypto + +import ( + "errors" + "fmt" + "sync" +) + +// Sentinel errors for registry operations. +var ( + ErrUnknownScheme = errors.New("unknown KEM scheme") + ErrDuplicateScheme = errors.New("duplicate KEM scheme registration") +) + +// KEMFactory is a constructor function that returns a fresh KEM instance. +type KEMFactory func() KEM + +// Registry is a concurrent-safe map of KEM scheme IDs to their factories. +type Registry interface { + Register( + schemeID uint16, + factory KEMFactory, + ) error + Lookup( + schemeID uint16, + ) ( + KEMFactory, + error, + ) +} + +// registry is the private implementation of Registry. +type registry struct { + mutex sync.RWMutex + factories map[uint16]KEMFactory +} + +// NewRegistry creates a new empty Registry. +func NewRegistry() Registry { + return ®istry{ + factories: make(map[uint16]KEMFactory), + } +} + +// Register adds a KEMFactory for the given schemeID. +// Returns ErrDuplicateScheme if the schemeID is already registered. +func (r *registry) Register(schemeID uint16, factory KEMFactory) error { + r.mutex.Lock() + defer r.mutex.Unlock() + + if _, exists := r.factories[schemeID]; exists { + return fmt.Errorf( + "scheme 0x%04x: %w", + schemeID, + ErrDuplicateScheme, + ) + } + + r.factories[schemeID] = factory + return nil +} + +// Lookup retrieves the KEMFactory for the given schemeID. +// Returns ErrUnknownScheme if the schemeID is not registered. +func (r *registry) Lookup( + schemeID uint16, +) ( + KEMFactory, + error, +) { + r.mutex.RLock() + defer r.mutex.RUnlock() + + factory, exists := r.factories[schemeID] + if !exists { + return nil, fmt.Errorf( + "scheme 0x%04x: %w", + schemeID, + ErrUnknownScheme, + ) + } + + return factory, nil +} diff --git a/pkg/domain/crypto/registry_test.go b/pkg/domain/crypto/registry_test.go new file mode 100644 index 0000000..098f1a6 --- /dev/null +++ b/pkg/domain/crypto/registry_test.go @@ -0,0 +1,173 @@ +package crypto + +import ( + "errors" + "io" + "sync" + "testing" +) + +// mockKEM is a minimal KEM implementation for testing the registry. +type mockKEM struct { + schemeID uint16 +} + +func (m *mockKEM) SchemeID() uint16 { + return m.schemeID +} + +func (m *mockKEM) GenerateKeyPair( + rand io.Reader, +) ( + RecipientPub, + RecipientPriv, + error, +) { + return nil, nil, nil +} + +func (m *mockKEM) Encapsulate( + pub RecipientPub, + rand io.Reader, +) ( + ciphertext []byte, + sharedSecret []byte, + err error, +) { + return nil, nil, nil +} + +func (m *mockKEM) Decapsulate( + priv RecipientPriv, + ciphertext []byte, +) ( + sharedSecret []byte, + err error, +) { + return nil, nil +} + +func (m *mockKEM) LoadPriv( + raw []byte, +) ( + RecipientPriv, + error, +) { + return &mockRecipient{schemeIDValue: m.schemeID, rawBytes: raw}, nil +} + +// mockRecipient implements RecipientPub and RecipientPriv for tests. +type mockRecipient struct { + schemeIDValue uint16 + rawBytes []byte +} + +func (r *mockRecipient) SchemeID() uint16 { + return r.schemeIDValue +} + +func (r *mockRecipient) KeyID() []byte { + return r.rawBytes +} + +func (r *mockRecipient) Raw() []byte { + return r.rawBytes +} + +func TestRegistry_RegisterAndLookup(t *testing.T) { + registry := NewRegistry() + factory := func() KEM { + return &mockKEM{schemeID: 0x0001} + } + + err := registry.Register(0x0001, factory) + if err != nil { + t.Fatalf("unexpected error registering scheme: %v", err) + } + + foundFactory, err := registry.Lookup(0x0001) + if err != nil { + t.Fatalf("unexpected error looking up scheme: %v", err) + } + + kem := foundFactory() + if kem.SchemeID() != 0x0001 { + t.Errorf("expected schemeID 0x0001, got 0x%04x", kem.SchemeID()) + } +} + +func TestRegistry_LookupUnknownScheme(t *testing.T) { + registry := NewRegistry() + + _, err := registry.Lookup(0x9999) + if err == nil { + t.Fatal("expected error for unknown scheme, got nil") + } + + if !errors.Is(err, ErrUnknownScheme) { + t.Errorf("expected ErrUnknownScheme, got %v", err) + } +} + +func TestRegistry_RegisterDuplicateScheme(t *testing.T) { + registry := NewRegistry() + factory := func() KEM { + return &mockKEM{schemeID: 0x0001} + } + + err := registry.Register(0x0001, factory) + if err != nil { + t.Fatalf("unexpected error on first register: %v", err) + } + + err = registry.Register(0x0001, factory) + if err == nil { + t.Fatal("expected error for duplicate scheme, got nil") + } + + if !errors.Is(err, ErrDuplicateScheme) { + t.Errorf("expected ErrDuplicateScheme, got %v", err) + } +} + +func TestRegistry_ConcurrentAccess(t *testing.T) { + registry := NewRegistry() + const goroutines = 100 + + var waitGroup sync.WaitGroup + waitGroup.Add(goroutines) + + for index := range goroutines { + go func(schemeID uint16) { + defer waitGroup.Done() + + factory := func() KEM { + return &mockKEM{schemeID: schemeID} + } + + _ = registry.Register(schemeID, factory) + _, _ = registry.Lookup(schemeID) + }(uint16(index + 1)) + } + + waitGroup.Wait() +} + +func TestRegistry_LookupReturnsIndependentInstances(t *testing.T) { + registry := NewRegistry() + factory := func() KEM { + return &mockKEM{schemeID: 0x0001} + } + + _ = registry.Register(0x0001, factory) + + factoryOne, _ := registry.Lookup(0x0001) + factoryTwo, _ := registry.Lookup(0x0001) + + kemOne := factoryOne() + kemTwo := factoryTwo() + + if kemOne == kemTwo { + t.Error("expected independent KEM instances from factory") + } +} diff --git a/pkg/domain/pgdump/dumper.go b/pkg/domain/pgdump/dumper.go new file mode 100644 index 0000000..4e05008 --- /dev/null +++ b/pkg/domain/pgdump/dumper.go @@ -0,0 +1,50 @@ +package pgdump + +import ( + "context" + "fmt" + "io" +) + +// Options holds configuration for the pg_dump invocation. +type Options struct { + Host string + Port int + Database string + User string + Password string + Key string + ExcludeTables []string +} + +// Dumper defines the contract for executing pg_dump. +type Dumper interface { + Dump( + ctx context.Context, + opts Options, + sink io.Writer, + ) error +} + +// pgDumpFailedError is returned when pg_dump exits with a non-zero status. +type pgDumpFailedError struct { + exitCode int +} + +func (e *pgDumpFailedError) Error() string { + return fmt.Sprintf("pg_dump failed with exit code %d", e.exitCode) +} + +// Is reports whether target is a pgDumpFailedError with the same exit code. +func (e *pgDumpFailedError) Is(target error) bool { + other, ok := target.(*pgDumpFailedError) + if !ok { + return false + } + return e.exitCode == other.exitCode +} + +// ErrPgDumpFailed creates a new pg_dump failed error with the given exit code. +func ErrPgDumpFailed(exitCode int) error { + return &pgDumpFailedError{exitCode: exitCode} +} diff --git a/pkg/domain/pgdump/dumper_test.go b/pkg/domain/pgdump/dumper_test.go new file mode 100644 index 0000000..9d7dabd --- /dev/null +++ b/pkg/domain/pgdump/dumper_test.go @@ -0,0 +1,72 @@ +package pgdump + +import ( + "errors" + "fmt" + "testing" +) + +func TestErrPgDumpFailed_Error(t *testing.T) { + cases := []struct { + name string + exitCode int + want string + }{ + {name: "zero", exitCode: 0, want: "pg_dump failed with exit code 0"}, + {name: "one", exitCode: 1, want: "pg_dump failed with exit code 1"}, + {name: "large", exitCode: 137, want: "pg_dump failed with exit code 137"}, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + err := ErrPgDumpFailed(tc.exitCode) + if err == nil { + t.Fatalf("ErrPgDumpFailed(%d) returned nil, want error", tc.exitCode) + } + if got := err.Error(); got != tc.want { + t.Fatalf("Error() = %q, want %q", got, tc.want) + } + }) + } +} + +func TestErrPgDumpFailed_Is(t *testing.T) { + base := ErrPgDumpFailed(1) + + cases := []struct { + name string + target error + want bool + }{ + { + name: "same exit code", + target: ErrPgDumpFailed(1), + want: true, + }, + { + name: "different exit code", + target: ErrPgDumpFailed(2), + want: false, + }, + { + name: "unrelated error type", + target: errors.New("something else"), + want: false, + }, + { + // Is does not unwrap target: a fmt.Errorf-wrapped pgDumpFailedError + // fails the exact type check, so errors.Is reports false here. + name: "wrapped same-type error", + target: fmt.Errorf("wrapped: %w", ErrPgDumpFailed(1)), + want: false, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + if got := errors.Is(base, tc.target); got != tc.want { + t.Fatalf("errors.Is(%v, %v) = %v, want %v", base, tc.target, got, tc.want) + } + }) + } +} diff --git a/pkg/domain/scheduler.go b/pkg/domain/scheduler.go new file mode 100644 index 0000000..0717ad4 --- /dev/null +++ b/pkg/domain/scheduler.go @@ -0,0 +1,12 @@ +package domain + +import "context" + +// Scheduler is the abstraction for a recurring job scheduler. +type Scheduler interface { + // Start begins executing the scheduled job. + Start() + // Stop halts the scheduler and returns a context that is cancelled + // once all in-flight jobs have completed. + Stop() (stoppedCtx context.Context) +} diff --git a/pkg/domain/sink.go b/pkg/domain/sink.go new file mode 100644 index 0000000..c73d0b8 --- /dev/null +++ b/pkg/domain/sink.go @@ -0,0 +1,17 @@ +package domain + +import "io" + +// Sink defines the contract for a storage sink that supports atomic two-phase writes. +type Sink interface { + Begin(key string) (SinkTx, error) + List(prefix string) ([]string, error) + Remove(key string) error +} + +// SinkTx represents an in-progress write transaction. +type SinkTx interface { + io.Writer + Commit() error + Abort() error +} diff --git a/resources/config.example.yaml b/resources/config.example.yaml new file mode 100644 index 0000000..e69de29 diff --git a/scripts/integration-test.sh b/scripts/integration-test.sh new file mode 100755 index 0000000..64494da --- /dev/null +++ b/scripts/integration-test.sh @@ -0,0 +1,70 @@ +#!/bin/bash +set -euo pipefail + +IMAGE="synapse-backupper:test" + +cleanup() { + docker rm -f sb-pg-test 2>/dev/null || true + rm -rf tmp-keys tmp-backups tmp-restored +} +trap cleanup EXIT + +# 1. Start PostgreSQL +docker run -d --name sb-pg-test -e POSTGRES_PASSWORD=test postgres:17-alpine +# Wait for ready +for i in {1..30}; do + docker exec sb-pg-test pg_isready -U postgres && break + sleep 1 +done + +# 2. Create database +docker exec sb-pg-test psql -U postgres -c "CREATE DATABASE synapse;" + +# 3. Create fixture table +docker exec sb-pg-test psql -U postgres -d synapse -c "CREATE TABLE rooms (id serial PRIMARY KEY, name text); INSERT INTO rooms (name) VALUES ('test1');" + +# 4. Generate keys +mkdir -p tmp-keys +chmod 777 tmp-keys +docker run --rm -v "$(pwd)/tmp-keys:/keys" "$IMAGE" keygen --type both --out-prefix /keys/test + +# 5. Run backup +mkdir -p tmp-backups +chmod 777 tmp-backups +docker run --rm --network container:sb-pg-test \ + -v "$(pwd)/tmp-keys:/keys:ro" \ + -v "$(pwd)/tmp-backups:/backups" \ + -e APP_PG_HOST=127.0.0.1 \ + -e APP_PG_USER=postgres \ + -e APP_PG_PASSWORD=test \ + -e APP_PG_DATABASE=synapse \ + -e APP_PQ_PUBLIC_KEY_PATH=/keys/test.pq.pub.pem \ + -e APP_CLASSICAL_PUBLIC_KEY_PATH=/keys/test.classical.pub.pem \ + -e APP_BACKUP_DIR=/backups \ + "$IMAGE" backup + +# 6. Assert exactly ONE .pqenc file +PQENC_COUNT=$(ls tmp-backups/*.pqenc 2>/dev/null | wc -l) +if [ "$PQENC_COUNT" -ne 1 ]; then + echo "Expected exactly 1 .pqenc file, found $PQENC_COUNT" + exit 1 +fi +PQENC_FILE=$(ls tmp-backups/*.pqenc) + +# 7. Restore +mkdir -p tmp-restored +chmod 777 tmp-restored +docker run --rm \ + -v "$(pwd)/tmp-keys:/keys:ro" \ + -v "$(pwd)/tmp-backups:/backups:ro" \ + -v "$(pwd)/tmp-restored:/out" \ + "$IMAGE" restore \ + --in "/backups/$(basename "$PQENC_FILE")" \ + --privkey-pq /keys/test.pq.priv.pem \ + --privkey-classical /keys/test.classical.priv.pem \ + --out /out/restored.dump + +# 8. Assert restore dump contains rooms table +grep -q "CREATE TABLE public.rooms" tmp-restored/restored.dump + +echo "Integration test PASSED" diff --git a/synapse-backupper b/synapse-backupper new file mode 100755 index 0000000000000000000000000000000000000000..ceecc911576aa9d4e94c04ba8bf8551db9b7ed4f GIT binary patch literal 11728101 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�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 rk;Jax~>V*h=r$%AqT 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 %OS6_8O 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