spdb-sm2

Crates.iospdb-sm2
lib.rsspdb-sm2
version
sourcesrc
created_at2024-12-06 08:33:41.755419
updated_at2024-12-30 10:32:34.279546
description浦发银行API国密算法
homepage
repositoryhttps://gitea.1000duo.cn/qianduo/spdb-sm2.git
max_upload_size
id1474040
Cargo.toml error:TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
尹旭 (yinxu46)

documentation

README

浦发银行API国密算法

主要依赖库:

smcrypto库生成密钥对、报文加解密

libsm库进行改造自定义签名

efficient-sm2库进行验签

密钥对生成

use spdb_sm2;

fn generate_keypair () {
    // 密钥对
    // sk: 06f205b3001f2da937238fc3c08312b2dae1fc75f31d57863e86b35bcaf3bfcd
    // pk: 0499046e685a996b83f2a64d945d09e5505f1d3fd081991426e46dc158d7c397c64e9a0c3ddb6f1b788507b984a84391e192e4dfb2577ab36e8c67da718e33c097
    let (sk, pk) = spdb_sm2::generate_keypair();
}

签名与验签

use spdb_sm2;

fn sign_and_verify () {
    let msg = r#"hello world"#;
    let pk = "04ff055e4349345eba0fc69362f483f4f408d876dda2520e8e424e81978129da56b19587538253a2406d035a8d9981efeeac60ec72b3308b9a07a5398b61d3d189";
    let sk = "6d7964184b735645ef49b3c1ee5a2c2efdbd15d6c9d851c57eef341ed0e1eb1b";
    let secret = "ZTPkMS00ZNTP5NzPwNjAu";

    // 全报文签名
    // MzA0NjAyMjEwMDgwMGM3NDg0NTlkZDQ2MTdlMzMzNWM3OGRjNDJlOGFjZWU0OTg5YmYwYjk2NzFmYWYzZjkxN2ZkNmU0NGFhOTkwMjIxMDBjOGM2YjhiZjI5NzRmNzljYWE3Mjc4MzZjZjgwMTc2MzI0YmI1YjkxZDFkYWQzNjIzMWQyODA2MDVhZTNhNDYy
    let signature = spdb_sm2::sign(msg.as_bytes(), pk, sk).unwrap();

    // 验签签名
    // true
    let verify = spdb_sm2::verify(msg.as_bytes(), pk, &signature).unwrap();

    // 普通签名
    // ZTVlOGU0YzZmYjk0N2JiZDQxNDdmZjgyNTgwYTVhMzgxMjVmN2U5M2Q1MzA0NTg2YmJkNjljMmJiYWZlNWMyZWZlY2JiOWI0YmQzNWQ1YWE3OTZlYTkzY2Q0M2RmNmM2ZGEyMzA1NGJiOTEzMTJmMDE5YzI2YzVjOTZhYWVmYmNmMzkwYjMzZTNlY2Q3MzQzMjMwNWM1YzYzNTQ3ZmI0OQ==
    let signature = spdb_sm2::sign_body(msg, secret).unwrap();
}

加密与解密

use spdb_sm2;
fn encrypt_and_decrypt () {
    let msg = r#"hello world"#;
    let secret = "ZTPkMS00ZNTP5NzPwNjAu";

    // 加密
    // M2YyZWFlOTU4MzBkZTUxMGQyOTNjNmUzYzA1ODg2NjM=
    let encrypt_data = encrypt(msg, secret).unwrap();

    // 解密
    // decrypt_data == msg
    let decrypt_data = decrypt(&encrypt_data, secret).unwrap();
}

RSA公钥验签

use spdb_sm2;
fn rsa_verify () {
    let msg = r#"hello world"#;
    let pk = "-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----";
    let signature = "signature";
    let verify = spdb_sm2::rsa_verify(msg.as_bytes(), pk.as_bytes(), signature).unwrap();
}
Commit count: 0

cargo fmt