private static string Start()
        {
            var initialMessageContainer = MessageContainer.GetMessagesFor("start");
            var initialMessage          = initialMessageContainer.ElementAt(0);

            var builder = new StringBuilder(initialMessage);
            var index   = 0;

            foreach (var availableCipher in AvailableCiphers.CipherAvailableType)
            {
                builder.Append(Environment.NewLine);
                builder.Append($"{index++} - {availableCipher}");
            }

            Printer.Print(builder.ToString());

            var chosenCipher = Reader.Read <int>();

            return(AvailableCiphers.CipherAvailableType[chosenCipher]);
        }
        public static Storage ConstructMessage(string key = null, Storage storage = null)
        {
            Storage currentStorage = null;

            if (key == null && storage == null)
            {
                key = Start();

                currentStorage = new Storage
                {
                    ChosenCipher = key,
                    Values       = new Encrypted(),
                    AffineKeys   = new Common.Model.Keys.AffineKeys()
                };
            }
            else
            {
                currentStorage = storage;
            }

            var messages = MessageContainer.GetMessagesFor(key);

            switch (key)
            {
            case "affine":
                GetInputForAffineCipher(messages, currentStorage);
                GetInputFor(currentStorage);
                break;

            default:
                GetInputFor(currentStorage);
                break;
            }

            return(currentStorage);
        }