fcoin-rust-sdk 0.2.2

FCoin Rust SDK
Documentation

use super::base64;
use hmac::{Hmac, Mac};
use sha1::Sha1;

pub fn sign(method: &'static str,
           url: &str,
           timestamp: u64,
           keys: &mut Vec<String>,
           values: &mut Vec<String>,
           sk: &str) -> String {
    let mut sig = method.to_string();
    sig += &url;
    let t = timestamp.to_string();
    sig += &t;
    for x in 0..keys.len() {
        sig += &keys[x];
        sig += "=";
        sig += &values[x];
        sig += "&";
    }
    if sig.ends_with("&") {
        sig.pop();
    }
    let pre_hmac = base64::encode(&sig);
    dg(pre_hmac.as_bytes(), sk)
}

fn dg(bytes: &[u8], sk: &str) -> String {
    let mut mac = Hmac::<Sha1>::new(sk.as_bytes()).unwrap();
    mac.input(bytes);
    let hmac_bytes = mac.result().code();
    base64::encode(&hmac_bytes)
}

#[cfg(test)]
mod tests {

    use super::*;

    #[test]
    fn test_sig() {
        let t: u64 = 1523069544359;
        let mut keys: Vec<String> = vec!["amount".to_string(), "price".to_string(), "side".to_string(), "symbol".to_string(), "type".to_string()];
        let mut values: Vec<String> = vec!["100.0".to_string(), "100.0".to_string(), "buy".to_string(), "btcusdt".to_string(), "limit".to_string()];
        let r = sign("POST", "https://api.fcoin.com/v2/orders", t, &mut keys, &mut values, "3600d0a74aa3410fb3b1996cca2419c8");
        assert_eq!("DeP6oftldIrys06uq3B7Lkh3a0U=", r);
    }
}