예제 #1
0
            public async Task <ViewModel> Handle(Query request, CancellationToken cancellationToken)
            {
                var viewModel = new ViewModel();

                viewModel.ValidationResult = await queryValidator.ValidateAsync(request, cancellationToken);

                if (!viewModel.ValidationResult.IsValid)
                {
                    return(viewModel);
                }

                var certificate = await privateCertRepository.GetCertificateAsync(request.CertificateId);

                var passphrase = await privateCertRepository.GetPassphraseAsync();

                var passphraseDecrypted = StringCipher.Decrypt(passphrase, request.MasterKeyDecrypted);

                var x509 = new X509Certificate2();

                x509.Import(certificate.PfxData, passphraseDecrypted, X509KeyStorageFlags.Exportable);
                viewModel.CertificateData    = x509.Export(certificate.CertificateType == CertificateTypeEnum.Root ? X509ContentType.Cert : X509ContentType.Pfx, string.Empty);
                viewModel.Extension          = (certificate.CertificateType == CertificateTypeEnum.Root ? ".cer" : ".pfx");
                viewModel.ExtensionFilter    = (certificate.CertificateType == CertificateTypeEnum.Root ? "Security Certificate (.cer)|*.cer" : "PKCS #12 Certificate (.pfx)|*.pfx");
                viewModel.FileNameSuggestion = certificate.Name.Replace("*", "_") + viewModel.Extension;

                return(viewModel);
            }
예제 #2
0
            public async Task <ValidationResult> Handle(Command command, CancellationToken cancellationToken)
            {
                unitOfWork.BeginTransaction();
                var result = await validator.ValidateAsync(command, cancellationToken);

                if (!result.IsValid)
                {
                    return(result);
                }

                var passphrase = await privateCertRepository.GetPassphraseAsync();

                var passphraseDecrypted = StringCipher.Decrypt(passphrase, command.MasterKeyDecrypted);
                var certificate         = Certificate.CreateRootCertificate(command, passphraseDecrypted);
                await privateCertRepository.AddCertificateAsync(certificate);

                unitOfWork.SaveChanges();
                unitOfWork.CommitTransaction();

                return(result);
            }
예제 #3
0
파일: SetMasterKey.cs 프로젝트: lulzzz/PCA
            public async Task <ValidationResult> Handle(Command request, CancellationToken cancellationToken)
            {
                unitOfWork.BeginTransaction();
                var result = await commandValidator.ValidateAsync(request, cancellationToken);

                if (!result.IsValid)
                {
                    return(result);
                }

                var hash         = StringHash.GetHash(request.Password);
                var hashToString = StringHash.GetHashString(hash);
                await privateCertRepository.SetMasterKeyAsync(hashToString);

                var passphrase = await privateCertRepository.GetPassphraseAsync();

                var passphraseDecrypted = StringCipher.Decrypt(passphrase, request.CurrentPassword);
                var passphraseEncrypted = StringCipher.Encrypt(passphraseDecrypted, request.Password);
                await privateCertRepository.SetPassphraseAsync(passphraseEncrypted);

                unitOfWork.SaveChanges();
                unitOfWork.CommitTransaction();
                return(result);
            }