commit 98911888874a40b1a575c8ee71b8e1dbd8d136f3 Author: forgejo-actions Date: Mon Aug 5 14:40:20 2024 +0000 Deploy site diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..b1076e7 --- /dev/null +++ b/404.html @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OxideTalis Messaging Protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +

OxideTalis Messaging Protocol

+
+
+ + 404 + +
+ +
+ + + diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..f6f0918 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +otmp.4rs.nl diff --git a/ar/faq/index.html b/ar/faq/index.html new file mode 100644 index 0000000..71399e8 --- /dev/null +++ b/ar/faq/index.html @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + الاسئلة الشائعة + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +

الاسئلة الشائعة

+ +
+
+ + + + +

... لايوجد اسئلة شائعة حتى الان، يمكنك التواصل مع المؤلف عبر البريد الإلكتروني او احد قنوات التواصل لطرح الاسئلة ...

+ + +
+ +
+ + + diff --git a/ar/index.html b/ar/index.html new file mode 100644 index 0000000..857b473 --- /dev/null +++ b/ar/index.html @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + بروتوكول الرسائل الخاص بـ OxideTalis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +

بروتوكول الرسائل الخاص بـ OxideTalis

+ +
+
+ +

هذه الصفحة الرئيسية لبروتوكول الرسائل الخاص بـ OxideTalis (OTMP)، وهو بروتوكول +للتواصل بين طرفين (أليس وبوب) باستخدام مفتاح تشفير مشترك. تم تصميم البروتوكول +ليكون بسيطًا وسهل التنفيذ، مع توفير وسيلة آمنة للتواصل.

+

الأهداف

+
    +
  • تواصل آمن بين طرفين.
  • +
  • سهولة التنفيذ.
  • +
  • القدرة على إرسال رسائل إلى مستخدمين في خوادم أخرى مباشرة، بدون الاعتماد على +خادم المرسل.
  • +
+

الأهداف الغير مرغوبة

+
    +
  • التواصل الجماعي.
  • +
  • المكالمات الصوتية أو الفيديو.
  • +
+

المحتويات

+ + + + + + + +
+ +
+ + + diff --git a/ar/protocol/index.html b/ar/protocol/index.html new file mode 100644 index 0000000..ca3fe4e --- /dev/null +++ b/ar/protocol/index.html @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + إصدارات بروتوكول OxideTalis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +

إصدارات بروتوكول OxideTalis

+ +
+
+ +

حتى الان بروتوكول OxideTalis يملك اصدار واحد فقط، ولكن من الممكن تواجد عدة إصدارات في المستقبل

+

الإصدارات

+ + + + + + + +
+ +
+ + + diff --git a/ar/protocol/v1/index.html b/ar/protocol/v1/index.html new file mode 100644 index 0000000..0911f9d --- /dev/null +++ b/ar/protocol/v1/index.html @@ -0,0 +1,499 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + الأصدار الاول من بروتوكول OxideTalis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +

الأصدار الاول من بروتوكول OxideTalis

+ +
+
+ + + +جدول المحتويات + + + +

المؤلف: عويتب
+التاريخ: 2024/6/1
+الاصدار: 1.0.0
+الحالة: مسودة

+

نظرة عامة

+

بروتوكول OxideTalis هو بروتوكول تواصل بين طرفين بتشفير تام من طرف إلى طرف عبر +مفتاح تشفير مشترك بينهم، يهدف البروتوكول إلى توفير سهولة التنقل من خادم إلى أخر +بشكل إفتراضي وتوفير طريقة للتواصل بين الافراد في خوادم مختلفة بشكل مباشر بدون +تواصل خادم المرسل وخادم المستقبل مع بعضهم البعض.

+

الاهداف

