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

◆ EncryptOrDecrypt() [1/3]

unsafe byte[] System.Security.Cryptography.RSAImplementation.RSACng.EncryptOrDecrypt ( byte[] data,
RSAEncryptionPadding padding,
bool encrypt )
inlineprivate

Definition at line 159 of file RSAImplementation.cs.

160 {
161 if (data == null)
162 {
163 throw new ArgumentNullException("data");
164 }
165 if (padding == null)
166 {
167 throw new ArgumentNullException("padding");
168 }
169 int num = RsaPaddingProcessor.BytesRequiredForBitCount(KeySize);
170 if (!encrypt && data.Length != num)
171 {
172 throw new CryptographicException(System.SR.Cryptography_RSA_DecryptWrongSize);
173 }
174 if (encrypt && padding.Mode == RSAEncryptionPaddingMode.Pkcs1 && data.Length > num - 11)
175 {
176 throw new CryptographicException(System.SR.Format(System.SR.Cryptography_Encryption_MessageTooLong, num - 11));
177 }
179 if (encrypt && data.Length == 0)
180 {
182 Span<byte> span = new Span<byte>(array, 0, num);
183 try
184 {
185 if (padding == RSAEncryptionPadding.Pkcs1)
186 {
187 RsaPaddingProcessor.PadPkcs1Encryption(data, span);
188 }
189 else
190 {
191 if (padding.Mode != RSAEncryptionPaddingMode.Oaep)
192 {
193 throw new CryptographicException(System.SR.Cryptography_UnsupportedPaddingMode);
194 }
195 RsaPaddingProcessor rsaPaddingProcessor = RsaPaddingProcessor.OpenProcessor(padding.OaepHashAlgorithm);
196 rsaPaddingProcessor.PadOaep(data, span);
197 }
198 return EncryptOrDecrypt(key, span, global::Interop.NCrypt.AsymmetricPaddingMode.NCRYPT_NO_PADDING_FLAG, null, encrypt);
199 }
200 finally
201 {
202 CryptographicOperations.ZeroMemory(span);
204 }
205 }
206 switch (padding.Mode)
207 {
208 case RSAEncryptionPaddingMode.Pkcs1:
209 return EncryptOrDecrypt(key, data, global::Interop.NCrypt.AsymmetricPaddingMode.NCRYPT_PAD_PKCS1_FLAG, null, encrypt);
210 case RSAEncryptionPaddingMode.Oaep:
211 {
212 IntPtr intPtr = Marshal.StringToHGlobalUni(padding.OaepHashAlgorithm.Name);
213 try
214 {
215 global::Interop.BCrypt.BCRYPT_OAEP_PADDING_INFO bCRYPT_OAEP_PADDING_INFO = default(global::Interop.BCrypt.BCRYPT_OAEP_PADDING_INFO);
216 bCRYPT_OAEP_PADDING_INFO.pszAlgId = intPtr;
217 bCRYPT_OAEP_PADDING_INFO.pbLabel = IntPtr.Zero;
218 bCRYPT_OAEP_PADDING_INFO.cbLabel = 0;
219 global::Interop.BCrypt.BCRYPT_OAEP_PADDING_INFO bCRYPT_OAEP_PADDING_INFO2 = bCRYPT_OAEP_PADDING_INFO;
220 return EncryptOrDecrypt(key, data, global::Interop.NCrypt.AsymmetricPaddingMode.NCRYPT_PAD_OAEP_FLAG, &bCRYPT_OAEP_PADDING_INFO2, encrypt);
221 }
222 finally
223 {
225 }
226 }
227 default:
228 throw new CryptographicException(System.SR.Cryptography_UnsupportedPaddingMode);
229 }
230 }
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 byte[] EncryptOrDecrypt(byte[] data, RSAEncryptionPadding padding, bool encrypt)

References System.array, System.Security.Cryptography.RsaPaddingProcessor.BytesRequiredForBitCount(), System.SR.Cryptography_Encryption_MessageTooLong, System.SR.Cryptography_RSA_DecryptWrongSize, System.SR.Cryptography_UnsupportedPaddingMode, System.Security.Cryptography.RSAImplementation.RSACng.EncryptOrDecrypt(), 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.IntPtr.Zero, and System.Security.Cryptography.CryptographicOperations.ZeroMemory().

Referenced by System.Security.Cryptography.RSAImplementation.RSACng.Decrypt(), System.Security.Cryptography.RSAImplementation.RSACng.Encrypt(), System.Security.Cryptography.RSAImplementation.RSACng.EncryptOrDecrypt(), System.Security.Cryptography.RSAImplementation.RSACng.EncryptOrDecrypt(), and System.Security.Cryptography.RSAImplementation.RSACng.TryEncryptOrDecrypt().