From 78a615c282fdb3534a9a6b0d7f705ba47187c4c5 Mon Sep 17 00:00:00 2001 From: Sad Lang Dev Date: Tue, 21 Jul 2026 13:33:26 +0300 Subject: [PATCH 1/2] =?UTF-8?q?dev-guide(backend):=20=D8=AF=D8=B1=D8=A7?= =?UTF-8?q?=D8=B3=D8=A9=20=D8=AD=D8=A7=D9=84=D8=A9=20=D8=AA=D9=88=D8=B3?= =?UTF-8?q?=D9=8A=D8=B9=20=D9=85=D9=83=D8=AA=D8=A8=D8=A9=20=D8=A7=D9=84?= =?UTF-8?q?=D8=AA=D8=B4=D9=81=D9=8A=D8=B1=20(5=20=D9=85=D8=B1=D8=A7=D8=AD?= =?UTF-8?q?=D9=84=20+=20Argon2id)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit يوثّق فصل جديد منهجيّة حملة توسيع مكتبة تشفير: worktree معزول لكل مرحلة + مرجع C مستقلّ مقابل شعاعات المعيار الرسميّة + مراجعة أميليا متزامنة إلزاميّة قبل الدفع. يضمّ ثلاثة دروس تنفيذيّة حقيقيّة من الحملة: تحيّز اختيار شعاعات الاختبار (Argon2id H0 rounding)، فخّ دمج تعارضات متتالية على دوال عشوائيّة مشتركة الاسم مختلفة الجسم، وفخّ حدّ MSVC C2026 بعد الدمج. مسجَّل في sync/sources.yaml وSUMMARY.md. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 5 --- src/SUMMARY.md | 1 + src/backend/crypto-library-expansion.md | 134 ++++++++++++++++++++++++ sync/sources.lock.json | 76 +++++++++----- sync/sources.yaml | 7 ++ 4 files changed, 189 insertions(+), 29 deletions(-) create mode 100644 src/backend/crypto-library-expansion.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 44ab76b..cf54982 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -38,6 +38,7 @@ - [توليد LLVM (المترجم sadc)](backend/llvm.md) - [الآلة الافتراضية (VM)](backend/vm.md) - [دراسة حالة: توحيد هاش/شفّر/فك_تشفير](backend/crypto-unification.md) +- [دراسة حالة: توسيع مكتبة التشفير (٥ مراحل + Argon2id)](backend/crypto-library-expansion.md) # الجزء السادس · أنظمة اللغة diff --git a/src/backend/crypto-library-expansion.md b/src/backend/crypto-library-expansion.md new file mode 100644 index 0000000..ad5033b --- /dev/null +++ b/src/backend/crypto-library-expansion.md @@ -0,0 +1,134 @@ +# دراسة حالة: توسيع مكتبة التشفير (٥ مراحل + Argon2id) + +بعد [توحيد هاش/شفّر](crypto-unification.md) (`هاش`/`شفّر`/`فك_تشفير` في وحدة `تأكيدات`)، وُسِّعت +اللغة بمكتبة تشفير حديثة كاملة في وحدة منفصلة `تشفير` — عبر RFC كامل +(`sadlang-rfcs/text/0000-توسيع-مكتبة-التشفير.md`) نُفِّذ على ٥ مراحل + مرحلة +إضافيّة (Argon2id) بطلب صريح من المالك رغم تأجيلها في نصّ RFC الأصليّ. المرجع +اللغويّ للمستخدم في +[sadlang-docs](https://github.com/sadlang/sadlang-docs/blob/main/src/language/security.md#وحدة-تشفير--المكتبة-الموسَّعة)؛ +هذه الصفحة للمساهم في **التنفيذ والمنهجيّة**. (نصّ RFC نفسه موجود على فرع +`rfc/expand-crypto-library` في `sadlang-rfcs` — لم يُدمَج إلى `main` بعد.) + +## المراحل + +| المرحلة | الدوال | المعيار | PR | +|---|---|---|---| +| ٠ | `عشوائي_آمن` | CSPRNG النظام | مدموج | +| ١ | `بلايك3` / `هاش_مفتاح` | BLAKE3 (keyed mode) | مدموج | +| ٢ | `اشتق_مفتاح_مرور` / `اشتق_مفتاح` | PBKDF2-HMAC-SHA256 (RFC 2898/8018) / HKDF-SHA256 (RFC 5869) | #217 | +| — | `أرجون2` | Argon2id (RFC 9106) — مؤجَّلة أصلًا، أُدرِجت بطلب صريح | #219 | +| ٣ | `شفر_موثق` / `فك_تشفير_موثق` | ChaCha20-Poly1305 AEAD (RFC 8439) | #220 | +| ٤ | `ولّد_مفتاح_خاص_x25519` وعائلتها (7 دوال) | X25519 (RFC 7748) + Ed25519 (RFC 8032) + SHA-512 ذاتيّ | #221 | + +كل الدوال ذاتيّة التنفيذ (self-rolled، بلا OpenSSL/libsodium) حفاظًا على قابليّة +العمل على هدف الوضع الحرّ (نفس قيد [[crypto-unification|توحيد هاش/شفّر]])، وسطح +اللغة لكل دالّة **سلسلة تدخل ⇒ سلسلة تخرج** حصرًا على كلا المحرِّكين — لا كائنات +مركَّبة عابرة للحدود. + +## المنهجيّة: كل مرحلة عبر worktree معزول + +```mermaid +flowchart LR + RFC["sadlang-rfcs: نصّ المرحلة"] --> WT["worktree معزول
wt-crypto-phaseN"] + WT --> REF["مرجع C مستقلّ (scratchpad)
يُختبَر مقابل شعاعات RFC الرسميّة"] + REF -->|"تطابق تامّ"| IMPL["نقل الكود لثلاث نسخ إنتاج:
مفسّر C++ / وقت تشغيل C / رابط أندرويد C"] + IMPL --> AMELIA["مراجعة أميليا مستقلّة
(متزامنة لا خلفيّة)"] + AMELIA -->|"إجازة"| PR["PR ضدّ dev
«لا دمج بلا إذن صريح»"] + AMELIA -->|"عِلَّة"| WT +``` + +كل مرحلة استُنسِخت بنفس القالب: (1) مرجع C مستقلّ في scratchpad يُختبَر بايتًا +بايت مقابل شعاعات الاختبار **الرسميّة** للمعيار (لا بيانات اختبار مؤلَّفة يدويًّا)؛ +(2) بعد التطابق التامّ فقط، نقل نفس المنطق إلى **ثلاث** نسخ إنتاج متطابقة — +المفسّر (`interpreter/src/builtins/builtin_module_crypto.cpp`)، وقت تشغيل +المترجم (`tools/compiler/runtime/sad_embedded_runtime.c`)، ورابط أندرويد +(`tools/compiler/compiler_driver_android_linker.cpp` — نسخة ثالثة منفصلة لأنّ +هذا الهدف [لا يشارك رابط سطح المكتب](crypto-unification.md)؛ يصطدم عادةً بحدّ +سلاسل MSVC الخام، انظر أدناه)؛ (3) مراجعة أميليا مستقلّة **متزامنة إلزاميّة** قبل +أيّ `git push` (لا خلفيّة — راجع فخّ التوقّف الموثَّق في الذاكرة الداخليّة)؛ (4) +PR ضدّ `dev` بلا دمج تلقائيّ، وسطر «لا دمج بلا إذن صريح» حرفيًّا في كل PR. + +## الدرس الأهمّ: تحيّز اختيار شعاعات الاختبار (Argon2id) + +أثناء Argon2id، طابق المرجع المستقلّ `libargon2` الرسميّة (عبر `argon2-cffi`) +تطابقًا تامًّا عبر 12 حالة اختبار اخترتُها بنفسي. رغم ذلك كشفت مراجعة أميليا +المستقلّة عِلَّة حقيقيّة: التجزئة الأوّليّة H0 (RFC 9106 §3.2) كانت تُطعَم بقيمة +تكلفة الذاكرة **المقرَّبة داخليًّا** لمضاعِف 4 (`m'`) بدل القيمة **الخام** — +والسبب أنّ **كل الحالات الاثنتَي عشرة صدفةً استعملت تكلفة ذاكرة مضاعِفة لـ4** +(8/1024/2048/4096)، فكان `m'==m` دومًا وأخفى العلّة رغم "التطابق التامّ" المُعلَن. + +> **الدرس:** اختيار حالات الاختبار بنفسك — حتى مع تنويع البارامترات — قد يحمل +> تحيّزًا غير واعٍ ينبع من نفس سوء الفهم الذي قد يكون وقع فيه التنفيذ نفسه. +> "طابق تنفيذًا مرجعيًّا مستقلًّا" ليس كافيًا وحده لكود تشفيريّ حسّاس — لازم أيضًا +> مراجعة تقرأ الخوارزميّة سطرًا سطرًا مقابل نصّ المعيار مباشرة، لا تكتفِ بالثقة +> بنتائج الاختبار. لخوارزميّة فيها تقريب/تقليم داخليّ، اختبر **عمدًا** حالة لا +> تقع على حدود التقريب. + +## فخّ الدمج المتسلسل: دالّة مشتركة الجسم مختلفة الاسم + +تفرّعت PR #219 (Argon2id) وPR #220 (AEAD) وPR #221 (X25519/Ed25519) من نفس +القاعدة (قبل #219) وتمسّ نفس الملفّات المشتركة (SIR opcode enum، مولّدات LLVM، +المفسّر، وقت تشغيل C، رابط أندرويد، YAML SoT). دمج كلّ فرع لاحق كشف جولة تعارض +جديدة، والقاعدة المتّبعة دومًا: **أبقِ إضافات الجانبين معًا، لا تُسقِط أيًّا +منهما**. الفخّ: كل فرع أضاف دالّة توليد عشوائيّة مساعدة باسم مختلف +(`sadx_random_bytes` مقابل `sad_crypto_random_bytes`) لكن جسمها شبه متطابق — +والنصّ "المشترك" الظاهر بعد علامة `>>>>>>>` في تعارض git ثلاثيّ ينتمي في +الحقيقة لدالّة واحدة فقط. محاولة حلّ هذا بتحرير واحد ضخم يفترض إعادة استخدام +هذا النصّ لكلتا الدالّتين تنتج **فسادًا صامتًا**: دالّة مكرَّرة، تعليق مبتور، +جسم دالّة ناقص — دون أيّ خطأ بناء فوريّ يكشفه. + +**الاكتشاف:** فحص توازن الأقواس (`python -c "text.count('{')==text.count('}')"`) +ثمّ إعادة الملفّ لحالته المتعارضة (`git checkout --conflict=merge -- `) +والبدء من جديد بتحريرات صغيرة متسلسلة على حدود كل علامة تعارض على حدة، مع كتابة +جسم كل دالّة كاملًا صراحة (تكرار المنطق بدل محاولة مشاركته نصّيًّا). طُبِّق هذا +الدرس بنجاح من المحاولة الأولى على الملفّ التالي المصاب بنفس النمط. + +## فخّ ما بعد الدمج: حدّ MSVC C2026 لسلاسل C الخام + +رابط أندرويد يُصدِر runtime التشفير كسلسلة C++ خام (`R"( ... )"`) مقسَّمة +استباقيًّا لتفادي حدّ MSVC (٦٥٥٣٥ بايت لكل حرفيّ سلسلة). كل فرع (PR #220 وPR +#221) قسَّم محتواه الخاصّ تحت الحدّ بمعزل عن الآخر — لكن دمج X25519/Ed25519 مع +AEAD في **نفس** القطعة بعد حلّ التعارض أعاد تجاوز الحدّ، وهذا **لا يكشفه أيّ +حارس ساكن أو مولِّد** — يظهر فقط كخطأ بناء `C2026: string too big` وقت الترجمة +الفعليّة على MSVC. + +> **القاعدة العامّة:** أيّ دمج لسلاسل C/C++ خام مقسَّمة مسبقًا بسبب حدّ حجم +> يحتاج تحقّقًا من الحدّ **من جديد بعد الدمج** — لا تفترض بقاء التقسيم الأصليّ +> كافيًا لمجرّد أنّ كل فرع وحده كان تحته. الحلّ: إغلاق `)";` بعد حدّ دالّة نظيف +> وفتح `R"(` جديدة، فيتحوّل تقسيم كل فرع (قطعتان) إلى ثلاث/أربع قطع بعد الدمج. + +## قرار تصميميّ: X25519/Ed25519 بدوال مقسَّمة لا كائن {عام، خاص} + +نصّ RFC اقترح دالّة توليد زوج مفاتيح تُرجع كائنًا بحقلين (عامّ وخاصّ). التصميم +الفعليّ استعمل **دالّتين منفصلتين** بدلًا من ذلك (`ولّد_مفتاح_خاص_x25519` + +`اشتق_مفتاح_عام_x25519`) — تجنّبًا لبناء آليّة تمرير كائنات مركَّبة جديدة عابرة +للمحرِّكين حين يكفي عقد "سلسلة ⇒ سلسلة" الموجود أصلًا لكل دالّة أخرى في +المكتبة. لا خسارة أمنيّة: المفتاح العامّ دومًا دالّة حتميّة للخاصّ (تقييد سلميّ + +ضرب بالنقطة الأساس)، فالفصل بلا أثر جانبيّ. + +## قرار تصميميّ: تباعُد فشل مقصود بين AEAD ونظيراتها + +`فك_تشفير_موثق` (AEAD) يفشل **مُغلَقًا** (fail-closed) دومًا على فشل مصادقة — +بخلاف `فك_تشفير` (وحدة `تأكيدات`، تشفير بلا مصادقة) الذي [يُرجع مدخله كما هو +صامتًا](crypto-unification.md#نقطة-الحسم-هل-يُذكَر-خطأ-فكّ_تشفير-على-مدخل-غير-صالح) +على خطأ تنسيق. لكن آليّة **الإبلاغ** عن هذا الفشل المُغلَق تتباعد بين +المحرِّكين، بنفس السبب الجذريّ الموثَّق سلفًا: المفسّر يرمي استثناءً قابلًا +للالتقاط بـ`حاول`/`امسك`؛ المترجم يطبع رسالة عامّة على `stderr` (لا تُسرّب +الوسم/المفتاح) ثمّ `exit(1)`، لأنّه لا يوجد اليوم مسار استثناء C-callable من +وقت تشغيل المترجم إلى LLVM. بناء هذا المسار العامّ **عمل لاحق موثَّق، خارج +نطاق هذه الحملة** — لكن الفشل نفسه مُغلَق على الحالتين، فلا يُرجع أيّ محرّك نصًّا +مُحرَّفًا صامتًا أبدًا (أأمن من تباعُد `فك_تشفير` غير الموثَّق فيه فشل مفتوح). + +## الاختبار + +كل مرحلة أضافت ملفّات إلى +`tests/behavior/sections/09_المكتبة_القياسية/04_تشفير/` (14 ملفًّا إجمالًا)، +كلّ واحد يُشغَّل عبر `sad-run.exe` **و**`sadc.exe` ويُقارَن الناتج حرفيًّا — +شعاعات RFC/مسابقة رسميّة لكل معيار (BLAKE3-team، RFC 2898/5869/7748/8032/8439/ +9106)، إضافة إلى حالات رفض صريحة (سرّ مشترك كلّه أصفار في X25519، توقيع/مفتاح +مُعبَث بهما في Ed25519، بارامترات خارج الحدود الآمنة في KDFs). + +--- +**اقرأ بعده:** [توحيد هاش/شفّر/فك_تشفير](crypto-unification.md) · +[دوال مضمنة ووحدات](../systems/builtins.md) · +[نظام معالجة الأخطاء](../systems/errors.md). diff --git a/sync/sources.lock.json b/sync/sources.lock.json index 73ad217..adbc88f 100644 --- a/sync/sources.lock.json +++ b/sync/sources.lock.json @@ -5,40 +5,58 @@ "sources": { ".github/BRANCH_PROTECTION_POLICY.md": "2cf24d5c67e9c2c9932ce7e9dae784d85216c4d2", ".github/skills/sad-lang-dev/references/governance.md": "9d6d0e8524cf7c27820fc0f6f25167ab2d702ed3", - "compiler/include/frontend/sir_types.h": "2baeea3b731a20b960fd3253c708cb04de75d0cd", - "compiler/src/backend/llvm": "32d6a3cc07ebf51e3f2fa2933afb92f99143d06f", - "interpreter/include/core/interpreter_core.h": "031ec8bc4b77e628b67615c7680897387fe821cc", - "interpreter/include/visitors/expression_evaluator.h": "a6e90c03cb75de00525fd7888bb61c91d57aa2fc", - "interpreter/src/builtins": "a6699522fd97b4053bc4b6d39c8ad3ca7ba2e17c", - "language-truth": "13c2e41986f2a5d7b2e4897efd593d295d14e909", - "language-truth/_schemas": "bca3eaef4997d6318feeeb4c80dafa44c454024c", - "language-truth/builtins": "870a0daee27d07cac40aee70659b2afeb4884c80", - "language-truth/errors": "1225323dae85f68a5b4658012b80ae6e58a61583", - "language-truth/grammar": "efd940df914c0cb125e13f4ee9590fb5c7e677ec", - "language-truth/keywords.yaml": "64bb3292e235b268228792c5e1fc49d1e220e56e", - "language-truth/operators.yaml": "1b8aa3bc7fbf6269e7914f2e915612c1ca5ffe65", + "compiler/include/frontend/sir_constants.h": "863b641a4bcd8340fc83718c5dd7bcf6d1b00383", + "compiler/include/frontend/sir_types.h": "b4f2922204e87022bad79d60437e6401fb831675", + "compiler/src/backend/llvm": "b1367ddcc6c5fbb449125aaa12b15479a3d247b6", + "compiler/src/backend/llvm/builders/builtins/io_builtins_ops.cpp": "8485d44d9b158ee5a3be5c377cc90bb47d9fabd4", + "compiler/src/backend/llvm/builders/builtins/security_builtins_ops.cpp": "d734a3a1617d01b6db7b4e3d1f399d19be6a626b", + "compiler/src/backend/llvm/builders/collections/map_ops.cpp": "e526c5f4c77137bcd6d1e9bc126551718a7fce1f", + "compiler/src/frontend/builders/builtins_core.cpp": "fd1500bc4aa590b8af64966d7787e8659fb94090", + "compiler/src/frontend/builders/builtins_security.cpp": "6f480c5e00622aa83bdefe57a2b5a6a877321773", + "compiler/src/frontend/builders/expression_comp2.cpp": "0794882548ffa74804b85937ff1655ebc3d33e95", + "compiler/src/frontend/builders/expression_comprehensions.cpp": "59071edc03f1a47d6abfdea9fa259502cfe4d546", + "compiler/src/frontend/builders/statement_for_range.cpp": "44b92ab3b5f1ec6bcf295482554bd724f21d384f", + "features/graphics/core/include/sad_ui/prop_keys.h": "8b6ab7b0b670361b5f810ba08535978941f5f2ef", + "features/graphics/core/src/layout.cpp": "62cc475b066868a08d95014f6e11e0cbfbffc86e", + "interpreter/include/core/interpreter_core.h": "10ed076702d3d20491c953c5047b7421f615370c", + "interpreter/include/visitors/expression_evaluator.h": "f203128e95c3748d08376c8107581a23fad472d6", + "interpreter/src/builtins": "b6976768da7f19004b0d09fd4505bc2c3f7f2945", + "interpreter/src/builtins/builtin_module_assertions.cpp": "6c6a59ac1fb6c59072cb422fa591e3dc0206db66", + "interpreter/src/builtins/builtin_module_crypto.cpp": "8b91ba562ce32776810bb508f0130087ea0fb1af", + "interpreter/src/visitors/expression_evaluator_members_advanced.cpp": "929487fe7baa5595c0f93e6a0ca7d8dadfec7860", + "language-truth": "6f3d01464bf96cf09d9bd288d3a28a7e850822b5", + "language-truth/_schemas": "ee6091fa53d18bd2b637e27d00ba272ffe9729d9", + "language-truth/builtins": "b469c675c5a29cb014ea8a3794a8a207ad2782de", + "language-truth/builtins/assertions.yaml": "68450ba10c3d4eb49bb681215812f95d6eb62cb7", + "language-truth/builtins/crypto.yaml": "543ee1ecc79c6d42f791a8aeb77ad6f7df609d8e", + "language-truth/errors": "3ad7731c6ea12e69920127a419034b127846d57d", + "language-truth/grammar": "574f6217f911cfca6186c7b9cb744584906112e5", + "language-truth/keywords.yaml": "cac6446b9342048947fee8f4d21235240b69e85a", + "language-truth/operators.yaml": "2a0b390fa38b987667f64090d2e5d31366f28079", "language-truth/types.yaml": "23e4b8e9c136aa4f5b950dfff342fa8ffc509958", - "scripts/codegen": "46007defa1b88d4aad0809aecb15803c896019fb", + "language-truth/ui_props.yaml": "50a952c85826b48a1a0134e5ae24f66c61f66863", + "scripts/codegen": "d714fa8c8ac7c3abb43f4ea497e3947dbeb67d7b", "scripts/codegen/gen_error_messages.py": "3a70f260e525f133b9a93f9919b3622e9056e871", - "scripts/codegen/gen_parser_grammar_docs.py": "aaba9f37bd6d31cf0fcb190190c49fe742ad41c3", + "scripts/codegen/gen_parser_grammar_docs.py": "7b9f7a8a87252ee4599b4fa6da79cb18bbb05120", + "scripts/codegen/gen_ui_props.py": "0602ac3c3c13243c75f800118d69e14420e0102c", "shared/ast/include/ast_visitor.h": "cee84846d4097724c8d62c13f036d6fc1686ee6f", - "shared/errors/include/error_codes.h": "f3be2d763567d8381002ee1ed4f5ff9176b8a05a", + "shared/ast/include/expressions.h": "318edd24a93755db09e9b2a8df9002af727b15c2", + "shared/errors/include/error_codes.h": "38c9fee070d8737bfa1aed7067fc05093593fa0f", "shared/errors/include/error_manager.h": "63c70109de759eaedf809642d11681a1453db5d3", - "shared/lexer/include/token.h": "932c37e4ca3027dac37877d4004526db2020256c", - "shared/lexer/src/lexer_core.cpp#L100-1770": "sha256:0ffcbb9c3158f41d", - "shared/lexer/src/lexer_keywords.cpp": "9daca47444923442007e3089e528f5966c6f8f91", + "shared/lexer/include/token.h": "94163f80498521d5fed5f20e212c3decc82f0326", + "shared/lexer/src/lexer_core.cpp#L100-1770": "sha256:8b8d43f5e164f96e", + "shared/lexer/src/lexer_keywords.cpp": "e9a7574ee4075bd2811825dc8df439726395e7a1", "shared/memory_policy/include/memory/policy/gc_mode.h": "78664e785f310b8bb53a878ec6a096f4bb2d0015", - "shared/memory_policy/include/memory/policy/memory_mode_flag.h": "9ce053bd07b908a8aa3d6aa25e54d7269fa88597", - "shared/memory_policy/src/memory_mode_flag.cpp": "c2a82c588a8acba08e624b47b6496a1232f3739c", - "shared/parser/include/parser_core.h": "c11b333988e48c5b984ffe5b6c42397cc01aa575", - "shared/parser/src/core/parser_expressions.cpp#L45-1130": "sha256:31ffeca3254dab10", - "shared/parser/src/core/parser_main.cpp#L40-1500": "sha256:3ae6310f5ebc9df6", - "shared/types/generated/sad_type_kind_generated.h": "fd336d51f192b64fe7e63ca25fbb2938479003a5", + "shared/memory_policy/include/memory/policy/memory_mode_flag.h": "0eb7ce0039f0e6052ed6bfa478311a9b9f1b2018", + "shared/memory_policy/src/memory_mode_flag.cpp": "dee66fea02ad221ad035b5654e17cc007603d447", + "shared/parser/include/parser_core.h": "37f551cf43e9a028096e2771f5ceaffbec6a73ff", + "shared/parser/src/core/parser_expressions.cpp#L45-1130": "sha256:fb4f61789cabec6e", + "shared/parser/src/core/parser_main.cpp#L40-1500": "sha256:98f376b47cdd8339", + "shared/parser/src/statements/parser_advanced.cpp": "e9e3cc626df13a55a66443d4a6341ab499b6844f", + "shared/types/generated/sad_type_kind_generated.h": "cc5b4b28a42394f053f805ea65b2817abcd4887c", "shared/types/include/sad_type_system.h": "4e792e5b8ddb605fbb1c33200c019e9ded39f656", - "shared/types/include/type_bridge.h": "0bf37baafc415409082a284c9b2de84d3837e4e1", - "shared/types/include/value.h": "9b40909fd452fac4e27e41aed85852020f2af1e6", - "vm/include/sad_vm_executor.h": "2a9c74f182c5d76643b58dfd036877ad03ad97c1", - "vm/include/sad_vm_opcodes.h": "8b92d998a5a26d3b9716d25bd6dee8a61a5fca4d", - "vm/src/sad_vm_executor.cpp": "76a1d059b635ebc6a3d55f0fb9b75c95fa2984a7" + "shared/types/include/value.h": "2cb510870e4b6c4abdcd8cb7f338303d75828328", + "tools/compiler/compiler_driver_android_linker.cpp": "e0c69cb8859b4d6b65bde3e4a4d37980c108dbd9", + "tools/compiler/runtime/sad_embedded_runtime.c": "6fa885fb7277c79674aaab298ee5cadd6ff162b3" } } diff --git a/sync/sources.yaml b/sync/sources.yaml index 793136d..c11b419 100644 --- a/sync/sources.yaml +++ b/sync/sources.yaml @@ -105,6 +105,13 @@ chapters: - interpreter/src/builtins/builtin_module_assertions.cpp - language-truth/builtins/assertions.yaml + - file: src/backend/crypto-library-expansion.md + sources: + - interpreter/src/builtins/builtin_module_crypto.cpp + - tools/compiler/runtime/sad_embedded_runtime.c + - tools/compiler/compiler_driver_android_linker.cpp + - language-truth/builtins/crypto.yaml + - file: src/sot/philosophy.md sources: - language-truth/_schemas From 2a11e8c500829197fec18afc9c1e8c48b9e3389b Mon Sep 17 00:00:00 2001 From: Sad Lang Dev Date: Tue, 21 Jul 2026 14:04:50 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D8=AFev-guide:=20=D8=AA=D8=B6=D9=8A=D9=8A?= =?UTF-8?q?=D9=82=20=D8=AA=D8=AD=D8=AF=D9=8A=D8=AB=20sources.lock.json=20?= =?UTF-8?q?=D9=84=D9=85=D8=B5=D8=A7=D8=AF=D8=B1=20=D8=A7=D9=84=D9=81=D8=B5?= =?UTF-8?q?=D9=84=20=D8=A7=D9=84=D8=AC=D8=AF=D9=8A=D8=AF=20=D9=81=D9=82?= =?UTF-8?q?=D8=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit حارس القفل (sync-guard) رفض الدفعة السابقة لأنّ --update حدَّث بصمات كل الفصول الـ21 لا فصل توسيع مكتبة التشفير فقط. أُعيد بناء القفل من نسخة main + إضافة بصمات المصادر الأربعة الجديدة حصرًا. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 5 --- sync/sources.lock.json | 74 +++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 44 deletions(-) diff --git a/sync/sources.lock.json b/sync/sources.lock.json index adbc88f..d9e8944 100644 --- a/sync/sources.lock.json +++ b/sync/sources.lock.json @@ -5,58 +5,44 @@ "sources": { ".github/BRANCH_PROTECTION_POLICY.md": "2cf24d5c67e9c2c9932ce7e9dae784d85216c4d2", ".github/skills/sad-lang-dev/references/governance.md": "9d6d0e8524cf7c27820fc0f6f25167ab2d702ed3", - "compiler/include/frontend/sir_constants.h": "863b641a4bcd8340fc83718c5dd7bcf6d1b00383", - "compiler/include/frontend/sir_types.h": "b4f2922204e87022bad79d60437e6401fb831675", - "compiler/src/backend/llvm": "b1367ddcc6c5fbb449125aaa12b15479a3d247b6", - "compiler/src/backend/llvm/builders/builtins/io_builtins_ops.cpp": "8485d44d9b158ee5a3be5c377cc90bb47d9fabd4", - "compiler/src/backend/llvm/builders/builtins/security_builtins_ops.cpp": "d734a3a1617d01b6db7b4e3d1f399d19be6a626b", - "compiler/src/backend/llvm/builders/collections/map_ops.cpp": "e526c5f4c77137bcd6d1e9bc126551718a7fce1f", - "compiler/src/frontend/builders/builtins_core.cpp": "fd1500bc4aa590b8af64966d7787e8659fb94090", - "compiler/src/frontend/builders/builtins_security.cpp": "6f480c5e00622aa83bdefe57a2b5a6a877321773", - "compiler/src/frontend/builders/expression_comp2.cpp": "0794882548ffa74804b85937ff1655ebc3d33e95", - "compiler/src/frontend/builders/expression_comprehensions.cpp": "59071edc03f1a47d6abfdea9fa259502cfe4d546", - "compiler/src/frontend/builders/statement_for_range.cpp": "44b92ab3b5f1ec6bcf295482554bd724f21d384f", - "features/graphics/core/include/sad_ui/prop_keys.h": "8b6ab7b0b670361b5f810ba08535978941f5f2ef", - "features/graphics/core/src/layout.cpp": "62cc475b066868a08d95014f6e11e0cbfbffc86e", - "interpreter/include/core/interpreter_core.h": "10ed076702d3d20491c953c5047b7421f615370c", - "interpreter/include/visitors/expression_evaluator.h": "f203128e95c3748d08376c8107581a23fad472d6", - "interpreter/src/builtins": "b6976768da7f19004b0d09fd4505bc2c3f7f2945", - "interpreter/src/builtins/builtin_module_assertions.cpp": "6c6a59ac1fb6c59072cb422fa591e3dc0206db66", + "compiler/include/frontend/sir_types.h": "2baeea3b731a20b960fd3253c708cb04de75d0cd", + "compiler/src/backend/llvm": "32d6a3cc07ebf51e3f2fa2933afb92f99143d06f", + "interpreter/include/core/interpreter_core.h": "031ec8bc4b77e628b67615c7680897387fe821cc", + "interpreter/include/visitors/expression_evaluator.h": "a6e90c03cb75de00525fd7888bb61c91d57aa2fc", + "interpreter/src/builtins": "a6699522fd97b4053bc4b6d39c8ad3ca7ba2e17c", "interpreter/src/builtins/builtin_module_crypto.cpp": "8b91ba562ce32776810bb508f0130087ea0fb1af", - "interpreter/src/visitors/expression_evaluator_members_advanced.cpp": "929487fe7baa5595c0f93e6a0ca7d8dadfec7860", - "language-truth": "6f3d01464bf96cf09d9bd288d3a28a7e850822b5", - "language-truth/_schemas": "ee6091fa53d18bd2b637e27d00ba272ffe9729d9", - "language-truth/builtins": "b469c675c5a29cb014ea8a3794a8a207ad2782de", - "language-truth/builtins/assertions.yaml": "68450ba10c3d4eb49bb681215812f95d6eb62cb7", + "language-truth": "13c2e41986f2a5d7b2e4897efd593d295d14e909", + "language-truth/_schemas": "bca3eaef4997d6318feeeb4c80dafa44c454024c", + "language-truth/builtins": "870a0daee27d07cac40aee70659b2afeb4884c80", "language-truth/builtins/crypto.yaml": "543ee1ecc79c6d42f791a8aeb77ad6f7df609d8e", - "language-truth/errors": "3ad7731c6ea12e69920127a419034b127846d57d", - "language-truth/grammar": "574f6217f911cfca6186c7b9cb744584906112e5", - "language-truth/keywords.yaml": "cac6446b9342048947fee8f4d21235240b69e85a", - "language-truth/operators.yaml": "2a0b390fa38b987667f64090d2e5d31366f28079", + "language-truth/errors": "1225323dae85f68a5b4658012b80ae6e58a61583", + "language-truth/grammar": "efd940df914c0cb125e13f4ee9590fb5c7e677ec", + "language-truth/keywords.yaml": "64bb3292e235b268228792c5e1fc49d1e220e56e", + "language-truth/operators.yaml": "1b8aa3bc7fbf6269e7914f2e915612c1ca5ffe65", "language-truth/types.yaml": "23e4b8e9c136aa4f5b950dfff342fa8ffc509958", - "language-truth/ui_props.yaml": "50a952c85826b48a1a0134e5ae24f66c61f66863", - "scripts/codegen": "d714fa8c8ac7c3abb43f4ea497e3947dbeb67d7b", + "scripts/codegen": "46007defa1b88d4aad0809aecb15803c896019fb", "scripts/codegen/gen_error_messages.py": "3a70f260e525f133b9a93f9919b3622e9056e871", - "scripts/codegen/gen_parser_grammar_docs.py": "7b9f7a8a87252ee4599b4fa6da79cb18bbb05120", - "scripts/codegen/gen_ui_props.py": "0602ac3c3c13243c75f800118d69e14420e0102c", + "scripts/codegen/gen_parser_grammar_docs.py": "aaba9f37bd6d31cf0fcb190190c49fe742ad41c3", "shared/ast/include/ast_visitor.h": "cee84846d4097724c8d62c13f036d6fc1686ee6f", - "shared/ast/include/expressions.h": "318edd24a93755db09e9b2a8df9002af727b15c2", - "shared/errors/include/error_codes.h": "38c9fee070d8737bfa1aed7067fc05093593fa0f", + "shared/errors/include/error_codes.h": "f3be2d763567d8381002ee1ed4f5ff9176b8a05a", "shared/errors/include/error_manager.h": "63c70109de759eaedf809642d11681a1453db5d3", - "shared/lexer/include/token.h": "94163f80498521d5fed5f20e212c3decc82f0326", - "shared/lexer/src/lexer_core.cpp#L100-1770": "sha256:8b8d43f5e164f96e", - "shared/lexer/src/lexer_keywords.cpp": "e9a7574ee4075bd2811825dc8df439726395e7a1", + "shared/lexer/include/token.h": "932c37e4ca3027dac37877d4004526db2020256c", + "shared/lexer/src/lexer_core.cpp#L100-1770": "sha256:0ffcbb9c3158f41d", + "shared/lexer/src/lexer_keywords.cpp": "9daca47444923442007e3089e528f5966c6f8f91", "shared/memory_policy/include/memory/policy/gc_mode.h": "78664e785f310b8bb53a878ec6a096f4bb2d0015", - "shared/memory_policy/include/memory/policy/memory_mode_flag.h": "0eb7ce0039f0e6052ed6bfa478311a9b9f1b2018", - "shared/memory_policy/src/memory_mode_flag.cpp": "dee66fea02ad221ad035b5654e17cc007603d447", - "shared/parser/include/parser_core.h": "37f551cf43e9a028096e2771f5ceaffbec6a73ff", - "shared/parser/src/core/parser_expressions.cpp#L45-1130": "sha256:fb4f61789cabec6e", - "shared/parser/src/core/parser_main.cpp#L40-1500": "sha256:98f376b47cdd8339", - "shared/parser/src/statements/parser_advanced.cpp": "e9e3cc626df13a55a66443d4a6341ab499b6844f", - "shared/types/generated/sad_type_kind_generated.h": "cc5b4b28a42394f053f805ea65b2817abcd4887c", + "shared/memory_policy/include/memory/policy/memory_mode_flag.h": "9ce053bd07b908a8aa3d6aa25e54d7269fa88597", + "shared/memory_policy/src/memory_mode_flag.cpp": "c2a82c588a8acba08e624b47b6496a1232f3739c", + "shared/parser/include/parser_core.h": "c11b333988e48c5b984ffe5b6c42397cc01aa575", + "shared/parser/src/core/parser_expressions.cpp#L45-1130": "sha256:31ffeca3254dab10", + "shared/parser/src/core/parser_main.cpp#L40-1500": "sha256:3ae6310f5ebc9df6", + "shared/types/generated/sad_type_kind_generated.h": "fd336d51f192b64fe7e63ca25fbb2938479003a5", "shared/types/include/sad_type_system.h": "4e792e5b8ddb605fbb1c33200c019e9ded39f656", - "shared/types/include/value.h": "2cb510870e4b6c4abdcd8cb7f338303d75828328", + "shared/types/include/type_bridge.h": "0bf37baafc415409082a284c9b2de84d3837e4e1", + "shared/types/include/value.h": "9b40909fd452fac4e27e41aed85852020f2af1e6", "tools/compiler/compiler_driver_android_linker.cpp": "e0c69cb8859b4d6b65bde3e4a4d37980c108dbd9", - "tools/compiler/runtime/sad_embedded_runtime.c": "6fa885fb7277c79674aaab298ee5cadd6ff162b3" + "tools/compiler/runtime/sad_embedded_runtime.c": "6fa885fb7277c79674aaab298ee5cadd6ff162b3", + "vm/include/sad_vm_executor.h": "2a9c74f182c5d76643b58dfd036877ad03ad97c1", + "vm/include/sad_vm_opcodes.h": "8b92d998a5a26d3b9716d25bd6dee8a61a5fca4d", + "vm/src/sad_vm_executor.cpp": "76a1d059b635ebc6a3d55f0fb9b75c95fa2984a7" } }