+
    +
  • تواصل آمن بين طرفين مُشفر من ند إلى ند.
  • +
  • سهولة التنفيذ.
  • +
  • امكانية الإنتقال إلى خادم آخر.
  • +
  • امكانية التواصل مع اطراف خارج الخادم الخاص بالمرسل.
  • +
  • عدم الحاجة لتواصل المرسل مع الخادم الخاص به للتواصل مع اشخاص خارج الخادم.
  • +
  • عدم الحاجة ﻷسم مستخدم وكلمة مرور لتخويل المسخدم للمراسلة، والاكتفاء بالعنوان +العام الخاص به.
  • +
+

الاهداف الغير مرغوبة

+
    +
  • التواصل الجماعي.
  • +
  • المكالمات الصوتية أو الفيديو.
  • +
+

العناوين العامة

+

العنوان العام هو المفتاح العام الخاص بخوارزمية Elliptic Curve Diffie-Hellman +مضغوط وهو يتكون من 33 بايت (264 بت) يتم ترميزه بترميز base58 على سبيل المثال +العنوان التالي becZJsZZqGR7qBG8t1Pm4uy62jDTzJsabxnkARhr2syo.

+

يتم وضع العنوان العام في رأس (Header) الطلب (Request) بأسم X-OTMP-PUBLIC ويجب ان يكون نص base58 صحيح مكون من 33 بايت (264 بت).

+

أسم الخادم

+

يكون أسم الخادم عنوان إلكتروني مثل example.com ولا يجب أن يكون الخادم نفسه، هو +أسم فقط يشير إلى الخادم، على سبيل المثال، أسم الخادم example.com ولكن الخادم +هو otmp.example.com:443، هكذا سوف يتم الإشارة لى مستخدمين هذا الخادم @becZJsZZqGR7qBG8t1Pm4uy62jDTzJsabxnkARhr2syo/example.com +ويمكن إختصاره بالواجهات الرسومية بأخذ أول ثلاث أحرف و أخر ثلاث أحرف ووضع .. +بينهم، ليصبح بهذا الشكل @bec..syo/example.com.

+

كيفية الإشارة

+

يشير أسم الخادم إلى الخادم عبر المسار التالي /.well-known/oxidetalis/server

+

سوف يتم إرسال طلب GET إلى هذا المسار و يجب أن يُرجع هذا المسار نص بتنسيق +application/json يحتوي على المفتاح otmp_server ولذي يحتوي على مكان إستضافة +الخادم والمنفذ الذي يستمع إليه، سوف يتم إرسال الطلب ببروتوكول https و يجب أن +يدعم الخادم https و يجب ان تكون الشهادة موقعة من جهة موثوقة وليست موقعة +ذاتياً1

+

مفتاح otmp_server

+

محتوى هذا المفتاح يجب أن يكون نص، يتكون هذا النص من جزئين يفصل بينهم نقطتان +رأسيتان، الجزء الأول هو مكان الإستضافة و الجزء الثاني هو المنفذ على سبيل المثال +"example.com:443" و "otmp.example.com:7294" و "93.184.215.14:7294" و "[2606:2800:021f:cb07:6820:80da:af6b:8b2c]:7294".

+

مثال

+
+
{"otmp_server": "otmp.example.com:443"}
+
+
+
+

يجب على الخوادم عدم تخزين اسماء خوادم المرسلين الخارجيين، ويتم تحديده في الطلب +المرسل من قبلهم فقط، حيث يعتبر المفتاح العام هو المعرف المشترك بين جميع +الخوادم. سوف يوفر هذا سهولة إنتقال الافراد من خادم إلى أخر مع بقاء تعرف +الخوادم الاخرى عليهم.

+
+

مفتاح التشفير المشترك

+

يتم انشاء مفتاح التشفير المشترك عبر خوارزمية Elliptic Curve Diffie-Hellman حيث +سوف يقوم مرسل الرسالة بوضع العنوان العام الخاص بالمستقبِل ليتم انتاج المفتاح +المشترك، بعد إنتاج المفتاح المشترك يتم ادخاله إلى دالة HKDF بدون ملح +بخوارزمية Sha256 وبعد ذلك يتم عمل له توسعة (expand) بدون معلومات (info) بطول +32 بايت (256 بت).

+

التشفير

+

