package aalgTest;



import java.util.Arrays;



import org.junit.Assert;
import org.junit.Test;

import aalg.crypto.ByteArraySymmetricKey;
import aalg.crypto.DESDecryptor;
import aalg.crypto.DESEncryptor;



public class DesTest {

	@Test
	public void Test_round (){
		
		DESEncryptor encryptor = new DESEncryptor(null);
		
		long result = encryptor.round(0xDA0307D5C257L, 0x0L);
		Assert.assertEquals(0xCFAA0575ABA7L, result);
	
	}	
	
	@Test
	public void Test_encryption (){
		
		DESEncryptor encryptor = new DESEncryptor(null);
				
			final byte[] input = {(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01};
			final byte[] key = {(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01};
			final byte[] expectedOutput = {(byte)0x99 ,(byte)0x4D ,(byte)0x4D ,(byte)0xC1 ,(byte)0x57 ,(byte)0xB9 ,(byte)0x6C,(byte)0x52};
			final byte[] output = new byte[expectedOutput.length];
	
			ByteArraySymmetricKey SymKey = new ByteArraySymmetricKey(key);
			
			encryptor.setKey(SymKey);
			encryptor.transformBlock(input, 0, output, 0);
					
			Assert.assertTrue(Arrays.equals(expectedOutput, output));
		
	}
	
	@Test
	public void Test_decryption (){
		
		DESDecryptor decryptor = new DESDecryptor(null);
		
			final byte[] input = {(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01};
			final byte[] key = {(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01};
			final byte[] expectedOutput = {(byte)0x99 ,(byte)0x4D ,(byte)0x4D ,(byte)0xC1 ,(byte)0x57 ,(byte)0xB9 ,(byte)0x6C,(byte)0x52};
			final byte[] output = new byte[expectedOutput.length];
			
			ByteArraySymmetricKey SymKey = new ByteArraySymmetricKey(key);
			
			decryptor.setKey(SymKey);
			decryptor.transformBlock(input, 0, output, 0);
			
			Assert.assertTrue(Arrays.equals(expectedOutput, output));
		
	}
	
}
