OpenPGP Key Manager - توليد وإدارة مفاتيح OpenPGP (AppImage)
  • TypeScript 82.2%
  • CSS 12.4%
  • JavaScript 5.2%
  • HTML 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
balnaimi 7838012617
All checks were successful
test / test (push) Successful in 21s
build-and-release / appimage (push) Successful in 34s
chore(release): v1.5.1
2026-09-10 07:48:45 +03:00
.forgejo/workflows feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
build feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
scripts feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
src feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
tests feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
.editorconfig feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
.gitignore chore: ignore .git-credentials in the repository 2026-09-10 07:35:46 +03:00
.prettierignore feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
.prettierrc feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
AGENTS.md feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
CHANGELOG.md chore(release): v1.5.1 2026-09-10 07:48:45 +03:00
electron-builder.yml feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
electron.vite.config.ts feat: initial OpenPGP key manager release (v1.0.0) 2026-08-28 18:21:29 +03:00
eslint.config.mjs feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
LICENSE feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
package-lock.json chore(release): v1.5.1 2026-09-10 07:48:45 +03:00
package.json chore(release): v1.5.1 2026-09-10 07:48:45 +03:00
README.md feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
tsconfig.json feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
tsconfig.node.json feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
tsconfig.web.json feat: apply debe/desktop-standard 2026-09-10 07:32:56 +03:00
vitest.config.ts test: add unit, integration and component test suite 2026-08-28 18:39:30 +03:00

مفتاح (Muftah) — مدير مفاتيح OpenPGP / OpenPGP key manager

تطبيق سطح مكتب لـ Linux (يُغلَّف كـ AppImage) لإنشاء وإدارة مفاتيح OpenPGP وSSH لعدة مستخدمين. A Linux desktop app (packaged as an AppImage) for creating and managing OpenPGP and SSH keys for multiple users.

صُمم لشخص يتولّى توليد المفاتيح نيابةً عن مستخدمين لا يعرفون كيف ينشئونها بأنفسهم: تنشئ المفتاح السرّي والعام وشهادة الإبطال، وتحفظهم محلياً مع ملاحظاتك وتواريخ الانتهاء، ثم تصدّرهم وترسلهم بطريقتك الخاصة. Designed for someone who generates keys on behalf of users who cannot do it themselves: you create the secret key, public key and revocation certificate, store them locally with your notes and expiry dates, then export and deliver them your own way.

مبني على desktop-standard — راجع STANDARD.md وTHEME.md هناك قبل أي تعديل. Built on desktop-standard — read its STANDARD.md and THEME.md before changing anything.

التوثيق الكامل مع لقطات الشاشة: صفحة الويكي Full documentation with screenshots: wiki page

المميزات / Features

  • إنشاء مفاتيح Ed25519 / Curve25519 (متوافقة 100% مع GnuPG) عبر OpenPGP.js v6، ومفاتيح SSH (Ed25519, RSA, ECDSA). / Ed25519 / Curve25519 keys (100% GnuPG-compatible) via OpenPGP.js v6, plus SSH keys (Ed25519, RSA, ECDSA).
  • توليد تلقائي لشهادة الإبطال (Revocation Certificate) مع كل مفتاح. / Automatic revocation certificate with every key.
  • لوحة مفاتيح بجدول كامل: الاسم، البريد، معرّف المفتاح، الخوارزمية، تواريخ الإنشاء/الانتهاء، الحالة، الملاحظات. / Keys dashboard with a full table: name, email, key ID, algorithm, create/expiry dates, status, notes.
  • حالات ذكية: نشط / ينتهي قريباً (خلال 30 يوم) / منتهي / بلا انتهاء — تُحسب ديناميكياً. / Smart statuses: active / expiring soon (within 30 days) / expired / no expiry — computed dynamically.
  • تصدير المفتاح العام / السرّي / شهادة الإبطال كملفات .asc، أو تصدير الكل دفعة واحدة. / Export public / secret / revocation as .asc files, or export everything at once.
  • ملاحظات قابلة للتحرير لكل مفتاح، وبحث وفلترة. / Editable notes per key, with search and filtering.
  • خزنة اختيارية تشفّر المفاتيح السرّية وشهادات الإبطال بكلمة مرور رئيسية (AES-256-GCM + scrypt). / Optional vault encrypting secret keys and revocation certificates with a master password (AES-256-GCM + scrypt).
  • كلمة مرور اختيارية لكل مفتاح (passphrase). / Optional per-key passphrase.
  • واجهة عربي (RTL) / إنجليزي (LTR) مع تبديل فوري، وخط Tajawal + Inter مضمّنين (بدون إنترنت). / Arabic (RTL) / English (LTR) UI with instant switching and embedded Tajawal + Inter fonts (offline).
  • ثيم ثلاثي الحالات (النظام / فاتح / داكن) بألوان عنّابي/ذهبي. / Three-state theme (system / light / dark) in maroon/gold.
  • نافذة قابلة للتكبير والتصغير (افتراضي 1200×780، حد أدنى 800×560)، بلا إيموجي، بتصميم إنتربرايز هادئ. / Resizable window (default 1200×780, min 800×560), no emoji, calm enterprise design.

التقنيات (أحدث النسخ المستقرة) / Stack (latest stable versions)

