Newmcpe/gost-crypto

GitHub: Newmcpe/gost-crypto

俄罗斯 GOST 密码标准的纯 Rust 实现,兼容 RustCrypto 生态,提供分组加密、哈希和 MAC 功能。

Stars: 0 | Forks: 0

# gost-crypto 俄罗斯密码标准的 Pure-Rust 实现,兼容 [RustCrypto] 生态系统。 俄罗斯密码标准的 Pure-Rust 实现,兼容 [RustCrypto] 生态系统。 ## 算法 / Algorithms | 算法 | 类型 | Feature | |----------|-----|---------| | GOST 28147-89 ([RFC 5830]) | 分组密码,64 位分组,256 位密钥 | 总是启用 | | GOST R 34.11-94 ([RFC 5831]) | 哈希 256 位,CryptoPro 和 Test 参数 | 总是启用 | | CMAC / OMAC | 基于 GOST 28147-89 的 MAC | `mac` | | GOST R 34.11-2012 Streebog ([RFC 6986]) | 哈希 256 / 512 位 | `streebog` | | Kuznyechik GOST R 34.12-2015 ([RFC 7801]) | 分组密码,128 位分组,256 位密钥 | `kuznyechik` | - `no_std` - 没有 `unsafe` 代码 / No `unsafe` code - 没有运行时依赖 / No runtime dependencies ## Cargo.toml ``` [dependencies] gost-crypto = "0.2" # 可选 / Optional: gost-crypto = { version = "0.2", features = ["mac"] } gost-crypto = { version = "0.2", features = ["streebog"] } ``` ## 示例 / Examples ### GOST 28147-89 — 分组加密 / block encryption ``` use gost_crypto::{Gost28147, SBOX_CRYPTOPRO}; let key = [0x42u8; 32]; let cipher = Gost28147::with_sbox(&key, &SBOX_CRYPTOPRO); let plaintext = [1u8, 2, 3, 4, 5, 6, 7, 8]; let ciphertext = cipher.encrypt_block_raw(&plaintext); let recovered = cipher.decrypt_block_raw(&ciphertext); assert_eq!(plaintext, recovered); ``` 对于 CBC / CFB / OFB 模式,请使用 RustCrypto 中的外部 crate(`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 gost_crypto::{Gost341194, SBOX_CRYPTOPRO}; use digest::Update; let mut h = Gost341194::new_with_sbox(&SBOX_CRYPTOPRO); h.update(b"hello"); let digest: [u8; 32] = h.finalize_bytes(); ``` ### CMAC (功能 `mac`) ``` use gost_crypto::mac::Gost28147Mac; use digest::Mac; let mut mac = Gost28147Mac::new(&[0x42u8; 32].into()); mac.update(b"message"); let tag = mac.finalize().into_bytes(); ``` ### Kuznyechik (功能 `kuznyechik`) ``` gost-crypto = { version = "0.2", features = ["kuznyechik"] } ``` ``` use gost_crypto::kuznyechik::Kuznyechik; use gost_crypto::kuznyechik::cipher::{KeyInit, BlockCipherEncrypt}; let key = [0x42u8; 32]; let c = Kuznyechik::new(&key.into()); let mut block = [0u8; 16]; c.encrypt_block((&mut block).into()); ``` ## 密码模式 / Cipher Modes `Gost28147` 实现了标准的 `RustCrypto` traits,因此任何兼容 cipher v0.4 的模式 crate 都可以工作: ``` [dependencies] gost-crypto = "0.2" cbc = "0.1" ``` ``` use gost_crypto::Gost28147; use cbc::Encryptor; use cipher::{KeyIvInit, BlockEncryptMut, block_padding::Pkcs7}; let enc = Encryptor::::new(&key.into(), &iv.into()); let ct = enc.encrypt_padded_vec_mut::(plaintext); ``` ## S-盒 / S-boxes 两个内置参数: | 常量 | 用途 | |-----------|-----------| | `SBOX_CRYPTOPRO` | 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. ## 许可证 / License [WTFPL](LICENSE)
标签:CBC, CFB, CMAC, DNS 反向解析, GOST, GOST 28147-89, GOST R 34.11-94, HTTP工具, Kuznyechik, no_std, OFB, POC验证, Rust, RustCrypto, Streebog, S盒, 俄罗斯加密标准, 分组密码, 加密库, 可视化界面, 后量子密码学, 哈希函数, 国密算法, 子域名变形, 密码学, 嵌入式安全, 库兹涅奇克, 手动系统调用, 数据加密, 本体建模, 消息认证码, 网络安全, 网络流量审计, 解密, 软件库, 通知系统, 隐私保护