File size: 7,037 Bytes
5822b43
 
 
 
80a5537
 
5822b43
6ba5005
5822b43
 
80a5537
5822b43
 
 
80a5537
6ba5005
5822b43
80a5537
 
 
 
 
 
6ba5005
2f3f31c
 
6ba5005
2f3f31c
 
 
6ba5005
 
 
 
80a5537
2f3f31c
6ba5005
 
 
 
2f3f31c
 
 
 
6ba5005
 
80a5537
2f3f31c
 
6ba5005
2f3f31c
6ba5005
80a5537
2f3f31c
6ba5005
 
 
 
 
80a5537
2f3f31c
6ba5005
2f3f31c
6ba5005
2f3f31c
 
6ba5005
 
 
 
 
2f3f31c
6ba5005
 
2f3f31c
6ba5005
 
2f3f31c
6ba5005
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80a5537
 
5822b43
b26c878
80a5537
 
 
 
5822b43
80a5537
6ba5005
5822b43
 
 
 
6ba5005
80a5537
5822b43
80a5537
 
5822b43
 
 
 
80a5537
5822b43
80a5537
 
b26c878
5822b43
 
 
80a5537
5822b43
6ba5005
5822b43
80a5537
2f3f31c
 
6ba5005
80a5537
22f2ea2
 
5822b43
6ba5005
 
22f2ea2
5822b43
 
6ba5005
 
 
 
5822b43
6ba5005
 
 
5822b43
6ba5005
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import os
import gradio as gr
import numpy as np
import hashlib
from fpdf import FPDF
from datetime import datetime

# --- 1. SETUP THUẬT TOÁN (Giữ nguyên) ---
SECRET_CODE = os.getenv("ES")
exec_context = {}
encrypt_fn = decrypt_fn = None
if SECRET_CODE:
    try:
        exec(SECRET_CODE, exec_context)
        encrypt_fn, decrypt_fn = exec_context.get('transform_byte'), exec_context.get('untransform_byte')
    except Exception as e: print(f"Error: {e}")

def get_file_sha256(file_path):
    h = hashlib.sha256()
    with open(file_path, 'rb') as f:
        while chunk := f.read(8192): h.update(chunk)
    return h.hexdigest()

# --- 2. HÀM THIẾT KẾ CHỨNG CHỈ SIÊU CẤP ---
class T4S_PDF(FPDF):
    def header(self):
        # Vẽ một thanh header màu xanh đậm
        self.set_fill_color(44, 62, 80)
        self.rect(0, 0, 297, 30, 'F')
        self.set_text_color(255, 255, 255)
        self.set_font("Helvetica", "B", 20)
        self.cell(0, 10, "TITANIUM4S - QUANTUM SECURE PROTOCOL", ln=True, align="C")
        self.set_font("Helvetica", "", 10)
        self.cell(0, 5, "Official Security Audit & Ownership Certificate", ln=True, align="C")

    def footer(self):
        self.set_y(-20)
        self.set_font("Helvetica", "I", 8)
        self.set_text_color(150, 150, 150)
        self.cell(0, 10, f"Issued by Titanium4S Zero-Trust Engine | Record ID: {hashlib.md5(str(datetime.now()).encode()).hexdigest()[:10].upper()}", align="C")

