
AVX2 और AVX-512 के लिए GFNI के साथ अनुकूलित HQC पोस्ट-क्वांटम KEM कार्यान्वयन, साथ ही x86 IoT गेटवे के लिए एक एकीकृत बेंचमार्किंग और NIST KAT सूट।
इस रिपॉज़िटरी में पेपर "Accelerating HQC for Post-Quantum TLS 1.3 on x86 IoT Gateways" के साथ आने वाले अनुकूलित HQC कार्यान्वयन और बेंचमार्किंग कोड शामिल हैं। यह आधिकारिक HQC रिपॉज़िटरी का एक फोर्क है, जिसे AVX-512 + GFNI कार्यान्वयन और एक एकीकृत मापन सूट के साथ विस्तारित किया गया है जो प्रत्येक तुलना किए गए कार्यान्वयन को एक ही कोड बेस, कंपाइलर फ्लैग और बेंचमार्क प्रोटोकॉल से बनाता है।
सभी कार्यान्वयन HQC-1, HQC-3 और HQC-5 के लिए NIST known-answer tests (KAT) पास करते हैं, और संदर्भ कार्यान्वयन के इनपुट-स्वतंत्र नियंत्रण प्रवाह और मेमोरी-एक्सेस पैटर्न को बनाए रखते हैं।
src/x86_64/ के अंतर्गत प्रत्येक वेरिएंट को कॉन्फ़िगर समय पर
-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 | AVX2 बिल्ड पर हमारे GFNI Reed-Solomon / Reed-Muller डिकोडर |
avx256_FAFFT_GFNI_chen | Chen et al. | AVX2+GFNI | FAFFT गुणन, मूल नॉन-कैश्ड प्रवाह |
avx256_FAFFT_GFNI_chen_x2 | Chen et al. (dagger) | AVX2+GFNI | साझा-ऑपरेंड ring_mul_x2 प्रवाह के साथ FAFFT |
avx256_FAFFT_GFNI_ours | Ours FAFFT (AVX2) | AVX2+GFNI | FAFFT + ज़ीरो-टेल बेसिस रूपांतरण + हमारे डिकोडर |
avx512_Robert | Robert–Véron | AVX-512 | Robert–Véron AVX-512 बहुपद गुणन |
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 | Chen et al. के AVX2 कार्यान्वयन का AVX-512 पोर्ट |
प्रत्येक ISA के दो Ours बिल्ड केवल बहुपद गुणक में भिन्न हैं, इसलिए
उनकी एंड-टू-एंड तुलना गुणक के चयन को अलग करती है।
आवश्यकताएँ: GCC >= 12, CMake >= 3.21, एक x86-64 CPU। 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 वाली पंक्तियाँ प्रिंट करता है; स्क्रिप्ट तदनुसार आउटपुट को grep करती है।
पेपर का प्रोटोकॉल: Turbo Boost और SMT अक्षम, प्रोसेस को एक
भौतिक कोर पर पिन किया गया, और प्रत्येक रिपोर्ट किया गया मान 10,000 वार्म-अप पुनरावृत्तियों के बाद 100 पुनरावृत्तियों के 1,000 नमूनों का माध्यिका। स्क्रिप्ट taskset के साथ कोर 0 पर पिन करती हैं।
bash scripts/measure_build.sh <variant> [...] # end-to-end KEM benchmark of the given variants
कच्चे लॉग benchmark_results/raw/ में लिखे जाते हैं; बेंचमार्क
min/median/mean रिपोर्ट करता है, और माध्यिका वह मान है जिसे पेपर में उद्धृत किया गया है।
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 देखें।