Что касается отправителя: шаги 1, 2 и 3 обычно объединяются в одну операцию генерации подписи. Вы не делаете их отдельно. То же самое для шагов 1 и 2 получателя для проверки подписи (кстати, если вы пропускаете шаг хеширования сообщения).
Современная криптография основана на байтах, поэтому обычно вы определяете одиночный формат двоичного контейнера, так что вам не нужно без необходимости расширять зашифрованный текст (по сравнению с открытым текстом). Такой контейнер может содержать несколько значений: зашифрованный ключ и зашифрованный контент, состоящий из сообщения и подписи. Как правило, есть также заголовок, содержащий строку версии и идентификатор требуемых ключей, чтобы назвать только несколько.
Конечно, многие форматы контейнеров были определены для гибридной криптографии, которую вы используете в настоящее время, с помощью CMS (с иерархической PKI) и (Open) PGP (с PKI на основе сети доверия) - наиболее известные из них.
В противном случае это вам решать. Обычно вы шифруете зашифрованный текст / подписи, используя base 64, если вам требуется текстовое хранилище. Включите строку версии где-нибудь в заголовке и создайте документ для описания вашего протокола.