forked from p7mj/Sierra-Security
90 lines
3.7 KiB
Python
90 lines
3.7 KiB
Python
import datetime
|
|
import hashlib
|
|
import uuid
|
|
import sys
|
|
import time
|
|
import os
|
|
import ctypes
|
|
|
|
# _____ _ _____ _ _
|
|
# / ___(_) / ___| (_) |
|
|
# \ `--. _ ___ _ __ _ __ __ _ \ `--. ___ ___ _ _ _ __ _| |_ _ _
|
|
# `--. \ |/ _ \ '__| '__/ _` | `--. \/ _ \/ __| | | | '__| | __| | | |
|
|
# /\__/ / | __/ | | | | (_| | /\__/ / __/ (__| |_| | | | | |_| |_| |
|
|
# \____/|_|\___|_| |_| \__,_| \____/ \___|\___|\__,_|_| |_|\__|\__, |
|
|
# __/ |
|
|
# Verification V. A-2 |___/
|
|
|
|
# --- ENABLE ANSI COLORS ON WINDOWS ---
|
|
if os.name == 'nt':
|
|
kernel32 = ctypes.windll.kernel32
|
|
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
|
|
|
|
# --- CONFIGURATION (Sync with Generation Script) ---
|
|
BASE_SALT = "D9_fX92_kL0_pP_SECRET_INTERCEPTOR_TOKEN"
|
|
TIMEFRAME_MINUTES = 15
|
|
|
|
def get_rolling_salt():
|
|
"""Generates a salt that changes every 24 hours (UTC)."""
|
|
date_string = datetime.datetime.now(datetime.timezone.utc).strftime("%Y%m%d")
|
|
return f"{BASE_SALT}:{date_string}"
|
|
|
|
def get_time_token():
|
|
"""Returns a time string rounded to the timeframe (UTC)."""
|
|
now = datetime.datetime.now(datetime.timezone.utc)
|
|
minutes = (now.minute // TIMEFRAME_MINUTES) * TIMEFRAME_MINUTES
|
|
rounded = now.replace(minute=minutes, second=0, microsecond=0)
|
|
return rounded.strftime("%Y-%m-%d %H:%M")
|
|
|
|
def generate_sierra_id(user_key: str):
|
|
time_token = get_time_token()
|
|
salt = get_rolling_salt()
|
|
raw_payload = f"{salt}:{time_token}:{user_key}"
|
|
hash_result = raw_payload.encode()
|
|
for _ in range(50000):
|
|
hash_result = hashlib.sha256(hash_result).digest()
|
|
return str(uuid.uuid5(uuid.NAMESPACE_OID, hash_result.hex()))
|
|
|
|
def print_header(subtitle="Verification"):
|
|
os.system('cls' if os.name == 'nt' else 'clear')
|
|
print("\033[91m" + "="*80)
|
|
print(r"""
|
|
_____ _ _____ _ _
|
|
/ ___(_) / ___| (_) |
|
|
\ `--. _ ___ _ __ _ __ __ _ \ `--. ___ ___ _ _ _ __ _| |_ _ _
|
|
`--. \ |/ _ \ '__| '__/ _` | `--. \/ _ \/ __| | | | '__| | __| | | |
|
|
/\__/ / | __/ | | | | (_| | /\__/ / __/ (__| |_| | | | | |_| |_| |
|
|
\____/|_|\___|_| |_| \__,_| \____/ \___|\___|\__,_|_| |_|\__|\__, |
|
|
__/ |
|
|
|___/
|
|
""" + f"--- {subtitle} V. A-2 ---".center(70))
|
|
print("="*80 + "\033[0m")
|
|
|
|
def verify_access():
|
|
print_header("Access Control")
|
|
print(f" \033[90mGlobal Sync (UTC): {get_time_token()}\033[0m\n")
|
|
chances = 3
|
|
while chances > 0:
|
|
print(f"\n[!] Attempts remaining: \033[93m{chances}\033[0m")
|
|
user_key = input(" > Enter Secret Key: ").strip()
|
|
provided_uuid = input(" > Enter Time-Locked UUID: ").strip()
|
|
print("\n[*] \033[96mVerifying cryptographic integrity...\033[0m")
|
|
correct_uuid = generate_sierra_id(user_key)
|
|
time.sleep(1.5)
|
|
if provided_uuid == correct_uuid:
|
|
print("\n[+] \033[92mAccess Granted...\033[0m")
|
|
return True
|
|
else:
|
|
chances -= 1
|
|
print("\n[-] \033[91mInvalid Key/UUID combination.\033[0m")
|
|
print("\n\033[41mCritical Failure: Access Denied.\033[0m")
|
|
sys.exit(1)
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
if verify_access():
|
|
print("\n[✓] Handshake Verified. Initializing.")
|
|
except KeyboardInterrupt:
|
|
print("\n\033[91mProcess Terminated.\033[0m")
|
|
sys.exit(1)
|