#[cfg(all(
feature = "crypto-hmac-builtins",
any(
feature = "crypto-md5-builtins",
feature = "crypto-sha1-builtins",
feature = "crypto-sha2-builtins"
)
))]
pub mod hmac {
use anyhow::Result;
use hmac::{Hmac, Mac};
#[cfg(feature = "crypto-md5-builtins")]
#[tracing::instrument(name = "crypto.hmac.md5", err)]
pub fn md5(x: String, key: String) -> Result<String> {
let mut mac = Hmac::<md5::Md5>::new_from_slice(key.as_bytes())?;
mac.update(x.as_bytes());
let res = mac.finalize();
Ok(hex::encode(res.into_bytes()))
}
#[cfg(feature = "crypto-sha1-builtins")]
#[tracing::instrument(name = "crypto.hmac.sha1", err)]
pub fn sha1(x: String, key: String) -> Result<String> {
let mut mac = Hmac::<sha1::Sha1>::new_from_slice(key.as_bytes())?;
mac.update(x.as_bytes());
let res = mac.finalize();
Ok(hex::encode(res.into_bytes()))
}
#[cfg(feature = "crypto-sha2-builtins")]
#[tracing::instrument(name = "crypto.hmac.sha256", err)]
pub fn sha256(x: String, key: String) -> Result<String> {
let mut mac = Hmac::<sha2::Sha256>::new_from_slice(key.as_bytes())?;
mac.update(x.as_bytes());
let res = mac.finalize();
Ok(hex::encode(res.into_bytes()))
}
#[cfg(feature = "crypto-sha2-builtins")]
#[tracing::instrument(name = "crypto.hmac.sha512", err)]
pub fn sha512(x: String, key: String) -> Result<String> {
let mut mac = Hmac::<sha2::Sha512>::new_from_slice(key.as_bytes())?;
mac.update(x.as_bytes());
let res = mac.finalize();
Ok(hex::encode(res.into_bytes()))
}
}
#[cfg(all(
feature = "crypto-digest-builtins",
any(
feature = "crypto-md5-builtins",
feature = "crypto-sha1-builtins",
feature = "crypto-sha2-builtins"
)
))]
pub mod digest {
use digest::Digest;
#[cfg(feature = "crypto-md5-builtins")]
#[tracing::instrument(name = "crypto.md5")]
pub fn md5(x: String) -> String {
let mut hasher = md5::Md5::new();
hasher.update(x.as_bytes());
let res = hasher.finalize();
hex::encode(res)
}
#[cfg(all(feature = "crypto-digest-builtins", feature = "crypto-sha1-builtins"))]
#[tracing::instrument(name = "crypto.sha1")]
pub fn sha1(x: String) -> String {
let mut hasher = sha1::Sha1::new();
hasher.update(x.as_bytes());
let res = hasher.finalize();
hex::encode(res)
}
#[cfg(all(feature = "crypto-digest-builtins", feature = "crypto-sha2-builtins"))]
#[tracing::instrument(name = "crypto.sha256")]
pub fn sha256(x: String) -> String {
let mut hasher = sha2::Sha256::new();
hasher.update(x.as_bytes());
let res = hasher.finalize();
hex::encode(res)
}
}
pub mod x509 {
use std::collections::HashMap;
use anyhow::{bail, Result};
type X509 = HashMap<String, serde_json::Value>;
type Jwk = HashMap<String, serde_json::Value>;
#[tracing::instrument(name = "crypto.x509.parse_and_verify_certificates", err)]
pub fn parse_and_verify_certificates(certs: String) -> Result<(bool, Vec<X509>)> {
bail!("not implemented");
}
#[tracing::instrument(name = "crypto.x509.parse_certificate_request", err)]
pub fn parse_certificate_request(csr: String) -> Result<X509> {
bail!("not implemented");
}
#[tracing::instrument(name = "crypto.x509.parse_certificates", err)]
pub fn parse_certificates(certs: String) -> Result<Vec<X509>> {
bail!("not implemented");
}
#[tracing::instrument(name = "crypto.x509.parse_rsa_private_key", err)]
pub fn parse_rsa_private_key(pem: String) -> Result<Jwk> {
bail!("not implemented");
}
}