#配对 #尚米 #加密

sm9

SM9 (OSCCA GM/T 0044-2016),基于身份的密码学

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 密码学

Download history 1/week @ 2024-06-01 1/week @ 2024-06-29 78/week @ 2024-07-06 157/week @ 2024-07-13 5/week @ 2024-07-20 25/week @ 2024-07-27

每月265次下载

MIT/Apache

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