You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by gk...@apache.org on 2018/12/20 16:34:05 UTC
svn commit: r1849416 - in /turbine/fulcrum/trunk/yaafi-crypto/src:
java/org/apache/fulcrum/jce/crypto/ java/org/apache/fulcrum/jce/crypto/cli/
test/org/apache/fulcrum/jce/crypto/
Author: gk
Date: Thu Dec 20 16:34:05 2018
New Revision: 1849416
URL: http://svn.apache.org/viewvc?rev=1849416&view=rev
Log:
- adjust method with related classes
- add MainJ8.java cli
Added:
turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/cli/
turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/cli/MainJ8.java (with props)
Modified:
turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8Impl.java
turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoUtilJ8.java
turbine/fulcrum/trunk/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilJ8Test.java
turbine/fulcrum/trunk/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/Main.java
Modified: turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8Impl.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8Impl.java?rev=1849416&r1=1849415&r2=1849416&view=diff
==============================================================================
--- turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8Impl.java (original)
+++ turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryJ8Impl.java Thu Dec 20 16:34:05 2018
@@ -62,6 +62,9 @@ import javax.crypto.spec.PBEParameterSpe
public final class CryptoStreamFactoryJ8Impl extends CryptoStreamFactoryImpl implements CryptoStreamFactoryJ8
{
+ private static final int salt_size = 128;
+ private static final int key_size = 128;
+
/** the default instance */
private static CryptoStreamFactoryJ8 instance;
@@ -104,6 +107,17 @@ public final class CryptoStreamFactoryJ8
this.providerName = PROVIDERNAME;
this.algorithm = CryptoParameters.ALGORITHM_J8;
}
+
+ /**
+ * Constructor
+ */
+ public CryptoStreamFactoryJ8Impl(String algo) throws GeneralSecurityException
+ {
+ this.salt = generateSalt();
+ this.count = CryptoParameters.COUNT_J8;
+ this.providerName = PROVIDERNAME;
+ this.algorithm = algo;
+ }
/**
* Constructor
@@ -169,7 +183,7 @@ public final class CryptoStreamFactoryJ8
SecretKeyFactory keyFactory;
String algorithm = this.getAlgorithm();
- PBEKeySpec keySpec = new PBEKeySpec(password, (salt == null)? this.getSalt(): salt, this.getCount(), 128 );
+ PBEKeySpec keySpec = new PBEKeySpec(password, (salt == null)? this.getSalt(): salt, this.getCount(), key_size );
byte[] encodedTmp = null;
try {
if( this.getProviderName() == null )
@@ -218,7 +232,7 @@ public final class CryptoStreamFactoryJ8
byte[] salt = null;
byte[] iv = null;
if (mode == Cipher.DECRYPT_MODE) {
- salt = Arrays.copyOfRange(input, 0, 128 / 8);
+ salt = Arrays.copyOfRange(input, 0, salt_size / 8);
iv = Arrays.copyOfRange(input, salt.length, salt.length + 128 / 8);
ciphertext = Arrays.copyOfRange(input, salt.length + iv.length, input.length);// cut out salt and iv
}
@@ -265,7 +279,7 @@ public final class CryptoStreamFactoryJ8
SecureRandom random;
try {
random = SecureRandom.getInstance("SHA1PRNG");
- byte[] salt = new byte[128 / 8];
+ byte[] salt = new byte[salt_size / 8];
random.nextBytes(salt);
return salt;
} catch (NoSuchAlgorithmException e) {
Modified: turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoUtilJ8.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoUtilJ8.java?rev=1849416&r1=1849415&r2=1849416&view=diff
==============================================================================
--- turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoUtilJ8.java (original)
+++ turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoUtilJ8.java Thu Dec 20 16:34:05 2018
@@ -54,24 +54,6 @@ public final class CryptoUtilJ8 extends
return CryptoUtilJ8.instance;
}
-
- /**
- * Encrypts a string into a hex string.
- *
- * @param factory the factory to create the crypto streams
- * @param plainText the plain text to be encrypted
- * @param password the password for encryption
- * @return the encrypted string
- * @throws GeneralSecurityException accessing JCE failed
- * @throws IOException accessing the souce failed
- */
- @Override
- public String encryptString(CryptoStreamFactory factory, String plainText, char[] password)
- throws GeneralSecurityException, IOException {
- ByteArrayOutputStream bais = new ByteArrayOutputStream();
- encrypt(factory, plainText, bais, password);
- return HexConverter.toString(bais.toByteArray());
- }
/**
* Copies from a source to a target object using encryption and a caller
@@ -114,6 +96,7 @@ public final class CryptoUtilJ8 extends
}
/**
+ *
* @return the CryptoStreamFactory to be used
*/
public CryptoStreamFactory getCryptoStreamFactory() {
Added: turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/cli/MainJ8.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/cli/MainJ8.java?rev=1849416&view=auto
==============================================================================
--- turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/cli/MainJ8.java (added)
+++ turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/cli/MainJ8.java Thu Dec 20 16:34:05 2018
@@ -0,0 +1,192 @@
+package org.apache.fulcrum.jce.crypto.cli;
+
+/*
+ * 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.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+
+import org.apache.fulcrum.jce.crypto.CryptoParameters;
+import org.apache.fulcrum.jce.crypto.CryptoUtilJ8;
+
+/**
+ * Command line tool for encrypting/decrypting a file or string
+ *
+ * file [enc|dec] passwd [file]*
+ * string [enc|dec] passwd plaintext
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class MainJ8
+{
+ /**
+ * Allows usage on the command line.
+ *
+ * @param args the command line parameters
+ */
+ public static void main( String[] args )
+ {
+ try
+ {
+ if( args.length < 3 )
+ {
+ printHelp();
+ throw new IllegalArgumentException("Invalid command line");
+ }
+
+ String operationMode = args[0];
+
+
+ if( operationMode.equals("file") )
+ {
+ processFiles(args);
+ }
+ else if( operationMode.equals("string") )
+ {
+ processString(args);
+ }
+ }
+ catch (Exception e)
+ {
+ System.out.println("Error : " + e.getMessage());
+ }
+ }
+
+ /**
+ * Prints usage information.
+ */
+ 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+ "***\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");
+ }
+
+ /**
+ * Decrypt/encrypt a list of files
+ * @param args the command line
+ * @throws Exception the operation failed
+ */
+ public static void processFiles(String[] args)
+ throws Exception
+ {
+ String cipherMode = args[1];
+ char[] password = args[2].toCharArray();
+ File sourceFile = new File(args[3]);
+ File targetFile = null;
+
+ if( args.length == 4 )
+ {
+ targetFile = sourceFile;
+ }
+ else
+ {
+ targetFile = new File(args[4]);
+ File parentFile = targetFile.getParentFile();
+
+ if(parentFile != null)
+ {
+ parentFile.mkdirs();
+ }
+ }
+
+ processFile(cipherMode,password,sourceFile,targetFile);
+ }
+
+ /**
+ * Decrypt/encrypt a single file
+ * @param cipherMode the mode
+ * @param password the passwors
+ * @param sourceFile the file to process
+ * @param targetFile the targetf file
+ * @throws Exception the operation failed
+ */
+ public static void processFile(String cipherMode, char[] password, File sourceFile, File targetFile)
+ throws Exception
+ {
+ FileInputStream fis = new FileInputStream(sourceFile);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ CryptoUtilJ8 cryptoUtilJ8 = CryptoUtilJ8.getInstance();
+
+ if( cipherMode.equals("dec") )
+ {
+ System.out.println("Decrypting " + sourceFile.getAbsolutePath() );
+ cryptoUtilJ8.decrypt( fis, baos, password );
+ fis.close();
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ FileOutputStream fos = new FileOutputStream(targetFile);
+ CryptoUtilJ8.copy(bais,fos);
+ bais.close();
+ fos.close();
+ }
+ else if( cipherMode.equals("enc") )
+ {
+ System.out.println("Enrypting " + sourceFile.getAbsolutePath() );
+ cryptoUtilJ8.encrypt( fis, baos, password );
+ fis.close();
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ FileOutputStream fos = new FileOutputStream(targetFile);
+ CryptoUtilJ8.copy(bais,fos);
+ bais.close();
+ fos.close();
+ }
+ else
+ {
+ String msg = "Don't know what to do with : " + cipherMode;
+ throw new IllegalArgumentException(msg);
+ }
+ }
+
+ /**
+ * Decrypt/encrypt a string.
+ *
+ * @param args the command line
+ * @throws Exception the operation failed
+ */
+ public static void processString(String[] args)
+ throws Exception
+ {
+ String cipherMode = args[1];
+ char[] password = args[2].toCharArray();
+ String value = args[3];
+ String result = null;
+
+ CryptoUtilJ8 cryptoUtilJ8 = CryptoUtilJ8.getInstance();
+
+ if( cipherMode.equals("dec") )
+ {
+ result = cryptoUtilJ8.decryptString(value,password);
+ }
+ else
+ {
+ result = cryptoUtilJ8.encryptString(value,password);
+ }
+
+ System.out.println( result );
+ }
+}
\ No newline at end of file
Propchange: turbine/fulcrum/trunk/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/cli/MainJ8.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: turbine/fulcrum/trunk/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilJ8Test.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilJ8Test.java?rev=1849416&r1=1849415&r2=1849416&view=diff
==============================================================================
--- turbine/fulcrum/trunk/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilJ8Test.java (original)
+++ turbine/fulcrum/trunk/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilJ8Test.java Thu Dec 20 16:34:05 2018
@@ -2,7 +2,9 @@ package org.apache.fulcrum.jce.crypto;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import org.junit.Before;
@@ -24,6 +26,8 @@ public class CryptoUtilJ8Test {
/** the temp data director */
private File tempDataDirectory;
+
+ private CryptoUtilJ8 cryptoUtilJ8;
/**
* Constructor
@@ -44,9 +48,7 @@ public class CryptoUtilJ8Test {
*/
@Before
public void setUp() throws Exception {
-// CryptoStreamFactoryImpl factory = new CryptoStreamFactoryJ8Impl(CryptoParameters.SALT, CryptoParameters.COUNT_J8);
-//
-// CryptoStreamFactoryImpl.setInstance(factory);
+ cryptoUtilJ8 = CryptoUtilJ8.getInstance();
}
/**
@@ -77,7 +79,7 @@ public class CryptoUtilJ8Test {
public void testTextEncryption() throws Exception {
File sourceFile = new File(this.getTestDataDirectory(), "plain.txt");
File targetFile = new File(this.getTempDataDirectory(), "plain.j8.enc.txt");
- CryptoUtilJ8.getInstance().encrypt(sourceFile, targetFile, this.getPassword());
+ cryptoUtilJ8.encrypt(sourceFile, targetFile, this.getPassword());
}
/** Decrypt a text file
@@ -88,7 +90,7 @@ public class CryptoUtilJ8Test {
testTextEncryption();
File sourceFile = new File(this.getTempDataDirectory(), "plain.j8.enc.txt");
File targetFile = new File(this.getTempDataDirectory(), "plain.j8.dec.txt");
- CryptoUtilJ8.getInstance().decrypt(sourceFile, targetFile.getAbsolutePath(), this.getPassword());
+ cryptoUtilJ8.decrypt(sourceFile, targetFile.getAbsolutePath(), this.getPassword());
}
/** Encrypt a PDF file
@@ -99,7 +101,7 @@ public class CryptoUtilJ8Test {
public void testPdfEncryption() throws Exception {
File sourceFile = new File(this.getTestDataDirectory(), "plain.pdf");
File targetFile = new File(this.getTempDataDirectory(), "plain.j8.enc.pdf");
- CryptoUtil.getInstance().encrypt(sourceFile, targetFile, this.getPassword());
+ cryptoUtilJ8.encrypt(sourceFile, targetFile, this.getPassword());
}
/** Decrypt a PDF file
@@ -111,9 +113,37 @@ public class CryptoUtilJ8Test {
testPdfEncryption();
File sourceFile = new File(this.getTempDataDirectory(), "plain.j8.enc.pdf");
File targetFile = new File(this.getTempDataDirectory(), "plain.j8.dec.pdf");
- CryptoUtil.getInstance().decrypt(sourceFile, targetFile, this.getPassword());
+ cryptoUtilJ8.decrypt(sourceFile, targetFile, this.getPassword());
+ }
+
+ /** Test encryption and decryption of Strings
+ *
+ * @throws Exception Generic exception
+ */
+ @Test
+ public void testStringEncryption() throws Exception {
+ char[] testVector = new char[513];
+
+ for (int i = 0; i < testVector.length; i++) {
+ testVector[i] = (char) i;
+ }
+
+ String source = new String(testVector);
+ String cipherText = cryptoUtilJ8.encryptString(source, this.getPassword());
+ String plainText = cryptoUtilJ8.decryptString(cipherText, this.getPassword());
+ assertEquals(source, plainText);
}
+ /** Test encryption and decryption of Strings
+ * @throws Exception Generic exception
+ */
+ @Test
+ public void testStringHandling() throws Exception {
+ String source = "Nobody knows the toubles I have seen ...";
+ String cipherText = cryptoUtilJ8.encryptString(source, this.getPassword());
+ String plainText = cryptoUtilJ8.decryptString(cipherText, this.getPassword());
+ assertEquals(source, plainText);
+ }
/** Test creating a password
* @throws Exception Generic exception
@@ -128,7 +158,34 @@ public class CryptoUtilJ8Test {
assertNotNull(result);
return;
}
+
+ /** Test encryption and decryption of binary data
+ * @throws Exception Generic exception
+ */
+ @Test
+ public void testBinaryHandling() throws Exception {
+ byte[] source = new byte[256];
+ byte[] result = null;
+ for (int i = 0; i < source.length; i++) {
+ source[i] = (byte) i;
+ }
+
+ ByteArrayOutputStream cipherText = new ByteArrayOutputStream();
+ ByteArrayOutputStream plainText = new ByteArrayOutputStream();
+
+ cryptoUtilJ8.encrypt(source, cipherText, this.getPassword());
+ cryptoUtilJ8.decrypt(cipherText, plainText, this.getPassword());
+
+ result = plainText.toByteArray();
+
+ for (int i = 0; i < source.length; i++) {
+ if (source[i] != result[i]) {
+ fail("Binary data are different at position " + i);
+ }
+ }
+ }
+
/** Test encryption and decryption of Strings
* @throws Exception Generic exception
*/
@@ -136,11 +193,11 @@ public class CryptoUtilJ8Test {
public void testStringWithPasswordEncryption() throws Exception {
char[] password = "57cb-4a23-d838-45222".toCharArray();
String source = "e02c-3b76-ff1e-5d9a1";
- String cipherText = CryptoUtilJ8.getInstance().encryptString(source, password);
+ String cipherText = cryptoUtilJ8.encryptString(source, password);
System.out.println(cipherText);// 128bit
assertEquals(128, cipherText.length());
- //CryptoStreamFactoryJ8Impl.setInstance(null);
- String plainText = CryptoUtilJ8.getInstance().decryptString(cipherText, password);
+ CryptoStreamFactoryJ8Impl.setInstance(null);
+ String plainText = cryptoUtilJ8.decryptString(cipherText, password);
assertEquals(source, plainText);
}
Modified: turbine/fulcrum/trunk/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/Main.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/Main.java?rev=1849416&r1=1849415&r2=1849416&view=diff
==============================================================================
--- turbine/fulcrum/trunk/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/Main.java (original)
+++ turbine/fulcrum/trunk/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/Main.java Thu Dec 20 16:34:05 2018
@@ -74,7 +74,7 @@ public class Main
public static void printHelp()
{
System.out.println("Main file [enc|dec] passwd source [target]");
- System.out.println("Main string [enc|dec] passwd ");
+ System.out.println("Main string [enc|dec] passwd source");
}
/**