forked from
rocksky.app/rocksky
A decentralized music tracking and discovery platform built on AT Protocol 馃幍
1use std::env;
2
3use aes::{
4 cipher::{KeyIvInit, StreamCipher},
5 Aes256,
6};
7use anyhow::Error;
8use hex::decode;
9
10type Aes256Ctr = ctr::Ctr64BE<Aes256>;
11
12pub fn decrypt_aes_256_ctr(encrypted_text: &str, key: &[u8]) -> Result<String, Error> {
13 let iv = decode(env::var("SPOTIFY_ENCRYPTION_IV")?)?;
14 let ciphertext = decode(encrypted_text)?;
15
16 let mut cipher =
17 Aes256Ctr::new_from_slices(key, &iv).map_err(|_| Error::msg("Invalid key or IV"))?;
18 let mut decrypted_data = ciphertext.clone();
19 cipher.apply_keystream(&mut decrypted_data);
20
21 Ok(String::from_utf8(decrypted_data)?)
22}