senonide/zfp
A TLS 1.3 server written in Zig that computes JA3 fingerprints of connecting clients.
A TLS 1.3 server written in Zig that computes JA3 fingerprints of connecting clients.
zig build
./zig-out/bin/zfp
The server listens on https://localhost:9876.
curl -k https://localhost:9876
Response:
JA3 Hash: 42cb4ba4c818da3ce6424cb212377c24
JA3 String: 771,4866-4867-4865-...
src/
├── main.zig # Entry point and connection handler
├── root.zig # Library exports
├── ja3.zig # JA3 fingerprint computation
├── client_hello.zig # ClientHello message parsing
├── handshake.zig # TLS handshake message builders
├── key_schedule.zig # TLS 1.3 key derivation (HKDF)
├── key_exchange.zig # ECDHE key exchange (X25519, P-256)
├── record.zig # TLS record layer (read/write/encrypt/decrypt)
└── cert.zig # Embedded self-signed certificate
| Client | JA3 Hash |
|---|---|
| curl | 42cb4ba4c818da3ce6424cb212377c24 |
| wget | c8a6e1655e0d74bf2d798279ff393f82 |
| openssl | 088c8dfc1a38f599b202940d8883fd63 |