33 6, 2, 0, 0, 0, 164, 0, 0, 82, 83,
34 65, 49, 0, 2, 0, 0, 1, 0, 0, 0,
35 171, 239, 250, 198, 125, 232, 222, 251, 104, 56,
36 9, 146, 217, 66, 126, 107, 137, 158, 33, 215,
37 82, 28, 153, 60, 23, 72, 78, 58, 68, 2,
38 242, 250, 116, 87, 218, 228, 211, 192, 53, 103,
39 250, 110, 223, 120, 76, 117, 53, 28, 160, 116,
40 73, 227, 32, 19, 113, 53, 101, 223, 18, 32,
46 if (dsaParameters.
P ==
null || dsaParameters.
P.Length == 0 || dsaParameters.
Q ==
null || dsaParameters.
Q.Length != 20)
50 if (dsaParameters.
G ==
null || dsaParameters.
G.Length != dsaParameters.
P.Length)
54 if (dsaParameters.
J !=
null && dsaParameters.
J.Length >= dsaParameters.
P.Length)
58 if (dsaParameters.
Y !=
null && dsaParameters.
Y.Length != dsaParameters.
P.Length)
62 if (dsaParameters.
Seed !=
null && dsaParameters.
Seed.Length != 20)
66 bool flag = dsaParameters.X !=
null && dsaParameters.X.Length != 0;
67 if (flag && dsaParameters.
X.Length != 20)
71 uint
value = (uint)(dsaParameters.
P.Length * 8);
72 uint num = ((dsaParameters.J !=
null) ? ((uint)(dsaParameters.J.Length * 8)) : 0u);
78 binaryWriter.Write(flag ? 877876036 : 861098820);
79 binaryWriter.Write(
value);
80 binaryWriter.Write((uint)(dsaParameters.Q.Length * 8));
81 binaryWriter.Write(num);
84 binaryWriter.Write((uint)(dsaParameters.X.Length * 8));
87 binaryWriter.WriteReversed(dsaParameters.
P);
88 binaryWriter.WriteReversed(dsaParameters.
Q);
89 binaryWriter.WriteReversed(dsaParameters.
G);
92 binaryWriter.WriteReversed(dsaParameters.
J);
94 binaryWriter.WriteReversed(dsaParameters.
Y);
97 binaryWriter.WriteReversed(dsaParameters.
X);
102 binaryWriter.Write(flag ? 844321604 : 827544388);
103 binaryWriter.Write(
value);
104 binaryWriter.WriteReversed(dsaParameters.
P);
105 binaryWriter.WriteReversed(dsaParameters.
Q);
106 binaryWriter.WriteReversed(dsaParameters.
G);
109 binaryWriter.WriteReversed(dsaParameters.
X);
113 binaryWriter.WriteReversed(dsaParameters.
Y);
117 binaryWriter.Flush();
118 return memoryStream.ToArray();
131 binaryReader.ReadInt32();
132 int count = (binaryReader.ReadInt32() + 7) / 8;
133 int count2 = (binaryReader.ReadInt32() + 7) / 8;
134 int num = (binaryReader.ReadInt32() + 7) / 8;
136 if (includePrivateParameters)
138 count3 = (binaryReader.ReadInt32() + 7) / 8;
140 ReadDSSSeed(dSAParameters, binaryReader, isV3:
true);
141 dSAParameters.P = binaryReader.ReadReversed(
count);
142 dSAParameters.Q = binaryReader.ReadReversed(count2);
143 dSAParameters.G = binaryReader.ReadReversed(
count);
146 dSAParameters.J = binaryReader.ReadReversed(num);
148 dSAParameters.Y = binaryReader.ReadReversed(
count);
149 if (includePrivateParameters)
151 dSAParameters.X = binaryReader.ReadReversed(count3);
156 binaryReader.ReadInt32();
157 int count4 = (binaryReader.ReadInt32() + 7) / 8;
158 dSAParameters.P = binaryReader.ReadReversed(count4);
159 dSAParameters.Q = binaryReader.ReadReversed(20);
160 dSAParameters.G = binaryReader.ReadReversed(count4);
162 if (includePrivateParameters)
164 position = binaryReader.BaseStream.Position;
165 dSAParameters.X = binaryReader.ReadReversed(20);
169 dSAParameters.Y = binaryReader.ReadReversed(count4);
171 ReadDSSSeed(dSAParameters, binaryReader, isV3:
false);
172 if (includePrivateParameters)
174 if (cspPublicBlob ==
null)
180 binaryReader2.BaseStream.Position = position;
181 dSAParameters.Y = binaryReader2.ReadReversed(count4);
184 return dSAParameters;
196 br.BaseStream.Position += 2
L;
208 if ((dsaParameters.
Y !=
null && isPrivate) || (dsaParameters.
Y !=
null && dsaParameters.
J !=
null))
213 bw.
Write((
byte)(isPrivate ? 7u : 6u));
223 if ((!isV3) ? (num > 0) : (num != -1))
225 dsaParameters.Counter = num;
226 dsaParameters.Seed = br.ReadReversed(20);
230 dsaParameters.Counter = 0;
231 dsaParameters.Seed =
null;
232 br.BaseStream.Position += 20
L;
238 if (dsaParameters.
Seed ==
null || dsaParameters.
Seed.Length == 0)
240 bw.
Write(uint.MaxValue);
241 for (
int i = 0; i < 20; i += 4)
243 bw.
Write(uint.MaxValue);
249 bw.WriteReversed(dsaParameters.
Seed);
255 if (rsaParameters.
Modulus ==
null)
263 int num = rsaParameters.
Modulus.Length;
264 int num2 = (num + 1) / 2;
265 if (rsaParameters.
P !=
null)
267 if (rsaParameters.
P.Length != num2)
271 if (rsaParameters.
Q ==
null || rsaParameters.
Q.Length != num2)
275 if (rsaParameters.
DP ==
null || rsaParameters.
DP.Length != num2)
279 if (rsaParameters.
DQ ==
null || rsaParameters.
DQ.Length != num2)
283 if (rsaParameters.
InverseQ ==
null || rsaParameters.
InverseQ.Length != num2)
287 if (rsaParameters.
D ==
null || rsaParameters.
D.Length != num)
292 bool flag = rsaParameters.P !=
null && rsaParameters.P.Length != 0;
295 binaryWriter.
Write((
byte)(flag ? 7u : 6u));
296 binaryWriter.
Write((
byte)2);
297 binaryWriter.
Write((ushort)0);
298 binaryWriter.
Write(41984u);
299 binaryWriter.
Write(flag ? 843141970 : 826364754);
300 binaryWriter.
Write((uint)(num * 8));
302 for (
int i = 0; i < rsaParameters.
Exponent.Length; i++)
307 binaryWriter.
Write(num3);
308 binaryWriter.WriteReversed(rsaParameters.
Modulus);
311 binaryWriter.WriteReversed(rsaParameters.
P);
312 binaryWriter.WriteReversed(rsaParameters.
Q);
313 binaryWriter.WriteReversed(rsaParameters.
DP);
314 binaryWriter.WriteReversed(rsaParameters.
DQ);
315 binaryWriter.WriteReversed(rsaParameters.
InverseQ);
316 binaryWriter.WriteReversed(rsaParameters.
D);
318 binaryWriter.
Flush();
338 if (num != 41984 && num != 9216)
345 int count = (num3 + 1) / 2;
349 result.Modulus = binaryReader.ReadReversed(num3);
350 if (includePrivateParameters)
352 result.P = binaryReader.ReadReversed(
count);
353 result.Q = binaryReader.ReadReversed(
count);
354 result.DP = binaryReader.ReadReversed(
count);
355 result.DQ = binaryReader.ReadReversed(
count);
356 result.InverseQ = binaryReader.ReadReversed(
count);
357 result.D = binaryReader.ReadReversed(num3);
369 if (cspBlob.Length < 8)
380 if (exponent > 65535)
382 if (exponent > 16777215)
386 (byte)(exponent >> 24),
387 (byte)(exponent >> 16),
388 (byte)(exponent >> 8),
394 (byte)(exponent >> 16),
395 (byte)(exponent >> 8),
401 (byte)(exponent >> 8),
405 return new byte[1] { (byte)exponent };
415 public static string UpgradeDSS(
int dwProvType,
string wszProvider)
417 string result =
null;
418 if (
string.Equals(wszProvider,
"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider",
StringComparison.Ordinal))
420 if (
AcquireCryptContext(out var safeProvHandle,
null,
"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider", dwProvType, 4026531840u) == 0)
422 result =
"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider";
424 safeProvHandle.Dispose();
431 if (cbSignature != 40)
439 public static string UpgradeRSA(
int dwProvType,
string wszProvider)
441 bool flag =
string.Equals(wszProvider,
"Microsoft Enhanced Cryptographic Provider v1.0",
StringComparison.Ordinal);
442 bool flag2 =
string.Equals(wszProvider,
"Microsoft Base Cryptographic Provider v1.0",
StringComparison.Ordinal);
443 string result =
null;
446 if (
AcquireCryptContext(out var safeProvHandle,
null,
"Microsoft Enhanced RSA and AES Cryptographic Provider", dwProvType, 4026531840u) == 0)
448 result =
"Microsoft Enhanced RSA and AES Cryptographic Provider";
450 safeProvHandle.Dispose();
458 if (!global::Interop.Advapi32.CryptGetDefaultProvider(dwType,
IntPtr.
Zero, global::Interop.Advapi32.GetDefaultProviderFlags.CRYPT_MACHINE_DEFAULT,
null, ref pcbProvName))
463 if (!global::Interop.Advapi32.CryptGetDefaultProvider(dwType,
IntPtr.
Zero, global::Interop.Advapi32.GetDefaultProviderFlags.CRYPT_MACHINE_DEFAULT, stringBuilder, ref pcbProvName))
488 if (randomKeyContainer)
493 int num2 =
OpenCSP(parameters, num, out safeProvHandle2);
497 throw num2.ToCryptographicException();
499 safeProvHandle = safeProvHandle2;
505 if ((flags & 0xF0000000u) == 4026531840u && (flags & 0x20) == 32)
507 flags &= 0xFFFFFFDFu;
509 if (!global::Interop.Advapi32.CryptAcquireContext(out safeProvHandle, keyContainer, providerName, providerType, flags))
519 int num =
OpenCSP(cspParameters, 4026531840u, out safeProvHandle2);
523 throw num.ToCryptographicException();
525 safeProvHandle = safeProvHandle2;
531 if (cspParameters ==
null)
536 string providerName = ((cspParameters.ProviderName !=
null) ? cspParameters.
ProviderName : (cspParameters.ProviderName =
GetDefaultProvider(providerType)));
537 int flags2 = (int)cspParameters.
Flags;
551 safeProvHandle2.ContainerName =
text;
552 safeProvHandle2.ProviderName = providerName;
553 safeProvHandle2.Types = providerType;
554 safeProvHandle2.Flags = flags;
557 safeProvHandle2.PersistKeyInCsp =
false;
559 safeProvHandle = safeProvHandle2;
567 uint num = (uint)
OpenCSP(parameters, flags, out safeProvHandle);
571 if (
IsFlagBitSet((uint)parameters.
Flags, 8u) || (num != 2148073497u && num != 2148073494u && num != 2147942402u))
573 throw ((
int)num).ToCryptographicException();
575 CreateCSP(parameters, randomKeyContainer, out safeProvHandle);
580 if (!global::Interop.Advapi32.CryptSetProvParam(safeProvHandle, global::Interop.Advapi32.CryptProvParam.PP_CLIENT_HWND, ref pbData, 0))
590 global::Interop.Advapi32.CryptProvParam dwParam = ((parameters.KeyNumber == 2) ? global::Interop.Advapi32.CryptProvParam.PP_SIGNATURE_PIN : global::Interop.Advapi32.CryptProvParam.PP_KEYEXCHANGE_PIN);
591 if (!global::Interop.Advapi32.CryptSetProvParam(safeProvHandle, dwParam, intPtr, 0))
604 return safeProvHandle;
609 return (dwImp & flag) == flag;
615 if (!global::Interop.Advapi32.CryptGetProvParam(safeProvHandle, flags, impType, ref cb))
619 if (impType !=
null && cb == 4)
629 byte[] impType =
new byte[4];
635 string result =
null;
652 if (!global::Interop.Advapi32.CryptGetKeyParam(safeKeyHandle, global::Interop.Advapi32.CryptGetKeyParamFlags.KP_PERMISSIONS,
array, ref cb, 0))
674 flag = (
CryptGetUserKey(safeProvHandle, keyNumber, out safeKeyHandle) ? true :
false);
679 byte[] impType2 =
null;
680 num =
GetProviderParameterWorker(safeProvHandle, impType2, ref cb, global::Interop.Advapi32.CryptProvParam.PP_UNIQUE_CONTAINER);
681 impType2 =
new byte[cb];
682 num =
GetProviderParameterWorker(safeProvHandle, impType2, ref cb, global::Interop.Advapi32.CryptProvParam.PP_UNIQUE_CONTAINER);
709 safeKeyHandle.KeySpec = keySpec;
719 if (!
CryptGenKey(safeProvHandle, algID, dwFlags, out safeKeyHandle))
727 safeKeyHandle.KeySpec = algID;
783 if (!global::Interop.Advapi32.CryptGetKeyParam(safeKeyHandle, global::Interop.Advapi32.CryptGetKeyParamFlags.KP_KEYLEN,
null, ref pdwDataLen, 0))
787 array =
new byte[pdwDataLen];
788 if (!global::Interop.Advapi32.CryptGetKeyParam(safeKeyHandle, global::Interop.Advapi32.CryptGetKeyParamFlags.KP_KEYLEN,
array, ref pdwDataLen, 0))
794 array =
new byte[1] { (byte)(safeKeyHandle.PublicOnly ? 1 : 0) };
797 if (!global::Interop.Advapi32.CryptGetKeyParam(safeKeyHandle, global::Interop.Advapi32.CryptGetKeyParamFlags.KP_ALGID,
null, ref pdwDataLen, 0))
801 array =
new byte[pdwDataLen];
802 if (!global::Interop.Advapi32.CryptGetKeyParam(safeKeyHandle, global::Interop.Advapi32.CryptGetKeyParamFlags.KP_ALGID,
array, ref pdwDataLen, 0))
823 if (((uint)(keyParam - 4) <= 1u || keyParam ==
CryptGetKeyParamQueryType.KP_EFFECTIVE_KEYLEN) && !global::Interop.Advapi32.CryptSetKeyParam(safeKeyHandle, (
int)keyParam, ref
value, 0))
832 if (userParameters ==
null)
847 cspParameters.KeyNumber = 2;
849 else if (cspParameters.
KeyNumber == 41984)
851 cspParameters.KeyNumber = 1;
857 randomKeyContainer =
true;
859 return cspParameters;
867 if ((flags & cspProviderFlags) != 0)
883 throw userKey.ToCryptographicException();
894 return safeKeyHandle;
911 safeProvHandle.PersistKeyInCsp = fPersistKeyInCsp;
914 internal static void DecryptKey(
SafeKeyHandle safeKeyHandle,
byte[] encryptedData,
int encryptedDataLength,
bool fOAEP, out
byte[] decryptedData)
917 byte[]
array =
new byte[encryptedDataLength];
920 int num = (fOAEP ? 64 : 0);
921 int pdwDataLen = encryptedDataLength;
925 if ((num & 0x40) == 64)
937 throw errorCode.ToCryptographicException();
939 decryptedData =
new byte[pdwDataLen];
943 internal static void EncryptKey(
SafeKeyHandle safeKeyHandle,
byte[] pbKey,
int cbKey,
bool foep, [NotNull] ref
byte[] pbEncryptedKey)
946 int dwFlags = (foep ? 64 : 0);
947 int pdwDataLen = cbKey;
948 if (!global::Interop.Advapi32.CryptEncrypt(safeKeyHandle,
SafeHashHandle.
InvalidHandle, Final:
true, dwFlags,
null, ref pdwDataLen, pdwDataLen))
952 pbEncryptedKey =
new byte[pdwDataLen];
954 if (!global::Interop.Advapi32.CryptEncrypt(safeKeyHandle,
SafeHashHandle.
InvalidHandle, Final:
true, dwFlags, pbEncryptedKey, ref cbKey, pdwDataLen))
964 int pdwDataLen =
input.Length;
969 byte[]
array =
new byte[pdwDataLen];
971 int pdwDataLen2 =
input.Length;
976 int num = (isFinal ? input.Length : pdwDataLen2);
977 array.AsSpan(0, num).CopyTo(output);
986 int pdwDataLen =
input.Length;
991 array.AsSpan(0, pdwDataLen).CopyTo(output);
997 bool flag = keyBlob.Length != 0 && keyBlob[0] == 6;
1011 throw hRForLastWin32Error.ToCryptographicException();
1013 phKey.PublicOnly = flag;
1014 safeKeyHandle = phKey;
1021 int dwBlobType = (includePrivateParameters ? 7 : 6);
1022 if (!global::Interop.Advapi32.CryptExportKey(safeKeyHandle,
SafeKeyHandle.InvalidHandle, dwBlobType, 0,
null, ref dwDataLen))
1026 byte[]
array =
new byte[dwDataLen];
1027 if (!global::Interop.Advapi32.CryptExportKey(safeKeyHandle,
SafeKeyHandle.InvalidHandle, dwBlobType, 0,
array, ref dwDataLen))
1036 if (nameOrOid ==
null)
1046 if (algIdFromOid == 0 || algIdFromOid == -1)
1050 return algIdFromOid;
1055 if (hashAlg ==
null)
1059 if (hashAlg is
string nameOrOid)
1069 if (hashAlg is
SHA1)
1086 else if (hashAlg is
Type c)
1088 if (typeof(
MD5).IsAssignableFrom(c))
1092 if (typeof(
SHA1).IsAssignableFrom(c))
1096 if (typeof(
SHA256).IsAssignableFrom(c))
1100 if (typeof(
SHA384).IsAssignableFrom(c))
1104 if (typeof(
SHA512).IsAssignableFrom(c))
1127 if (
string.Equals(oid,
"2.16.840.1.101.3.4.2.1",
StringComparison.Ordinal))
1131 if (
string.Equals(oid,
"2.16.840.1.101.3.4.2.2",
StringComparison.Ordinal))
1135 if (
string.Equals(oid,
"2.16.840.1.101.3.4.2.3",
StringComparison.Ordinal))
1139 return global::Interop.Crypt32.FindOidInfo(global::Interop.Crypt32.CryptOidInfoKeyType.CRYPT_OID_INFO_OID_KEY, oid, oidGroup, fallBackToAllGroups:
false).AlgId;
1144 using SafeHashHandle hHash = hProv.CreateHashHandle(hash, calgHash);
1146 if (!global::Interop.Advapi32.CryptSignHash(hHash, (global::Interop.Advapi32.KeySpec)keyNumber,
null, global::Interop.Advapi32.CryptSignAndVerifyHashFlags.None,
null, ref pdwSigLen))
1149 throw hRForLastWin32Error.ToCryptographicException();
1151 byte[]
array =
new byte[pdwSigLen];
1152 if (!global::Interop.Advapi32.CryptSignHash(hHash, (global::Interop.Advapi32.KeySpec)keyNumber,
null, global::Interop.Advapi32.CryptSignAndVerifyHashFlags.None,
array, ref pdwSigLen))
1155 throw hRForLastWin32Error2.ToCryptographicException();
1176 signature = signature.CloneByteArray();
1180 signature = signature.CloneByteArray();
1186 using SafeHashHandle safeHashHandle = hProv.CreateHashHandle(hash, calgHash, throwOnSizeError:
false);
1187 if (safeHashHandle ==
null)
1191 return global::Interop.Advapi32.CryptVerifySignature(safeHashHandle, signature, signature.Length, hKey,
null, global::Interop.Advapi32.CryptSignAndVerifyHashFlags.None);
1194 public static void DeriveKey(
SafeProvHandle hProv,
int algid,
int algidHash,
byte[] password,
int cbPassword,
int dwFlags,
byte[] IV_Out,
int cbIV_In, [NotNull] ref
byte[] pbKey)
1204 throw hRForLastWin32Error.ToCryptographicException();
1206 if (!global::Interop.Advapi32.CryptHashData(phHash, password, cbPassword, 0))
1209 throw hRForLastWin32Error2.ToCryptographicException();
1211 if (!
CryptDeriveKey(hProv, algid, phHash, dwFlags | 1, out phKey))
1214 throw hRForLastWin32Error3.ToCryptographicException();
1216 byte[] key_out =
null;
1218 UnloadKey(hProv, phKey, ref key_out, ref cb_out);
1220 if (!global::Interop.Advapi32.CryptGetKeyParam(phKey, global::Interop.Advapi32.CryptGetKeyParamFlags.KP_IV,
null, ref pdwDataLen, 0))
1223 throw hRForLastWin32Error4.ToCryptographicException();
1225 byte[]
array =
new byte[pdwDataLen];
1226 if (!global::Interop.Advapi32.CryptGetKeyParam(phKey, global::Interop.Advapi32.CryptGetKeyParamFlags.KP_IV,
array, ref pdwDataLen, 0))
1229 throw hRForLastWin32Error5.ToCryptographicException();
1231 if (pdwDataLen != cbIV_In)
1236 pbKey =
new byte[cb_out];
1254 throw hRForLastWin32Error.ToCryptographicException();
1257 if (!global::Interop.Advapi32.CryptExportKey(hKey, phKey, 1, 0,
null, ref dwDataLen))
1260 throw hRForLastWin32Error2.ToCryptographicException();
1262 byte[]
array =
new byte[dwDataLen];
1263 if (!global::Interop.Advapi32.CryptExportKey(hKey, phKey, 1, 0,
array, ref dwDataLen))
1266 throw hRForLastWin32Error3.ToCryptographicException();
1270 int num3 = checked(dwDataLen - num - 4 - 2);
1271 while (num3 > 0 &&
array[num3 + num2] != 0)
1275 key_out =
new byte[num3];
1288 return hProv.CreateHashHandle(hash, calgHash, throwOnSizeError:
true);
1293 if (!
CryptCreateHash(hProv, calgHash,
SafeKeyHandle.InvalidHandle, global::Interop.Advapi32.CryptCreateHashFlags.None, out var phHash))
1297 throw hRForLastWin32Error.ToCryptographicException();
1303 if (!global::Interop.Advapi32.CryptGetHashParam(phHash, global::Interop.Advapi32.CryptHashProperty.HP_HASHSIZE, out pbData, ref pdwDataLen, 0))
1306 throw hRForLastWin32Error2.ToCryptographicException();
1308 if (pbData != hash.Length)
1310 if (throwOnSizeError)
1312 throw (-2146893821).ToCryptographicException();
1316 if (!global::Interop.Advapi32.CryptSetHashParam(phHash, global::Interop.Advapi32.CryptHashProperty.HP_HASHVAL, hash, 0))
1319 throw hRForLastWin32Error3.ToCryptographicException();
1333 return (-2146893819).ToCryptographicException();
1338 return (-2147467259).ToCryptographicException();
1343 bool result = global::Interop.Advapi32.CryptGetUserKey(safeProvHandle, dwKeySpec, out safeKeyHandle);
1344 safeKeyHandle.SetParent(safeProvHandle);
1350 bool result = global::Interop.Advapi32.CryptGenKey(safeProvHandle, algId, dwFlags, out safeKeyHandle);
1351 safeKeyHandle.SetParent(safeProvHandle);
1357 fixed (
byte* pbData2 = pbData)
1359 bool result = global::Interop.Advapi32.CryptImportKey(hProv, pbData2, pbData.
Length, hPubKey, dwFlags, out phKey);
1360 phKey.SetParent(hProv);
1367 bool result = global::Interop.Advapi32.CryptCreateHash(hProv, algId, hKey, dwFlags, out phHash);
1368 phHash.SetParent(hProv);
1374 bool result = global::Interop.Advapi32.CryptDeriveKey(hProv, algId, phHash, dwFlags, out phKey);
1375 phKey.SetParent(hProv);
1384 binaryWriter.Write(rawKey.Length);
1385 binaryWriter.Write(rawKey);
1386 binaryWriter.Flush();
1387 return memoryStream.ToArray();
1394 bw.
Write((ushort)0);
static CryptographicException GetEFailException()
static int GetProviderParameterWorker(SafeProvHandle safeProvHandle, byte[] impType, ref int cb, global::Interop.Advapi32.CryptProvParam flags)
static void AcquireCsp(CspParameters cspParameters, out SafeProvHandle safeProvHandle)
static bool CryptCreateHash(SafeProvHandle hProv, int algId, SafeKeyHandle hKey, global::Interop.Advapi32.CryptCreateHashFlags dwFlags, out SafeHashHandle phHash)
static object GetProviderParameter(SafeProvHandle safeProvHandle, int keyNumber, int keyParam)
static int OpenCSP(CspParameters cspParameters, uint flags, out SafeProvHandle safeProvHandle)
static void SetKeyParameter(SafeKeyHandle safeKeyHandle, CryptGetKeyParamQueryType keyParam, byte[] value)
static void UnloadKey(SafeProvHandle hProv, SafeKeyHandle hKey, [NotNull] ref byte[] key_out, ref int cb_out)
static void WriteReversed(this BinaryWriter bw, byte[] bytes)
static void VerifyValidHandle(SafeHandleZeroOrMinusOneIsInvalid handle)
static SafeKeyHandle GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, int keySize, SafeProvHandle safeProvHandle)
static int DecryptData(SafeKeyHandle hKey, ReadOnlySpan< byte > input, Span< byte > output)
static bool GetPersistKeyInCsp(SafeProvHandle safeProvHandle)
static bool IsFlagBitSet(uint dwImp, uint flag)
static int AcquireCryptContext(out SafeProvHandle safeProvHandle, string keyContainer, string providerName, int providerType, uint flags)
static bool CryptGenKey(SafeProvHandle safeProvHandle, int algId, int dwFlags, out SafeKeyHandle safeKeyHandle)
static void SetPersistKeyInCsp(SafeProvHandle safeProvHandle, bool fPersistKeyInCsp)
static bool CryptDeriveKey(SafeProvHandle hProv, int algId, SafeHashHandle phHash, int dwFlags, out SafeKeyHandle phKey)
static ReadOnlySpan< byte > RgbPubKey
static SafeProvHandle CreateProvHandle(CspParameters parameters, bool randomKeyContainer)
static void ReverseDsaSignature(byte[] signature, int cbSignature)
static void ReadDSSSeed(DSAParameters dsaParameters, BinaryReader br, bool isV3)
static void SetKeyParameter(SafeKeyHandle safeKeyHandle, CryptGetKeyParamQueryType keyParam, int value)
CryptGetKeyParamQueryType
static void WriteKeyBlobHeader(DSAParameters dsaParameters, BinaryWriter bw, bool isPrivate, out bool isV3)
static int GetErrorCode()
static uint MapCspProviderFlags(int flags)
static void ReadKeyBlobHeader(BinaryReader br, out byte bVersion)
static DSAParameters ToDSAParameters(this byte[] cspBlob, bool includePrivateParameters, byte[] cspPublicBlob)
static int ObjToHashAlgId(object hashAlg)
static SafeHashHandle CreateHashHandle(this SafeProvHandle hProv, byte[] hash, int calgHash, bool throwOnSizeError)
static byte[] ToPlainTextKeyBlob(int algId, byte[] rawKey)
static byte[] ToKeyBlob(this DSAParameters dsaParameters)
static CspParameters SaveCspParameters(CspAlgorithmType keyType, CspParameters userParameters, CspProviderFlags defaultFlags, out bool randomKeyContainer)
static bool CryptGetUserKey(SafeProvHandle safeProvHandle, int dwKeySpec, out SafeKeyHandle safeKeyHandle)
static int MapCspKeyFlags(int flags)
static RSAParameters ToRSAParameters(this byte[] cspBlob, bool includePrivateParameters)
static byte GetKeyBlobHeaderVersion(byte[] cspBlob)
static int GenerateKey(SafeProvHandle safeProvHandle, int algID, int flags, uint keySize, out SafeKeyHandle safeKeyHandle)
static int NameOrOidToHashAlgId(string nameOrOid, OidGroup oidGroup)
static string GetDefaultProvider(int dwType)
static int GetAlgIdFromOid(string oid, OidGroup oidGroup)
static void DeriveKey(SafeProvHandle hProv, int algid, int algidHash, byte[] password, int cbPassword, int dwFlags, byte[] IV_Out, int cbIV_In, [NotNull] ref byte[] pbKey)
static void DecryptKey(SafeKeyHandle safeKeyHandle, byte[] encryptedData, int encryptedDataLength, bool fOAEP, out byte[] decryptedData)
static void ImportKeyBlob(SafeProvHandle saveProvHandle, CspProviderFlags flags, bool addNoSaltFlag, byte[] keyBlob, out SafeKeyHandle safeKeyHandle)
static void ValidateCspFlags(CspProviderFlags flags)
static void CreateCSP(CspParameters parameters, bool randomKeyContainer, out SafeProvHandle safeProvHandle)
static byte[] SignValue(SafeProvHandle hProv, SafeKeyHandle hKey, int keyNumber, int calgKey, int calgHash, byte[] hash)
static void EncryptKey(SafeKeyHandle safeKeyHandle, byte[] pbKey, int cbKey, bool foep, [NotNull] ref byte[] pbEncryptedKey)
static int EncryptData(SafeKeyHandle hKey, ReadOnlySpan< byte > input, Span< byte > output, bool isFinal)
static HashAlgorithm ObjToHashAlgorithm(object hashAlg)
static int GetUserKey(SafeProvHandle safeProvHandle, int keySpec, out SafeKeyHandle safeKeyHandle)
static unsafe bool CryptImportKey(SafeProvHandle hProv, ReadOnlySpan< byte > pbData, SafeKeyHandle hPubKey, int dwFlags, out SafeKeyHandle phKey)
static byte[] ToKeyBlob(this RSAParameters rsaParameters)
static SafeHashHandle CreateHashHandle(this SafeProvHandle hProv, byte[] hash, int calgHash)
static string UpgradeDSS(int dwProvType, string wszProvider)
static string UpgradeRSA(int dwProvType, string wszProvider)
static void WriteKeyBlobHeader(int algId, BinaryWriter bw)
static byte[] ExportKeyBlob(bool includePrivateParameters, SafeKeyHandle safeKeyHandle)
static byte[] ReadReversed(this BinaryReader br, int count)
static byte[] GetKeyParameter(SafeKeyHandle safeKeyHandle, int keyParam)
static bool VerifySign(SafeProvHandle hProv, SafeKeyHandle hKey, int calgKey, int calgHash, byte[] hash, byte[] signature)
static CryptographicException GetBadDataException()
static byte[] ExponentAsBytes(uint exponent)
static void WriteDSSSeed(DSAParameters dsaParameters, BinaryWriter bw)
static void Reverse(Array array)
static int ToInt32(byte[] value, int startIndex)
static void BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count)
static int ReadInt32LittleEndian(ReadOnlySpan< byte > source)
virtual ushort ReadUInt16()
virtual byte[] ReadBytes(int count)
virtual uint ReadUInt32()
virtual void Write(bool value)
static int GetHRForLastWin32Error()
static IntPtr SecureStringToCoTaskMemAnsi(SecureString s)
static int GetLastPInvokeError()
static void ZeroFreeCoTaskMemAnsi(IntPtr s)
static string CspParameter_invalid
static string Argument_InvalidValue
static string Cryptography_InvalidOID
static string Arg_EnumIllegalVal
static string Cryptography_CSP_WrongKeySpec
static string Format(string resourceFormat, object p1)
static string CryptSetKeyParam_Failed
static string Cryptography_InvalidDSASignatureSize
static string Cryptography_OpenInvalidHandle
static string Cryptography_PasswordDerivedBytes_InvalidIV
static ? string MapNameToOID(string name)
IntPtr ParentWindowHandle
SecureString? KeyPassword
static new SHA256 Create()
static new SHA384 Create()
static new SHA512 Create()
static SafeHashHandle InvalidHandle
override void Dispose(bool disposing)
override void Dispose(bool disposing)
static SafeProvHandle InvalidHandle
override string ToString()
static readonly IntPtr Zero