#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
export_key6_cert.py — Витягує публічний сертифікат шифрування з Key-6.dat
Запускати на VPS: python3 /var/www/diia/export_key6_cert.py

Результат: файл /var/www/diia/Key-6-encrypt.cer (надіслати команді Діа)
"""

import sys
import os
import base64

# ─── Шляхи на VPS ────────────────────────────────────────────────────────────
IIT_MODULES_DIR    = "/var/www/diia/iit_modules/modules/64"
EUSIGN_DIR         = "/var/www/diia"
KEY_FILE           = "/var/www/diia/iit_modules/pkey/Key-6.dat"
KEY_PASSWORD       = "12345677"
CAS_FILE           = "/var/www/diia/iit_modules/settings/CAs.Test.json"
CA_CERTS_FILE      = "/var/www/diia/iit_modules/certificates/CACertificates.Test.p7b"
ISSUER_CN          = 'Тестовий ЦСК АТ "ІІТ"'
OUTPUT_CERT_FILE   = "/var/www/diia/Key-6-encrypt.cer"
# ─────────────────────────────────────────────────────────────────────────────

def check_paths():
    missing = []
    for path in [KEY_FILE, CAS_FILE, CA_CERTS_FILE]:
        if not os.path.exists(path):
            missing.append(path)
    if missing:
        print("ERROR: файли не знайдені:")
        for p in missing:
            print(f"  {p}")
        sys.exit(1)

def main():
    check_paths()

    # Додаємо шляхи до бібліотек
    sys.path.insert(0, IIT_MODULES_DIR)
    sys.path.insert(0, EUSIGN_DIR)

    from eusign import EUSign

    print("Ініціалізація IIT бібліотеки...")
    eu = EUSign()
    eu.initialize(
        CAS_FILE, CA_CERTS_FILE,
        KEY_FILE, None, None, KEY_PASSWORD,
        None, ISSUER_CN
    )
    print("Ключ завантажено успішно.")

    # pk_env_cert — сертифікат шифрування (EU_KEY_USAGE_KEY_AGREEMENT)
    # вже витягнутий під час initialize() у __read_private_key()
    cert_bytes = eu.pk_env_cert

    if not cert_bytes:
        print("ERROR: сертифікат шифрування не знайдений у ключі.")
        sys.exit(1)

    # Зберегти як .cer файл (DER бінарний формат)
    with open(OUTPUT_CERT_FILE, "wb") as f:
        f.write(cert_bytes)
    print(f"Сертифікат збережено: {OUTPUT_CERT_FILE}")
    print(f"Розмір: {len(cert_bytes)} байт")

    # Надрукувати base64 для копіпасту
    cert_b64 = base64.b64encode(cert_bytes).decode()
    print()
    print("=" * 60)
    print("Base64 сертифікат (для передачі команді Діа):")
    print("=" * 60)
    print(cert_b64)
    print("=" * 60)
    print()
    print("Також можна передати файл:", OUTPUT_CERT_FILE)

if __name__ == "__main__":
    main()
