gmsm 0.1.0

A Rust Library of China's Standards of Encryption Algorithms (SM2/3/4)
Documentation
use crate::g3::digest::{Digest, SIZE};

#[allow(dead_code)]
pub fn sm3_byte(data: &str) -> [u8; SIZE] {
    let string = String::from(data);
    let s = string.as_bytes();
    let mut dst = Digest::new();
    dst.reset();
    dst.write(s);
    dst.check_sum()
}

#[allow(dead_code)]
pub fn sm3_hex(data: &str) -> String {
    let buf = sm3_byte(data);
    hex::encode_upper(buf)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn lets_hash_1() {
        let hash_str = sm3_hex("abc");

        let hex_str = "66C7F0F462EEEDD9D1F2D46BDC10E4E24167C4875CF2F7A2297DA02B8F4BA8E0";

        assert_eq!(hash_str, hex_str);
    }

    #[test]
    fn lets_hash_2() {
        let hash_str = sm3_hex("abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd");

        let hex_str = "DEBE9FF92275B8A138604889C18E5A4D6FDB70E5387E5765293DCBA39C0C5732";

        assert_eq!(hash_str, hex_str);
    }

    #[test]
    fn lets_hex_1() {
        let hash = sm3_byte("abc");

        let standrad_hash: [u8; 32] = [
            0x66, 0xc7, 0xf0, 0xf4, 0x62, 0xee, 0xed, 0xd9, 0xd1, 0xf2, 0xd4, 0x6b, 0xdc, 0x10,
            0xe4, 0xe2, 0x41, 0x67, 0xc4, 0x87, 0x5c, 0xf2, 0xf7, 0xa2, 0x29, 0x7d, 0xa0, 0x2b,
            0x8f, 0x4b, 0xa8, 0xe0,
        ];

        for i in 0..32 {
            assert_eq!(standrad_hash[i], hash[i]);
        }
    }

    #[test]
    fn lets_hex_2() {
        let hash = sm3_byte("abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd");

        let standrad_hash: [u8; 32] = [
            0xde, 0xbe, 0x9f, 0xf9, 0x22, 0x75, 0xb8, 0xa1, 0x38, 0x60, 0x48, 0x89, 0xc1, 0x8e,
            0x5a, 0x4d, 0x6f, 0xdb, 0x70, 0xe5, 0x38, 0x7e, 0x57, 0x65, 0x29, 0x3d, 0xcb, 0xa3,
            0x9c, 0x0c, 0x57, 0x32,
        ];

        for i in 0..32 {
            assert_eq!(standrad_hash[i], hash[i]);
        }
    }
}