Beispiel #1
0
        /// <summary>
        /// Создает маркант с помошью KeyExchangeFormatter
        /// </summary>
        /// <param name="gost28147">Сессионный ключ</param>
        /// <param name="certFileName">Путь к файлу сертификата с открытым ключом получателя</param>
        /// <returns>Сгенерированный маркант</returns>
        public static Markant CreateMarkantWithKeyExchangeFormatter(Gost28147 gost28147, string certFileName)
        {
            // Разбираем сертификат получателя
            X509Certificate2 cert = new X509Certificate2(certFileName);

            if (!(cert.PublicKey.Key is Gost3410_2012_256 gost3410))
            {
                throw new CryptographicException("Not a GOST certificate");
            }

            //Создаем форматтер, шифрующий на ассиметричном ключе получателя
            Gost2012_256KeyExchangeFormatter formatter = new Gost2012_256KeyExchangeFormatter(gost3410);
            //GostKeyTransport - формат зашифрованной для безопасной передачи ключевой информации
            GostKeyTransport gostKeyTransport = ((Gost2012_256KeyExchangeFormatter)formatter).CreateKeyExchange(gost28147);

            //Формируем маркант
            Markant m = new Markant
            {
                Version    = 1,
                SessionKey = gostKeyTransport.Encode(),
                IV         = gost28147.IV
            };

            return(m);
        }
Beispiel #2
0
 public byte[] GetEncryptedSymKey()
 {
     try
     {
         symKey = new Gost28147CryptoServiceProvider();
         IV     = symKey.IV;
         Gost2012_256KeyExchangeFormatter Formatter = new Gost2012_256KeyExchangeFormatter(serverCert.PublicKey.Key);
         GostKeyTransport encKey  = Formatter.CreateKeyExchange(symKey);
         byte[]           bencKey = encKey.Encode();
         return(bencKey);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
         return(null);
     }
 }
Beispiel #3
0
        /// <summary>
        /// Формирование данных обмена, на основе симметричного
        /// ключа шифрования сообщения ГОСТ 28147.
        /// </summary>
        ///
        /// <param name="alg">Симметричный ключ ГОСТ 28147.</param>
        ///
        /// <returns>Зашифрованные данные для отправки стороне
        /// получателю.</returns>
        ///
        /// <argnull name="alg" />
        public byte[] CreateKeyExchangeData(SymmetricAlgorithm alg)
        {
            GostKeyTransport transport = CreateKeyExchange(alg, CPUtils.DefaultKeyWrapMethods);

            return(transport.Encode());
        }
Beispiel #4
0
        /// <summary>
        /// Формирование данных обмена, на основе симметричного
        /// ключа шифрования сообщения ГОСТ 28147.
        /// </summary>
        ///
        /// <param name="alg">Симметричный ключ ГОСТ 28147.</param>
        /// <param name="wrapMethod">Алгоритм экпорта</param>
        /// <returns>Зашифрованные данные для отправки стороне
        /// получателю.</returns>
        ///
        /// <argnull name="alg" />
        public byte[] CreateKeyExchangeData(SymmetricAlgorithm alg, GostKeyWrapMethod wrapMethod)
        {
            GostKeyTransport transport = CreateKeyExchange(alg, wrapMethod);

            return(transport.Encode());
        }