سوف يتم استخدام مفتاح التشفير المشترك مفتاحاً للتشفير في خوارزمية AES-256 +CBC، بعد تشفير الرسالة يتم وضع قيمة التهيئة (iv) في أخر الرسالة، ليكون اخر 16 +بايت (128 بت) هي قيمة التهيئة (iv) التي سوف يستخدمها المستقبِل لفك تشفير +الرسالة.

+

مثال لمفتاح تشفير مشترك بترميز base58 LKGKeuV3SRu1n3fez4SdboM3FT48vbBxHai9MbuWxb3

+

مفتاح الخادم العام

+

مفتاح الخادم العام هو مثل العنواين العامة الخاصة بالمستخدمين، ولكنه خاص بالخادم، +حيث ان الخادم سوف يقوم بأنشاء مفتاح مشترك بينه وبين مرسل الطلب (Request) ليتأكد +من أن المرسل (صاحب العنوان العام) هو مالك هذا العنوان. يتم التأكد عبر مطابقة +التوقيع الموجود في الطلب (Request).

+

يتم جلب مفتاح الخادم العام من المسار /api/info سوف يتم إرسال طلب GET إلى هذا المسار و +يجب أن يُرجع هذا المسار نص بتنسيق application/json يحتوي على المفتاح +public_key ولذي قيمته نص المفتاح العام الخاص بالخادم بترميز base58، سوف يتم +إرسال الطلب ببروتوكول https و يجب أن يدعم الخادم https و يجب ان تكون الشهادة +موقعة من جهة موثوقة وليست موقعة ذاتياً1

+
+

تم توضيح المفتاح العام هنا (العناوين العامة)

+
+
+

حاول ان لا تقوم بتغيير المفتاح العام الخاص بالخادم بشكل مستمر، لآن العملاء سوف +يقومون بتخزينه بالعادة.

+
+

توقيع الطلب

+

هو التوقيع الخاص بالطلب يتم وضعه في رأس الطلب (Header) بأسم X-OTMP-SIGNATURE +او في بيانات ال Websocket في المفتاح signature بترميز Hex ويتم أستخدامه +للتأكد من ان مرسل الطلب هو مالك المفتاح العام.

+

إنشاء التوقيع

+

التوقيع يحتاج إلى ثلاث اشياء ليتم إنشائه

+
    +
  • مفتاح التشفير المشترك.
  • +
  • جسم الطلب (body) أو بيانات الحدث (data) أو طريقة الطلب+المسار، مثال (GET/ws/chat)
  • +
  • ثواني الوقت الحالي للمنطقة الزمنية UTC بتنسيق Unix Time (8 بايت أي 64 بت +big-endian).
  • +
  • 16 بايت عشوائي (128 بت).
  • +
+

يتم إدخال جسم الطلب (body) او بيانات الحدث في الـWebsocket إلى دالة +HMAC-SHA256 و إستخدام مفتاح التشفير المشترك مضافاً إليه الوقت الحالي (8 +بايت) و الـ16 بايت العشوائي، أي المفتاح المستخدم في دالة HMAC-SHA256 سوف يكون

+
مفتاح التشفير المشترك+الوقت الحالي+16 بايت عشوائي
+
+

بعد ذلك يتم أخذ نتيجة دالة HMAC-SHA256 و إضافة الوقت المستخدم في الأعلى و +الـ16 بايت المستخدمة في الأعلى و جميعهم بترميز Hex، مثال

+
+
bad035084e11bfd266c7b7dfa473d6603be551b3aa215f869776b75bf42ef31900000000665e1a696e6d776f65726e6664757265686a66
+
+
+

بعد تحويله إلى بايتات سوف يكون المجموع 56 بايت، وسوف يكون التقسيم كالتالي

+
    +
  • مخرج دالة HMAC-SHA256: من بايت 0 إلى بايت31. (التوقيع الذي سوف يتحقق منه +الخادم)
  • +
  • الوقت: من بايت 32 إلى بايت 39. (الذي سوف يتم إضافته بعد مفتاح التشفير +المشترك)
  • +
  • ال 16 بايت العشوائي: من بايت 40 إلى بايت 55. (سوف يتم إضافته بعد الوقت)
  • +
