
تطبيقات HQC المُحسَّنة لـ KEM ما بعد الكمّي لـ AVX2 و AVX-512 مع GFNI، بالإضافة إلى مجموعة موحّدة للقياس المرجعي و NIST KAT لبوابات إنترنت الأشياء x86.
يحتوي هذا المستودع على تطبيقات HQC المحسّنة وشيفرة القياس المرجعي (benchmarking) المصاحبة للورقة البحثية "Accelerating HQC for Post-Quantum TLS 1.3 on x86 IoT Gateways". وهو تفريع (fork) من مستودع HQC الرسمي، موسّع بتطبيقات AVX-512 + GFNI ومجموعة قياس موحّدة تبني كل تطبيق مُقارَن من نفس قاعدة الشيفرة، وأعلام المترجم، وبروتوكول القياس المرجعي.
تجتاز جميع التطبيقات اختبارات الإجابة المعروفة (KAT) الخاصة بـ NIST لـ HQC-1 و HQC-3 و HQC-5، وتحافظ على تدفق التحكم المستقل عن المدخلات ونمط الوصول إلى الذاكرة الخاص بالتطبيق المرجعي.
يُختار كل متغيّر ضمن src/x86_64/ وقت الإعداد (configure) عبر
-DHQC_X86_IMPL=<variant> ويُبنى في مكتبته وملفات اختباره الثنائية الخاصة به.
| المتغيّر | تسمية الورقة | ISA | الوصف |
|---|---|---|---|
avx256 | HQC reference | AVX2 | التطبيق الرسمي المحسّن (خط الأساس) |
avx256_TC_Jang | Jang et al. | AVX2 | ضرب GFmulOpt Toom-Cook/Karatsuba |
avx256_TC_GFNI | Ours (AVX2) | AVX2+GFNI | مفكّكات GFNI Reed-Solomon / Reed-Muller الخاصة بنا على بناء AVX2 |
avx256_FAFFT_GFNI_chen | Chen et al. | AVX2+GFNI | ضرب FAFFT، التدفق الأصلي غير المخزّن مؤقتًا |
avx256_FAFFT_GFNI_chen_x2 | Chen et al. (dagger) | AVX2+GFNI | FAFFT مع تدفق ring_mul_x2 ذي المعامل المشترك |
avx256_FAFFT_GFNI_ours | Ours FAFFT (AVX2) | AVX2+GFNI | FAFFT + تحويل أساسي بذيل صفري + مفكّكاتنا |
avx512_Robert | Robert–Véron | AVX-512 | ضرب كثيرات الحدود AVX-512 من Robert–Véron |
avx512_Cabral | Cabral et al. | AVX-512+GFNI | الشيفرة المصدرية من Cabral et al. (تتضمن إصلاحهم لـ HQC-3 hash_j بتاريخ 2026-07-21) |
avx512_TC_GFNI | Ours TC/Karat (AVX-512) | AVX-512+GFNI | AVX-512 Toom-Cook/Karatsuba، مفكّكات GFNI، AVX-512 Keccak |
avx512_FAFFT_GFNI | Ours FAFFT (AVX-512) | AVX-512+GFNI | نقل AVX-512 لتطبيق Chen et al. على AVX2 |
يختلف بناءا Ours لكل ISA فقط في مضاعِف كثيرات الحدود، لذا
تعزل مقارنتهما الشاملة اختيار المضاعِف.
المتطلبات: GCC >= 12، CMake >= 3.21، معالج x86-64. تتطلب متغيّرات AVX-512 AVX-512F/BW/DQ/VL/VBMI/VBMI2/IFMA/BITALG/VPOPCNTDQ، و VPCLMULQDQ، و GFNI (Ice Lake / Tiger Lake / Rocket Lake / Zen 4 أو أحدث).
# one variant
mkdir build-avx512_TC_GFNI && cd build-avx512_TC_GFNI
cmake -DHQC_ARCH=x86_64 -DHQC_X86_IMPL=avx512_TC_GFNI ..
cmake --build . -j
# or every variant at once (creates build-<variant>/ directories)
./build_all.sh
# from the repository root, after building
bash scripts/run_kat.sh # all variants
bash scripts/run_kat.sh avx512_TC_GFNI # one variant
ملاحظة: لا يطبع test_kat_hqc_* شيئًا عند النجاح ويطبع أسطرًا تحتوي على bad
عند عدم التطابق؛ ويقوم السكربت بفحص المخرجات وفقًا لذلك.
بروتوكول الورقة: تعطيل Turbo Boost و SMT، وتثبيت العملية على نواة
فيزيائية واحدة، وكل قيمة مُبلَّغ عنها هي الوسيط لـ 1,000 عيّنة من 100
تكرار بعد 10,000 تكرار تسخين. تثبّت السكربتات على النواة 0 باستخدام
taskset.
bash scripts/measure_build.sh <variant> [...] # end-to-end KEM benchmark of the given variants
تُكتب السجلات الخام في benchmark_results/raw/؛ ويقدّم القياس المرجعي
القيم الدنيا/الوسيط/المتوسط، والوسيط هو القيمة المذكورة في الورقة.
src/common/ parameter-set independent HQC code (KEM layer, coding)
src/ref/ reference implementation
src/x86_64/common/ AVX2-era shared code
src/x86_64/<variant> one directory per compared implementation (see table)
lib/fips202/ Keccak (scalar PQClean + optional XKCP AVX-512 permutation)
tests/ KAT, API, unit tests, benchmarks
kats/ known-answer files used by the KAT tests
scripts/ KAT and measurement helper scripts
يُصدر المستودع الأساسي وإضافاتنا في الملكية العامة
(انظر LICENSE). كما يضمّ هذا المستودع تطبيقات طرف ثالث لأغراض
القياس؛ انظر
THIRD_PARTY_NOTICES.md لمنشوراتها،
ومصادرها، وتراخيصها.