Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ SignHash() [2/2]

static unsafe byte[] Internal.Cryptography.CngCommon.SignHash ( this SafeNCryptKeyHandle keyHandle,
ReadOnlySpan< byte > hash,
global::Interop::NCrypt::AsymmetricPaddingMode paddingMode,
void * pPaddingInfo,
int estimatedSize )
inlinestatic

Definition at line 41 of file CngCommon.cs.

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 }
63 Array.Resize(ref array, pcbResult);
64 return array;
65 }

References System.array, and System.ReadOnlySpan< T >.Length.