示例#1
0
        /// <summary>
        /// Создает обработчик расшифровывания файла
        /// </summary>
        /// <returns>Возвращает обработчик расшифровывания файла</returns>
        public static Func <CryptoContext, Task> GetDecryptFileHandler()
        {
            Func <CryptoContext, Task> result = async(context) =>
            {
                try
                {
                    string inputFile  = context.LastFileName ?? context.PhysicalFileName;
                    string outputFile = Path.ChangeExtension(inputFile, ".unc");
                    string storeType  = context.IsMachineStore ? "m" : "u";

                    ProcessExec shell = new ProcessExec();
                    shell.FileName         = context.CryptCPpath;
                    shell.Arguments        = $"-decr -thumbprint {context.DecryptCertificate} \"{inputFile}\" \"{outputFile}\"";
                    shell.WorkingDirectory = context.WorkDirectory;

                    _ = await shell.Start();

                    context.AddTempFile(inputFile);
                    context.LastFileName = outputFile;
                }
                catch (Exception ex)
                {
                    throw new CryptoException("Decrypt", ex);
                }
            };

            return(result);
        }
示例#2
0
        /// <summary>
        /// Создает обработчик подписания файла
        /// </summary>
        /// <param name="outputExt">расширение выходного файла которое будет присвоено файлу в обработчике</param>
        /// <returns>Возвращает обработчик подписания файла</returns>
        public static Func <CryptoContext, Task> GetSignFileHandler(string outputExt = ".sgn")
        {
            Func <CryptoContext, Task> result = async(context) =>
            {
                try
                {
                    string inputFile  = context.LastFileName ?? context.PhysicalFileName;
                    string outputFile = Path.ChangeExtension(inputFile, outputExt);
                    string storeType  = context.IsMachineStore ? "m" : "u";
                    // string pfx = @"c:\!WORKRDP\EXPORT\tls.pfx";

                    ProcessExec shell = new ProcessExec();
                    shell.FileName         = context.CryptCPpath;
                    shell.Arguments        = $"-sign -thumbprint {context.SignCertificate} -nochain -norev -{storeType}My -der -strict \"{inputFile}\" \"{outputFile}\"";
                    shell.WorkingDirectory = context.WorkDirectory;

                    _ = await shell.Start();

                    context.AddTempFile(inputFile);
                    context.LastFileName = outputFile;
                }
                catch (Exception ex)
                {
                    throw new CryptoException("Sign", ex);
                }
            };

            return(result);
        }
示例#3
0
        /// <summary>
        /// Создает обработчик верификации подписанного файла
        /// </summary>
        /// <returns>Возвращает обработчик верификации подписанного файла</returns>
        public static Func <CryptoContext, Task> GetUnSignFileHandler()
        {
            Func <CryptoContext, Task> result = async(context) =>
            {
                try
                {
                    string inputFile  = context.LastFileName ?? context.PhysicalFileName;
                    string outputFile = Path.ChangeExtension(inputFile, ".usg");
                    string storeType  = context.IsMachineStore ? "m" : "u";

                    ProcessExec shell = new ProcessExec();
                    shell.FileName         = context.CryptCPpath;
                    shell.Arguments        = $"-verify -nochain -norev -{storeType}AddressBook \"{inputFile}\" \"{outputFile}\"";
                    shell.WorkingDirectory = context.WorkDirectory;

                    _ = await shell.Start();

                    context.AddTempFile(inputFile);
                    context.LastFileName = outputFile;
                }
                catch (Exception ex)
                {
                    throw new CryptoException("UnSign", ex);
                }
            };

            return(result);
        }