6个版本
0.2.5 | 2024年7月13日 |
---|---|
0.2.4 | 2024年7月12日 |
0.2.3 | 2024年1月2日 |
0.2.2 | 2023年12月23日 |
0.1.0 | 2023年12月16日 |
#531 in 密码学
每月265次下载
3MB
855 代码行
SM9
纯Rust实现的SM9基于身份的密码算法,根据中国国家标准GM/T 0044-2016以及ISO/IEC 11770定义。
用法
将sm9
包添加到Cargo.toml
中的依赖项
[dependencies]
sm9 = "0.2.5"
示例
(详见encryption.rs
的完整示例。)
use sm9::*;
let usr_id = b"Bob";
let txt = b"Chinese IBE standard";
let m = Sm9::encrypt("master_public_key.pem", usr_id, txt);
println!("{:02X?}", m);
let msg = Sm9::decrypt("bob_private_key.pem", usr_id, m).expect("decrypt error");
println!("{:02X?}", msg);
assert_eq!(msg.len(), txt.len());
assert_eq!(txt, msg.as_slice());
use std::fs;
let master_public_key =
fs::read_to_string("master_public_key.pem").expect("read master_public_key.pem error");
let m = Sm9::encrypt2(&master_public_key, usr_id, txt);
println!("{:02X?}", m);
let bob_private_key =
fs::read_to_string("bob_private_key.pem").expect("read bob_private_key.pem error");
let msg = Sm9::decrypt2(&bob_private_key, usr_id, m).expect("decrypt error");
println!("{:02X?}", msg);
assert_eq!(msg.len(), txt.len());
assert_eq!(txt, msg.as_slice());
(详见signature.rs
的完整示例。)
use sm9::*;
let m = b"Chinese IBS standard";
let user_id = b"Alice";
let sig = Sm9::sign(
"master_signature_public_key.pem",
"alice_signature_private_key.pem",
m,
);
println!("{:02X?}", sig.h_as_ref());
println!("{:02X?}", sig.s_as_ref());
assert!(Sm9::verify(
"master_signature_public_key.pem",
user_id,
m,
&sig
));
use std::fs;
let master_signature_public_key = fs::read_to_string("master_signature_public_key.pem")
.expect("read master_signature_public_key.pem error");
let alice_signature_private_key = fs::read_to_string("alice_signature_private_key.pem")
.expect("read alice_signature_private_key.pem error");
let sig = Sm9::sign2(
&master_signature_public_key,
&alice_signature_private_key,
m,
);
assert!(Sm9::verify2(&master_signature_public_key, user_id, m, &sig));
许可证
以下任一许可证
任选。
版权所有 2024 John-Yu。
作者
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献都将按上述方式双重许可,不附加任何额外的条款或条件。
依赖关系
~7MB
~42K SLoC