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-зависимостей при первой сборке.
Быстрый старт
Ожидаемый результат — прохождение теста 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 onchacha20poly1305
with featurexchacha20
butchacha20poly1305
does not have that feature
Просто используйте зависимость без фичи xchacha20
(в проекте уже поправлено):
= "0.10"
Затем выполните: