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

◆ TryEncryptOrDecrypt() [1/2]

unsafe bool System.Security.Cryptography.RSAImplementation.RSACng.TryEncryptOrDecrypt ( ReadOnlySpan< byte > data,
Span< byte > destination,
RSAEncryptionPadding padding,
bool encrypt,
out int bytesWritten )
inlineprivate

Definition at line 232 of file RSAImplementation.cs.

233 {
234 if (padding == null)
235 {
236 throw new ArgumentNullException("padding");
237 }
238 int num = RsaPaddingProcessor.BytesRequiredForBitCount(KeySize);
239 if (!encrypt && data.Length != num)
240 {
241 throw new CryptographicException(System.SR.Cryptography_RSA_DecryptWrongSize);
242 }
243 if (encrypt && padding.Mode == RSAEncryptionPaddingMode.Pkcs1 && data.Length > num - 11)
244 {
245 throw new CryptographicException(System.SR.Format(System.SR.Cryptography_Encryption_MessageTooLong, num - 11));
246 }
248 if (encrypt && data.Length == 0)
249 {
251 Span<byte> span = new Span<byte>(array, 0, num);
252 try
253 {
254 if (padding == RSAEncryptionPadding.Pkcs1)
255 {
256 RsaPaddingProcessor.PadPkcs1Encryption(data, span);
257 }
258 else
259 {
260 if (padding.Mode != RSAEncryptionPaddingMode.Oaep)
261 {
262 throw new CryptographicException(System.SR.Cryptography_UnsupportedPaddingMode);
263 }
264 RsaPaddingProcessor rsaPaddingProcessor = RsaPaddingProcessor.OpenProcessor(padding.OaepHashAlgorithm);
265 rsaPaddingProcessor.PadOaep(data, span);
266 }
267 return TryEncryptOrDecrypt(key, span, destination, global::Interop.NCrypt.AsymmetricPaddingMode.NCRYPT_NO_PADDING_FLAG, null, encrypt, out bytesWritten);
268 }
269 finally
270 {
271 CryptographicOperations.ZeroMemory(span);
273 }
274 }
275 switch (padding.Mode)
276 {
277 case RSAEncryptionPaddingMode.Pkcs1:
278 return TryEncryptOrDecrypt(key, data, destination, global::Interop.NCrypt.AsymmetricPaddingMode.NCRYPT_PAD_PKCS1_FLAG, null, encrypt, out bytesWritten);
279 case RSAEncryptionPaddingMode.Oaep:
280 {
281 IntPtr intPtr = Marshal.StringToHGlobalUni(padding.OaepHashAlgorithm.Name);
282 try
283 {
284 global::Interop.BCrypt.BCRYPT_OAEP_PADDING_INFO bCRYPT_OAEP_PADDING_INFO = default(global::Interop.BCrypt.BCRYPT_OAEP_PADDING_INFO);
285 bCRYPT_OAEP_PADDING_INFO.pszAlgId = intPtr;
286 bCRYPT_OAEP_PADDING_INFO.pbLabel = IntPtr.Zero;
287 bCRYPT_OAEP_PADDING_INFO.cbLabel = 0;
288 global::Interop.BCrypt.BCRYPT_OAEP_PADDING_INFO bCRYPT_OAEP_PADDING_INFO2 = bCRYPT_OAEP_PADDING_INFO;
289 return TryEncryptOrDecrypt(key, data, destination, global::Interop.NCrypt.AsymmetricPaddingMode.NCRYPT_PAD_OAEP_FLAG, &bCRYPT_OAEP_PADDING_INFO2, encrypt, out bytesWritten);
290 }
291 finally
292 {
294 }
295 }
296 default:
297 throw new CryptographicException(System.SR.Cryptography_UnsupportedPaddingMode);
298 }
299 }
static void FreeHGlobal(IntPtr hglobal)
Definition Marshal.cs:1680
static unsafe IntPtr StringToHGlobalUni(string? s)
Definition Marshal.cs:1310
static string Cryptography_RSA_DecryptWrongSize
Definition SR.cs:138
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string Cryptography_UnsupportedPaddingMode
Definition SR.cs:160
static string Cryptography_Encryption_MessageTooLong
Definition SR.cs:52
Definition SR.cs:7
static void Return(byte[] array, int clearSize=-1)
Definition CryptoPool.cs:12
static byte[] Rent(int minimumLength)
Definition CryptoPool.cs:7
unsafe bool TryEncryptOrDecrypt(ReadOnlySpan< byte > data, Span< byte > destination, RSAEncryptionPadding padding, bool encrypt, out int bytesWritten)

References System.array, System.Security.Cryptography.RsaPaddingProcessor.BytesRequiredForBitCount(), System.SR.Cryptography_Encryption_MessageTooLong, System.SR.Cryptography_RSA_DecryptWrongSize, System.SR.Cryptography_UnsupportedPaddingMode, System.destination, System.SR.Format(), System.Runtime.InteropServices.Marshal.FreeHGlobal(), System.Security.Cryptography.RSAImplementation.RSACng.GetDuplicatedKeyHandle(), System.key, System.Security.Cryptography.AsymmetricAlgorithm.KeySize, System.Security.Cryptography.RSAEncryptionPadding.Mode, System.Security.Cryptography.HashAlgorithmName.Name, System.Security.Cryptography.RSAEncryptionPadding.OaepHashAlgorithm, System.Security.Cryptography.RsaPaddingProcessor.OpenProcessor(), System.Security.Cryptography.RsaPaddingProcessor.PadPkcs1Encryption(), System.Security.Cryptography.RSAEncryptionPadding.Pkcs1, System.Security.Cryptography.CryptoPool.Rent(), System.Security.Cryptography.CryptoPool.Return(), System.Runtime.InteropServices.Marshal.StringToHGlobalUni(), System.Security.Cryptography.RSAImplementation.RSACng.TryEncryptOrDecrypt(), System.IntPtr.Zero, and System.Security.Cryptography.CryptographicOperations.ZeroMemory().

Referenced by System.Security.Cryptography.RSAImplementation.RSACng.TryDecrypt(), System.Security.Cryptography.RSAImplementation.RSACng.TryEncrypt(), and System.Security.Cryptography.RSAImplementation.RSACng.TryEncryptOrDecrypt().