public static CertificateOutputViewModel GenerateCertificate(this CertificateInputViewModel vm)
        {
            var inputBytes = Encoding.ASCII.GetBytes(vm.InputText); // new byte[] { };

            ISymmetricCryptoAlgorithm symmetric = GetSymmetricAlgorithm(vm.SelectedSymmetricAlgorithmName,
                                                                        vm.SelectedSymmetricAlgorithmKey, vm.SelectedSymmetricAlgorithmMode);

            IAsymmetricCryptoAlgorithm asymmetric =
                GetAsymmetricAlgorithm(vm.SelectedAsymmetricAlgorithmName, vm.SelectedAsymmetricAlgorithmKey);

            var envelope = new DigitalEnvelope(symmetric: symmetric, asymmetric: asymmetric);

            IHashAlgorithm hash = GetHashAlgorithm(vm.SelectedHashAlgorithmName);

            var signature = new Core.Signature.DigitalSignature(hash: hash, algorithm: asymmetric);

            var certificate = new DigitalCertificate(
                envelope: envelope,
                signature: signature
                );

            byte[] _gen = certificate.Create(input: inputBytes);

            (bool, byte[])_degen = certificate.Check();

            var model = new CertificateOutputViewModel(_gen, envelope.Data, envelope.Key, hash.AlgorithmName,
                                                       vm.SelectedSymmetricAlgorithmName, vm.SelectedSymmetricAlgorithmKey,
                                                       vm.SelectedAsymmetricAlgorithmName, vm.SelectedAsymmetricAlgorithmKey,
                                                       file: Constants.File.Name.CERTIFICATE)
            {
                InputText = vm.InputText
            };

            return(model);
        }
        public static SignatureOutputViewModel GenerateSignature(this SignatureInputViewModel vm)
        {
            var inputBytes = Encoding.ASCII.GetBytes(vm.InputText); // new byte[] { };

            IHashAlgorithm hash = GetHashAlgorithm(vm.SelectedHashAlgorithmName);

            IAsymmetricCryptoAlgorithm asymmetric =
                GetAsymmetricAlgorithm(vm.SelectedAsymmetricAlgorithmName, vm.SelectedAsymmetricAlgorithmKey);

            var signature = new Core.Signature.DigitalSignature(hash: hash, algorithm: asymmetric);

            var _sign = signature.Sign(input: inputBytes);

            var valid = signature.Check(_sign);

            var file   = "";
            var output = new SignatureOutputViewModel(_sign, vm.SelectedHashAlgorithmName,
                                                      vm.SelectedAsymmetricAlgorithmName, vm.SelectedAsymmetricAlgorithmKey,
                                                      file: Constants.File.Name.SIGNATURE)
            {
                InputText = vm.InputText
            };

            return(output);
        }