Where everyone seems to be getting confused is handling a live flow versus handling a finalized flow (a file).<p>* Always pad to combat plain-text attacks, padding in theory shouldn't compress well so there's no point making the compression less effective by processing it.<p>* Always compress a 'file' first to reduce entropy.<p>* Always pad-up a live stream, maybe this data is useful in some other way, but you want interactive messages to be of similar size.<p>* At some place in the above also include a recipient identifier; this should be counted as part of the overhead not part of the padding.<p>* The signature should be on everything above here (recipients, pad, compressed message, extra pad).<p>. It might be useful to include the recipients in the un-encrypted portion of the message, but there are also contexts where someone might choose otherwise; an interactive flow would assume both parties knew a key to communicate with each other on and is one such case.<p>* The pad, message, extra-pad, and signature /must/ be encrypted. The recipients /may/ be encrypted.<p>I did have to look up the sign / encrypt first question as I didn't have reason to think about it before. In general I've looked to experts in this field for existing solutions, such as OpenPGP (GnuPG being the main implementation). Getting this stuff right is DIFFICULT.