
Zig में TLS 1.3 का QUIC के लिए कार्यान्वयन, RFC 8446/9001 अनुरूप, शून्य बाहरी निर्भरताओं के साथ, AEAD सुरक्षा, X.509 सत्यापन, और 1000+ परीक्षणों की विशेषता।
Zig में लिखा गया QUIC के लिए एक TLS 1.3 कार्यान्वयन, जो RFC 8446 (TLS 1.3) और RFC 9001 (QUIC-TLS) का सख्ती से पालन करता है।
| पहलू | जानकारी |
|---|---|
| API स्थिरता | उत्पादन-स्तर |
| Zig संस्करण | 0.16.0 |
| प्लेटफ़ॉर्म | Linux, macOS, Windows |
<2 ms हैंडशेक लक्ष्य Ed25519 और RSA-2048 प्रमाणपत्र कॉन्फ़िगरेशन पर मान्य किया गया है। secp256r1 (P-256) कार्यभार वर्तमान में प्रति हैंडशेक 2–3 ms पर चलते हैं, यह Zig stdlib की एक ऊपर-स्तरीय सीमा के कारण है (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 dev पुस्तकालयों की आवश्यकता है
# अनुकूलन के साथ
zig build -Doptimize=ReleaseFast
बिल्ड सारांश: सभी चरण सफल; 1000 परीक्षण पास ✅
व्यापक परीक्षण कवरेज:
कुल: 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();
// QUIC से आने वाले CRYPTO फ्रेम प्रोसेस करें
try ctx.processCrypto(crypto_data);
}
std.crypto.kdf.hkdf का उपयोग कर HKDF-आधारित कुंजी व्युत्पत्तिपरियोजना में उद्योग-मानक TLS कार्यान्वयनों के साथ संगतता सुनिश्चित करने के लिए व्यापक अनुरूपता परीक्षण शामिल हैं:
अनुरूपता परीक्षण चलाने के लिए:
# पहले OpenSSL विकास पुस्तकालय स्थापित करें
make install-deps # आपके OS का स्वचालित रूप से पता लगाता है
# अनुरूपता परीक्षण चलाएँ
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_* env वेरिएबल निर्दिष्ट करें, के माध्यम से निर्यात किया गया।
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-अनुरूप