Documentation
extern crate libsm;
extern crate bip39;
extern crate num_bigint;

pub mod mc;
pub mod sm;

#[cfg(test)]
mod tests {
    use crate::mc::Mc;
    use crate::sm::Sm;

    #[test]
    fn mc_test1() {
        Mc::new_mnemonic();
    }

    #[test]
    fn sm_test1() {
        let b = Sm::new_master_key();
        println!("{} {}", b.0, b.1)
    }

    #[test]
    fn sm_test2() {
        let bytes = b"ced586c083cb59fe11b6bde0984a2411d471bcc564e9a8667c4c4c0b02cae9e7";
        let b = Sm::pri_to_pub(bytes);
        println!("{}", b)
    }

    #[test]
    fn sm_test3() {
        let pri_key = b"bf0a4549f58d1d436764b6d758a7aabd243081d0580efa04a6707d6950669d7d";
        let msg = b"123";
        let b = Sm::sign(pri_key, msg);
        println!("{}", b);
    }

    #[test]
    fn sm_test4() {
        let pub_key = b"039cae08b2f6f0d02cf600fd7f36698e07968571e9aa33006db24e5eb70aad6800";
        let msg = b"123";
        let signature = b"30450221008651c47d596cdcfc47875295ba77459f59afcb126efee5e0798f1ea5b8f58201022010cfbe005492eb3ac400c5ff9ec126624fb4826e41d438f28f9a5f5275c0751a";
        let sig = hex::decode(signature).unwrap();
        let _pub = hex::decode(pub_key).unwrap();
        let b = Sm::verify(msg, &_pub, &sig);
        println!("{:?}", b);
    }
}