Sign then Encrypt

Ok. Hopefully this addresses all the past feedback. I tried to simplify the PR and still get what we need in. This one is also a prerequisite for #840 as mentioned below. @Renelvon @gubatron take a look.
This shouldn't be an assertion because someone malicious could just send you a malformed message and cause this assertion to fail. I don't have @dionyziz link about when to use assertions however the point that we should use them to catch errors in OUT code that should never fail.