1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#![allow(non_snake_case)]

#[allow(dead_code)]
#[warn(unused_imports)]
#[warn(unused_variables)]
#[warn(unused_must_use)]
#[cfg(target_os = "linux")]
pub mod cstatic;

#[cfg(target_os = "windows")]
pub mod dynamic;

/// 生成国密sm2密钥对,运行目录下私钥sk.pem,公钥pk.pem

/// # Examples

/// ```

/// GenKeyPair();

/// ```

#[cfg(target_os = "windows")]
pub fn GenKeyPair() -> anyhow::Result<String> {
    let b = dynamic::sm2::GenKeyPair();
    b
}

#[cfg(target_os = "linux")]
pub fn GenKeyPair() -> anyhow::Result<String> {
    let b = cstatic::tools::genKeyPair();
    b
}

/// sm2 加密

/// # Examples

/// ```

/// let pk="./pk.pem";

/// let sk="./sk.pem";

/// let enc=Sm2Enc(pk,"testmsg");

/// let dec=Sm2Dec(sk,&enc);

/// ```


#[cfg(target_os = "windows")]
pub fn Sm2Enc(pk: &str, msg: &str) -> anyhow::Result<String> {
    let c = dynamic::sm2::Sm2Enc(pk, msg);
    c
}
#[cfg(target_os = "linux")]
pub fn Sm2Enc(pk: &str, msg: &str) -> anyhow::Result<String> {
    let c = cstatic::tools::sm2Enc(pk, msg);
    c
}
/// sm2 解密


#[cfg(target_os = "windows")]
pub fn Sm2Dec(sk: &str, msg: &str) -> anyhow::Result<String> {
    let c = dynamic::sm2::Sm2Dec(sk, msg);
    c
}
#[cfg(target_os = "linux")]
pub fn Sm2Dec(sk: &str, msg: &str) -> anyhow::Result<String> {
    let c = cstatic::tools::sm2Dec(sk, msg);
    c
}
/// sm2 签名

/// # Examples

/// ```

/// let pk="./pk.pem";

/// let sk="./sk.pem";

/// let sign=Sm2Sign(sk,"testmsg");

/// let istrue=Sm2Verify(pk,"testmsg",&sign);

/// ```

#[cfg(target_os = "windows")]
pub fn Sm2Sign(sk: &str, msg: &str) -> anyhow::Result<String> {
    let c = dynamic::sm2::Sm2Sign(sk, msg);
    c
}
#[cfg(target_os = "linux")]
pub fn Sm2Sign(sk: &str, msg: &str) -> anyhow::Result<String> {
    let c = cstatic::tools::sm2Sign(sk, msg);
    c
}
/// sm2  验签

#[cfg(target_os = "windows")]
pub fn Sm2Verify(pk: &str, msg: &str, sign: &str) -> anyhow::Result<String> {
    let c = dynamic::sm2::Sm2Verify(pk, msg, sign);
    c
}
#[cfg(target_os = "linux")]
pub fn Sm2Verify(pk: &str, msg: &str, sign: &str) -> anyhow::Result<String> {
    let c = cstatic::tools::sm2Verify(pk, msg, sign);
    c
}
/// sm3 摘要加密

/// # Examples

/// ```

/// let enc=Sm3("testmsg");

/// ```

#[cfg(target_os = "windows")]
pub fn Sm3(msg: &str) -> anyhow::Result<String> {
    let c = dynamic::sm3::Sm3(msg);
    c
}
#[cfg(target_os = "linux")]
pub fn Sm3(msg: &str) -> anyhow::Result<String> {
    let c = cstatic::tools::sm3(msg);
    c
}
/// sm4 加密

/// # Examples

/// ```

/// let k = "1234567890abcdef";

/// let enc=Sm4Enc(k,"testmsg");

/// let dec=SmeDec(k,&enc);

/// ```

#[cfg(target_os = "windows")]
pub fn Sm4Enc(k: &str, msg: &str) -> anyhow::Result<String> {
    let c = dynamic::sm4::Sm4Enc(k, msg);
    c
}
#[cfg(target_os = "linux")]
pub fn Sm4Enc(k: &str, msg: &str) -> anyhow::Result<String> {
    let c = cstatic::tools::sm4Enc(k, msg);
    c
}
/// sm4 解密

#[cfg(target_os = "windows")]
pub fn Sm4Dec(k: &str, msg: &str) -> anyhow::Result<String> {
    let c = dynamic::sm4::Sm4Dec(k, msg);
    c
}
#[cfg(target_os = "linux")]
pub fn Sm4Dec(k: &str, msg: &str) -> anyhow::Result<String> {
    let c = cstatic::tools::sm4Dec(k, msg);
    c
}
///Hi for test

#[cfg(target_os = "windows")]
pub fn Hi() -> anyhow::Result<()> {
    dynamic::tools::Hi();
    Ok(())
}

#[cfg(target_os = "linux")]
pub fn Hi() -> anyhow::Result<()> {
    cstatic::tools::hi();
    Ok(())
}