JaneDoe-ZS/nap_sdk/src/sdk_util.rs
2024-07-20 15:59:36 +03:00

26 lines
855 B
Rust

use rsa::{Pkcs1v15Encrypt, RsaPrivateKey};
use thiserror::Error;
const SDK_PRIVATE_KEY: &[u8] = include_bytes!("../security/sdk_private_key.der");
#[derive(Error, Debug)]
pub enum CryptoError {
#[error("failed to decrypt: {0}")]
DecryptFailed(#[from] rsa::Error),
#[error("failed to decode base64 string")]
FromBase64Failed,
#[error("from_utf8 failed: {0}")]
FromUtf8Failed(#[from] std::string::FromUtf8Error),
}
#[must_use]
pub fn rsa_decrypt(cipher: &str) -> Result<String, CryptoError> {
let private_key: RsaPrivateKey = rsa::pkcs8::DecodePrivateKey::from_pkcs8_der(SDK_PRIVATE_KEY)
.expect("failed to decode private key");
let payload = private_key.decrypt(
Pkcs1v15Encrypt,
&rbase64::decode(cipher).map_err(|_| CryptoError::FromBase64Failed)?,
)?;
Ok(String::from_utf8(payload)?)
}