sqep 0.1.0

SQEP – Secure Quantum Encryption Protocol powered by ContiCrypt
Documentation
//! keygen.rs – SQEP+ License Generator (Private Use)
//! Author: Kaizen Raijin
//! Usage: Generates 7-day or 365-day license keys (Base64-encoded, signed)

use sha2::{Sha256, Digest};
use base64::{engine::general_purpose::STANDARD, Engine};
use chrono::{Utc, Duration};
use std::env;

/// Must match `LICENSE_SECRET` in license.rs
const SECRET_KEY: &str = "SQEP-AUTHOR-CERTIFIED";

fn main() {
    let args: Vec<String> = env::args().collect();
    if args.len() != 3 {
        eprintln!("Usage: {} <user_email> <days>", args[0]);
        eprintln!("Example: {} user@proton.me 365", args[0]);
        return;
    }

    let email = &args[1];
    let days: i64 = args[2].parse().expect("Invalid number of days");

    // License expiry as UNIX timestamp
    let expiry = Utc::now() + Duration::days(days);
    let expiry_ts = expiry.timestamp();

    // Payload to sign: email:timestamp
    let payload_str = format!("{}:{}", email, expiry_ts);

    // Sign payload with SECRET_KEY
    let mut hasher = Sha256::new();
    hasher.update(payload_str.as_bytes());
    hasher.update(SECRET_KEY.as_bytes());
    let signature = hasher.finalize();

    // Final license = Base64(payload + signature) :timestamp
    let combined = [&payload_str.as_bytes()[..], &signature[..]].concat();
    let license_base64 = STANDARD.encode(&combined);
    let license_final = format!("{}:{}", license_base64, expiry_ts);

    println!("\n===== SQEP+ LICENSE KEY =====\n{}\nValid until: {}\n==============================\n", license_final, expiry);
}