System.Security.Cryptography.DESTransform.Permutation C# (CSharp) Метод

Permutation() статический приватный Метод

static private Permutation ( byte input, byte output, uint permTab, bool preSwap ) : void
input byte
output byte
permTab uint
preSwap bool
Результат void
		internal static void Permutation (byte[] input, byte[] output, uint[] permTab, bool preSwap)
		{
			if (preSwap && BitConverter.IsLittleEndian)
				BSwap (input);
	
			int offs1 = (((int)(input [0]) >> 4)) << 1;
			int offs2 = (1 << 5) + ((((int)input [0]) & 0xF) << 1);
	
			uint d1 = permTab [offs1++] | permTab [offs2++];
			uint d2 = permTab [offs1]   | permTab [offs2];
	
			int max = BLOCK_BYTE_SIZE << 1;
			for (int i = 2, indx = 1; i < max; i += 2, indx++) {
				int ii = (int) input [indx];
				offs1 = (i << 5) + ((ii >> 4) << 1);
				offs2 = ((i + 1) << 5) + ((ii & 0xF) << 1);
	
				d1 |= permTab [offs1++] | permTab [offs2++];
				d2 |= permTab [offs1]   | permTab [offs2];
			}
	
			if (preSwap || !BitConverter.IsLittleEndian) {
				output [0] = (byte) (d1);
				output [1] = (byte) (d1 >> 8);
				output [2] = (byte) (d1 >> 16);
				output [3] = (byte) (d1 >> 24);
				output [4] = (byte) (d2);
				output [5] = (byte) (d2 >> 8);
				output [6] = (byte) (d2 >> 16);
				output [7] = (byte) (d2 >> 24);
			}
			else {
				output [0] = (byte) (d1 >> 24);
				output [1] = (byte) (d1 >> 16);
				output [2] = (byte) (d1 >> 8);
				output [3] = (byte) (d1);
				output [4] = (byte) (d2 >> 24);
				output [5] = (byte) (d2 >> 16);
				output [6] = (byte) (d2 >> 8);
				output [7] = (byte) (d2);
			}
		}
	

Usage Example

Пример #1
0
 // note: this method is garanteed to be called with a valid blocksize
 // for both input and output
 protected override void ECB(byte[] input, byte[] output)
 {
     DESTransform.Permutation(input, output, DESTransform.ipTab, false);
     if (encrypt)
     {
         E1.ProcessBlock(output, output);
         D2.ProcessBlock(output, output);
         E3.ProcessBlock(output, output);
     }
     else
     {
         D1.ProcessBlock(output, output);
         E2.ProcessBlock(output, output);
         D3.ProcessBlock(output, output);
     }
     DESTransform.Permutation(output, output, DESTransform.fpTab, true);
 }
All Usage Examples Of System.Security.Cryptography.DESTransform::Permutation