public override IResult Execute(IResult previousResults)
        {
            X509Store store = null;
            try
            {
                store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);

                foreach (var certificate in store.Certificates)
                {
                    var authorityKey = CertificateUtilities.GetAuthorityKeyFromCertificate(certificate);
                    if (!AuthorityKey.Equals(authorityKey, StringComparison.InvariantCultureIgnoreCase))
                        continue;

                    var email = certificate.GetNameInfo(X509NameType.EmailName, false);
                    if (string.IsNullOrWhiteSpace(email))
                        continue;

                    if (!email.Equals(EmailAddress, StringComparison.InvariantCulture))
                        continue;

                    var wrapper = new CertificateDataWrapper { Certificate = certificate };
                    SettingsManager.SetTemporaryObject(CertificateWrapperKey, wrapper);
                    break;
                }

                return new NextResult();
            }
            catch (Exception e)
            {
                return new ExceptionOccurred(e);
            }
            finally
            {
                if (store != null)
                {
                    store.Close();
                }
            }
        }
        public override IResult Execute(IResult previousResults)
        {
            try
            {
                var request =
                    EndpointManager.GetContract<AbstractGetCertificateContract>(
                        EndPointFunctions.GetCertificate);

                request.LoginId = SettingsManager.GetTemporarySettingString(UsernameKey);
                request.Credential1 = SettingsManager.GetTemporarySettingString(PassphraseKey);
                request.Credential2 = SettingsManager.GetTemporarySettingString(Credential2Key);
                request.Credential3 = SettingsManager.GetTemporarySettingString(Credential3Key);
                request.Credential4 = SettingsManager.GetTemporarySettingString(Credential4Key);
                request.Provider = CertificateProvider;
                request.EncryptCertificate = EncryptCertificate ? "Yes" : "No";
                Timeout = Timeout;

                var result = request.MakeRequest<CertificateWrapper>();
                if (result == null)
                    return request.GetErrorResult();

                var bytes = Convert.FromBase64String(result.Pkcs12);

                var password = SettingsManager.GetSecureTemporarySettingString(PassphraseKey);
                X509Certificate2 certificate;
                if (password == null)
                {
                    Log.Info("creating certificate without password");
                    certificate = new X509Certificate2(bytes);
                }
                else
                {
                    Log.Info("creating certificate with password");
                    certificate = new X509Certificate2(bytes, password);
                }

                // save the text and the the actual cert
                var wrapper = new CertificateDataWrapper
                    {
                        Certificate = certificate,
                        Bytes = bytes,
                        Text = result.Pkcs12
                    };

                SettingsManager.SetTemporaryObject(CertificateWrapperKey, wrapper);

                return new NextResult();
            }
            catch (Exception e)
            {
                Log.Warn(e);
                return new ExceptionOccurred(e);
            }
        }