تتميز محفظة OneKey للأجهزة ببرامج ثابتة مفتوحة المصدر بالكامل. يمكنك عرض كود البرنامج الثابت مفتوح المصدر للمنتجات ذات الصلة على مستودع OneKey على GitHub. قبل إصدار ملفات البرنامج الثابت المخصصة للإنتاج الضخم رسميًا، يستخدم فريق OneKey أدوات أتمتة الإنشاء على GitHub (GitHub CI) لتجميع وبناء كود البرنامج الثابت المصدري من مستودعات البرامج الثابتة ذات الصلة. ثم يتم توقيع الملفات بواسطة فريق OneKey قبل إصدارها رسميًا.
تقدم هذه المقالة طريقة تحقق ذاتية، عن طريق مقارنة المجموعات الاختبارية للملفات قبل وبعد التوقيع المتعدد للفريق الرسمي، للتحقق من اتساق ملفات البرنامج الثابت مع الكود المفتوح المصدر.
للحصول على طرق حول كيفية التحقق من اتساق بيانات المصدر للملفات المختلفة باستخدام دالة التجزئة المشفرة SHA-256 (مقارنة المجموعات الاختبارية)، راجع هذه المقالة.
مستودعات البرامج الثابتة مفتوحة المصدر
OneKey Pro
⚙ برنامج النظام الثابت: github.com/OneKeyHQ/firmware-pro
برنامج البلوتوث الثابت: github.com/OneKeyHQ/bluetooth-firmware-pro
OneKey Classic 1S
⚙ برنامج النظام الثابت: github.com/OneKeyHQ/firmware-classic1s
برنامج البلوتوث الثابت: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Classic
⚙ برنامج النظام الثابت: github.com/OneKeyHQ/firmware/tree/bixin_dev
برنامج البلوتوث الثابت: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Touch
⚙ برنامج النظام الثابت: github.com/OneKeyHQ/firmware (فرع: touch)
برنامج البلوتوث الثابت: github.com/OneKeyHQ/bluetooth-firmware-touch
OneKey Mini
⚙ برنامج النظام الثابت: github.com/OneKeyHQ/firmware/tree/mini
لتكرار إصدار البرنامج الثابت الخاص بـ OneKey، اتبع البرنامج التعليمي بالفيديو أدناه
عملية إصدار البرنامج الثابت
عندما يكون برنامج النظام الثابت القياسي الرسمي أو برنامج البلوتوث الثابت جاهزًا للإصدار، سيقوم فريق OneKey بتشغيل الإجراء المقابل للمستودع لتجميع الكود المصدري. بعد التجميع الناجح، يتم تحميل الملفات إلى مساحة تخزين GitHub Artifacts، في انتظار اكتمال الفريق للتوقيع المتعدد الداخلي قبل وضعها على شبكة توصيل المحتوى (CDN) الخاصة بـ OneKey. بعد تحديث ملف config.json، يتم دفع إشعارات التحديث عبر تطبيق OneKey و موقع تحديث البرامج الثابتة لـ OneKey، مما يدفع المستخدمين إلى ترقية برامجهم الثابتة. ارجع إلى الرسم التوضيحي أدناه للعملية المحددة.
الأهداف
التحقق من أن "ملف البرنامج الثابت الموقّع من فريق OneKey" مشتق من "ملف البرنامج الثابت الموقّع مسبقًا بواسطة GitHub CI" في مستودع OneKey مفتوح المصدر.
التحقق من الاتساق بين "ملف البرنامج الثابت الموقّع من فريق OneKey" و "ملف البرنامج الثابت المخزن على شبكة CDN الرسمية لـ OneKey".
المتطلبات المسبقة
برنامج النظام الثابت برنامج البلوتوث الثابت
✔ تنزيل ملف البرنامج الثابت الموقّع مسبقًا بواسطة GitHub CI (غير موقع)
انتقل إلى إصدار البرنامج الثابت الرسمي لأجهزة OneKey على GitHub: https://github.com/OneKeyHQ/firmware/releases
ابحث عن إصدار البرنامج الثابت الذي تريد التحقق منه وانقر فوق رابط GitHub Action.
انقر فوق اسم البرنامج الثابت تحت Artifacts للتنزيل (يلزم تسجيل الدخول إلى GitHub).
✔ تنزيل ملف البرنامج الثابت الموقّع من فريق OneKey (موقّع)
انتقل إلى إصدار البرنامج الثابت الرسمي لأجهزة OneKey على GitHub: https://github.com/OneKeyHQ/firmware/releases
ابحث عن إصدار البرنامج الثابت الذي تريد التحقق منه.
انقر لتنزيل ملف bin تحت Assets.
✔ تنزيل ملف البرنامج الثابت المخزن على شبكة CDN الرسمية لـ OneKey (موقّع)
انتقل إلى ملف OneKey CDN: https://data.onekey.so/config.json
ابحث عن إصدار البرنامج الثابت الذي تريد التحقق منه.
انسخ الرابط تحت حقل "url".
افتح في نافذة متصفح جديدة للتنزيل التلقائي لملف bin.
✔ تنزيل ملف برنامج البلوتوث الثابت الموقّع مسبقًا بواسطة GitHub CI (غير موقع)
انتقل إلى إصدار البرنامج الثابت الرسمي للبلوتوث لأجهزة OneKey على GitHub
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
ابحث عن إصدار البرنامج الثابت الذي تريد التحقق منه وانقر فوق رابط GitHub Action.
انقر فوق اسم البرنامج الثابت تحت Artifacts للتنزيل (يلزم تسجيل الدخول إلى GitHub).
✔ تنزيل ملف برنامج البلوتوث الثابت الموقّع من فريق OneKey (موقّع)
انتقل إلى إصدار البرنامج الثابت الرسمي للبلوتوث لأجهزة OneKey على GitHub
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
ابحث عن إصدار البرنامج الثابت الذي تريد التحقق منه.
انقر لتنزيل ملف bin تحت Assets.
✔ تنزيل ملف برنامج البلوتوث الثابت المخزن على شبكة CDN الرسمية لـ OneKey (موقّع)
انتقل إلى ملف OneKey CDN: https://data.onekey.so/config.json
ابحث عن إصدار البرنامج الثابت الذي تريد التحقق منه.
انسخ الرابط تحت حقل "ble" - "webUpdate".
افتح في نافذة متصفح جديدة للتنزيل التلقائي لملف bin.
✔ تنزيل وتثبيت Python
انتقل إلى: https://www.python.org/downloads/
قم بتنزيل أحدث إصدار من Python وتثبيته.
الخطوات
فيما يلي خطوات التحقق للهدفين المحددين سابقًا:
برنامج النظام الثابت برنامج البلوتوث الثابت
عملية التحقق مع البرنامج الثابت الموقّع مسبقًا بواسطة GitHub CI (النظام)
افتح الطرفية.
قم بتشغيل الأمر أدناه (ملف البرنامج الثابت الموقّع من فريق OneKey):
tail -c +1024 /path/to/(file path) | shasum -a 256
قم بتشغيل الأمر أدناه (ملف البرنامج الثابت الموقّع مسبقًا بواسطة GitHub CI):
tail -c +1024 /path/to/(file path) | shasum -a 256
قارن المجموعات الاختبارية التي تم إنشاؤها بواسطة الأمرين. إذا تطابقت النتائج، يمكن التأكيد على أن "ملف البرنامج الثابت الموقّع من فريق OneKey" مشتق من "ملف البرنامج الثابت الموقّع مسبقًا بواسطة GitHub CI" في مستودع OneKey مفتوح المصدر.
بالنسبة لبرنامج النظام الثابت، تتم إضافة نتيجة توقيع بحجم 1024 بايت إلى إصدار CI للبرنامج الثابت، والتي يتحقق منها محمل الإقلاع عند بدء تشغيل الجهاز.
عملية التحقق مع ملف البرنامج الثابت المخزن على شبكة CDN الرسمية لـ OneKey (النظام)
افتح الطرفية.
قم بتشغيل الأمر أدناه (ملف البرنامج الثابت الموقّع من فريق OneKey):
shasum -a 256 (file path)
قم بتشغيل الأمر أدناه (ملف البرنامج الثابت المخزن على شبكة CDN الرسمية لـ OneKey):
shasum -a 256 (file path)
قارن المجموعات الاختبارية التي تم إنشاؤها بواسطة الأمرين. إذا تطابقت النتائج، يتم تأكيد اتساق الكود بين ملفي البرنامج الثابت.
عملية التحقق مع البرنامج الثابت الموقّع مسبقًا بواسطة GitHub CI (البلوتوث)
ابحث عن ملف ota.bin في مجلد برنامج البلوتوث الثابت الموقّع مسبقًا بواسطة GitHub CI الذي تم تنزيله.
افتح الطرفية في نفس المجلد مع ota.bin.
استدعِ Python بالأمر: python3
قم بتشغيل الأمر أدناه للحصول على المجموعة الاختبارية لبرنامج البلوتوث الثابت الموقّع مسبقًا بواسطة GitHub CI.
exec("""\nimport struct, hashlib\nwith open("ota.bin", mode="br") as f:\n f.seek(0x0C)\n codelen = struct.unpack("i", f.read(4))[0] - 512\n f.seek(0x600)\n print("".join(format(x, "02x") for x in hashlib.sha256(f.read(codelen)).digest()))\n""")
قم بتشغيل نفس الأمر مع ملف برنامج البلوتوث الثابت الموقّع من فريق OneKey.
ملاحظة: يرجى تغيير ota.bin في الأمر إلى اسم ملف برنامج البلوتوث الثابت الموقّع من فريق OneKey.
قارن المجموعات الاختبارية التي تم إنشاؤها بواسطة الأمرين. إذا تطابقت النتائج، يمكن التأكيد على أن "ملف البرنامج الثابت الموقّع من فريق OneKey" مشتق من "ملف البرنامج الثابت الموقّع مسبقًا بواسطة GitHub CI" في مستودع OneKey مفتوح المصدر.
عملية التحقق مع ملف البرنامج الثابت المخزن على شبكة CDN الرسمية لـ OneKey (البلوتوث)
افتح طرفية في نفس المجلد مع ملف برنامج البلوتوث الثابت الموقّع من فريق OneKey.
استدعِ Python بالأمر: python3
انسخ الأمر أدناه:
exec("""\nimport struct, hashlib\nwith open("ota.bin", mode="br") as f:\n f.seek(0x0C)\n codelen = struct.unpack("i", f.read(4))[0] - 512\n f.seek(0x600)\n print("".join(format(x, "02x") for x in hashlib.sha256(f.read(codelen)).digest()))\n""")
غيّر ota.bin إلى اسم ملف برنامج البلوتوث الثابت الموقّع من فريق OneKey الذي تم تنزيله.
قم بتشغيل الأمر للحصول على المجموعة الاختبارية.
كرر الخطوات المذكورة أعلاه مع ملف برنامج البلوتوث الثابت المخزن على شبكة CDN الرسمية لـ OneKey الذي تم تنزيله.
قارن المجموعات الاختبارية التي تم إنشاؤها بواسطة الأمرين. إذا تطابقت النتائج، يتم تأكيد اتساق الكود بين ملفي البرنامج الثابت.
