s3p-core 0.1.0

BlockNet S³P core: chunking, AEAD, RS erasure, Merkle
Documentation

S³P Core — Step A

Минимальное ядро для BlockNet S³P:

  • порезка на чанки;
  • шифрование XChaCha20-Poly1305 (через HKDF-SHA256);
  • код Рида–Соломона (GF(2^8)) для устойчивости к потерям;
  • Merkle root и проверки включения;
  • сквозной тест: encrypt → shard → потерять часть шардов → reconstruct → decrypt.

Требования

  • Rust (stable) и Cargo: https://www.rust-lang.org/ (на Windows установите также сборочные инструменты)
  • Интернет для скачивания crate-зависимостей при первой сборке.

Быстрый старт

unzip s3p-core-step-a.zip
cd s3p-core
cargo test

Ожидаемый результат — прохождение теста end_to_end_with_losses_and_merkle.

Структура проекта

s3p-core/
  Cargo.toml
  src/
    lib.rs
    errors.rs
    types.rs
    chunk.rs
    aead.rs
    rs.rs
    merkle.rs
  tests/
    step_a_pipeline.rs

Что именно проверяем

  • AEAD: данные шифруются/расшифровываются с AAD.
  • Erasure (RS): данные режутся на data+parity шардов; при потере до parity_shards всё восстанавливается.
  • Merkle: считаем корень и строим proof для произвольного листа; верификация проходит.
  • End-to-end: сборка исходного буфера полностью совпадает с оригиналом.

Полезные параметры

Откройте tests/step_a_pipeline.rs и правьте:

  • chunk_size — размер чанка (байт).
  • data_shards, parity_shards — параметры Рида–Соломона (чем больше parity, тем выше устойчивость).
  • уровень потерь — простая стохастика ~33% в примере; можно менять по своему сценарию.

Типичные проблемы

  • Windows MSVC: установите «Desktop development with C++» (Build Tools) для компиляции некоторых зависимостей.
  • Memory/Time: если тест долго идёт — уменьшите payload_len и/или chunk_size.

Что дальше (Step B)

  • Добавим слой преобразования (Identity→Walsh-Hadamard) и фонтанные пакеты (LT-style).
  • Опишем SeriesCommit и JSON-кодек, подготовим scid.
  • Интеграционные тесты с libp2p (Node.js harness).

Исправление ошибки chacha20poly1305

Если видите сообщение наподобие:

package s3p-core depends on chacha20poly1305 with feature xchacha20 but chacha20poly1305 does not have that feature

Просто используйте зависимость без фичи xchacha20 (в проекте уже поправлено):

chacha20poly1305 = "0.10"

Затем выполните:

cargo update
cargo clean
cargo test