+

سوف يتحقق الخادم من أن الوقت الذي في التوقيع لم يتجاوز الـ20 ثانية، وسوف يقوم +الخادم بتخزين ال 16 بايت العشوائي في الكاش بمدة حياة 30 ثانية، ليتأكد الخادم من +ان ال 16 بايت العشوائي لن يتم إستخدامهم في توقيع أخر، بالتالي ضمان عدم إرسال +الطلب مرة أخرى من المهاجمين (ضمان أن التوقيع صالح لمرة واحدة فقط).

+

شكل البيانات داخل إتصال الـWebsocket

+

بعد الإتصال بـWebsocket مع الخادم، يكون تنسيق البيانات التي يتم تبادلها +بين المرسل والخادم json ويجب عليها توفر المفاتيح التالية

+
    +
  • event: إسم الحدث، على سبيل المثال إرسال رسالة او تحديث حالة الكتابة (التنسيق PascalCase).
  • +
  • data: البيانات الخاصة بالحدث.
  • +
  • signature: توقيع بيانات الحدث (data)، هذا التوقيع يكون بين المرسل وبين +الخادم وليس المُستقبل.
  • +
+

مثال لشكل البيانات في ال websocket

+
+
{
+  "event": "EventName",
+  "data": {
+    "key": "value"
+  },
+  "signature": "bad035084e11bfd266c7b7dfa473d6603be551b3aa215f869776b75bf42ef31900000000665e1a696e6d776f65726e6664757265686a66"
+}
+
+
+
+

يمكن للخادم طلب أي شكل من البيانات، و يجب أن تكون المعلومات الحساسة مثل +الرسالة او الملف أن مشفر بينك وبين المُستقبل فقط.

+
+

طريقة التواصل

+

هنا سوف يتم توضيح طريقة التواصل بين طرفين في خادم واحد (تواصل داخلي)، وبين طرفين +في خوادم مختلفة (تواصل خارجي)

+

مفاهيم مهمة

+
    +
  • التواصل الداخلي: هو تواصل طرفين في الخادم نفسه.
  • +
  • التواصل الخارجي: هو تواصل طرفين في خوادم مختلفة.
  • +
  • القائمة البيضاء: هي قائمة يمتلكها كل مستخدم في الخادم يوجد بها المستخدمين +المسموح لهم بمراسلته.
  • +
  • القائمة السوداء: هي قائمة يمتلكها كل مستخدم في الخادم يوجد بها المستخدمين +الغير مسموح لهم بمراسلته.
  • +
  • قائمة الخادم السوداء: هي قائمة يقوم بوضعها مالك الخادم ليمنع خادمه من التواصل +مع خوادم محددة او اشخاص محددين.
  • +
  • جدول الإتصالات الخارجية: هو جدول يتم حفظ به الرسائل الخارجية التي وصلت إلى +المستخدم عندما لم يكن متصل بالخادم، ويتم مسحها بعد إرسالها له.
  • +
  • جدول طلبات الدردشة: هو جدول يتضمن طلبات الدردشة التي قاموا بإرسالها او +إستقبالها افراد الخادم إلى/من افراد اخرين في نفس الخادم او في خوادم أخرى، ويتم +مسح الطلب بعد وصول قبوله او رفضه. يتم الإستفادة من هذا الجدول لعدم إستقبال +إشعارات قبول او رفض مزيفة.
  • +
+
+

سوف يتم استبدال العنوان العام بأسم Alice و Bob لآن العناوين العامة طويلة +نسبياً

+
+

التواصل الداخلي

+

اولاً يجب2 عند فتحك لعميل التواصل أن تقوم بإنشاء تواصل Websocket بينك +وبين الخادم الخاص بك، عبر هذا الإتصال سوف تستقبل الرسائل الجديدة من الخادم الخاص +بك، وسوف تقوم بالتواصل من خلاله لإرسال الرسائل إلى افراد الخادم.

