After writing malicious behavior tests for a real-life protocol (CGGMP), it is evident that ProtocolError::AssociatedData is pretty much all the shared data (is it the same as all the public data?) that is passed to an entry point constructor. Should we make it official somehow?