daily pastebin goal
39%
SHARE
TWEET

TripleDESTransform

HenryEx Sep 14th, 2017 4 Never
Upgrade to PRO!
ENDING IN00days00hours00mins00secs
 
  1. namespace System.Security.Cryptography
  2. {
  3.     internal class TripleDESTransform : SymmetricTransform
  4.     {
  5.         private DESTransform E1;
  6.  
  7.         private DESTransform D2;
  8.  
  9.         private DESTransform E3;
  10.  
  11.         private DESTransform D1;
  12.  
  13.         private DESTransform E2;
  14.  
  15.         private DESTransform D3;
  16.  
  17.         public TripleDESTransform(TripleDES algo, bool encryption, byte[] key, byte[] iv) : base(algo, encryption, iv)
  18.         {
  19.             if (key == null)
  20.             {
  21.                 key = TripleDESTransform.GetStrongKey();
  22.             }
  23.             if (TripleDES.IsWeakKey(key))
  24.             {
  25.                 string text = Locale.GetText("This is a known weak key.");
  26.                 throw new CryptographicException(text);
  27.             }
  28.             byte[] array = new byte[8];
  29.             byte[] array2 = new byte[8];
  30.             byte[] array3 = new byte[8];
  31.             DES symmAlgo = DES.Create();
  32.             Buffer.BlockCopy(key, 0, array, 0, 8);
  33.             Buffer.BlockCopy(key, 8, array2, 0, 8);
  34.             if (key.Length == 16)
  35.             {
  36.                 Buffer.BlockCopy(key, 0, array3, 0, 8);
  37.             }
  38.             else
  39.             {
  40.                 Buffer.BlockCopy(key, 16, array3, 0, 8);
  41.             }
  42.             if (encryption || algo.Mode == CipherMode.CFB)
  43.             {
  44.                 this.E1 = new DESTransform(symmAlgo, true, array, iv);
  45.                 this.D2 = new DESTransform(symmAlgo, false, array2, iv);
  46.                 this.E3 = new DESTransform(symmAlgo, true, array3, iv);
  47.             }
  48.             else
  49.             {
  50.                 this.D1 = new DESTransform(symmAlgo, false, array3, iv);
  51.                 this.E2 = new DESTransform(symmAlgo, true, array2, iv);
  52.                 this.D3 = new DESTransform(symmAlgo, false, array, iv);
  53.             }
  54.         }
  55.  
  56.         protected override void ECB(byte[] input, byte[] output)
  57.         {
  58.             DESTransform.Permutation(input, output, DESTransform.ipTab, false);
  59.             if (this.encrypt)
  60.             {
  61.                 this.E1.ProcessBlock(output, output);
  62.                 this.D2.ProcessBlock(output, output);
  63.                 this.E3.ProcessBlock(output, output);
  64.             }
  65.             else
  66.             {
  67.                 this.D1.ProcessBlock(output, output);
  68.                 this.E2.ProcessBlock(output, output);
  69.                 this.D3.ProcessBlock(output, output);
  70.             }
  71.             DESTransform.Permutation(output, output, DESTransform.fpTab, true);
  72.         }
  73.  
  74.         internal static byte[] GetStrongKey()
  75.         {
  76.             int size = DESTransform.BLOCK_BYTE_SIZE * 3;
  77.             byte[] array = KeyBuilder.Key(size);
  78.             while (TripleDES.IsWeakKey(array))
  79.             {
  80.                 array = KeyBuilder.Key(size);
  81.             }
  82.             return array;
  83.         }
  84.     }
  85. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top