+

لدينا الآن المرسل alice والمستقبِل bob و كلاهم في الخادم نفسه، سوف يقوم alice +بإرسال رسالة Websocket يطلب من الخادم إرسال طلب الدردشة إلى bob وسوف يرد +الخادم بأحد الأخطأ التالية، او لا يقوم بالرد إذا لم يكن هناك خطأ.

+

إذا لم يكن هناك مستخدم بأسم bob في الخادم

+

سوف يرجع الخادم خطأ ويخبر فيه العميل أنه ليس هناك مستخدم بهذا الأسم.

+

إذا لم يكن alice في قائمة bob البيضاء ولا السوداء

+

سوف يقوم الخادم اولاً بإضافة bob إلى قائمة alice البيضاء، وبعد ذلك إضافة الطلب +في جدول طلبات الدردشة المُستقبلة بالنسبة لـbob إذا كان غير متصل مع الخادم +وسوف يضيفه إلى المُرسلة بالنسبة إلى alice، لا يرجع الخادم أي خطأ في هذه +الحالة.

+

عندما يرد bob بالموافقة ام الرفض (عبر إتصال ال Websocket)، سوف يُعلم الخادم +alice بأن bob وافق او رفض التواصل معه (عبر إتصال الـ Websocket او إضافته إلى +جدول ليعلمه عند تواصله مع الخادم). إذا لم يوافق bob سوف يقوم الخادم بإضافة alice +إلى قائمة bob السوداء، و إذا وافق سوف يتم إضافته إلى القائمة البيضاء.

+

إذا كان alice في قائمة bob البيضاء

+

سوف يرجع الخادم خطأ، يعلم العميل أنه في قائمة bob البيضاء.

+

إذا كان alice في قائمة bob السوداء

+

سوف يرجع الخادم خطأ و يُعلم alice انه في قائمة bob السوداء ولا يمكنه الدردشة +معه.

+
+

يتم تخزين رسائل الطرفين مُشفرة في قاعدة البيانات الخاصة بالخادم

+
+

التواصل الخارجي

+

لدينا الآن المرسل alice من example1.com والمستقبِل bob من example2.com سوف +يقوم alice بإرسال طلب Get إلى example2.com يطلب فيه الدردشة مع bob، سوف يرد +الخادم بأحد الردود التالية

+

إذا لم ي3كن هناك مستخدم بأسم bob في الخادم

+

سوف يرجع الخادم 404 و يُعلم alice بأنه ليس لديه مستخدم بهذا الأسم.

+

إذا لم يكن alice في قائمة bob البيضاء ولا السوداء

+

سوف يقوم خادم bob بإرسال طلب الدردشة إلى bob او يقوم بتخزين الطلب في جدول طلبات +الدردشة المٌستقبلة، ويرد عليه بـ200، بعد ذلك يقوم alice بطلب الخادم الخاص به +من إضافة bob إلى قائمته البيضاء ليستقبل منه الرسائل مستقبلاً بدون حاجة bob إرسال +طلب دردشة وإنتظار قبولها، سوف يقوم alice ايضاً بطلب الخادم من إضافة bob إلى جدول +طلبات الدردشة المُرسلة ويتم تضمين خادم bob الحالي الذي تم إرسال طلب الدردشة +إليه3

+

إذا قبل/رفض bob الدردشة سوف يُعلم خادم bob خادم alice أن bob قام بقبول/رفض +الدردشة، سوف يضع الخادم التوقيع الخاص به في X-OTMP-SIGNATURE وسوف يتم جلب +المفتاح العام الخاص به من مسار الخادم4 (لقد قام alice بإضافة bob والخادم +الخاص به في جدول طلبات الدردشة المُرسلة لذالك خادم alice يعلم ماهو خادم +bob).

+

بعد ذلك إذا لم يكن لـalice إتصال Websocket سابق مع خادم bob، سوف يقوم بإرسال +طلب دردشة ليتم ترقية الإتصال إلى Websocket، ونفس المسئلة مع bob إذا اراد +التواصل مع alice سوف يقوم بإرسال طلب دردشة ويتم ترقية الإتصال او إعلامه بوجود +إتصال Websocket مفتوح.

