Beispiel #1
0
        public static byte[] EncodePublicBlob(Gost_R3410_KeyExchangeParams publicKeyParameters, int keySize, int signatureAlgId)
        {
            var encodedKeyParams = publicKeyParameters.EncodeParameters();
            var encodedKeyBlob   = new byte[16 + encodedKeyParams.Length + publicKeyParameters.PublicKey.Length];

            encodedKeyBlob[0] = 6;
            encodedKeyBlob[1] = 32;
            Array.Copy(BitConverter.GetBytes(signatureAlgId), 0, encodedKeyBlob, 4, 4);
            Array.Copy(BitConverter.GetBytes(Constants.GR3410_1_MAGIC), 0, encodedKeyBlob, 8, 4);
            Array.Copy(BitConverter.GetBytes(keySize), 0, encodedKeyBlob, 12, 4);
            Array.Copy(encodedKeyParams, 0, encodedKeyBlob, 16, encodedKeyParams.Length);
            Array.Copy(publicKeyParameters.PublicKey, 0, encodedKeyBlob, 16 + encodedKeyParams.Length, publicKeyParameters.PublicKey.Length);

            return(encodedKeyBlob);
        }
        protected Gost_R3410_KeyExchangeAlgorithm(ProviderType providerType, SafeProvHandleImpl provHandle, SafeKeyHandleImpl keyHandle, Gost_R3410_KeyExchangeParams keyExchangeParameters, int keySize, int signatureAlgId) : base(providerType)
        {
            if (provHandle == null)
            {
                throw ExceptionUtility.ArgumentNull(nameof(provHandle));
            }

            if (keyHandle == null)
            {
                throw ExceptionUtility.ArgumentNull(nameof(keyHandle));
            }

            if (keyExchangeParameters == null)
            {
                throw ExceptionUtility.ArgumentNull(nameof(keyExchangeParameters));
            }

            _provHandle            = provHandle.DangerousAddRef();
            _keyHandle             = keyHandle.DangerousAddRef();
            _keyExchangeParameters = keyExchangeParameters;
            _keySize        = keySize;
            _signatureAlgId = signatureAlgId;
        }