use base64::{Engine as _, engine::general_purpose};
use clap::Parser;
use hmac::{Hmac, Mac};
use sha2::Sha256;
const VERSION: &str = env!("CARGO_PKG_VERSION");
#[derive(Parser, Debug)]
#[command(name = "generate_hmac")]
#[command(about = "Generate HMAC signatures")]
#[command(version = VERSION)]
struct Args {
#[arg(long)]
message: String,
#[arg(short, long, default_value_t = 32)]
bytes: usize,
}
fn main() -> anyhow::Result<()> {
let args = Args::parse();
let key_b64 = std::env::var("LICENSE_SIGNING_KEY")
.map_err(|_| anyhow::anyhow!("Missing LICENSE_SIGNING_KEY env variable"))?;
let key_bytes = general_purpose::URL_SAFE_NO_PAD.decode(key_b64.trim())?;
let mut mac = Hmac::<Sha256>::new_from_slice(&key_bytes)?;
mac.update(args.message.as_bytes());
let result = mac.finalize();
let encoded = general_purpose::URL_SAFE_NO_PAD.encode(result.into_bytes());
println!("{encoded}");
Ok(())
}