+

إذا كان alice في قائمة bob البيضاء

+

سوف يقوم الخادم بترقية الإتصال إلى Websocket او إذا كان alice متصل معه من قبل، +سوف يقوم بإرجاع 400 ويخبر alice بالتواصل معه عبر ال Websocket.

+

إذا كان alice في قائمة bob السوداء او كان هو او خادمه في قائمة الخادم السوداء

+

سوف يرجع الخادم 403 مع توضيح السبب.

+

أساسيات

+
    +
  • يجب على alice فتح إتصال Websocket مع جميع الخوادم التي يريد التواصل مع +افرادها.
  • +
  • لايتم تخزين الرسائل التي يستقبلها الخادم بشكل دائم، يتم تخزينها فقط إذا لم يكن +bob متصل بالخادم، ويتم مسحها بعد إرسالها إلى bob.
  • +
  • الرسائل والملفات بين الطرفين تكون مشفرة وتكون موقعة للخادم المراد التواصل مع +افراده.
  • +
+

شكر و تقدير

+

شكراً للأشخاص التاليين على مراجعة و تحسين البروتوكول.

+
    +
  • أمجد الشرفي <me@amjad.alsharafi.dev>: تحسين طريقة عمل التوقيع، و أقتراح +الطريقة الحالية.
  • +
+
+
1 +

لضمان عدم وجود شخص في المنتصف، يقوم بالتلاعب بالبيانات و الإطلاع عليها.

+
+
2 +

طالما انك عضو في الخادم، سوف يعتقد الخادم دائماً انك في إتصال Websocket معه، ولن يقوم بترقية أي إتصال إلى Websocket

+
+
3 +

يتم إضافة العنوان الخاص بـbob و الخادم الخاص به في جدول طلبات الدردشة للتاكد من عدم إستقبال إشعارات قبول/رفض من خوادم مزيفة هدفها الإزعاج.

+
+
4 +

للتاكد من انه الخادم فعلاً، لن يتم طلب منه المفتاح العام بشكل مباشر، بل سوف يتم جلبه من مسار الخاص به، وهو /api/info

+
+ + +
+ +
+ + + diff --git a/faq/index.html b/faq/index.html new file mode 100644 index 0000000..fc58491 --- /dev/null +++ b/faq/index.html @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Frequently Asked Questions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +

Frequently Asked Questions

+ +
+
+ + + + +

... Until now, there are no frequently asked questions, you can contact the author via email or one of the communication channels to ask questions ...

+ + +
+ +
+ + + diff --git a/fonts/Vazirmatn-Regular.ttf b/fonts/Vazirmatn-Regular.ttf new file mode 100644 index 0000000..64e4a81 Binary files /dev/null and b/fonts/Vazirmatn-Regular.ttf differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..e0f99b6 --- /dev/null +++ b/index.html @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OxideTalis Messaging Protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +

OxideTalis Messaging Protocol

+
+
+ +

This is the homepage of the OxideTalis Messaging Protocol (OTMP), a protocol to +communicate between two parties (Alice and Bob) using a shared secret. The +protocol is designed to be simple and easy to implement, while +providing a secure way to communicate.

+

Goals

+
    +
  • Secure communication between two parties.
  • +
  • Simple and easy to implement.
  • +
  • Ability to send messages to users in another server directly, no dependency +the server of the sender.
  • +
+

Non-Goals

+
    +
  • Group communication.
  • +
  • Voice or video calls.
  • +
+

Contents

