65 public virtual byte[]
IV
73 return IVValue.CloneByteArray();
89 public virtual byte[]
Key
105 long num = (long)
value.Length * 8
L;
160 if (value < PaddingMode.None || value >
PaddingMode.ISO10126)
174 [Obsolete(
"The default implementation of this cryptography algorithm is not supported.", DiagnosticId =
"SYSLIB0007", UrlFormat =
"https://aka.ms/dotnet-warnings/{0}")]
180 [RequiresUnreferencedCode(
"The default algorithm implementations might be removed, use strong type references like 'RSA.Create()' instead.")]
211 protected virtual void Dispose(
bool disposing)
235 if (legalKeySizes ==
null)
239 return bitLength.IsLegalSize(legalKeySizes);
254 if (plaintextLength < 0)
259 if (blockSize <= 0 || ((uint)blockSize & 7u) != 0)
263 int num = blockSize >> 3;
265 int num2 =
Math.
DivRem(plaintextLength, num, out result) * num;
283 if (
int.MaxValue - num2 < num)
293 return plaintextLength;
299 if (plaintextLength < 0)
303 if (feedbackSizeInBits <= 0)
307 if (((uint)feedbackSizeInBits & 7u) != 0)
311 int num = feedbackSizeInBits >> 3;
313 int num2 =
Math.
DivRem(plaintextLength, num, out result) * num;
331 if (
int.MaxValue - num2 < num)
341 return plaintextLength;
347 if (ciphertext ==
null)
357 byte[]
array =
GC.AllocateUninitializedArray<
byte>(ciphertext.
Length);
384 if (plaintext ==
null)
395 byte[]
array =
GC.AllocateUninitializedArray<
byte>(ciphertextLengthEcb);
396 if (!
TryEncryptEcbCore(plaintext,
array, paddingMode, out var bytesWritten) || bytesWritten != ciphertextLengthEcb)
421 if (ciphertext ==
null)
442 byte[] result =
destination.Slice(0, bytesWritten).ToArray();
468 if (plaintext ==
null)
484 byte[]
array =
GC.AllocateUninitializedArray<
byte>(ciphertextLengthCbc);
485 if (!
TryEncryptCbcCore(plaintext, iv,
array, paddingMode, out var bytesWritten) || bytesWritten != ciphertextLengthCbc)
512 if (ciphertext ==
null)
528 byte[]
array =
GC.AllocateUninitializedArray<
byte>(ciphertext.
Length);
529 if (!
TryDecryptCfbCore(ciphertext, iv,
array, paddingMode, feedbackSizeInBits, out var bytesWritten) || (uint)bytesWritten >
array.Length)
568 byte[]
array =
GC.AllocateUninitializedArray<
byte>(ciphertextLengthCfb);
569 if (!
TryEncryptCfbCore(plaintext, iv,
array, paddingMode, feedbackSizeInBits, out var bytesWritten) || bytesWritten != ciphertextLengthCfb)
628 if (paddingMode < PaddingMode.None || paddingMode >
PaddingMode.ISO10126)
644 if (feedbackSizeInBits < 8 || ((uint)feedbackSizeInBits & 7u) != 0 || feedbackSizeInBits >
BlockSize)
static unsafe void Clear(Array array)
static ArrayPool< T > Shared
static void SuppressFinalize(object obj)
static int DivRem(int a, int b, out int result)
static string InvalidOperation_UnsupportedBlockSize
static string ArgumentOutOfRange_NeedPosNum
static string Argument_DestinationTooShort
static string Format(string resourceFormat, object p1)
static string Cryptography_EncryptedIncorrectLength
static string Cryptography_MatchBlockSize
static string Cryptography_DefaultAlgorithm_NotSupported
static string Cryptography_PlaintextTooLarge
static string Cryptography_InvalidBlockSize
static string Cryptography_InvalidPaddingMode
static string Cryptography_InvalidFeedbackSize
static string Cryptography_InvalidKeySize
static string Argument_BitsMustBeWholeBytes
static string ArgumentOutOfRange_NeedNonNegNum
static string Cryptography_MatchFeedbackSize
static string Cryptography_InvalidCipherMode
static string NotSupported_SubclassOverride
static string Cryptography_InvalidIVSize
static object CreateFromName(string name)
static void ZeroMemory(Span< byte > buffer)
virtual ICryptoTransform CreateEncryptor()
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)
static SymmetricAlgorithm Create()
virtual ICryptoTransform CreateDecryptor()
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)
virtual KeySizes[] LegalKeySizes
virtual KeySizes[] LegalBlockSizes
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)
KeySizes[] LegalBlockSizesValue
int EncryptCbc(ReadOnlySpan< byte > plaintext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode=PaddingMode.PKCS7)
KeySizes[] LegalKeySizesValue
virtual PaddingMode Padding
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)
void CheckFeedbackSize(int feedbackSizeInBits)
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)
virtual void Dispose(bool disposing)
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)
bool ValidKeySize(int bitLength)
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)