Пример #1
0
        /// <summary>
        /// Шифрует общий секретный ключ.
        /// </summary>
        /// <param name="keyExchangeAlgorithm">Алгоритм шифрации общего секретного ключа.</param>
        /// <exception cref="ArgumentNullException"></exception>
        public GostKeyExchange CreateKeyExchangeInfo(SymmetricAlgorithm keyExchangeAlgorithm)
        {
            if (keyExchangeAlgorithm == null)
            {
                throw ExceptionUtility.ArgumentNull("keyExchangeAlgorithm");
            }

            var keyExchange           = new GostKeyExchange();
            var keyExchangeParameters = _publicKey.ExportParameters(false);

            using (var keyExchangeAsym = new Gost3410EphemeralAsymmetricAlgorithm(keyExchangeParameters))
            {
                byte[] encodedKeyExchangeInfo;

                using (var keyExchangeAlg = keyExchangeAsym.CreateKeyExchange(keyExchangeParameters))
                {
                    encodedKeyExchangeInfo = keyExchangeAlg.EncodeKeyExchange(keyExchangeAlgorithm, GostKeyExchangeExportMethod.CryptoProKeyExport);
                }

                var keyExchangeInfo = new GostKeyExchangeInfo();
                keyExchangeInfo.Decode(encodedKeyExchangeInfo);

                keyExchange.SessionEncryptedKey = keyExchangeInfo;
                keyExchange.TransportParameters = keyExchangeAsym.ExportParameters(false);
            }

            return(keyExchange);
        }
        /// <summary>
        /// Шифрует общий секретный ключ.
        /// </summary>
        /// <param name="keyExchangeAlgorithm">Алгоритм шифрации общего секретного ключа.</param>
        /// <exception cref="ArgumentNullException"></exception>
        public GostKeyExchange CreateKeyExchangeInfo(SymmetricAlgorithm keyExchangeAlgorithm)
        {
            if (keyExchangeAlgorithm == null)
            {
                throw ExceptionUtility.ArgumentNull("keyExchangeAlgorithm");
            }

            var keyExchange           = new GostKeyExchange();
            var keyExchangeParameters = _publicKey.ExportParameters(false);

            var      digestoid = keyExchangeParameters.DigestParamSet;
            Gost3410 keyExchangeAsym;

            if (digestoid == Constants.OID_GR3411_12_256)
            {
                keyExchangeAsym = new Gost3410_2012_256EphemeralAsymmetricAlgorithm(keyExchangeParameters);
            }
            else if (digestoid == Constants.OID_GR3411_12_512)
            {
                keyExchangeAsym = new Gost3410_2012_512EphemeralAsymmetricAlgorithm(keyExchangeParameters);
            }
            else
            {
                keyExchangeAsym = new Gost3410EphemeralAsymmetricAlgorithm(keyExchangeParameters);
            }

            byte[] encodedKeyExchangeInfo;

            using (var keyExchangeAlg = keyExchangeAsym.CreateKeyExchange(keyExchangeParameters))
            {
                encodedKeyExchangeInfo = keyExchangeAlg.EncodeKeyExchange(keyExchangeAlgorithm, GostKeyExchangeExportMethod.CryptoProKeyExport);
            }

            var keyExchangeInfo = new GostKeyExchangeInfo();

            keyExchangeInfo.Decode(encodedKeyExchangeInfo);

            keyExchange.SessionEncryptedKey = keyExchangeInfo;
            keyExchange.TransportParameters = keyExchangeAsym.ExportParameters(false);

            keyExchangeAsym.Dispose();

            return(keyExchange);
        }
        /// <summary>
        /// Шифрует общий секретный ключ.
        /// </summary>
        /// <param name="keyExchangeAlgorithm">Алгоритм шифрации общего секретного ключа.</param>
        /// <exception cref="ArgumentNullException"></exception>
        public GostKeyExchange CreateKeyExchangeInfo(SymmetricAlgorithm keyExchangeAlgorithm)
        {
            if (keyExchangeAlgorithm == null)
            {
                throw ExceptionUtility.ArgumentNull("keyExchangeAlgorithm");
            }

            var keyExchange = new GostKeyExchange();
            var keyExchangeParameters = _publicKey.ExportParameters(false);

            using (var keyExchangeAsym = new Gost3410EphemeralAsymmetricAlgorithm(keyExchangeParameters))
            {
                byte[] encodedKeyExchangeInfo;

                using (var keyExchangeAlg = keyExchangeAsym.CreateKeyExchange(keyExchangeParameters))
                {
                    encodedKeyExchangeInfo = keyExchangeAlg.EncodeKeyExchange(keyExchangeAlgorithm, GostKeyExchangeExportMethod.CryptoProKeyExport);
                }

                var keyExchangeInfo = new GostKeyExchangeInfo();
                keyExchangeInfo.Decode(encodedKeyExchangeInfo);

                keyExchange.SessionEncryptedKey = keyExchangeInfo;
                keyExchange.TransportParameters = keyExchangeAsym.ExportParameters(false);
            }

            return keyExchange;
        }