الطبقة / Layer التقنية / Tech
التغليف / Shell Electron 44 + electron-builder (AppImage)
أدوات البناء / Build electron-vite 5 + Vite 7 + TypeScript 5.9
الواجهة / UI React 19 + TypeScript
الترجمة / i18n i18next + react-i18next
OpenPGP openpgp 6 (Sequoia-compatible output)
الخطوط / Fonts @fontsource/tajawal + @fontsource/inter (embedded)

التثبيت والتشغيل / Install & run

المتطلبات / Requirements: Node.js 22+ و npm.

npm install
npm run dev          # التطوير / development
npm test             # الاختبارات / tests
npm run typecheck    # فحص الأنواع / type checking
npm run lint         # فحص الكود / linting
npm run gen:icon     # توليد الأيقونات / generate icons
npm run dist         # بناء AppImage / build AppImage

التحميل / Download

من صفحة Releases: نزّل أحدث ملف gpg-key-manager-<version>.AppImage، اجعله قابلاً للتنفيذ وشغّله. From the Releases page: download the latest gpg-key-manager-<version>.AppImage, make it executable and run it.

chmod +x gpg-key-manager-*.AppImage
./gpg-key-manager-*.AppImage

الاستخدام / Usage

  1. إنشاء مفتاح: زر «مفتاح جديد» → اكتب الاسم والبريد (اختيارياً كلمة مرور وتاريخ انتهاء وملاحظات). / Create a key: "New key" button → enter name and email (optionally passphrase, expiry date and notes).
  2. عرض/تصدير: اضغط على أي صف لفتح التفاصيل، ثم صدّر العام/السرّي/شهادة الإبطال أو انسخ البصمة. / View/export: click any row for details, then export public/secret/revocation or copy the fingerprint.
  3. الخزنة: من «الإعدادات» فعّل كلمة مرور رئيسية لتشفير المفاتيح السرّية على القرص. / Vault: in "Settings", enable a master password to encrypt secret keys at rest.
  4. اللغة والثيم: بدّل العربية/الإنجليزية أو الثيم (النظام/فاتح/داكن) من أسفل الشريط الجانبي. / Language and theme: switch Arabic/English or the theme (system/light/dark) at the bottom of the sidebar.

أين تُخزَّن البيانات؟ / Where is data stored?

في مجلد بيانات التطبيق (userData) / In the app data folder (userData):

~/.config/gpg-key-manager/
├── index.json          # فهرس المفاتيح (بيانات وصفية فقط) / key index (metadata only)
├── settings.json       # اللغة + إعدادات الخزنة / language + vault settings
└── keys/<id>/
    ├── public.asc      # المفتاح العام (نص عادي) / public key (plaintext)
    ├── secret.asc      # المفتاح السرّي (أو secret.enc عند تفعيل الخزنة) / secret key (or secret.enc with vault)
    └── revocation.asc  # شهادة الإبطال (أو revocation.enc) / revocation certificate (or revocation.enc)

الأمان / Security

  • المفاتيح السرّية اختيارياً مشفّرة بكلمة مرور رئيسية (AES-256-GCM، مفتاح مشتق بـ scrypt N=16384). / Secret keys are optionally encrypted with a master password (AES-256-GCM, scrypt-derived key N=16384).
  • عند تفعيل الخزنة، تُقفل عند كل تشغيل وتتطلب كلمة المرور لفتحها. / With the vault enabled, it locks on every launch and requires the password to unlock.
  • شهادة الإبطال تُعامل كسرّ (من يملكها يستطيع إبطال المفتاح). / The revocation certificate is treated as a secret.
  • بيئة العرض معزولة (contextIsolation + sandbox، بدون nodeIntegration). / The renderer is isolated (contextIsolation + sandbox, no nodeIntegration).

هيكل المشروع / Project structure

src/
├── main/          # العملية الرئيسية (توليد المفاتيح، التخزين، الخزنة، IPC) / main process (key generation, storage, vault, IPC)
│   ├── index.ts   # إعداد النافذة / window setup
│   ├── ipc.ts     # معالجات IPC / IPC handlers
│   ├── pgp.ts     # توليد مفاتيح OpenPGP / OpenPGP key generation
│   ├── ssh.ts     # توليد مفاتيح SSH / SSH key generation
│   ├── keyStore.ts# ملفات المفتاح / key files
│   ├── store.ts   # فهرس JSON + الإعدادات / JSON index + settings
│   └── vault.ts   # تشفير الخزنة / vault encryption
├── preload/       # جسر contextBridge / contextBridge bridge
├── shared/        # الأنواع المشتركة / shared types
└── renderer/      # واجهة React / React UI
    └── src/
        ├── components/  # Sidebar, KeysPage, modals, Settings… / Sidebar, KeysPage, modals, Settings…
        ├── locales/     # ar.ts / en.ts
        └── styles/      # global.css (نظام التصميم) / global.css (design system)

الإصدار / Releases

الإصدارات عبر سكربت الإصدار — يرفع النسخة، يحدّث CHANGELOG، يضع tag ويرفعه؛ الـ CI يبني AppImage وينشره. Releases go through the release script — it bumps the version, updates the CHANGELOG, tags and pushes; CI builds and publishes the AppImage.

npm run release:patch   # إصلاحات / fixes
npm run release:minor   # ميزة جديدة / new feature
npm run release:major   # تغيير كاسر / breaking change

الترخيص / License

هذا العمل مرخّص تحت CC BY-NC-SA 4.0 — استخدام غير تجاري مع مشاركة بالمثل. This work is licensed under CC BY-NC-SA 4.0 — non-commercial, share-alike.