Files
Dec2017-Script-Dump/mscorlib/System/Security/Cryptography/TripleDESTransform.cs
T
2026-06-04 11:42:34 +02:00

100 lines
2.6 KiB
C#

using System;
using Mono.Security.Cryptography;
namespace System.Security.Cryptography
{
// Token: 0x0200053C RID: 1340
internal class TripleDESTransform : SymmetricTransform
{
// Token: 0x06003114 RID: 12564 RVA: 0x000A89E4 File Offset: 0x000A6BE4
public TripleDESTransform(TripleDES algo, bool encryption, byte[] key, byte[] iv)
: base(algo, encryption, iv)
{
if (key == null)
{
key = TripleDESTransform.GetStrongKey();
}
if (TripleDES.IsWeakKey(key))
{
string text = Locale.GetText("This is a known weak key.");
throw new CryptographicException(text);
}
byte[] array = new byte[8];
byte[] array2 = new byte[8];
byte[] array3 = new byte[8];
DES des = DES.Create();
Buffer.BlockCopy(key, 0, array, 0, 8);
Buffer.BlockCopy(key, 8, array2, 0, 8);
if (key.Length == 16)
{
Buffer.BlockCopy(key, 0, array3, 0, 8);
}
else
{
Buffer.BlockCopy(key, 16, array3, 0, 8);
}
if (encryption || algo.Mode == CipherMode.CFB)
{
this.E1 = new DESTransform(des, true, array, iv);
this.D2 = new DESTransform(des, false, array2, iv);
this.E3 = new DESTransform(des, true, array3, iv);
}
else
{
this.D1 = new DESTransform(des, false, array3, iv);
this.E2 = new DESTransform(des, true, array2, iv);
this.D3 = new DESTransform(des, false, array, iv);
}
}
// Token: 0x06003115 RID: 12565 RVA: 0x000A8AF8 File Offset: 0x000A6CF8
protected override void ECB(byte[] input, byte[] output)
{
DESTransform.Permutation(input, output, DESTransform.ipTab, false);
if (this.encrypt)
{
this.E1.ProcessBlock(output, output);
this.D2.ProcessBlock(output, output);
this.E3.ProcessBlock(output, output);
}
else
{
this.D1.ProcessBlock(output, output);
this.E2.ProcessBlock(output, output);
this.D3.ProcessBlock(output, output);
}
DESTransform.Permutation(output, output, DESTransform.fpTab, true);
}
// Token: 0x06003116 RID: 12566 RVA: 0x000A8B80 File Offset: 0x000A6D80
internal static byte[] GetStrongKey()
{
int num = DESTransform.BLOCK_BYTE_SIZE * 3;
byte[] array = KeyBuilder.Key(num);
while (TripleDES.IsWeakKey(array))
{
array = KeyBuilder.Key(num);
}
return array;
}
// Token: 0x04001406 RID: 5126
private DESTransform E1;
// Token: 0x04001407 RID: 5127
private DESTransform D2;
// Token: 0x04001408 RID: 5128
private DESTransform E3;
// Token: 0x04001409 RID: 5129
private DESTransform D1;
// Token: 0x0400140A RID: 5130
private DESTransform E2;
// Token: 0x0400140B RID: 5131
private DESTransform D3;
}
}