gost-crypto
Pure-Rust реализация российских криптографических стандартов, совместимая с экосистемой RustCrypto.
Pure-Rust implementation of Russian cryptographic standards, compatible with the RustCrypto ecosystem.
Алгоритмы / Algorithms
| Алгоритм | Тип | Feature |
|---|---|---|
| GOST 28147-89 (RFC 5830) | Блочный шифр, 64-бит блок, 256-бит ключ | всегда |
| GOST R 34.11-94 (RFC 5831) | Хэш 256-бит, параметры CryptoPro и Test | всегда |
| CMAC / OMAC | MAC поверх GOST 28147-89 | mac |
| GOST R 34.11-2012 Стрибог (RFC 6986) | Хэш 256 / 512-бит | streebog |
| Кузнечик GOST R 34.12-2015 (RFC 7801) | Блочный шифр, 128-бит блок, 256-бит ключ | kuznyechik |
no_std- Нет
unsafeкода / Nounsafecode - Нет зависимостей времени выполнения / No runtime dependencies
Cargo.toml
[]
= "0.2"
# Опционально / Optional:
= { = "0.2", = ["mac"] }
= { = "0.2", = ["streebog"] }
Примеры / Examples
GOST 28147-89 — шифрование блока / block encryption
use ;
let key = ;
let cipher = with_sbox;
let plaintext = ;
let ciphertext = cipher.encrypt_block_raw;
let recovered = cipher.decrypt_block_raw;
assert_eq!;
Для режимов CBC / CFB / OFB используйте внешние крейты из RustCrypto (cbc, cfb-mode, ofb) — Gost28147 реализует cipher::BlockCipherEncrypt + BlockCipherDecrypt + KeyInit.
For CBC / CFB / OFB modes use RustCrypto mode crates (cbc, cfb-mode, ofb) — Gost28147 implements cipher::BlockCipherEncrypt + BlockCipherDecrypt + KeyInit.
GOST R 34.11-94 — хэш / hash
use ;
use Update;
let mut h = new_with_sbox;
h.update;
let digest: = h.finalize_bytes;
CMAC (feature mac)
use Gost28147Mac;
use Mac;
let mut mac = new;
mac.update;
let tag = mac.finalize.into_bytes;
Kuznyechik (feature kuznyechik)
= { = "0.2", = ["kuznyechik"] }
use Kuznyechik;
use ;
let key = ;
let c = new;
let mut block = ;
c.encrypt_block;
Cipher Modes / Режимы шифрования
Gost28147 implements standard RustCrypto traits, so any cipher v0.4-compatible mode crate works:
[]
= "0.2"
= "0.1"
use Gost28147;
use Encryptor;
use ;
let enc = new;
let ct = enc.;
S-боксы / S-boxes
Два встроенных параметра:
| Константа | Назначение |
|---|---|
SBOX_CRYPTOPRO |
КриптоПро CSP, RFC 4357 §11.2 |
SBOX_TEST |
RFC 5831 тестовые векторы |
KeyInit::new использует SBOX_CRYPTOPRO. Для другого S-бокса — Gost28147::with_sbox.
KeyInit::new defaults to SBOX_CRYPTOPRO. Use Gost28147::with_sbox for a custom S-box.