def create_detailed_pdf(file_name, sha_hash, password, output_path):
    pdf = T4S_PDF(orientation="L", unit="mm", format="A4")
    pdf.add_page()
    
    # 1. PHẦN THÔNG TIN FILE (Bố cục cột)
    pdf.ln(10)
    pdf.set_text_color(0, 0, 0)
    pdf.set_font("Helvetica", "B", 16)
    pdf.cell(0, 10, "1. PROTECTED ASSET IDENTITY", ln=True)
    pdf.set_line_width(0.5); pdf.set_draw_color(44, 62, 80); pdf.line(10, pdf.get_y(), 287, pdf.get_y())
    
    pdf.ln(5)
    pdf.set_font("Helvetica", "", 12)
    pdf.cell(40, 10, "Filename:", 0); pdf.set_font("Helvetica", "B", 12); pdf.cell(0, 10, file_name, ln=True)
    pdf.set_font("Helvetica", "", 12)
    pdf.cell(40, 10, "SHA-256 Fingerprint:", 0); pdf.set_font("Courier", "B", 10); pdf.cell(0, 10, sha_hash, ln=True)
    
    # 2. PHẦN CÔNG NGHỆ (Technology Overview)
    pdf.ln(10)
    pdf.set_font("Helvetica", "B", 16)
    pdf.cell(0, 10, "2. TECHNOLOGY SPECIFICATION", ln=True)
    pdf.set_line_width(0.5); pdf.line(10, pdf.get_y(), 287, pdf.get_y())
    
    pdf.ln(5)
    pdf.set_font("Helvetica", "", 11)
    tech_info = (
        "- Key Stretching: SHA-512 (10,000 Iterations) - Immunity against ASIC/GPU brute-force.\n"
        "- Cipher Core: Vectorized Non-linear Transformation (Proprietary ES Logic).\n"
        "- Protocol: Zero-Knowledge Proof (The system never stores your secret key)."
    )
    pdf.multi_cell(0, 7, tech_info)

    # 3. PHẦN MẬT KHẨU & CẢNH BÁO (Làm nổi bật)
    pdf.ln(10)
    pdf.set_fill_color(254, 249, 231) # Màu vàng nhạt cho vùng password
    pdf.rect(10, pdf.get_y(), 277, 25, 'F')
    pdf.set_y(pdf.get_y() + 5)
    pdf.set_font("Helvetica", "B", 14); pdf.set_text_color(192, 57, 43)
    pdf.cell(0, 5, "CRITICAL: YOUR SECRET KEY RECORD", ln=True, align="C")
    pdf.set_font("Courier", "B", 18)
    pdf.cell(0, 12, password, ln=True, align="C")

    # 4. LỜI NHẮC CỦA TITANIUM4S
    pdf.ln(15)
    pdf.set_text_color(44, 62, 80)
    pdf.set_font("Helvetica", "B", 12)
    pdf.cell(0, 10, "SECURITY COMPLIANCE & WARNINGS:", ln=True)
    pdf.set_font("Helvetica", "", 10)
    pdf.multi_cell(0, 6, (
        "1. This PDF is the only proof of ownership. If deleted, there is no backup on any server.\n"
        "2. The file .impossible is mathematically locked. Brute-forcing would take centuries with current hardware.\n"
        "3. Please store this certificate in a secure vault or an offline encrypted drive."
    ))

    # Đóng dấu "TOP SECRET" giả lập
    pdf.set_font("Helvetica", "B", 50)
    pdf.set_text_color(231, 76, 60)
    pdf.rotate(25, 200, 150)
    pdf.text(180, 180, "TOP SECRET")
    pdf.rotate(0)

    pdf.output(output_path)
    return output_path

# --- 3. LOGIC XỬ LÝ CHÍNH ---
def stretch_key(password):
    key = password.encode() + b"MinhDuc_Zero_Trust_Protocol"
    for _ in range(10000): key = hashlib.sha512(key).digest()
    return key[:32]

def process_file(file, password, mode, progress=gr.Progress()):
    if not encrypt_fn: return None, "❌ Secret ES Error!"
    master_key = np.frombuffer(stretch_key(password), dtype=np.uint8)
    input_path = file.name
    original_name = os.path.basename(input_path)
    is_encrypt = (mode == "Mã hóa")
    
    output_name = original_name + ".impossible" if is_encrypt else (original_name.replace(".impossible", "") if original_name.endswith(".impossible") else "rebuilt_" + original_name)
    output_path = os.path.join(os.path.dirname(input_path), output_name)
    file_size = os.path.getsize(input_path)
    chunk_size = 4 * 1024 * 1024
    bytes_processed = 0
    fn = encrypt_fn if is_encrypt else decrypt_fn

    try:
        file_hash = get_file_sha256(input_path) if is_encrypt else "N/A"
        with open(input_path, 'rb') as f_in, open(output_path, 'wb') as f_out:
            while True:
                chunk = f_in.read(chunk_size)
                if not chunk: break
                data_arr = np.frombuffer(chunk, dtype=np.uint8)
                indices = np.arange(bytes_processed, bytes_processed + len(data_arr), dtype=np.uint64)
                key_chunk = master_key[indices % 32]
                f_out.write(fn(data_arr, key_chunk, indices).astype(np.uint8).tobytes())
                bytes_processed += len(chunk)
                progress(bytes_processed / file_size, desc=f"Processing {mode}...")

        if is_encrypt:
            pdf_path = os.path.join(os.path.dirname(input_path), f"Audit_{original_name}.pdf")
            create_detailed_pdf(original_name, file_hash, password, pdf_path)
            return [output_path, pdf_path], "✅ Đã mã hóa & Xuất hồ sơ bảo mật!"
        
        return [output_path], "✅ Giải mã thành công!"
    except Exception as e: return None, f"❌ Lỗi: {str(e)}"

# --- 4. GIAO DIỆN ---
with gr.Blocks(theme=gr.themes.Monochrome(), title="Titanium4S Vault") as demo:
    gr.Markdown("# 🛡️ Titanium4S - Ultimate Audit Edition")
    with gr.Row():
        with gr.Column():
            inp_file = gr.File(label="Target File")
            inp_pass = gr.Textbox(label="Secret Key", type="password")
            inp_mode = gr.Radio(["Mã hóa", "Giải mã"], label="Mode", value="Mã hóa")
            btn = gr.Button("INITIALIZE PROTOCOL", variant="primary")
        with gr.Column():
            out_files = gr.File(label="Output Assets", file_count="multiple")
            status = gr.Textbox(label="System Status", interactive=False)
    btn.click(process_file, [inp_file, inp_pass, inp_mode], [out_files, status])

demo.queue(1).launch(ssr_mode=False)