
تنفيذ Zig لبروتوكول TLS 1.3 لـ QUIC، متوافق مع RFC 8446/9001 بدون أي تبعيات خارجية، مع ميزات حماية AEAD والتحقق من X.509 وأكثر من 1000 اختبار.
تنفيذ TLS 1.3 لـ QUIC مكتوب بلغة Zig، يلتزم بدقة بـ RFC 8446 (TLS 1.3) و RFC 9001 (QUIC-TLS).
| الجانب | المعلومات |
|---|---|
| استقرار واجهة API | إنتاجي |
| إصدار Zig | 0.16.0 |
| المنصات | Linux, macOS, Windows |
هدف المصافحة الذي يقل عن 2 مللي ثانية تم التحقق منه على تكوينات شهادات Ed25519 و RSA-2048. حاليًا، تستغرق مهام secp256r1 (P-256) ما بين 2–3 مللي ثانية لكل مصافحة بسبب قيود في مكتبة Zig القياسية (PERF-229). راجع ADR-0002 لسجل القرار الكامل.
✅ متوافق مع RFC - ينفذ TLS 1.3 (RFC 8446) و QUIC-TLS (RFC 9001) ✅ بدون تبعيات خارجية - يستخدم مكتبة Zig القياسية فقط ✅ تم اختبار التوافق البيني - اختبارات توافق ضد BoringSSL و OpenSSL ✅ مصمم لـ QUIC - مصمم للتكامل مع QUIC، بدون طبقة سجلات تقليدية ✅ مختبر جيدًا - 551 اختبار وحدة + متجهات اختبار RFC + 449 اختبار توافق
# بناء واختبار كل شيء
make
# أو يدويًا
zig build
zig build test
يستخدم المشروع كلاً من Makefile و build.zig للمرونة:
# بناء وتشغيل جميع الاختبارات (الافتراضي)
make
# بناء فقط
make build
# تشغيل مجموعات اختبار محددة
make test-unit # اختبارات الوحدة
make test-vectors # متجهات اختبار RFC 8446/9001
make test-conformance # توافق BoringSSL/OpenSSL (يتطلب libssl-dev)
# سير عمل التطوير
make dev # تنسيق + فحص + اختبارات الوحدة
make clean # تنظيف نواتج البناء
make help # عرض جميع الأهداف المتاحة
# بناء المكتبة
zig build
# تشغيل جميع الاختبارات
zig build test
# تشغيل مجموعات اختبار محددة
zig build test-vectors
zig build test-conformance # يتطلب مكتبات تطوير OpenSSL
# مع تحسينات
zig build -Doptimize=ReleaseFast
Build Summary: All steps succeeded; 1000 tests passed ✅
تغطية اختبارات شاملة:
الإجمالي: 1000 اختبار لضمان التوافق مع RFC، التماثل التشفيري، والجاهزية الإنتاجية
src/
├── lib.zig # نقطة الدخول الرئيسية للمكتبة
├── tls13/ # آلة الحالة لمصافحة TLS 1.3 (معيارية)
├── tls13_full.zig # تحليل كامل لرسائل TLS 1.3
├── key_schedule.zig # اشتقاق المفاتيح المستندة إلى HKDF
├── record.zig # طبقة السجلات وعمليات AEAD
├── x509.zig # تحليل الشهادات والتحقق منها
├── sig.zig # التحقق من التوقيعات
├── asn1.zig # مفكك ASN.1 DER
├── alert.zig # بروتوكول تنبيه TLS
├── entropy.zig # مساعد RNG للإغلاق الآمن (SEC-074)
├── zero_rtt.zig # دعم 0-RTT
└── quic_*.zig # واجهات تكامل QUIC
tests/
├── rfc8446_vectors.zig # متجهات اختبار RFC
├── boringssl_conformance.zig # اختبارات تماثل BoringSSL
└── openssl_conformance.zig # اختبارات توافق OpenSSL
const std = @import("std");
const tls = @import("ztls");
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
// تكوين سياق TLS
const config = tls.Config{
.allocator = gpa.allocator(),
.role = .client,
.supported_cipher_suites = &.{.TLS_AES_128_GCM_SHA256},
.supported_groups = &.{.x25519},
.alpn_protocols = &.{"h3"},
};
// إعداد الاستدعاءات
const callbacks = tls.Callbacks{
.on_secret_available = mySecretCallback,
.on_handshake_complete = myHandshakeCallback,
};
// تهيئة سياق TLS
var ctx = try tls.Context.init(config, callbacks);
defer ctx.deinit();
// معالجة إطارات CRYPTO الواردة من QUIC
try ctx.processCrypto(crypto_data);
}
std.crypto.kdf.hkdfيتضمن المشروع اختبارات توافق شاملة لضمان التوافق مع تطبيقات TLS القياسية الصناعية:
لتشغيل اختبارات التوافق:
# قم أولاً بتثبيت مكتبات تطوير OpenSSL
make install-deps # يكتشف نظام التشغيل الخاص بك تلقائيًا
# تشغيل اختبارات التوافق
make test-conformance
يأتي ztls مع خياطة اختيارية لـ OpenTelemetry. عند تعيين علامة البناء -Dwith_otel=true، تصدر المكتبة فترة واحدة بالضبط لكل مصافحة TLS (اسم الفترة: "TLS handshake") مع السمات الدلالية التالية المرفقة عند الاكتمال:
tls.role -- "client" أو "server"tls.protocol.version -- "1.3" (دائمًا لـ ztls)tls.cipher_suite -- التشفير المتفاوض عليه (مثل TLS_AES_128_GCM_SHA256)network.protocol.name -- "tls"# البناء الافتراضي: بدون رموز otel، تكلفة صفرية.
zig build test
# البناء مع التمكين: فترة واحدة لكل مصافحة، يتم تصديرها عبر إعدادات OTLP
# الافتراضية (http://localhost:4318) أو أي متغيرات بيئة OTEL_*
# محددة.
zig build test -Dwith_otel=true
الخياطة محصورة خلف تبعية كسولة، لذا يتم جلب حزمة otel فقط عند تشغيل العلامة. يجب على كود نقطة الدخول للتطبيق الذي يرغب في تثبيت TracerProvider استدعاء ztls.observability_init.Otel.init ثم installGlobals()؛ راجع وصفة تكامل otel الأعلى (otel/docs/integration/RECIPE.md) لمعرفة إجراء التمهيد الكامل للتطبيق المضيف.
# دورة التطوير السريعة
make dev
# تنسيق الكود
make fmt
# أو
zig fmt src/ tests/
# فحص الصياغة
make check
# بناء نظيف
make clean build
عند إضافة ميزات:
ترخيص Apache-2.0 - راجع LICENSE للتفاصيل.
بُني باستخدام Zig 0.16.0 | TLS 1.3 | أصلي لـ QUIC | متوافق مع RFC