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盒, 俄罗斯加密标准, 分组密码, 加密库, 可视化界面, 后量子密码学, 哈希函数, 国密算法, 子域名变形, 密码学, 嵌入式安全, 库兹涅奇克, 手动系统调用, 数据加密, 本体建模, 消息认证码, 网络安全, 网络流量审计, 解密, 软件库, 通知系统, 隐私保护