Per-direction AEAD key + counter. Treat as opaque; mutate only via
PeerNet.Channel.encrypt/2 and PeerNet.Channel.decrypt/2 (which
return updated structs).
Summary
Types
@type t() :: %PeerNet.Channel.CipherState{counter: non_neg_integer(), key: binary()}
Half of a Channel — one key, one nonce counter.