42 {
43 byte[]
array =
new byte[estimatedSize];
44 int pcbResult;
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)
47 {
48 errorCode = global::Interop.NCrypt.NCryptSignHash(keyHandle, pPaddingInfo, hash, hash.
Length,
array,
array.Length, out pcbResult, paddingMode);
49 }
50 if (errorCode == global::Interop.NCrypt.ErrorCode.NTE_BUFFER_TOO_SMALL)
51 {
52 array =
new byte[pcbResult];
53 errorCode = global::Interop.NCrypt.NCryptSignHash(keyHandle, pPaddingInfo, hash, hash.
Length,
array,
array.Length, out pcbResult, paddingMode);
54 }
55 if (errorCode == global::Interop.NCrypt.ErrorCode.STATUS_UNSUCCESSFUL)
56 {
57 errorCode = global::Interop.NCrypt.NCryptSignHash(keyHandle, pPaddingInfo, hash, hash.
Length,
array,
array.Length, out pcbResult, paddingMode);
58 }
59 if (errorCode != 0)
60 {
61 throw errorCode.ToCryptographicException();
62 }
65 }