コード例 #1
0
ファイル: NCryptInterop.cs プロジェクト: kdurkin77/DTLS2.Net
        internal static byte[] SignHashRaw(CngKey key, byte[] hash, int keySize)
        {
            var keySizeBytes = keySize / 8;
            var signature    = new byte[keySizeBytes];

            // The Handle property returns a new object each time.
            using (var keyHandle = key.Handle)
            {
                // Leave pszAlgId NULL to "raw sign"
                var paddingInfo = new BCRYPT_PKCS1_PADDING_INFO();

                var result = NCryptSignHash(
                    keyHandle,
                    ref paddingInfo,
                    ref hash[0],
                    hash.Length,
                    ref signature[0],
                    signature.Length,
                    out var cbResult,
                    NCryptSignFlags.BCRYPT_PAD_PKCS1);

                if (result != 0)
                {
                    throw new CryptographicException(result);
                }

                if (cbResult != signature.Length)
                {
                    throw new InvalidOperationException();
                }

                return(signature);
            }
        }
コード例 #2
0
ファイル: NCryptInterop.cs プロジェクト: kdurkin77/DTLS2.Net
 private static extern int NCryptSignHash(
     SafeNCryptKeyHandle hKey,
     ref BCRYPT_PKCS1_PADDING_INFO padding,
     ref byte pbHashValue,
     int cbHashValue,
     ref byte pbSignature,
     int cbSignature,
     out int cbResult,
     NCryptSignFlags dwFlags);