From e7fa6c5a208347b0e5aa779b3ea477f5f1fe41c6 Mon Sep 17 00:00:00 2001 From: sigoden Date: Tue, 30 Apr 2024 00:25:35 +0000 Subject: refactor: improve code quality --- src/utils/crypto.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/utils/crypto.rs (limited to 'src/utils/crypto.rs') diff --git a/src/utils/crypto.rs b/src/utils/crypto.rs new file mode 100644 index 0000000..9f0ee82 --- /dev/null +++ b/src/utils/crypto.rs @@ -0,0 +1,35 @@ +use base64::{engine::general_purpose::STANDARD, Engine}; +use hmac::{Hmac, Mac}; +use sha2::{Digest, Sha256}; + +pub fn sha256(input: &str) -> String { + let mut hasher = Sha256::new(); + hasher.update(input); + format!("{:x}", hasher.finalize()) +} + +pub fn hmac_sha256(key: &[u8], msg: &str) -> Vec { + let mut mac = Hmac::::new_from_slice(key).expect("HMAC can take key of any size"); + mac.update(msg.as_bytes()); + mac.finalize().into_bytes().to_vec() +} + +pub fn hex_encode(bytes: &[u8]) -> String { + bytes + .iter() + .fold(String::new(), |acc, b| acc + &format!("{:02x}", b)) +} + +pub fn encode_uri(uri: &str) -> String { + uri.split('/') + .map(|v| urlencoding::encode(v)) + .collect::>() + .join("/") +} + +pub fn base64_encode>(input: T) -> String { + STANDARD.encode(input) +} +pub fn base64_decode>(input: T) -> Result, base64::DecodeError> { + STANDARD.decode(input) +} -- cgit v1.2.3