agate-crypto¶
Криптоагильность для Agate: подключаемые самоописывающиеся алгоритмы хеширования, подписи и AEAD.
agate-crypto — это общий поддомен (generic subdomain), опубликованный как
библиотека — не DDD shared kernel. Зависимость от него подобна зависимости
от ring или sha2: стабильная техническая возможность, а не разделяемая
доменная модель. Внутри он всё равно следует Clean Architecture, чтобы дизайн
оставался единообразным с крейтами ограниченных контекстов.
Ответственность¶
Предоставлять алгоритмы, которые подключаемы и самоописывающиеся: тег
алгоритма путешествует вместе с каждым Digest и Signature, так что
потребители (в частности, agate-audit) могут проверять материал
без внеполосного знания о том, каким алгоритмом он произведён.
- Хеши: SHA-2, SHA-3 и Streebog (ГОСТ Р 34.11-2012) — за фичефлагами.
- Подписи: Ed25519 (ГОСТ Р 34.10-2012 в планах).
- AEAD: AES-GCM, ChaCha20-Poly1305 и ГОСТовые Кузнечик / Магма в режиме MGM — за фичефлагами.
Хеширование и подпись — это чистые стратегии (трейты). Загрузка ключей — это I/O и живёт за портом, вне чистого ядра.
Язык домена¶
Digest,HashAlgo,Hasher— стратегия хеширования и её самоописывающийся вывод.Signature,SignAlgo,Signer,Verifier,KeyId— стратегия подписи.Aead,AeadAlgo,Nonce,Ciphertext,AssociatedData— аутентифицированное шифрование.SecretKey,CryptoError— общие типы значений/ошибок.
Слои¶
| Слой | Содержимое |
|---|---|
domain |
Чистый, без зависимостей: самоописывающиеся значения алгоритмов и трейты-стратегии (Hasher, Signer, Verifier, Aead). |
application |
Порты абстрактной фабрики (HasherFactory, SignatureFactory, AeadFactory) и тонкие сценарии над ними. |
infrastructure |
Конкретные бэкенды RustCrypto и фабрики (RustCryptoHasherFactory, RustCryptoSignatureFactory, RustCryptoAeadFactory, CryptoRegistry). |
Два основных паттерна — стратегия (трейты алгоритмов) и абстрактная фабрика (разрешение самоописывающегося алгоритма в стратегию).
Криптоагильность и эпохи Меркла¶
Одно дерево Меркла использует один алгоритм хеширования — эпоху. Переключение алгоритмов начинает новую эпоху, записываемую в подписанную вершину дерева. Поскольку тег алгоритма путешествует с каждым дайджестом, журнал аудита остаётся проверяемым через границы эпох. См. agate-audit.