mega-security-rs 0.3.0

An implementation of Mega's security whitepaper
Documentation
use crate::PBKDF2_ITER_NUM;

use pbkdf2::pbkdf2_hmac;
use sha2::{Digest, Sha256, Sha512};

pub fn _compute_derived_key(salt_hash: &[u8], password: &str) -> Vec<u8> {
    let mut derived_key = [0u8; 32];
    pbkdf2_hmac::<Sha512>(password.as_bytes(), &salt_hash, PBKDF2_ITER_NUM, &mut derived_key);
    derived_key.to_vec()
}

pub fn _salt(id: &str, random_value: &[u8]) -> Vec<u8> {
    let mut hasher = Sha256::new();
    let mut padding = vec!['P' as u8; 200 - id.len()];

    let mut salt: Vec<u8> = Vec::new();
    salt.append(&mut id.as_bytes().to_vec());
    salt.append(&mut padding);
    salt.append(&mut random_value.to_vec());
            
    hasher.update(&salt);

    hasher.finalize().to_vec()
}