5 个版本
0.1.4 | 2024年6月22日 |
---|---|
0.1.3 | 2024年6月19日 |
0.1.2 | 2024年6月12日 |
0.1.1 | 2024年6月12日 |
0.1.0 | 2024年6月12日 |
2383 在 密码学 中排名
每月下载量 45
29KB
449 行
⚠️ 警告:不再维护 ⚠️
已被 hmac-serialiser 取代
新的库,hmac-serialiser,使用了来自 RustCrypto 的实现,该实现完全使用 Rust 实现,而不是依赖于使用汇编、C 和 Rust 混合实现的 ring 库。
hmac-serialiser-rs
HMAC 序列化器,用于对数据进行加密签名,类似于 Python 的 ItsDangerous 库,但使用 Rust 实现。
这主要是为了开发者,他们希望签名的数据比 JSON Web Tokens (JWT) 更短,因为数据可能太长,不适合他们的用例。
这个 HMAC 序列化器受 Python 的 ItsDangerous 库的启发,并产生一个输出结构 <payload>.<signature>
,而 JWT 则产生 <header>.<payload>.<signature>
。
最后但同样重要的是,底层的 HMAC 和 HKDF 实现来自 ring 库,而数据序列化和反序列化来自 serde 库。
然后使用 base64 库对签名数据进行编码或解码。
示例用法
use hmac_serialiser_rs::{HmacSigner, KeyInfo, Data, Encoder, algorithm::Algorithm};
use chrono::{DateTime, Utc};
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, Debug)]
struct TestData {
#[serde(with = "chrono::serde::ts_seconds")]
exp: DateTime<Utc>,
data: String,
}
impl Data for TestData {
fn get_exp(&self) -> Option<chrono::DateTime<Utc>> {
Some(self.exp)
}
}
fn main() {
// KeyInfo will expand your key to the required length based on the algorithm. Hence, the unwrap().
let signer = HmacSigner::new(
KeyInfo {
b"secret-key".to_vec(),
b"salt".to_vec(),
b"app-context".to_vec(), // Note: You can use vec![] for optional parameters.
},
Algorithm::SHA256,
Encoder::UrlSafe,
);
let data = TestData {
exp: Utc::now() + Duration::hours(1),
data: "Hello World".to_string(),
};
let signed_data = signer.sign(&data);;
println!("Signed Data: {}", signed_data);
// Note: You could also do `let data: Type = ...`
let verified_data = match signer.unsign::<TestData>(&signed_data) {
Ok(data) => data,
Err(e) => {
println!("Invalid token: {:?}", e);
return;
}
};
println!("Verified Data: {:?}", verified_data);
}
依赖项
~7–16MB
~291K SLoC