diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtils.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtils.java index e2e1cab636cd7d2e34bd843862754056d2c0d8c7..757543af9f7227b44495bed77f991b06ca34716a 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtils.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtils.java @@ -15,9 +15,6 @@ import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; public class CryptoUtils{ @@ -27,15 +24,26 @@ public class CryptoUtils{ private static String key = "Peters Olivenöl"; private static String encrypted_as_word = "encrypted;"; private static boolean alreadyencrypted = false; + private static boolean multipleencryptions = false; + private static int encryptionreturn; + private static final Logger log = LogManager.getLogger(CryptoUtils.class); - public static void encrypt(File inputFile) throws CryptoException { - alreadyencrypted = check_if_file_already_encrypted(inputFile); //Yet to implement - if(alreadyencrypted == false){ + public static int encrypt(File inputFile, boolean multipleencryptions) throws CryptoException { + alreadyencrypted = check_if_file_already_encrypted(inputFile); + if(multipleencryptions){ + doCrypto(Cipher.ENCRYPT_MODE, key, inputFile); + log.info("This File can be encrypted multiple times"); + return encryptionreturn = 0; + } + else if(!alreadyencrypted && !multipleencryptions){ doCrypto(Cipher.ENCRYPT_MODE, key, inputFile); + log.info("This File can only be encryptet once and this is now!"); + return encryptionreturn = 1; }else { log.info("This file is already encrypted and doesnt need to be encrypted anymore! " + inputFile); + return encryptionreturn = 2; } } @@ -64,6 +72,7 @@ public class CryptoUtils{ FileOutputStream outputStream = new FileOutputStream(inputFile); outputStream.write(outputBytes);//outputBytes outputStream.close(); + multipleencryptions = true; } inputStream.close(); diff --git a/src/test/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtilsTest.java b/src/test/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtilsTest.java index 37ac39691c2aff354a0714693b4ea2f0c00b059a..07c8adf7ca568c13e88a38a9c7eca377c64398e2 100644 --- a/src/test/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtilsTest.java +++ b/src/test/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtilsTest.java @@ -3,7 +3,9 @@ package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities; //import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.CryptoException; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.CryptoException; -import org.junit.jupiter.api.Test; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.jupiter.api.*; import java.io.*; @@ -13,18 +15,31 @@ public class CryptoUtilsTest { private static File encryptiondecryptiontestFile = new File("src\\main\\resources\\database\\encryptiondecryptiontestFile.txt"); private static File encryptedtestFile = new File("src\\main\\resources\\database\\encrypted;encryptedtestFile.txt"); private static boolean alreadyencrypted; + private static int encryptionreturn; + private static String text=""; + private static String[] parts; + private static String testtext = "Hier steht ein Testtext."; + private static boolean multipleencryptions = false; + private static final Logger log = LogManager.getLogger(CryptoUtilsTest.class); - @Test - void encrypt_decryptiontest() throws IOException { - String text=""; - String[] parts; - String testtext = "Hier steht ein Testtext."; + @BeforeEach + void beforeEachTest(TestInfo testInfo) { + log.info(() -> String.format("About to execute [%s]", + testInfo.getDisplayName())); + } + @AfterEach + void afterEachTest(TestInfo testInfo) { + log.info(() -> String.format("Finished executing [%s]", + testInfo.getDisplayName())); + } + @Test + void encryptDecryptiontest() throws IOException { BufferedWriter writer = new BufferedWriter(new FileWriter(encryptiondecryptiontestFile)); writer.write(testtext); writer.close(); try { - CryptoUtils.encrypt(encryptiondecryptiontestFile); + CryptoUtils.encrypt(encryptiondecryptiontestFile, true); parts = CryptoUtils.decrypt(encryptiondecryptiontestFile); text = parts[0]; System.out.println(text); @@ -34,18 +49,54 @@ public class CryptoUtilsTest { } assertEquals(testtext,text); } + @RepeatedTest(3) + void repeatedCheckFileEncryptingMultipleTimes() throws IOException { + BufferedWriter writer = new BufferedWriter(new FileWriter(encryptiondecryptiontestFile)); + writer.write(testtext); + writer.close(); + try { + encryptionreturn = CryptoUtils.encrypt(encryptiondecryptiontestFile, true); + parts = CryptoUtils.decrypt(encryptiondecryptiontestFile); + text = parts[0]; + System.out.println(text); + } catch (CryptoException ex) { + System.out.println(ex.getMessage()); + ex.printStackTrace(); + } + assertEquals(encryptionreturn, 0); + assertEquals(testtext,text); //Change + } + @Test + void checkFileEncryptingOnce() throws IOException { + BufferedWriter writer = new BufferedWriter(new FileWriter(encryptiondecryptiontestFile)); + writer.write(testtext); + writer.close(); + try { + encryptionreturn = CryptoUtils.encrypt(encryptiondecryptiontestFile, false); + parts = CryptoUtils.decrypt(encryptiondecryptiontestFile); + text = parts[0]; + System.out.println(text); + } catch (CryptoException ex) { + System.out.println(ex.getMessage()); + ex.printStackTrace(); + } + assertEquals(encryptionreturn, 1); + assertEquals(testtext,text); //Change + } @Test - void check_if_file_already_encrypted(){ + void checkIfFileAlreadyEncrypted(){ alreadyencrypted = CryptoUtils.check_if_file_already_encrypted(encryptedtestFile); assertTrue(alreadyencrypted); } @Test - void check_if_file_not_yet_encrypted(){ + void checkIfFileNotYetEncrypted(){ alreadyencrypted = CryptoUtils.check_if_file_already_encrypted(encryptiondecryptiontestFile); assertFalse(alreadyencrypted); } @Test - void checkCryptoexception(){ - // + void exceptionTestingFileNotFound() { + CryptoException exception = assertThrows(CryptoException.class, () -> + CryptoUtils.decrypt(new File("src/main/resources/database/thisFileShouldn'tExist"))); + assertEquals("Error encrypting/decrypting file", exception.getMessage()); } }