43 byte[]
array =
new byte[estimatedSize];
45 global::Interop.NCrypt.ErrorCode errorCode = global::Interop.NCrypt.NCryptSignHash(keyHandle, pPaddingInfo, hash, hash.
Length,
array,
array.Length, out pcbResult, paddingMode);
46 if (errorCode == global::Interop.NCrypt.ErrorCode.STATUS_UNSUCCESSFUL)
48 errorCode = global::Interop.NCrypt.NCryptSignHash(keyHandle, pPaddingInfo, hash, hash.
Length,
array,
array.Length, out pcbResult, paddingMode);
50 if (errorCode == global::Interop.NCrypt.ErrorCode.NTE_BUFFER_TOO_SMALL)
52 array =
new byte[pcbResult];
53 errorCode = global::Interop.NCrypt.NCryptSignHash(keyHandle, pPaddingInfo, hash, hash.
Length,
array,
array.Length, out pcbResult, paddingMode);
55 if (errorCode == global::Interop.NCrypt.ErrorCode.STATUS_UNSUCCESSFUL)
57 errorCode = global::Interop.NCrypt.NCryptSignHash(keyHandle, pPaddingInfo, hash, hash.
Length,
array,
array.Length, out pcbResult, paddingMode);
61 throw errorCode.ToCryptographicException();
69 for (
int i = 0; i <= 1; i++)
72 global::Interop.NCrypt.ErrorCode errorCode = global::Interop.NCrypt.NCryptSignHash(keyHandle, pPaddingInfo, hash, hash.
Length, signature, signature.
Length, out pcbResult, paddingMode);
75 case global::Interop.NCrypt.ErrorCode.ERROR_SUCCESS:
76 bytesWritten = pcbResult;
78 case global::Interop.NCrypt.ErrorCode.NTE_BUFFER_TOO_SMALL:
82 throw errorCode.ToCryptographicException();
83 case global::Interop.NCrypt.ErrorCode.STATUS_UNSUCCESSFUL:
87 throw global::Interop.NCrypt.ErrorCode.STATUS_UNSUCCESSFUL.ToCryptographicException();
92 global::Interop.NCrypt.ErrorCode errorCode = global::Interop.NCrypt.NCryptVerifySignature(keyHandle, pPaddingInfo, hash, hash.
Length, signature, signature.
Length, paddingMode);
93 if (errorCode == global::Interop.NCrypt.ErrorCode.STATUS_UNSUCCESSFUL)
95 errorCode = global::Interop.NCrypt.NCryptVerifySignature(keyHandle, pPaddingInfo, hash, hash.
Length, signature, signature.
Length, paddingMode);
97 return errorCode == global::Interop.NCrypt.ErrorCode.ERROR_SUCCESS;