summaryrefslogtreecommitdiff
path: root/client-native-lib/src/crypto.rs
diff options
context:
space:
mode:
Diffstat (limited to 'client-native-lib/src/crypto.rs')
-rw-r--r--client-native-lib/src/crypto.rs18
1 files changed, 13 insertions, 5 deletions
diff --git a/client-native-lib/src/crypto.rs b/client-native-lib/src/crypto.rs
index b477859..ad36e02 100644
--- a/client-native-lib/src/crypto.rs
+++ b/client-native-lib/src/crypto.rs
@@ -12,16 +12,19 @@ use log::info;
pub struct Key(Aes256Gcm);
+const CRYPTO_SALT: &'static str = "keksmeet/cryptosaltAAA==";
+const HASH_SALT: &'static str = "keksmeet/roomhashsaltA==";
+
impl Key {
pub fn derive(secret: &str) -> Self {
info!("running key generation...");
let salt = base64::engine::general_purpose::STANDARD
- .decode("thisisagoodsaltAAAAAAA==")
+ .decode(CRYPTO_SALT)
.unwrap();
- let mut key = [0u8; 32];
- fastpbkdf2::pbkdf2_hmac_sha256(secret.as_bytes(), salt.as_slice(), 250000, &mut key);
+ let mut key = [0u8; 64];
+ fastpbkdf2::pbkdf2_hmac_sha512(secret.as_bytes(), salt.as_slice(), 250000, &mut key);
- let key = Aes256Gcm::new_from_slice(key.as_slice()).unwrap();
+ let key = Aes256Gcm::new_from_slice(&key[0..32]).unwrap();
info!("done");
Self(key)
@@ -43,5 +46,10 @@ impl Key {
}
pub fn hash(secret: &str) -> String {
- sha256::digest(format!("also-a-very-good-salt{}", secret))
+ let salt = base64::engine::general_purpose::STANDARD
+ .decode(HASH_SALT)
+ .unwrap();
+ let mut key = [0u8; 64];
+ fastpbkdf2::pbkdf2_hmac_sha512(secret.as_bytes(), salt.as_slice(), 250000, &mut key);
+ hex::encode(&key[0..32])
}