Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SymmetricAlgorithm.cs
Go to the documentation of this file.
4
6
7public abstract class SymmetricAlgorithm : IDisposable
8{
10
12
13 protected byte[]? KeyValue;
14
15 protected byte[]? IVValue;
16
17 protected int BlockSizeValue;
18
19 protected int FeedbackSizeValue;
20
21 protected int KeySizeValue;
22
23 [MaybeNull]
25
26 [MaybeNull]
28
29 public virtual int FeedbackSize
30 {
31 get
32 {
33 return FeedbackSizeValue;
34 }
35 set
36 {
37 if (value <= 0 || value > BlockSizeValue || value % 8 != 0)
38 {
40 }
42 }
43 }
44
45 public virtual int BlockSize
46 {
47 get
48 {
49 return BlockSizeValue;
50 }
51 set
52 {
53 if (!value.IsLegalSize(LegalBlockSizes, out var validatedByZeroSkipSizeKeySizes))
54 {
56 }
57 if (BlockSizeValue != value || validatedByZeroSkipSizeKeySizes)
58 {
60 IVValue = null;
61 }
62 }
63 }
64
65 public virtual byte[] IV
66 {
67 get
68 {
69 if (IVValue == null)
70 {
71 GenerateIV();
72 }
73 return IVValue.CloneByteArray();
74 }
75 set
76 {
77 if (value == null)
78 {
79 throw new ArgumentNullException("value");
80 }
81 if (value.Length != BlockSize / 8)
82 {
84 }
85 IVValue = value.CloneByteArray();
86 }
87 }
88
89 public virtual byte[] Key
90 {
91 get
92 {
93 if (KeyValue == null)
94 {
96 }
97 return KeyValue.CloneByteArray();
98 }
99 set
100 {
101 if (value == null)
102 {
103 throw new ArgumentNullException("value");
104 }
105 long num = (long)value.Length * 8L;
106 if (num > int.MaxValue || !ValidKeySize((int)num))
107 {
109 }
110 KeySize = (int)num;
111 KeyValue = value.CloneByteArray();
112 }
113 }
114
115 public virtual int KeySize
116 {
117 get
118 {
119 return KeySizeValue;
120 }
121 set
122 {
123 if (!ValidKeySize(value))
124 {
126 }
128 KeyValue = null;
129 }
130 }
131
133
134 public virtual KeySizes[] LegalKeySizes => (KeySizes[])LegalKeySizesValue.Clone();
135
136 public virtual CipherMode Mode
137 {
138 get
139 {
140 return ModeValue;
141 }
142 set
143 {
144 if (value != CipherMode.CBC && value != CipherMode.ECB && value != CipherMode.CFB)
145 {
147 }
149 }
150 }
151
152 public virtual PaddingMode Padding
153 {
154 get
155 {
156 return PaddingValue;
157 }
158 set
159 {
160 if (value < PaddingMode.None || value > PaddingMode.ISO10126)
161 {
163 }
165 }
166 }
167
169 {
170 ModeValue = CipherMode.CBC;
172 }
173
174 [Obsolete("The default implementation of this cryptography algorithm is not supported.", DiagnosticId = "SYSLIB0007", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")]
179
180 [RequiresUnreferencedCode("The default algorithm implementations might be removed, use strong type references like 'RSA.Create()' instead.")]
181 public static SymmetricAlgorithm? Create(string algName)
182 {
184 }
185
187 {
188 return CreateDecryptor(Key, IV);
189 }
190
191 public abstract ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[]? rgbIV);
192
194 {
195 return CreateEncryptor(Key, IV);
196 }
197
198 public abstract ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[]? rgbIV);
199
200 public void Dispose()
201 {
202 Dispose(disposing: true);
203 GC.SuppressFinalize(this);
204 }
205
206 public void Clear()
207 {
208 ((IDisposable)this).Dispose();
209 }
210
211 protected virtual void Dispose(bool disposing)
212 {
213 if (disposing)
214 {
215 if (KeyValue != null)
216 {
218 KeyValue = null;
219 }
220 if (IVValue != null)
221 {
223 IVValue = null;
224 }
225 }
226 }
227
228 public abstract void GenerateIV();
229
230 public abstract void GenerateKey();
231
232 public bool ValidKeySize(int bitLength)
233 {
234 KeySizes[] legalKeySizes = LegalKeySizes;
235 if (legalKeySizes == null)
236 {
237 return false;
238 }
239 return bitLength.IsLegalSize(legalKeySizes);
240 }
241
242 public int GetCiphertextLengthEcb(int plaintextLength, PaddingMode paddingMode)
243 {
244 return GetCiphertextLengthBlockAligned(plaintextLength, paddingMode);
245 }
246
247 public int GetCiphertextLengthCbc(int plaintextLength, PaddingMode paddingMode = PaddingMode.PKCS7)
248 {
249 return GetCiphertextLengthBlockAligned(plaintextLength, paddingMode);
250 }
251
252 private int GetCiphertextLengthBlockAligned(int plaintextLength, PaddingMode paddingMode)
253 {
254 if (plaintextLength < 0)
255 {
257 }
258 int blockSize = BlockSize;
259 if (blockSize <= 0 || ((uint)blockSize & 7u) != 0)
260 {
262 }
263 int num = blockSize >> 3;
264 int result;
265 int num2 = Math.DivRem(plaintextLength, num, out result) * num;
266 switch (paddingMode)
267 {
268 case PaddingMode.None:
269 if (result != 0)
270 {
271 throw new ArgumentException(System.SR.Cryptography_MatchBlockSize, "plaintextLength");
272 }
273 goto IL_0077;
274 case PaddingMode.Zeros:
275 if (result == 0)
276 {
277 goto IL_0077;
278 }
279 goto case PaddingMode.PKCS7;
280 case PaddingMode.PKCS7:
281 case PaddingMode.ANSIX923:
282 case PaddingMode.ISO10126:
283 if (int.MaxValue - num2 < num)
284 {
286 }
287 return num2 + num;
288 default:
289 {
291 }
292 IL_0077:
293 return plaintextLength;
294 }
295 }
296
297 public int GetCiphertextLengthCfb(int plaintextLength, PaddingMode paddingMode = PaddingMode.None, int feedbackSizeInBits = 8)
298 {
299 if (plaintextLength < 0)
300 {
302 }
303 if (feedbackSizeInBits <= 0)
304 {
306 }
307 if (((uint)feedbackSizeInBits & 7u) != 0)
308 {
309 throw new ArgumentException(System.SR.Argument_BitsMustBeWholeBytes, "feedbackSizeInBits");
310 }
311 int num = feedbackSizeInBits >> 3;
312 int result;
313 int num2 = Math.DivRem(plaintextLength, num, out result) * num;
314 switch (paddingMode)
315 {
316 case PaddingMode.None:
317 if (result != 0)
318 {
319 throw new ArgumentException(System.SR.Cryptography_MatchFeedbackSize, "plaintextLength");
320 }
321 goto IL_0083;
322 case PaddingMode.Zeros:
323 if (result == 0)
324 {
325 goto IL_0083;
326 }
327 goto case PaddingMode.PKCS7;
328 case PaddingMode.PKCS7:
329 case PaddingMode.ANSIX923:
330 case PaddingMode.ISO10126:
331 if (int.MaxValue - num2 < num)
332 {
334 }
335 return num2 + num;
336 default:
337 {
339 }
340 IL_0083:
341 return plaintextLength;
342 }
343 }
344
345 public byte[] DecryptEcb(byte[] ciphertext, PaddingMode paddingMode)
346 {
347 if (ciphertext == null)
348 {
349 throw new ArgumentNullException("ciphertext");
350 }
351 return DecryptEcb(new ReadOnlySpan<byte>(ciphertext), paddingMode);
352 }
353
354 public byte[] DecryptEcb(ReadOnlySpan<byte> ciphertext, PaddingMode paddingMode)
355 {
356 CheckPaddingMode(paddingMode);
357 byte[] array = GC.AllocateUninitializedArray<byte>(ciphertext.Length);
358 if (!TryDecryptEcbCore(ciphertext, array, paddingMode, out var bytesWritten) || (uint)bytesWritten > array.Length)
359 {
361 }
362 Array.Resize(ref array, bytesWritten);
363 return array;
364 }
365
367 {
368 CheckPaddingMode(paddingMode);
369 if (!TryDecryptEcbCore(ciphertext, destination, paddingMode, out var bytesWritten))
370 {
372 }
373 return bytesWritten;
374 }
375
376 public bool TryDecryptEcb(ReadOnlySpan<byte> ciphertext, Span<byte> destination, PaddingMode paddingMode, out int bytesWritten)
377 {
378 CheckPaddingMode(paddingMode);
379 return TryDecryptEcbCore(ciphertext, destination, paddingMode, out bytesWritten);
380 }
381
382 public byte[] EncryptEcb(byte[] plaintext, PaddingMode paddingMode)
383 {
384 if (plaintext == null)
385 {
386 throw new ArgumentNullException("plaintext");
387 }
388 return EncryptEcb(new ReadOnlySpan<byte>(plaintext), paddingMode);
389 }
390
391 public byte[] EncryptEcb(ReadOnlySpan<byte> plaintext, PaddingMode paddingMode)
392 {
393 CheckPaddingMode(paddingMode);
394 int ciphertextLengthEcb = GetCiphertextLengthEcb(plaintext.Length, paddingMode);
395 byte[] array = GC.AllocateUninitializedArray<byte>(ciphertextLengthEcb);
396 if (!TryEncryptEcbCore(plaintext, array, paddingMode, out var bytesWritten) || bytesWritten != ciphertextLengthEcb)
397 {
399 }
400 return array;
401 }
402
404 {
405 CheckPaddingMode(paddingMode);
406 if (!TryEncryptEcbCore(plaintext, destination, paddingMode, out var bytesWritten))
407 {
409 }
410 return bytesWritten;
411 }
412
413 public bool TryEncryptEcb(ReadOnlySpan<byte> plaintext, Span<byte> destination, PaddingMode paddingMode, out int bytesWritten)
414 {
415 CheckPaddingMode(paddingMode);
416 return TryEncryptEcbCore(plaintext, destination, paddingMode, out bytesWritten);
417 }
418
419 public byte[] DecryptCbc(byte[] ciphertext, byte[] iv, PaddingMode paddingMode = PaddingMode.PKCS7)
420 {
421 if (ciphertext == null)
422 {
423 throw new ArgumentNullException("ciphertext");
424 }
425 if (iv == null)
426 {
427 throw new ArgumentNullException("iv");
428 }
429 return DecryptCbc(new ReadOnlySpan<byte>(ciphertext), new ReadOnlySpan<byte>(iv), paddingMode);
430 }
431
432 public byte[] DecryptCbc(ReadOnlySpan<byte> ciphertext, ReadOnlySpan<byte> iv, PaddingMode paddingMode = PaddingMode.PKCS7)
433 {
434 CheckPaddingMode(paddingMode);
436 byte[] array = ArrayPool<byte>.Shared.Rent(ciphertext.Length);
437 Span<byte> destination = array.AsSpan(0, ciphertext.Length);
438 if (!TryDecryptCbcCore(ciphertext, iv, destination, paddingMode, out var bytesWritten) || (uint)bytesWritten > destination.Length)
439 {
441 }
442 byte[] result = destination.Slice(0, bytesWritten).ToArray();
443 CryptographicOperations.ZeroMemory(destination.Slice(0, bytesWritten));
445 return result;
446 }
447
449 {
450 CheckPaddingMode(paddingMode);
452 if (!TryDecryptCbcCore(ciphertext, iv, destination, paddingMode, out var bytesWritten))
453 {
455 }
456 return bytesWritten;
457 }
458
459 public bool TryDecryptCbc(ReadOnlySpan<byte> ciphertext, ReadOnlySpan<byte> iv, Span<byte> destination, out int bytesWritten, PaddingMode paddingMode = PaddingMode.PKCS7)
460 {
461 CheckPaddingMode(paddingMode);
463 return TryDecryptCbcCore(ciphertext, iv, destination, paddingMode, out bytesWritten);
464 }
465
466 public byte[] EncryptCbc(byte[] plaintext, byte[] iv, PaddingMode paddingMode = PaddingMode.PKCS7)
467 {
468 if (plaintext == null)
469 {
470 throw new ArgumentNullException("plaintext");
471 }
472 if (iv == null)
473 {
474 throw new ArgumentNullException("iv");
475 }
476 return EncryptCbc(new ReadOnlySpan<byte>(plaintext), new ReadOnlySpan<byte>(iv), paddingMode);
477 }
478
479 public byte[] EncryptCbc(ReadOnlySpan<byte> plaintext, ReadOnlySpan<byte> iv, PaddingMode paddingMode = PaddingMode.PKCS7)
480 {
481 CheckPaddingMode(paddingMode);
483 int ciphertextLengthCbc = GetCiphertextLengthCbc(plaintext.Length, paddingMode);
484 byte[] array = GC.AllocateUninitializedArray<byte>(ciphertextLengthCbc);
485 if (!TryEncryptCbcCore(plaintext, iv, array, paddingMode, out var bytesWritten) || bytesWritten != ciphertextLengthCbc)
486 {
488 }
489 return array;
490 }
491
493 {
494 CheckPaddingMode(paddingMode);
496 if (!TryEncryptCbcCore(plaintext, iv, destination, paddingMode, out var bytesWritten))
497 {
499 }
500 return bytesWritten;
501 }
502
503 public bool TryEncryptCbc(ReadOnlySpan<byte> plaintext, ReadOnlySpan<byte> iv, Span<byte> destination, out int bytesWritten, PaddingMode paddingMode = PaddingMode.PKCS7)
504 {
505 CheckPaddingMode(paddingMode);
507 return TryEncryptCbcCore(plaintext, iv, destination, paddingMode, out bytesWritten);
508 }
509
510 public byte[] DecryptCfb(byte[] ciphertext, byte[] iv, PaddingMode paddingMode = PaddingMode.None, int feedbackSizeInBits = 8)
511 {
512 if (ciphertext == null)
513 {
514 throw new ArgumentNullException("ciphertext");
515 }
516 if (iv == null)
517 {
518 throw new ArgumentNullException("iv");
519 }
520 return DecryptCfb(new ReadOnlySpan<byte>(ciphertext), new ReadOnlySpan<byte>(iv), paddingMode, feedbackSizeInBits);
521 }
522
523 public byte[] DecryptCfb(ReadOnlySpan<byte> ciphertext, ReadOnlySpan<byte> iv, PaddingMode paddingMode = PaddingMode.None, int feedbackSizeInBits = 8)
524 {
525 CheckPaddingMode(paddingMode);
527 CheckFeedbackSize(feedbackSizeInBits);
528 byte[] array = GC.AllocateUninitializedArray<byte>(ciphertext.Length);
529 if (!TryDecryptCfbCore(ciphertext, iv, array, paddingMode, feedbackSizeInBits, out var bytesWritten) || (uint)bytesWritten > array.Length)
530 {
532 }
533 Array.Resize(ref array, bytesWritten);
534 return array;
535 }
536
537 public int DecryptCfb(ReadOnlySpan<byte> ciphertext, ReadOnlySpan<byte> iv, Span<byte> destination, PaddingMode paddingMode = PaddingMode.None, int feedbackSizeInBits = 8)
538 {
539 CheckPaddingMode(paddingMode);
541 CheckFeedbackSize(feedbackSizeInBits);
542 if (!TryDecryptCfbCore(ciphertext, iv, destination, paddingMode, feedbackSizeInBits, out var bytesWritten))
543 {
545 }
546 return bytesWritten;
547 }
548
549 public bool TryDecryptCfb(ReadOnlySpan<byte> ciphertext, ReadOnlySpan<byte> iv, Span<byte> destination, out int bytesWritten, PaddingMode paddingMode = PaddingMode.None, int feedbackSizeInBits = 8)
550 {
551 CheckPaddingMode(paddingMode);
553 CheckFeedbackSize(feedbackSizeInBits);
554 return TryDecryptCfbCore(ciphertext, iv, destination, paddingMode, feedbackSizeInBits, out bytesWritten);
555 }
556
557 public byte[] EncryptCfb(byte[] plaintext, byte[] iv, PaddingMode paddingMode = PaddingMode.None, int feedbackSizeInBits = 8)
558 {
559 return EncryptCfb(new ReadOnlySpan<byte>(plaintext), new ReadOnlySpan<byte>(iv), paddingMode, feedbackSizeInBits);
560 }
561
562 public byte[] EncryptCfb(ReadOnlySpan<byte> plaintext, ReadOnlySpan<byte> iv, PaddingMode paddingMode = PaddingMode.None, int feedbackSizeInBits = 8)
563 {
564 CheckPaddingMode(paddingMode);
566 CheckFeedbackSize(feedbackSizeInBits);
567 int ciphertextLengthCfb = GetCiphertextLengthCfb(plaintext.Length, paddingMode, feedbackSizeInBits);
568 byte[] array = GC.AllocateUninitializedArray<byte>(ciphertextLengthCfb);
569 if (!TryEncryptCfbCore(plaintext, iv, array, paddingMode, feedbackSizeInBits, out var bytesWritten) || bytesWritten != ciphertextLengthCfb)
570 {
572 }
573 return array;
574 }
575
576 public int EncryptCfb(ReadOnlySpan<byte> plaintext, ReadOnlySpan<byte> iv, Span<byte> destination, PaddingMode paddingMode = PaddingMode.None, int feedbackSizeInBits = 8)
577 {
578 CheckPaddingMode(paddingMode);
580 CheckFeedbackSize(feedbackSizeInBits);
581 if (!TryEncryptCfbCore(plaintext, iv, destination, paddingMode, feedbackSizeInBits, out var bytesWritten))
582 {
584 }
585 return bytesWritten;
586 }
587
588 public bool TryEncryptCfb(ReadOnlySpan<byte> plaintext, ReadOnlySpan<byte> iv, Span<byte> destination, out int bytesWritten, PaddingMode paddingMode = PaddingMode.None, int feedbackSizeInBits = 8)
589 {
590 CheckPaddingMode(paddingMode);
592 CheckFeedbackSize(feedbackSizeInBits);
593 return TryEncryptCfbCore(plaintext, iv, destination, paddingMode, feedbackSizeInBits, out bytesWritten);
594 }
595
596 protected virtual bool TryEncryptEcbCore(ReadOnlySpan<byte> plaintext, Span<byte> destination, PaddingMode paddingMode, out int bytesWritten)
597 {
599 }
600
601 protected virtual bool TryDecryptEcbCore(ReadOnlySpan<byte> ciphertext, Span<byte> destination, PaddingMode paddingMode, out int bytesWritten)
602 {
604 }
605
606 protected virtual bool TryEncryptCbcCore(ReadOnlySpan<byte> plaintext, ReadOnlySpan<byte> iv, Span<byte> destination, PaddingMode paddingMode, out int bytesWritten)
607 {
609 }
610
611 protected virtual bool TryDecryptCbcCore(ReadOnlySpan<byte> ciphertext, ReadOnlySpan<byte> iv, Span<byte> destination, PaddingMode paddingMode, out int bytesWritten)
612 {
614 }
615
616 protected virtual bool TryDecryptCfbCore(ReadOnlySpan<byte> ciphertext, ReadOnlySpan<byte> iv, Span<byte> destination, PaddingMode paddingMode, int feedbackSizeInBits, out int bytesWritten)
617 {
619 }
620
621 protected virtual bool TryEncryptCfbCore(ReadOnlySpan<byte> plaintext, ReadOnlySpan<byte> iv, Span<byte> destination, PaddingMode paddingMode, int feedbackSizeInBits, out int bytesWritten)
622 {
624 }
625
626 private static void CheckPaddingMode(PaddingMode paddingMode)
627 {
628 if (paddingMode < PaddingMode.None || paddingMode > PaddingMode.ISO10126)
629 {
631 }
632 }
633
635 {
636 if (iv.Length != BlockSize >> 3)
637 {
639 }
640 }
641
642 private void CheckFeedbackSize(int feedbackSizeInBits)
643 {
644 if (feedbackSizeInBits < 8 || ((uint)feedbackSizeInBits & 7u) != 0 || feedbackSizeInBits > BlockSize)
645 {
646 throw new ArgumentException(System.SR.Cryptography_InvalidFeedbackSize, "feedbackSizeInBits");
647 }
648 }
649}
static unsafe void Clear(Array array)
Definition Array.cs:755
static ArrayPool< T > Shared
Definition ArrayPool.cs:7
static void SuppressFinalize(object obj)
Definition GC.cs:202
Definition GC.cs:8
static int DivRem(int a, int b, out int result)
Definition Math.cs:329
static string InvalidOperation_UnsupportedBlockSize
Definition SR.cs:74
static string ArgumentOutOfRange_NeedPosNum
Definition SR.cs:20
static string Argument_DestinationTooShort
Definition SR.cs:14
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string Cryptography_EncryptedIncorrectLength
Definition SR.cs:58
static string Cryptography_MatchBlockSize
Definition SR.cs:52
static string Cryptography_DefaultAlgorithm_NotSupported
Definition SR.cs:34
static string Cryptography_PlaintextTooLarge
Definition SR.cs:56
static string Cryptography_InvalidBlockSize
Definition SR.cs:40
static string Cryptography_InvalidPaddingMode
Definition SR.cs:46
static string Cryptography_InvalidFeedbackSize
Definition SR.cs:38
static string Cryptography_InvalidKeySize
Definition SR.cs:92
static string Argument_BitsMustBeWholeBytes
Definition SR.cs:26
static string ArgumentOutOfRange_NeedNonNegNum
Definition SR.cs:32
static string Cryptography_MatchFeedbackSize
Definition SR.cs:54
static string Cryptography_InvalidCipherMode
Definition SR.cs:54
static string NotSupported_SubclassOverride
Definition SR.cs:1714
static string Cryptography_InvalidIVSize
Definition SR.cs:102
Definition SR.cs:7
static ? SymmetricAlgorithm Create(string algName)
byte[] DecryptEcb(ReadOnlySpan< byte > ciphertext, PaddingMode paddingMode)
byte[] DecryptEcb(byte[] ciphertext, PaddingMode paddingMode)
byte[] EncryptCfb(byte[] plaintext, byte[] iv, PaddingMode paddingMode=PaddingMode.None, int feedbackSizeInBits=8)
static void CheckPaddingMode(PaddingMode paddingMode)
int DecryptEcb(ReadOnlySpan< byte > ciphertext, Span< byte > destination, PaddingMode paddingMode)
bool TryDecryptCbc(ReadOnlySpan< byte > ciphertext, ReadOnlySpan< byte > iv, Span< byte > destination, out int bytesWritten, PaddingMode paddingMode=PaddingMode.PKCS7)
bool TryDecryptCfb(ReadOnlySpan< byte > ciphertext, ReadOnlySpan< byte > iv, Span< byte > destination, out int bytesWritten, PaddingMode paddingMode=PaddingMode.None, int feedbackSizeInBits=8)
bool TryDecryptEcb(ReadOnlySpan< byte > ciphertext, Span< byte > destination, PaddingMode paddingMode, out int bytesWritten)
bool TryEncryptCfb(ReadOnlySpan< byte > plaintext, ReadOnlySpan< byte > iv, Span< byte > destination, out int bytesWritten, PaddingMode paddingMode=PaddingMode.None, int feedbackSizeInBits=8)
byte[] DecryptCbc(byte[] ciphertext, byte[] iv, PaddingMode paddingMode=PaddingMode.PKCS7)
int GetCiphertextLengthCbc(int plaintextLength, PaddingMode paddingMode=PaddingMode.PKCS7)
virtual bool TryDecryptCfbCore(ReadOnlySpan< byte > ciphertext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode, int feedbackSizeInBits, out int bytesWritten)
int EncryptCbc(ReadOnlySpan< byte > plaintext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode=PaddingMode.PKCS7)
virtual bool TryEncryptCbcCore(ReadOnlySpan< byte > plaintext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode, out int bytesWritten)
int DecryptCfb(ReadOnlySpan< byte > ciphertext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode=PaddingMode.None, int feedbackSizeInBits=8)
ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[]? rgbIV)
virtual bool TryEncryptCfbCore(ReadOnlySpan< byte > plaintext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode, int feedbackSizeInBits, out int bytesWritten)
int GetCiphertextLengthBlockAligned(int plaintextLength, PaddingMode paddingMode)
byte[] EncryptEcb(ReadOnlySpan< byte > plaintext, PaddingMode paddingMode)
int GetCiphertextLengthCfb(int plaintextLength, PaddingMode paddingMode=PaddingMode.None, int feedbackSizeInBits=8)
byte[] EncryptCbc(byte[] plaintext, byte[] iv, PaddingMode paddingMode=PaddingMode.PKCS7)
byte[] EncryptEcb(byte[] plaintext, PaddingMode paddingMode)
void CheckInitializationVectorSize(ReadOnlySpan< byte > iv)
bool TryEncryptEcb(ReadOnlySpan< byte > plaintext, Span< byte > destination, PaddingMode paddingMode, out int bytesWritten)
virtual bool TryEncryptEcbCore(ReadOnlySpan< byte > plaintext, Span< byte > destination, PaddingMode paddingMode, out int bytesWritten)
virtual bool TryDecryptCbcCore(ReadOnlySpan< byte > ciphertext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode, out int bytesWritten)
byte[] EncryptCfb(ReadOnlySpan< byte > plaintext, ReadOnlySpan< byte > iv, PaddingMode paddingMode=PaddingMode.None, int feedbackSizeInBits=8)
byte[] DecryptCfb(ReadOnlySpan< byte > ciphertext, ReadOnlySpan< byte > iv, PaddingMode paddingMode=PaddingMode.None, int feedbackSizeInBits=8)
int DecryptCbc(ReadOnlySpan< byte > ciphertext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode=PaddingMode.PKCS7)
int EncryptCfb(ReadOnlySpan< byte > plaintext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode=PaddingMode.None, int feedbackSizeInBits=8)
bool TryEncryptCbc(ReadOnlySpan< byte > plaintext, ReadOnlySpan< byte > iv, Span< byte > destination, out int bytesWritten, PaddingMode paddingMode=PaddingMode.PKCS7)
int EncryptEcb(ReadOnlySpan< byte > plaintext, Span< byte > destination, PaddingMode paddingMode)
ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[]? rgbIV)
byte[] EncryptCbc(ReadOnlySpan< byte > plaintext, ReadOnlySpan< byte > iv, PaddingMode paddingMode=PaddingMode.PKCS7)
byte[] DecryptCbc(ReadOnlySpan< byte > ciphertext, ReadOnlySpan< byte > iv, PaddingMode paddingMode=PaddingMode.PKCS7)
byte[] DecryptCfb(byte[] ciphertext, byte[] iv, PaddingMode paddingMode=PaddingMode.None, int feedbackSizeInBits=8)
int GetCiphertextLengthEcb(int plaintextLength, PaddingMode paddingMode)
virtual bool TryDecryptEcbCore(ReadOnlySpan< byte > ciphertext, Span< byte > destination, PaddingMode paddingMode, out int bytesWritten)