+ + + + + +
+ +
+ + + diff --git a/otmp_ar.png b/otmp_ar.png new file mode 100644 index 0000000..dde6d42 Binary files /dev/null and b/otmp_ar.png differ diff --git a/otmp_en.png b/otmp_en.png new file mode 100644 index 0000000..42f1141 Binary files /dev/null and b/otmp_en.png differ diff --git a/otmp_logo.png b/otmp_logo.png new file mode 100644 index 0000000..70acf7f Binary files /dev/null and b/otmp_logo.png differ diff --git a/otmp_logo.svg b/otmp_logo.svg new file mode 100644 index 0000000..6cab8b7 --- /dev/null +++ b/otmp_logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/pgp.asc b/pgp.asc new file mode 100644 index 0000000..93ee1a0 --- /dev/null +++ b/pgp.asc @@ -0,0 +1,51 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=9prh +-----END PGP PUBLIC KEY BLOCK----- diff --git a/protocol/index.html b/protocol/index.html new file mode 100644 index 0000000..b7f9a0f --- /dev/null +++ b/protocol/index.html @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OTMP Protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +

OTMP Protocol

+ +
+
+ +

OxideTalis Messaging Protocol (OTMP) has only one version so far, but multiple versions may exist in the future.

+

Versions

+ + + + + + + +
+ +
+ + + diff --git a/protocol/v1/index.html b/protocol/v1/index.html new file mode 100644 index 0000000..3a98f3e --- /dev/null +++ b/protocol/v1/index.html @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OTMP Protocol V1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +

OTMP Protocol V1

+ +
+
+ + + +Table of Contents + + + +

Author: Awiteb
+Date: 2024/6/1
+Version: 1.0.0
+Status: Draft

+

Overview

+

... Currently, there is no English content for the protocol, after the protocol is finalized, the content will be translated into English, check the Arabic version if you are interested in the protocol ...

+ + +
+ +
+ + + diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..d721dab --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://otmp.4rs.nl/sitemap.xml diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..0b1c26e --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,36 @@ + + + + https://otmp.4rs.nl/ + + + https://otmp.4rs.nl/ar/ + + + https://otmp.4rs.nl/ar/faq/ + + + https://otmp.4rs.nl/ar/protocol/ + + + https://otmp.4rs.nl/ar/protocol/v1/ + + + https://otmp.4rs.nl/categories/ + + + https://otmp.4rs.nl/contexts/ + + + https://otmp.4rs.nl/faq/ + + + https://otmp.4rs.nl/protocol/ + + + https://otmp.4rs.nl/protocol/v1/ + + + https://otmp.4rs.nl/tags/ + + diff --git a/style.css b/style.css new file mode 100644 index 0000000..5ef2f1a --- /dev/null +++ b/style.css @@ -0,0 +1 @@ +body[theme=dark]{filter:invert(1)}body[theme=dark] img{filter:invert(1)}body[theme=dark] img.invertable{filter:invert(0)}@media (prefers-color-scheme: dark){body[theme=auto]{filter:invert(1)}body[theme=auto] img{filter:invert(1)}body[theme=auto] img.invertable{filter:invert(0)}}@font-face{font-family:"Vazir";src:url(fonts/Vazirmatn-Regular.ttf) format("truetype")}html,body{background:#fff}html{height:100%}body{color:#000;font-family:"Vazir";font-size:16px;line-height:1.4;margin:0;min-height:100%;overflow-wrap:break-word}.post-meta{text-align:right}h2,h3,h4,h5,h6{margin-top:3rem}hr{margin:2rem 0}p{margin:1rem 0}li{margin:.4rem 0}*:target{background:#ff0}.w{max-width:850px;margin:0 auto;padding:4rem 2rem}hr{text-align:center;border:0}hr:before{content:"/////"}hr:after{content:attr(data-content) "/////"}table{width:100%}table,th,td{border:thin solid #000;border-collapse:collapse;padding:.4rem}code{color:#fff;background:#636363}pre code{display:block;overflow-x:auto;white-space:pre-wrap;padding:1rem}blockquote{font-style:italic;border:thin solid #000;padding:1rem}blockquote p{margin:0}img{max-width:100%;display:block;margin:0 auto}.footnote-definition{padding:0 1rem}.footnote-definition:target{background:#ff0;color:#212121}.footnote-definition p{display:inline}nav,.taxonomies{text-align:center} \ No newline at end of file