package co.codewizards.cloudstore.core.otp; import static org.assertj.core.api.Assertions.assertThat; import java.nio.charset.Charset; import org.junit.Before; import org.junit.Test; import co.codewizards.cloudstore.core.otp.OneTimePadEncryptor.Result; public class OneTimePadEncryptorTest { private OneTimePadEncryptor encryptor; @Before public void setUp(){ encryptor = new OneTimePadEncryptor(); } @Test public void when_message_is_encrypted_then_it_can_be_properly_decrypted_with_the_same_key(){ String message = "message"; byte[] messageBytes = message.getBytes(Charset.forName("UTF-8")); Result result = encryptor.encrypt(messageBytes); byte[] decryptedBytes = encryptor.decrypt(result.getEncryptedMessage(), result.getRandomKey()); String decryptedMessage = new String(decryptedBytes, Charset.forName("UTF-8")); assertThat(decryptedMessage).isEqualTo(message); assertThat(decryptedBytes).isEqualTo(messageBytes).isNotEqualTo(result.getEncryptedMessage()); } @Test(expected = IllegalArgumentException.class) public void when_decrypting_and_encrypted_message_and_key_have_different_length_then_throw_IAE(){ encryptor.decrypt(new byte[3], new byte[2]); } }