#pragma once // ── Uzak politika (kill-switch / izin listesi) ─────────────────────────────── // Satıcının İSTEDİĞİ AN uzaktan izin verip engelleyebilmesi için imzalı politika // dosyası. Lisans .fkl'den AYRI bir kanaldır: satıcı küçük bir metin dosyasını // herhangi bir statik sunucuya (web host / GitHub Pages / S3) koyar; uygulama // açılışta + periyodik olarak çeker, ECDSA P-256 imzasını doğrular ve önbelleğe // yazar. Önbellek de imzalı olduğu için elle düzenlenemez → makine çevrimdışı // olsa bile SON BİLİNEN karar geçerli kalır (kalıcı kill-switch). // // Biçim (lisans gövdesiyle aynı kurallar: anahtar=değer, # yorum, son satır imza): // // # FikoCAD Uzak Politika v1 // surum=3 ← her değişiklikte ARTTIR (geri sarma koruması) // zaman=1756100000 ← unix saniye (bilgi amaçlı) // mod=engelli ← "engelli" = listedekiler KAPALI (varsayılan) // ← "izin" = YALNIZ listedekiler AÇIK (beyaz liste) // engelle=FKC-2026-0001 ← seri no (mod=engelli iken anlamlı) // izin=FKC-2026-0010 ← seri no (mod=izin iken anlamlı) // mesaj=Ödeme gecikmesi ← engellenen kullanıcıya gösterilecek ileti (ops.) // imza= ← araç ekler; ELLE EKLEME // // Güvenlik modeli lisansla aynıdır: karar yetkisi tamamen imzadan gelir. URL'yi // değiştirmek bir şeye yaramaz — saldırgan bizim özel anahtarımızla imza atamaz. #include #include #include #include "fiko/core/temel.hpp" namespace fiko { enum class UzakMod : u8 { EngelliListesi = 0, // kara liste: listedeki seriler ENGELLİ, diğerleri serbest IzinListesi // beyaz liste: YALNIZ listedeki seriler geçerli }; struct UzakPolitika { u64 surum = 0; i64 zaman = 0; UzakMod mod = UzakMod::EngelliListesi; std::vector engelliler; std::vector izinliler; std::string mesaj; }; enum class UzakPolitikaDurum : u8 { Gecerli = 0, Bicim, ImzaGecersiz }; const char* uzakPolitikaDurumMetni(UzakPolitikaDurum d); // Metni ayrıştır + imzayı doğrula. Kanonikleştirme lisansla AYNI fonksiyondur // (lisansKanonikGovde): BOM/CRLF/yorum farkları imzayı bozmaz. // surum ve zaman zorunlu; en az bir engelle=/izin= satırı beklenmez (boş politika // da geçerlidir — "herkese açık" ilan etmek için kullanılabilir). UzakPolitikaDurum uzakPolitikaCoz(std::string_view metin, std::string_view acikAnahtarHex, UzakPolitika& out, std::string& hata); enum class UzakKarar : u8 { Izinli = 0, Engelli, Belirsiz }; const char* uzakKararMetni(UzakKarar k); // Seri için karar. p == nullptr veya seri boşsa Belirsiz (bilgi yok → fail-open; // hiç denetim yapılamamış bir makineyi kilitlemek yanlış pozitif üretir). UzakKarar uzakPolitikaKarar(const UzakPolitika* p, const std::string& seri); } // namespace fiko