@mf/crypto (0.1.0)
Published 2026-07-20 06:36:28 +00:00 by lucky
Installation
@mf:registry=npm install @mf/crypto@0.1.0"@mf/crypto": "0.1.0"About this package
@mf/crypto — крипто-ядро клиента (TS-порт)
TS-порт Go-референса крипто-ядра (профиль MODERN, ADR-0001). Вся криптография
продукта живёт на клиенте (ADR-0002); Go-реализация в pkg/ — референс,
фиксирующий wire-формат, этот пакет обязан воспроизводить его бит-в-бит.
Слои (зеркалят Go-пакеты)
| TS-модуль | Go-референс | Что делает |
|---|---|---|
src/envelope.ts |
pkg/envelope |
wire-формат конверта: `MF |
src/provider.ts |
pkg/cryptoprovider |
интерфейс профилей + реестр |
src/modern.ts |
pkg/cryptoprovider/modern |
XChaCha20-Poly1305, sealed box (X25519+HKDF), Ed25519, BLAKE2b-256, HKDF-SHA-256, Argon2id |
src/keyring.ts |
pkg/keyring |
иерархия unlockers→UMK→identity→GK→DEK, доменные AAD mf/<domain>/v1|<context> |
src/stream.ts |
pkg/stream |
чанковый AEAD-контейнер для больших файлов (push-API update()/final()) |
src/shamir.ts |
pkg/shamir |
Shamir t-of-n в GF(2^8) для social recovery (§8.2) |
src/mnemonic.ts |
pkg/mnemonic |
recovery-фраза: BIP39-кодирование 256 бит ↔ 24 слова, rk = HKDF(entropy) (§8.1) |
src/wordlist-en.ts генерируется из pkg/mnemonic/wordlist/english.txt
(официальный BIP39, единый источник с Go): node scripts/gen-wordlist.cjs.
Зависимости и почему такие
- libsodium-wrappers (WASM): AEAD, X25519, Ed25519, BLAKE2b.
- @noble/hashes: HKDF-SHA-256 и Argon2id. Не libsodium, потому что
crypto_pwhashподдерживает только parallelism=1, а дефолт продукта —threads: 4(см.DEFAULT_PASSWORD_PARAMS); HKDF в libsodium отсутствует. - ESM-сборка libsodium-wrappers 0.7.x битая — нужен алиас на CJS-сборку
(см.
vitest.config.ts; бандлеру клиента понадобится такой же).
Использование
import { Keyring, Profile, ready } from "@mf/crypto";
await ready; // инициализация WASM — обязательна до любой операции
const kr = new Keyring(Profile.Modern);
Тесты и контракт совместимости
npm test # или: make test-ts из корня
Три уровня гарантий совместимости с Go:
test/vectors.test.ts— примитивы бит-в-бит поpkg/cryptoprovider/modern/testdata/vectors.json(единый источник, читается напрямую).test/interop.test.tsGo→TS — расшифровка полной иерархии ключей изtest/fixtures/go-interop.json(генерируетсяmake interop).test/interop.test.tsTS→Go — TS шифрует иерархию,go run ./tools/tsinterop -checkрасшифровывает (тест пропускается, если Go недоступен).
Регенерация фикстуры после осознанного изменения wire-формата: make interop.
Dependencies
Dependencies
| ID | Version |
|---|---|
| @noble/hashes | ^1.5.0 |
| libsodium-wrappers | ^0.7.15 |
Development Dependencies
| ID | Version |
|---|---|
| @types/libsodium-wrappers | ^0.7.14 |
| @types/node | ^22.0.0 |
| typescript | ^5.6.0 |
| vitest | ^2.1.0 |
Details
2026-07-20 06:36:28 +00:00
Assets (1)
Versions (1)
View all
npm
62
latest
37 KiB
crypto-0.1.0.tgz
37 KiB
0.1.0
2026-07-20