示例#1
0
        public static byte[] SignValue(SafeProvHandleImpl providerHandle, SafeHashHandleImpl hashHandle, int keyNumber, byte[] hashValue)
        {
            SetHashValue(hashHandle, hashValue);

            uint signatureLength = 0;

            // Вычисление размера подписи
            if (!CryptoApi.CryptSignHash(hashHandle, (uint)keyNumber, null, 0, null, ref signatureLength))
            {
                throw CreateWin32Error();
            }

            var signatureValue = new byte[signatureLength];

            // Вычисление значения подписи
            if (!CryptoApi.CryptSignHash(hashHandle, (uint)keyNumber, null, 0, signatureValue, ref signatureLength))
            {
                throw CreateWin32Error();
            }

            return(signatureValue);
        }
示例#2
0
        public static byte[] SignValue(SafeProvHandleImpl hProv, int keyNumber, byte[] hashValue, GostAlgorithmType alg)
        {
            using (var hashHandle = SetupHashAlgorithm(hProv, hashValue, alg))
            {
                int signatureLength = 0;

                // Вычисление размера подписи
                if (!CryptoApi.CryptSignHash(hashHandle, (int)keyNumber, null, 0, null, ref signatureLength))
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }

                var signatureValue = new byte[signatureLength];

                // Вычисление значения подписи
                if (!CryptoApi.CryptSignHash(hashHandle, (int)keyNumber, null, 0, signatureValue, ref signatureLength))
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }

                return(signatureValue);
            }
        }
示例#3
0
        public static byte[] SignValue(SafeProvHandleImpl hProv, int keyNumber, byte[] hashValue)
        {
            using (var hashHandle = SetupHashAlgorithm(hProv, hashValue))
            {
                uint signatureLength = 0;

                // Вычисление размера подписи
                if (!CryptoApi.CryptSignHash(hashHandle, (uint)keyNumber, null, 0, null, ref signatureLength))
                {
                    throw CreateWin32Error();
                }

                var signatureValue = new byte[signatureLength];

                // Вычисление значения подписи
                if (!CryptoApi.CryptSignHash(hashHandle, (uint)keyNumber, null, 0, signatureValue, ref signatureLength))
                {
                    throw CreateWin32Error();
                }

                return(signatureValue);
            }
        }