diff --git a/content/ar/protocol/v1.md b/content/ar/protocol/v1.md index 7f5dcc2..0e475fe 100644 --- a/content/ar/protocol/v1.md +++ b/content/ar/protocol/v1.md @@ -41,10 +41,31 @@ add_toc = true يتم وضع العنوان العام في رأس (Header) الطلب (Request) بأسم `X-OTMP-PUBLIC` ويجب ان يكون نص [base58] صحيح مكون من 33 بايت (264 بت). ## أسم الخادم -أسم الخادم هو نطاق إلكتروني طبيعي، على سبيل المثال `example.com` ويتم جلب عنوان -الخادم و المنفذ (port) من خلال المسار التالي -`https://example.com/.well-known/oxidetalis/server` وهو نص بتنسيق json بالشكل -الآتي +يكون أسم الخادم عنوان إلكتروني مثل `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". + +### مثال
@@ -54,15 +75,6 @@ add_toc = true
-حيث يتم وضع نقطتان رأسيتان `:` بين عنوان الخادم والمنفذ الذي يستمع إليه. سيسهل -هذا من جعل أسماء الخوادم سهلة التذكر والكتابة. - -يتم وضع اسم خادم المرسل في رأس الطلب بأسم `X-OTMP-SERVER` ويجب ان يكون اسم -الخادم فقط، على سبيل المثال `example.com`. - -> سيتم إرسال الطلب كـ "http" وليس "https"، ويمكنك إعادة توجيه الطلب إلى "https" -> إذا كنت تريد ذلك. - > يجب على الخوادم عدم تخزين اسماء خوادم المرسلين الخارجيين، ويتم تحديده في الطلب > المرسل من قبلهم فقط، حيث يعتبر المفتاح العام هو المعرف المشترك بين جميع > الخوادم. سوف يوفر هذا سهولة إنتقال الافراد من خادم إلى أخر مع بقاء تعرف @@ -81,18 +93,21 @@ CBC]، بعد تشفير الرسالة يتم وضع قيمة التهيئة (i بايت (128 بت) هي قيمة التهيئة (iv) التي سوف يستخدمها المستقبِل لفك تشفير الرسالة. -مثال لمفتاح تشفير مشترك بترميز [base58]\ -`LKGKeuV3SRu1n3fez4SdboM3FT48vbBxHai9MbuWxb3` +مثال لمفتاح تشفير مشترك بترميز [base58] LKGKeuV3SRu1n3fez4SdboM3FT48vbBxHai9MbuWxb3 -## عنوان الخادم -عنوان الخادم مثل العنواين العامة الخاصة بالمستخدمين، ولكنه خاص بالخادم، حيث ان -الخادم سوف يقوم بأنشاء مفتاح مشترك بينه وبين مرسل الطلب (Request) ليتأكد من أن -المرسل (صاحب العنوان العام) هو مالك هذا العنوان. يتم التأكد عبر مطابقة التوقيع -الموجود في الطلب (Request). +## مفتاح الخادم العام +مفتاح الخادم العام هو مثل العنواين العامة الخاصة بالمستخدمين، ولكنه خاص بالخادم، +حيث ان الخادم سوف يقوم بأنشاء مفتاح مشترك بينه وبين مرسل الطلب (Request) ليتأكد +من أن المرسل (صاحب العنوان العام) هو مالك هذا العنوان. يتم التأكد عبر مطابقة +التوقيع الموجود في الطلب (Request). -يتم توفير المفتاح العام الخاص بالخادم في المسار التالي، ويكون رد الخادم نص -base58 فقط:\ -`https://example.com/.well-known/oxidetalis/public` +يتم جلب مفتاح الخادم العام من المسار /api/info سوف يتم إرسال طلب GET إلى هذا المسار و +يجب أن يُرجع هذا المسار نص بتنسيق `application/json` يحتوي على المفتاح +`public_key` ولذي قيمته نص المفتاح العام الخاص بالخادم بترميز [base58]، سوف يتم +إرسال الطلب ببروتوكول https و يجب أن يدعم الخادم https و يجب ان تكون الشهادة +موقعة من جهة موثوقة وليست موقعة ذاتياً[^1] > تم توضيح المفتاح العام هنا ([العناوين العامة](#l-nwyn-l-m)) @@ -122,9 +137,15 @@ base58 فقط:\ بعد ذلك يتم أخذ نتيجة دالة [HMAC-SHA256] و إضافة الوقت المستخدم في الأعلى و الـ16 بايت المستخدمة في الأعلى و جميعهم بترميز [Hex]، مثال + +
+ ``` bad035084e11bfd266c7b7dfa473d6603be551b3aa215f869776b75bf42ef31900000000665e1a696e6d776f65726e6664757265686a66 ``` + +
+ بعد تحويله إلى بايتات سوف يكون المجموع 56 بايت، وسوف يكون التقسيم كالتالي - مخرج دالة [HMAC-SHA256]: من بايت 0 إلى بايت31. (التوقيع الذي سوف يتحقق منه الخادم) @@ -191,7 +212,7 @@ bad035084e11bfd266c7b7dfa473d6603be551b3aa215f869776b75bf42ef31900000000665e1a69 > نسبياً ### التواصل الداخلي -اولاً **يجب**[^1] عند فتحك لعميل التواصل أن تقوم بإنشاء تواصل [Websocket] بينك +اولاً **يجب**[^2] عند فتحك لعميل التواصل أن تقوم بإنشاء تواصل [Websocket] بينك وبين الخادم الخاص بك، عبر هذا الإتصال سوف تستقبل الرسائل الجديدة من الخادم الخاص بك، وسوف تقوم بالتواصل من خلاله لإرسال الرسائل إلى افراد الخادم. @@ -227,7 +248,7 @@ alice بأن bob وافق او رفض التواصل معه (عبر إتصال يقوم alice بإرسال طلب Get إلى `example2.com` يطلب فيه الدردشة مع bob، سوف يرد الخادم بأحد الردود التالية -#### إذا لم يكن هناك مستخدم بأسم bob في الخادم +#### إذا لم ي3كن هناك مستخدم بأسم bob في الخادم سوف يرجع الخادم 404 و يُعلم alice بأنه ليس لديه مستخدم بهذا الأسم. #### إذا لم يكن alice في قائمة bob البيضاء ولا السوداء @@ -236,11 +257,11 @@ alice بأن bob وافق او رفض التواصل معه (عبر إتصال من إضافة bob إلى قائمته البيضاء ليستقبل منه الرسائل مستقبلاً بدون حاجة bob إرسال طلب دردشة وإنتظار قبولها، سوف يقوم alice ايضاً بطلب الخادم من إضافة bob إلى جدول طلبات الدردشة **المُرسلة** ويتم تضمين خادم bob الحالي الذي تم إرسال طلب الدردشة -إليه[^2] +إليه[^3] إذا قبل/رفض bob الدردشة سوف يُعلم خادم bob خادم alice أن bob قام بقبول/رفض الدردشة، سوف يضع الخادم التوقيع الخاص به في `X-OTMP-SIGNATURE` وسوف يتم جلب -المفتاح العام الخاص به من مسار الخادم[^3] (لقد قام alice بإضافة bob والخادم +المفتاح العام الخاص به من مسار الخادم[^4] (لقد قام alice بإضافة bob والخادم الخاص به في جدول طلبات الدردشة **المُرسلة** لذالك خادم alice يعلم ماهو خادم bob). @@ -271,11 +292,13 @@ bob). {{ hr(data_content="وصلات") }} -[^1]: طالما انك عضو في الخادم، سوف يعتقد الخادم دائماً انك في إتصال [Websocket] معه، ولن يقوم بترقية أي إتصال إلى [Websocket] +[^1]: لضمان عدم وجود شخص في المنتصف، يقوم بإرسال خادم مختلف عن الخادم الفعلي. +[^2]: طالما انك عضو في الخادم، سوف يعتقد الخادم دائماً انك في إتصال [Websocket] معه، ولن يقوم بترقية أي إتصال إلى [Websocket] -[^2]: يتم إضافة العنوان الخاص بـbob و الخادم الخاص به في جدول طلبات الدردشة للتاكد من عدم إستقبال إشعارات قبول/رفض من خوادم مزيفة هدفها الإزعاج. +[^3]: يتم إضافة العنوان الخاص بـbob و الخادم الخاص به في جدول طلبات الدردشة للتاكد من عدم إستقبال إشعارات قبول/رفض من خوادم مزيفة هدفها الإزعاج. -[^3]: للتاكد من انه الخادم فعلاً، لن يتم طلب منه المفتاح العام بشكل مباشر، بل سوف يتم جلبه من مسار الخاص به، وهو `/.well-known/oxidetalis/public` +[^4]: للتاكد من انه الخادم فعلاً، لن يتم طلب منه المفتاح العام بشكل مباشر، بل سوف يتم جلبه من مسار الخاص به، وهو /api/info [Websocket]: https://en.wikipedia.org/wiki/WebSocket [HMAC-SHA256]: https://en.wikipedia.org/wiki/HMAC