コード例 #1
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="server"></param>
		/// <param name="context"></param>
		/// <param name="callbackEndPoint"></param>
		/// <param name="cancel"></param>
		public override void Run(IHostServer server, WebContext context, string callbackEndPoint, CancellationToken cancel) {
			if (context.PreparedParameters == null) {
				context.PreparedParameters = RequestParameters.Create(context);
			}
			var preparedParams = context.PreparedParameters;
			var fingerprint = preparedParams.Get("cert");
			var cms = preparedParams.Get("message");
			var container = server.Container;
			var caConfigProvider = container.Get<ICaConfigProvider>();
			if (caConfigProvider == null) {
				throw new Exception("Cannot get CA config");
			}
			var caConfig = caConfigProvider.GetConfig();
			if (caConfig == null || !caConfig.GetIsValid()) {
				throw new Exception("Not valid CA config");
			}
			var cmsDecryptor = new CmsDecryptor();
			cmsDecryptor.Initialize(caConfig);
			var cmsMessage = new CmsMessage {
				CertificateFingerprint = fingerprint,
				EncryptedMessage = cms
			};
			context.ContentType = MimeHelper.JSON;
			string salt;
			lock (TokenAuthGetSaltHandler.Sync) {
				salt = TokenAuthGetSaltHandler.Salts[fingerprint].Value;
			}
			var message = cmsDecryptor.Descrypt(cmsMessage);
			var result = message != salt ? "false" : "true";
			context.Finish(result);
		}
コード例 #2
0
ファイル: CmsDecryptor.cs プロジェクト: Qorpent/qorpent.sys
		/// <summary>
		///		Дешифровка сообщения
		/// </summary>
		/// <param name="message">Сообщение фотмата CMS</param>
		/// <returns>Расшифрованная строка</returns>
		public string Descrypt(CmsMessage message) {
			if (CaConfig == null) {
				throw new Exception("Not initialized");
			}
			if (string.IsNullOrWhiteSpace(message.EncryptedMessage)) {
				throw new ArgumentException("Empty message");
			}
			var provider = new CaProvider();
			provider.Initialize(CaConfig);
			var realMsg = RefineMessage(message);
			var crtPath = provider.GetUserCertPath(message.CertificateFingerprint);
			var keyPath = provider.GetUserKeyPath(message.CertificateFingerprint);
			var cmsPath = Path.GetTempFileName();
			File.WriteAllText(cmsPath, realMsg);
			var arguments = string.Format("smime -decrypt -in {0} -recip {1} -inkey {2} -inform PEM", cmsPath, crtPath, keyPath);
			var startInfo = new ProcessStartInfo {
				FileName = CaConst.OpenSslProcess,
				Arguments = arguments,
				CreateNoWindow = true,
				RedirectStandardOutput = true,
				RedirectStandardError = true,
				UseShellExecute = false
			};
			var process = new Process {StartInfo = startInfo};
			process.Start();
			var output = process.StandardOutput.ReadToEnd();
			process.WaitForExit();
			File.Delete(cmsPath);
			return output;
		}
コード例 #3
0
ファイル: CmsDecryptor.cs プロジェクト: Qorpent/qorpent.sys
        /// <summary>
        ///		Дешифровка сообщения
        /// </summary>
        /// <param name="message">Сообщение фотмата CMS</param>
        /// <returns>Расшифрованная строка</returns>
        public string Descrypt(CmsMessage message)
        {
            if (CaConfig == null)
            {
                throw new Exception("Not initialized");
            }
            if (string.IsNullOrWhiteSpace(message.EncryptedMessage))
            {
                throw new ArgumentException("Empty message");
            }
            var provider = new CaProvider();

            provider.Initialize(CaConfig);
            var realMsg = RefineMessage(message);
            var crtPath = provider.GetUserCertPath(message.CertificateFingerprint);
            var keyPath = provider.GetUserKeyPath(message.CertificateFingerprint);
            var cmsPath = Path.GetTempFileName();

            File.WriteAllText(cmsPath, realMsg);
            var arguments = string.Format("smime -decrypt -in {0} -recip {1} -inkey {2} -inform PEM", cmsPath, crtPath, keyPath);
            var startInfo = new ProcessStartInfo {
                FileName               = CaConst.OpenSslProcess,
                Arguments              = arguments,
                CreateNoWindow         = true,
                RedirectStandardOutput = true,
                RedirectStandardError  = true,
                UseShellExecute        = false
            };
            var process = new Process {
                StartInfo = startInfo
            };

            process.Start();
            var output = process.StandardOutput.ReadToEnd();

            process.WaitForExit();
            File.Delete(cmsPath);
            return(output);
        }
コード例 #4
0
ファイル: CmsDecryptor.cs プロジェクト: Qorpent/qorpent.sys
 /// <summary>
 ///		Преобразование исходного сообщения в требуемый формат
 /// </summary>
 /// <param name="message">Сообщение</param>
 /// <returns>Обработанное сообщение</returns>
 public string RefineMessage(CmsMessage message)
 {
     return("-----BEGIN PKCS7-----\n" + message.EncryptedMessage + "\n-----END PKCS7-----");
 }
コード例 #5
0
ファイル: CmsDecryptor.cs プロジェクト: Qorpent/qorpent.sys
		/// <summary>
		///		Преобразование исходного сообщения в требуемый формат
		/// </summary>
		/// <param name="message">Сообщение</param>
		/// <returns>Обработанное сообщение</returns>
		public string RefineMessage(CmsMessage message) {
			return "-----BEGIN PKCS7-----\n" + message.EncryptedMessage + "\n-----END PKCS7-----";
		}