OMQ_DEVenv var —require "omq"replaced withrequire_relativewhenOMQ_DEVis set, loading the sibling omq source tree instead of the installed gem. Gemfile uses the same var (replacesDEV_ENV).
- CURVE handshake deadlocks with buffered IO — missing
io.flushafter greeting, HELLO, INITIATE (client) and greeting, WELCOME, READY (server) writes caused both peers to block on read - Tests used
minimum_write_size: 0which bypassed IO buffering entirely, masking the flush bug
- Move version constant from
OMQ_CURVE_VERSIONtoOMQ::CURVE_VERSION(also available asOMQ::Curve::VERSION)
- Inline frame wire encoding in encrypt, bypassing
Frame.new.to_wireand itsIO::Bufferallocation — especially helps larger messages (4KB TCP: +87% vs v0.2.0)
- 15–55% throughput improvement by bypassing
Command.from_bodyin the MESSAGE decrypt hot path — parses the prefix directly viabytesliceinstead of allocating anIO::Buffer
- New API:
OMQ::Curve.server(pub, sec)andOMQ::Curve.client(pub, sec, server_key: k)replace verbose per-socket options (curve_server,curve_public_key, etc.) OMQ::Curveis a convenience alias forOMQ::ZMTP::Mechanism::Curve- Requires omq ~> 0.2
omq-keygenexecutable for Z85 keypair generationexamples/reqrep/with encrypted server/client scripts
Initial release. CurveZMQ (RFC 26) encryption for OMQ.
- Curve25519-XSalsa20-Poly1305 encryption and authentication
- 4-step handshake (HELLO/WELCOME/INITIATE/READY)
- Anti-amplification and server statelessness per RFC 26
- Client authentication via allowlist or custom callable
- Z85 key encoding/decoding
- Requires libsodium via rbnacl