- renamed and moved Main, MainJ8 classes from test folder to classes folder subpackage cli, name CLI and CLI2.
- separated parameter interface, new one CryptoParametersJ8
- moved to package extended using two cipher modes
- added log4j2 logging to test
git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/trunk/yaafi-crypto@1866324 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 25d9f5d..a090b32 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,6 +68,12 @@
<version>1.0.8</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ <version>${turbine.log4j2.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java b/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java
index efdac7a..c8d1bec 100644
--- a/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java
+++ b/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java
@@ -30,8 +30,6 @@
{
/** Parameter for PBEParameterSpec */
int COUNT = 20;
-
- int COUNT_J8 = 10_000; //200_000;
/** The password salt */
byte[] SALT = {
@@ -42,27 +40,4 @@
/** The crypto algorithm being used */
String ALGORITHM = "PBEWithMD5AndDES";
- /**
- * @see https://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunJCEProvider
- *
- * Algo/mode/padding for cipher transformation:
- * @see https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html
- *
- * PBEWithHmacSHA256AndAES_256/CBC/PKCS5Padding, PBEWithHmacSHA256AndAES_128/CBC/PKCS5Padding
- * or
- * GCM
- */
- String ALGORITHM_J8_PBE = "PBEWithHmacSHA256AndAES_256"; //"PBEWithHmacSHA256AndAES_128 ";
- String ALGORITHM_J8_GCM = "AES/GCM/NoPadding";
-
- public enum TYPES {
- PBE, GCM
- }
-
- /**
- * Prefix to decrypted hex hash to get a clue, what to use and what it is.
- *
- * This should be always 10 bytes
- */
- String CLEAR_CODE_J8 = "J8_AES256;"; //
}
diff --git a/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java b/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java
index 3c92617..35078ee 100644
--- a/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java
+++ b/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java
@@ -143,7 +143,7 @@
/**
* @return Returns the algorithm.
*/
- protected String getAlgorithm()
+ public String getAlgorithm()
{
return algorithm;
}
diff --git a/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java b/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java
index 95398e5..17b5130 100644
--- a/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java
+++ b/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java
@@ -25,6 +25,8 @@
import java.io.OutputStream;
import java.security.GeneralSecurityException;
+import org.apache.fulcrum.jce.crypto.extended.CryptoParametersJ8;
+
/**
* Helper class to provde generic functions to work with CryptoStreams.
*
@@ -147,7 +149,7 @@
throws GeneralSecurityException, IOException {
ByteArrayOutputStream bais = new ByteArrayOutputStream();
encrypt(factory, plainText, bais, password);
- return (useClearTextHeader)? CryptoParameters.CLEAR_CODE_J8 + HexConverter.toString(bais.toByteArray()):
+ return (useClearTextHeader)? CryptoParametersJ8.CLEAR_CODE_J8 + HexConverter.toString(bais.toByteArray()):
HexConverter.toString(bais.toByteArray());
}
@@ -163,7 +165,7 @@
*/
public String decryptString(String cipherText, char[] password) throws GeneralSecurityException, IOException {
return decryptString(getCryptoStreamFactory(), (useClearTextHeader)?
- cipherText.substring(CryptoParameters.CLEAR_CODE_J8.length()):
+ cipherText.substring(CryptoParametersJ8.CLEAR_CODE_J8.length()):
cipherText, password);
}
diff --git a/src/java/org/apache/fulcrum/jce/crypto/algo/CryptoStreamGCMImpl.java b/src/java/org/apache/fulcrum/jce/crypto/algo/CryptoStreamGCMImpl.java
index ed0a005..85133ee 100644
--- a/src/java/org/apache/fulcrum/jce/crypto/algo/CryptoStreamGCMImpl.java
+++ b/src/java/org/apache/fulcrum/jce/crypto/algo/CryptoStreamGCMImpl.java
@@ -34,16 +34,16 @@
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
-import org.apache.fulcrum.jce.crypto.CryptoParameters;
-import org.apache.fulcrum.jce.crypto.CryptoStreamFactoryJ8Template;
import org.apache.fulcrum.jce.crypto.StreamUtil;
+import org.apache.fulcrum.jce.crypto.extended.CryptoParametersJ8;
+import org.apache.fulcrum.jce.crypto.extended.CryptoStreamFactoryJ8Template;
/**
* Concrete implementation for creating encrypting/decrypting streams. The
* implementation uses the JCA (Java Crypto Extension) supplied
* by SUN (using SunJCE 1.42).
*
- * The implementation uses @see {@link CryptoParameters#ALGORITHM_J8_GCM} for encryption which
+ * The implementation uses @see {@link CryptoParametersJ8#ALGORITHM_J8_GCM} for encryption which
* should be sufficent for most applications.
*
* The implementation also supplies a default password in the case that
@@ -65,9 +65,9 @@
public CryptoStreamGCMImpl() throws GeneralSecurityException
{
this.salt = generateSalt();
- this.count = CryptoParameters.COUNT_J8;// not used
+ this.count = CryptoParametersJ8.COUNT_J8;// not used
this.providerName = PROVIDERNAME;
- this.algorithm = CryptoParameters.ALGORITHM_J8_GCM;
+ this.algorithm = CryptoParametersJ8.ALGORITHM_J8_GCM;
}
@@ -82,7 +82,7 @@
this.salt = salt;
this.count = count;
this.providerName = PROVIDERNAME;
- this.algorithm = CryptoParameters.ALGORITHM_J8_GCM;
+ this.algorithm = CryptoParametersJ8.ALGORITHM_J8_GCM;
}
/**
diff --git a/src/java/org/apache/fulcrum/jce/crypto/algo/CryptoStreamPBEImpl.java b/src/java/org/apache/fulcrum/jce/crypto/algo/CryptoStreamPBEImpl.java
index de1cb4c..e45cebf 100644
--- a/src/java/org/apache/fulcrum/jce/crypto/algo/CryptoStreamPBEImpl.java
+++ b/src/java/org/apache/fulcrum/jce/crypto/algo/CryptoStreamPBEImpl.java
@@ -35,16 +35,16 @@
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
-import org.apache.fulcrum.jce.crypto.CryptoParameters;
-import org.apache.fulcrum.jce.crypto.CryptoStreamFactoryJ8Template;
import org.apache.fulcrum.jce.crypto.StreamUtil;
+import org.apache.fulcrum.jce.crypto.extended.CryptoParametersJ8;
+import org.apache.fulcrum.jce.crypto.extended.CryptoStreamFactoryJ8Template;
/**
* Concrete implementation for creating encrypting/decrypting streams. The
* implementation uses the JCA (Java Crypto Extension) supplied
* by SUN (using SunJCE 1.42).
*
- * The implementation uses as @see {@link CryptoParameters#ALGORITHM_J8_PBE} for encryption which
+ * The implementation uses as @see {@link CryptoParametersJ8#ALGORITHM_J8_PBE} for encryption which
* should be sufficent for most applications.
*
* The implementation also supplies a default password in the case that
@@ -70,9 +70,9 @@
public CryptoStreamPBEImpl() throws GeneralSecurityException
{
this.salt = generateSalt();
- this.count = CryptoParameters.COUNT_J8;
+ this.count = CryptoParametersJ8.COUNT_J8;
this.providerName = PROVIDERNAME;
- this.algorithm = CryptoParameters.ALGORITHM_J8_PBE;
+ this.algorithm = CryptoParametersJ8.ALGORITHM_J8_PBE;
}
/**
@@ -86,7 +86,7 @@
this.salt = salt;
this.count = count;
this.providerName = PROVIDERNAME;
- this.algorithm = CryptoParameters.ALGORITHM_J8_PBE;
+ this.algorithm = CryptoParametersJ8.ALGORITHM_J8_PBE;
}
/**
diff --git a/src/test/org/apache/fulcrum/jce/crypto/Main.java b/src/java/org/apache/fulcrum/jce/crypto/cli/CLI.java
similarity index 72%
rename from src/test/org/apache/fulcrum/jce/crypto/Main.java
rename to src/java/org/apache/fulcrum/jce/crypto/cli/CLI.java
index 95b79df..6f493cc 100644
--- a/src/test/org/apache/fulcrum/jce/crypto/Main.java
+++ b/src/java/org/apache/fulcrum/jce/crypto/cli/CLI.java
@@ -1,4 +1,4 @@
-package org.apache.fulcrum.jce.crypto;
+package org.apache.fulcrum.jce.crypto.cli;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -25,6 +25,9 @@
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import org.apache.fulcrum.jce.crypto.CryptoUtil;
+import org.apache.fulcrum.jce.crypto.StreamUtil;
+
/**
* Command line tool for encrypting/decrypting files
*
@@ -34,7 +37,7 @@
* @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
*/
-public class Main
+public class CLI
{
/**
* Allows testing on the command line.
@@ -119,37 +122,38 @@
public static void processFile(String cipherMode, char[] password, File sourceFile, File targetFile)
throws Exception
{
- FileInputStream fis = new FileInputStream(sourceFile);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- if( cipherMode.equals("dec") )
- {
- System.out.println("Decrypting " + sourceFile.getAbsolutePath() );
- CryptoUtil.getInstance().decrypt( fis, baos, password );
- fis.close();
-
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
- FileOutputStream fos = new FileOutputStream(targetFile);
- CryptoUtil.copy(bais,fos);
- bais.close();
- fos.close();
- }
- else if( cipherMode.equals("enc") )
- {
- System.out.println("Encrypting " + sourceFile.getAbsolutePath() );
- CryptoUtil.getInstance().encrypt( fis, baos, password );
- fis.close();
-
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
- FileOutputStream fos = new FileOutputStream(targetFile);
- CryptoUtil.copy(bais,fos);
- bais.close();
- fos.close();
- }
- else
- {
- String msg = "Don't know what to do with : " + cipherMode;
- throw new IllegalArgumentException(msg);
+ try (FileInputStream fis = new FileInputStream(sourceFile)) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ if( cipherMode.equals("dec") )
+ {
+ System.out.println("Decrypting " + sourceFile.getAbsolutePath() );
+ CryptoUtil.getInstance().decrypt( fis, baos, password );
+ fis.close();
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ FileOutputStream fos = new FileOutputStream(targetFile);
+ StreamUtil.copy(bais,fos);
+ bais.close();
+ fos.close();
+ }
+ else if( cipherMode.equals("enc") )
+ {
+ System.out.println("Encrypting " + sourceFile.getAbsolutePath() );
+ CryptoUtil.getInstance().encrypt( fis, baos, password );
+ fis.close();
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ FileOutputStream fos = new FileOutputStream(targetFile);
+ StreamUtil.copy(bais,fos);
+ bais.close();
+ fos.close();
+ }
+ else
+ {
+ String msg = "Don't know what to do with : " + cipherMode;
+ throw new IllegalArgumentException(msg);
+ }
}
}
diff --git a/src/java/org/apache/fulcrum/jce/crypto/cli/MainJ8.java b/src/java/org/apache/fulcrum/jce/crypto/cli/CLI2.java
similarity index 89%
rename from src/java/org/apache/fulcrum/jce/crypto/cli/MainJ8.java
rename to src/java/org/apache/fulcrum/jce/crypto/cli/CLI2.java
index 5f7bcab..9ec83bb 100644
--- a/src/java/org/apache/fulcrum/jce/crypto/cli/MainJ8.java
+++ b/src/java/org/apache/fulcrum/jce/crypto/cli/CLI2.java
@@ -25,8 +25,8 @@
import java.io.FileInputStream;
import java.io.FileOutputStream;
-import org.apache.fulcrum.jce.crypto.CryptoParameters;
-import org.apache.fulcrum.jce.crypto.CryptoUtilJ8;
+import org.apache.fulcrum.jce.crypto.extended.CryptoParametersJ8;
+import org.apache.fulcrum.jce.crypto.extended.CryptoUtilJ8;
/**
* Command line tool for encrypting/decrypting a file or string
@@ -39,12 +39,12 @@
* java -classpath target/classes org.apache.fulcrum.jce.crypto.cli.Main string enc changeit mysecretgeheim
* ...
*
- * java -classpath target/classes org.apache.fulcrum.jce.crypto.cli.Main string dec changeit J8_AES256;<hashcode>
+ * java -cp target/classes org.apache.fulcrum.jce.crypto.cli.Main string dec changeit J8_AES256;<hashcode>
*
* @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
*/
-public class MainJ8
+public class CLI2
{
/**
* Allows usage on the command line.
@@ -84,11 +84,11 @@
*/
public static void printHelp()
{
- System.out.println("\r\n*** Command line tool for encrypting/decrypting strings/files ***\r\n*** algorithm based on "+ CryptoParameters.ALGORITHM_J8_PBE+ "***\r\n");
+ System.out.println("\r\n*** Command line tool for encrypting/decrypting strings/files ***\r\n*** algorithm based on "+ CryptoParametersJ8.ALGORITHM_J8_PBE+ "***\r\n");
System.out.println( "*** Usage: ***\r\n");
- System.out.println("java -cp target\\classes; "+ MainJ8.class.getName()+ " <operation mode:file:string> <coding mode:enc|dec> <password> <path|string> [target]\r\ne.g.\r\n");
- System.out.println( MainJ8.class.getSimpleName()+ " file [enc|dec] passwd source [target]");
- System.out.println(MainJ8.class.getSimpleName() + " string [enc|dec] passwd source");
+ System.out.println("java -cp target\\classes; "+ CLI2.class.getName()+ " <operation mode:file|string> <coding mode:enc|dec> <password> <path|string> [target]\r\ne.g.\r\n");
+ System.out.println( CLI2.class.getSimpleName()+ " file [enc|dec] passwd source [target]");
+ System.out.println(CLI2.class.getSimpleName() + " string [enc|dec] passwd source");
}
/**
diff --git a/src/java/org/apache/fulcrum/jce/crypto/extended/CryptoParametersJ8.java b/src/java/org/apache/fulcrum/jce/crypto/extended/CryptoParametersJ8.java
new file mode 100644
index 0000000..8195819
--- /dev/null
+++ b/src/java/org/apache/fulcrum/jce/crypto/extended/CryptoParametersJ8.java
@@ -0,0 +1,62 @@
+package org.apache.fulcrum.jce.crypto.extended;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+/**
+ * CryptoParameters used for encryption/decryption.
+ *
+ * @author <a href="mailto:gk@apache.org">Georg Kallidis</a>
+ */
+
+public interface CryptoParametersJ8
+{
+
+ int COUNT_J8 = 10_000; //200_000;
+
+ /**
+ * @see https://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunJCEProvider
+ *
+ * Algo/mode/padding for cipher transformation:
+ * @see https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html
+ *
+ * using PBEWith<digest>And<encryption>:
+ *
+ * <li>PBEWithHmacSHA256AndAES_256/CBC/PKCS5Padding
+ *
+ * or
+ * Cipher Algorithm Names/Cipher Algorithm Modes/Cipher Algorithm Padding
+ *
+ * <li>AES/GCM/NoPadding
+ */
+ String ALGORITHM_J8_PBE = "PBEWithHmacSHA256AndAES_256"; //"PBEWithHmacSHA256AndAES_128 ";
+ String ALGORITHM_J8_GCM = "AES/GCM/NoPadding";
+
+ public enum TYPES {
+ PBE, GCM
+ }
+
+ /**
+ * Prefix to decrypted hex hash to get a clue, what to use and what it is.
+ *
+ * This should be always 10 bytes
+ */
+ String CLEAR_CODE_J8 = "J8_AES256;"; //
+}
diff --git a/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8.java b/src/java/org/apache/fulcrum/jce/crypto/extended/CryptoStreamFactoryJ8.java
similarity index 95%
rename from src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8.java
rename to src/java/org/apache/fulcrum/jce/crypto/extended/CryptoStreamFactoryJ8.java
index 8dc7be6..c0cde9f 100644
--- a/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8.java
+++ b/src/java/org/apache/fulcrum/jce/crypto/extended/CryptoStreamFactoryJ8.java
@@ -1,4 +1,4 @@
-package org.apache.fulcrum.jce.crypto;
+package org.apache.fulcrum.jce.crypto.extended;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -24,6 +24,8 @@
import java.io.OutputStream;
import java.security.GeneralSecurityException;
+import org.apache.fulcrum.jce.crypto.CryptoStreamFactory;
+
/**
* Interface for creating encrypting/decrypting streams.
*
diff --git a/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8Impl.java b/src/java/org/apache/fulcrum/jce/crypto/extended/CryptoStreamFactoryJ8Impl.java
similarity index 94%
rename from src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8Impl.java
rename to src/java/org/apache/fulcrum/jce/crypto/extended/CryptoStreamFactoryJ8Impl.java
index 93462eb..c692d29 100644
--- a/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8Impl.java
+++ b/src/java/org/apache/fulcrum/jce/crypto/extended/CryptoStreamFactoryJ8Impl.java
@@ -1,4 +1,4 @@
-package org.apache.fulcrum.jce.crypto;
+package org.apache.fulcrum.jce.crypto.extended;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -38,12 +38,17 @@
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
+import org.apache.fulcrum.jce.crypto.CryptoStreamFactory;
+import org.apache.fulcrum.jce.crypto.CryptoStreamFactoryImpl;
+import org.apache.fulcrum.jce.crypto.PasswordFactory;
+import org.apache.fulcrum.jce.crypto.StreamUtil;
+
/**
* Concrete factory for creating encrypting/decrypting streams. The
* implementation uses the JCA (Java Crypto Extension) supplied
* by SUN (using SunJCE 1.42).
*
- * The implementation uses as PBEWithHmacSHA256AndAES_256, see {@link CryptoParameters#ALGORITHM_J8} for encryption which
+ * The implementation uses as PBEWithHmacSHA256AndAES_256, see {@link CryptoParametersJ8#ALGORITHM_J8} for encryption which
* should be sufficent for most applications.
*
* The implementation also supplies a default password in the case that
@@ -104,9 +109,9 @@
public CryptoStreamFactoryJ8Impl() throws GeneralSecurityException
{
this.salt = generateSalt();
- this.count = CryptoParameters.COUNT_J8;
+ this.count = CryptoParametersJ8.COUNT_J8;
this.providerName = PROVIDERNAME;
- this.algorithm = CryptoParameters.ALGORITHM_J8_PBE;
+ this.algorithm = CryptoParametersJ8.ALGORITHM_J8_PBE;
}
/**
@@ -115,7 +120,7 @@
public CryptoStreamFactoryJ8Impl(String algo) throws GeneralSecurityException
{
this.salt = generateSalt();
- this.count = CryptoParameters.COUNT_J8;
+ this.count = CryptoParametersJ8.COUNT_J8;
this.providerName = PROVIDERNAME;
this.algorithm = algo;
}
@@ -131,7 +136,7 @@
this.salt = salt;
this.count = count;
this.providerName = PROVIDERNAME;
- this.algorithm = CryptoParameters.ALGORITHM_J8_PBE;
+ this.algorithm = CryptoParametersJ8.ALGORITHM_J8_PBE;
}
diff --git a/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8Template.java b/src/java/org/apache/fulcrum/jce/crypto/extended/CryptoStreamFactoryJ8Template.java
similarity index 93%
rename from src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8Template.java
rename to src/java/org/apache/fulcrum/jce/crypto/extended/CryptoStreamFactoryJ8Template.java
index 31485b4..aef5e35 100644
--- a/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8Template.java
+++ b/src/java/org/apache/fulcrum/jce/crypto/extended/CryptoStreamFactoryJ8Template.java
@@ -1,4 +1,4 @@
-package org.apache.fulcrum.jce.crypto;
+package org.apache.fulcrum.jce.crypto.extended;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -33,9 +33,12 @@
import javax.crypto.Cipher;
-import org.apache.fulcrum.jce.crypto.CryptoParameters.TYPES;
+import org.apache.fulcrum.jce.crypto.CryptoStreamFactoryImpl;
+import org.apache.fulcrum.jce.crypto.PasswordFactory;
+import org.apache.fulcrum.jce.crypto.StreamUtil;
import org.apache.fulcrum.jce.crypto.algo.CryptoStreamGCMImpl;
import org.apache.fulcrum.jce.crypto.algo.CryptoStreamPBEImpl;
+import org.apache.fulcrum.jce.crypto.extended.CryptoParametersJ8.TYPES;
/**
* Concrete factory for creating encrypting/decrypting streams.
@@ -94,8 +97,8 @@
this.salt = salt;
this.count = count;
this.providerName = PROVIDERNAME;
- this.algorithm = type.equals(TYPES.PBE)? CryptoParameters.ALGORITHM_J8_PBE:
- CryptoParameters.ALGORITHM_J8_GCM;
+ this.algorithm = type.equals(TYPES.PBE)? CryptoParametersJ8.ALGORITHM_J8_PBE:
+ CryptoParametersJ8.ALGORITHM_J8_GCM;
}
diff --git a/src/java/org/apache/fulcrum/jce/crypto/CryptoUtilJ8.java b/src/java/org/apache/fulcrum/jce/crypto/extended/CryptoUtilJ8.java
similarity index 93%
rename from src/java/org/apache/fulcrum/jce/crypto/CryptoUtilJ8.java
rename to src/java/org/apache/fulcrum/jce/crypto/extended/CryptoUtilJ8.java
index 3287aa5..848834a 100644
--- a/src/java/org/apache/fulcrum/jce/crypto/CryptoUtilJ8.java
+++ b/src/java/org/apache/fulcrum/jce/crypto/extended/CryptoUtilJ8.java
@@ -1,4 +1,4 @@
-package org.apache.fulcrum.jce.crypto;
+package org.apache.fulcrum.jce.crypto.extended;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -26,7 +26,10 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import org.apache.fulcrum.jce.crypto.CryptoParameters.TYPES;
+import org.apache.fulcrum.jce.crypto.CryptoStreamFactory;
+import org.apache.fulcrum.jce.crypto.CryptoUtil;
+import org.apache.fulcrum.jce.crypto.StreamUtil;
+import org.apache.fulcrum.jce.crypto.extended.CryptoParametersJ8.TYPES;
/**
* Helper class to provde generic functions to work with CryptoStreams.
@@ -41,7 +44,7 @@
public final class CryptoUtilJ8 extends CryptoUtil {
- protected TYPES type;// default see instance
+ public TYPES type;// default see instance
public TYPES getType() {
diff --git a/src/test/log4j2.xml b/src/test/log4j2.xml
new file mode 100644
index 0000000..ee9dd06
--- /dev/null
+++ b/src/test/log4j2.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<Configuration status="info" verbose="false">
+ <Appenders>
+ <Console name="console" target="SYSTEM_OUT">
+ <PatternLayout pattern="%d [%t] %-5p %c - %m%n"/>
+ </Console>
+ <File name="logfile" fileName="target/fulcrum-test.log">
+ <PatternLayout pattern="%d [%t] %-5p %c - %m%n"/>
+ </File>
+ <File name="avalon" fileName="target/avalon-test.log">
+ <PatternLayout pattern="%d [%t] %-5p %c - %m%n"/>
+ </File>
+ </Appenders>
+ <Loggers>
+ <Logger name="org.apache.fulcrum.jce.crypto" level="debug" additivity="false">
+ <AppenderRef ref="console"/>
+ <AppenderRef ref="logfile"/>
+ </Logger>
+ <Logger name="org.apache.fulcrum" level="info" additivity="false">
+ <AppenderRef ref="console"/>
+ <AppenderRef ref="logfile"/>
+ </Logger>
+ <Logger name="org.apache.fulcrum.yaafi" level="info" additivity="false">
+ <AppenderRef ref="avalon"/>
+ </Logger>
+ <Logger name="avalon" level="warn" additivity="false">
+ <AppenderRef ref="avalon"/>
+ </Logger>
+ <Logger name="org.apache.logging.log4j" level="warn" additivity="false">
+ <AppenderRef ref="logfile"/>
+ </Logger>
+ <Root level="error">
+ <AppenderRef ref="console"/>
+ </Root>
+ </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java b/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java
index d3d68ce..7e0aa5f 100644
--- a/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java
+++ b/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java
@@ -1,7 +1,5 @@
package org.apache.fulcrum.jce.crypto;
-import static org.junit.Assert.assertEquals;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
diff --git a/src/test/org/apache/fulcrum/jce/crypto/MainTest.java b/src/test/org/apache/fulcrum/jce/crypto/MainTest.java
index 352990f..83674b4 100644
--- a/src/test/org/apache/fulcrum/jce/crypto/MainTest.java
+++ b/src/test/org/apache/fulcrum/jce/crypto/MainTest.java
@@ -1,5 +1,7 @@
package org.apache.fulcrum.jce.crypto;
+import org.apache.fulcrum.jce.crypto.cli.CLI;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -55,9 +57,17 @@
public void testStringEncryption()
{
String[] encryptionArgs = { "string", "enc", this.password, "mysecretpassword"};
- Main.main(encryptionArgs);
+ CLI.main(encryptionArgs);
String[] decryptionArgs = { "string", "dec", this.password, "9330419fc003b4e1461986782625db13f4c8c81c340a9caa"};
- Main.main(decryptionArgs);
+ CLI.main(decryptionArgs);
+ }
+
+ public void testAnotherStringEncryption()
+ {
+ String[] encryptionArgs = { "string", "enc", this.password, "secret"};
+ CLI.main(encryptionArgs);
+ String[] decryptionArgs = { "string", "dec", this.password, "39619852d48491af"};
+ CLI.main(decryptionArgs);
}
/** Encrypt a text file on the command line */
@@ -65,8 +75,8 @@
{
String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main/plain.enc.txt" };
String[] decryptionArgs = { "file", "dec", this.password, "./target/main/plain.enc.txt", "./target/main/plain.dec.txt" };
- Main.main(encryptionArgs);
- Main.main(decryptionArgs);
+ CLI.main(encryptionArgs);
+ CLI.main(decryptionArgs);
}
/** Encrypt a text file in-place on the command line */
@@ -74,8 +84,8 @@
{
String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main/plain.txt" };
String[] decryptionArgs = { "file", "dec", this.password, "./target/main/plain.txt" };
- Main.main(encryptionArgs);
- Main.main(decryptionArgs);
+ CLI.main(encryptionArgs);
+ CLI.main(decryptionArgs);
}
}
\ No newline at end of file
diff --git a/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilJ8ParameterizedTest.java b/src/test/org/apache/fulcrum/jce/crypto/extended/CryptoUtilJ8ParameterizedTest.java
similarity index 97%
rename from src/test/org/apache/fulcrum/jce/crypto/CryptoUtilJ8ParameterizedTest.java
rename to src/test/org/apache/fulcrum/jce/crypto/extended/CryptoUtilJ8ParameterizedTest.java
index 2ecbd60..6b57a51 100644
--- a/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilJ8ParameterizedTest.java
+++ b/src/test/org/apache/fulcrum/jce/crypto/extended/CryptoUtilJ8ParameterizedTest.java
@@ -1,4 +1,4 @@
-package org.apache.fulcrum.jce.crypto;
+package org.apache.fulcrum.jce.crypto.extended;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -14,7 +14,10 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.fulcrum.jce.crypto.CryptoParameters.TYPES;
+import org.apache.fulcrum.jce.crypto.PasswordFactory;
+import org.apache.fulcrum.jce.crypto.extended.CryptoStreamFactoryJ8Template;
+import org.apache.fulcrum.jce.crypto.extended.CryptoUtilJ8;
+import org.apache.fulcrum.jce.crypto.extended.CryptoParametersJ8.TYPES;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
diff --git a/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilJ8Test.java b/src/test/org/apache/fulcrum/jce/crypto/extended/CryptoUtilJ8Test.java
similarity index 90%
rename from src/test/org/apache/fulcrum/jce/crypto/CryptoUtilJ8Test.java
rename to src/test/org/apache/fulcrum/jce/crypto/extended/CryptoUtilJ8Test.java
index 455b165..9a4d013 100644
--- a/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilJ8Test.java
+++ b/src/test/org/apache/fulcrum/jce/crypto/extended/CryptoUtilJ8Test.java
@@ -1,4 +1,4 @@
-package org.apache.fulcrum.jce.crypto;
+package org.apache.fulcrum.jce.crypto.extended;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -14,7 +14,13 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.fulcrum.jce.crypto.CryptoParameters.TYPES;
+import org.apache.fulcrum.jce.crypto.PasswordFactory;
+import org.apache.fulcrum.jce.crypto.extended.CryptoParametersJ8;
+import org.apache.fulcrum.jce.crypto.extended.CryptoStreamFactoryJ8Template;
+import org.apache.fulcrum.jce.crypto.extended.CryptoUtilJ8;
+import org.apache.fulcrum.jce.crypto.extended.CryptoParametersJ8.TYPES;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -36,7 +42,8 @@
private File tempDataDirectory;
private static List<CryptoUtilJ8> cryptoUtilJ8s = new ArrayList<>();
-
+
+ private static Logger log = LogManager.getLogger(CryptoUtilJ8Test.class);
/**
* Constructor
@@ -49,21 +56,16 @@
this.tempDataDirectory.mkdirs();
}
- /**
- * @see junit.framework.TestCase#setUp() byte[] salt, int count, String
- * algorithm, String providerName )
- *
- * @throws Exception Generic exception
- */
+
@BeforeAll
public static void setUp() throws Exception {
cryptoUtilJ8s.clear();
- for (TYPES type : CryptoParameters.TYPES.values()) {
+ for (TYPES type : CryptoParametersJ8.TYPES.values()) {
cryptoUtilJ8s.add(CryptoUtilJ8.getInstance(type));
}
for (CryptoUtilJ8 cryptoUtilJ8 : cryptoUtilJ8s) {
- System.out.println("registered cryptoUtilsJ8: "+ cryptoUtilJ8.getType() );
- System.out.println( ((CryptoStreamFactoryJ8Template)cryptoUtilJ8.getCryptoStreamFactory()).getAlgorithm());
+ log.debug("registered cryptoUtilsJ8: {}", cryptoUtilJ8.getType() );
+ log.debug( ((CryptoStreamFactoryJ8Template)cryptoUtilJ8.getCryptoStreamFactory()).getAlgorithm());
}
}
@@ -251,9 +253,9 @@
public void testPasswordFactory() throws Exception {
char[] result = null;
result = PasswordFactory.getInstance("SHA-256").create();
- System.out.println("random pw:" + new String(result));
+ log.debug("random pw: {}", new String(result));
result = PasswordFactory.getInstance("SHA-256",10_000).create(this.getPassword());
- System.out.println("password pw with seed:" + new String(result));
+ log.debug("password pw with seed: {}", new String(result));
assertNotNull(result);
return;
}
@@ -306,9 +308,9 @@
String cipherText = null;
try {
cipherText = cuj8.encryptString(source, password);
- System.out.println(cipherText);// about 128
-
- System.out.println("length for " + cuj8.getType() + " is:" +cipherText.length());// about 128
+ log.debug(cipherText);// about 128
+
+ log.debug("length for {} is: {}", cuj8.getType(), cipherText.length());// about 128
if (cuj8.type == TYPES.PBE) {
assertEquals(128, cipherText.length()); // 128bytes + 10 bytes for cleartext
}
diff --git a/src/test/org/apache/fulcrum/jce/crypto/extended/Main8Test.java b/src/test/org/apache/fulcrum/jce/crypto/extended/Main8Test.java
new file mode 100644
index 0000000..1d85649
--- /dev/null
+++ b/src/test/org/apache/fulcrum/jce/crypto/extended/Main8Test.java
@@ -0,0 +1,91 @@
+package org.apache.fulcrum.jce.crypto.extended;
+
+import org.apache.fulcrum.jce.crypto.cli.CLI2;
+import org.junit.jupiter.api.Test;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+/**
+ * Test suite for crypto functionality
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class Main8Test
+{
+ /** the password to be used */
+ static private String password;
+
+ /**
+ * Constructor
+ */
+ public Main8Test() {
+
+ this.password = "foobar";
+ }
+
+
+ /**
+ * @return Returns the password.
+ */
+ protected char[] getPassword()
+ {
+ return password.toCharArray();
+ }
+
+
+ /** Encrypt a string on the command line */
+ @Test
+ public void testStringEncryption()
+ {
+ String[] encryptionArgs = { "string", "enc", this.password, "mysecretpassword"};
+ CLI2.main(encryptionArgs);
+ String[] decryptionArgs = { "string", "dec", this.password, "ce3bf02da8a57c94b4f42c084230d1bedcd856c49a3fd23ec59835ca46a3d37ee02d470394691353478c905e7b342316d1fcc3e1b98837bf0595ef50853922df"};
+ CLI2.main(decryptionArgs);
+ }
+ @Test
+ public void testAnotherStringEncryption()
+ {
+ String[] encryptionArgs = { "string", "enc", this.password, "secret"};
+ CLI2.main(encryptionArgs);
+ String[] decryptionArgs = { "string", "dec", this.password, "8626904c9e64fddfa64add56472c4796429b0adb7c8039424adef7434be6bc255ce092011e8c560965814e806dd68117"};
+ CLI2.main(decryptionArgs);
+ }
+ @Test
+ /** Encrypt a text file on the command line */
+ public void testFileEncryption1()
+ {
+ String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main8/plain.enc.txt" };
+ String[] decryptionArgs = { "file", "dec", this.password, "./target/main8/plain.enc.txt", "./target/main8/plain.dec.txt" };
+ CLI2.main(encryptionArgs);
+ CLI2.main(decryptionArgs);
+ }
+ @Test
+ /** Encrypt a text file in-place on the command line */
+ public void testFileEncryption2()
+ {
+ String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main8/plain.txt" };
+ String[] decryptionArgs = { "file", "dec", this.password, "./target/main8/plain.txt" };
+ CLI2.main(encryptionArgs);
+ CLI2.main(decryptionArgs);
+ }
+
+}
\ No newline at end of file