You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/11/11 10:48:31 UTC
wicket git commit: WICKET-5756 Allow to use custom ciphers when using
SunJceCrypt class
Repository: wicket
Updated Branches:
refs/heads/5756-improve-crypt [created] 776c42dc0
WICKET-5756 Allow to use custom ciphers when using SunJceCrypt class
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/776c42dc
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/776c42dc
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/776c42dc
Branch: refs/heads/5756-improve-crypt
Commit: 776c42dc06ed40c1356859f3c4a81eaafdc4649b
Parents: e850af6
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Nov 11 11:47:56 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Nov 11 11:47:56 2014 +0200
----------------------------------------------------------------------
.../crypt/KeyInSessionSunJceCryptFactory.java | 2 +-
.../wicket/settings/def/SecuritySettings.java | 17 ++-----
.../apache/wicket/util/crypt/AbstractCrypt.java | 8 +--
.../wicket/util/crypt/ClassCryptFactory.java | 15 +++---
.../crypt/CryptFactoryCachingDecorator.java | 10 ++--
.../wicket/util/crypt/NoCryptFactory.java | 10 +---
.../apache/wicket/util/crypt/SunJceCrypt.java | 53 +++++++++++++++++---
.../apache/wicket/util/crypt/TrivialCrypt.java | 11 ----
8 files changed, 64 insertions(+), 62 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/776c42dc/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/KeyInSessionSunJceCryptFactory.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/KeyInSessionSunJceCryptFactory.java b/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/KeyInSessionSunJceCryptFactory.java
index d3b137b..b6d25be 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/KeyInSessionSunJceCryptFactory.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/KeyInSessionSunJceCryptFactory.java
@@ -36,7 +36,7 @@ import org.apache.wicket.util.crypt.SunJceCrypt;
public class KeyInSessionSunJceCryptFactory implements ICryptFactory
{
/** metadata-key used to store crypto-key in session metadata */
- private static MetaDataKey<String> KEY = new MetaDataKey<String>()
+ private static final MetaDataKey<String> KEY = new MetaDataKey<String>()
{
private static final long serialVersionUID = 1L;
};
http://git-wip-us.apache.org/repos/asf/wicket/blob/776c42dc/wicket-core/src/main/java/org/apache/wicket/settings/def/SecuritySettings.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/settings/def/SecuritySettings.java b/wicket-core/src/main/java/org/apache/wicket/settings/def/SecuritySettings.java
index 3b7f8ad..5e4aa10 100644
--- a/wicket-core/src/main/java/org/apache/wicket/settings/def/SecuritySettings.java
+++ b/wicket-core/src/main/java/org/apache/wicket/settings/def/SecuritySettings.java
@@ -25,6 +25,7 @@ import org.apache.wicket.authorization.UnauthorizedInstantiationException;
import org.apache.wicket.settings.ISecuritySettings;
import org.apache.wicket.util.crypt.CachingSunJceCryptFactory;
import org.apache.wicket.util.crypt.ICryptFactory;
+import org.apache.wicket.util.lang.Args;
/**
* @author Jonathan Locke
@@ -80,9 +81,6 @@ public class SecuritySettings implements ISecuritySettings
return authorizationStrategy;
}
- /**
- * @see org.apache.wicket.settings.ISecuritySettings#getCryptFactory()
- */
@Override
public synchronized ICryptFactory getCryptFactory()
{
@@ -117,23 +115,14 @@ public class SecuritySettings implements ISecuritySettings
@Override
public void setAuthorizationStrategy(IAuthorizationStrategy strategy)
{
- if (strategy == null)
- {
- throw new IllegalArgumentException("authorization strategy cannot be set to null");
- }
+ Args.notNull(strategy, "authorization strategy");
authorizationStrategy = strategy;
}
- /**
- * @see org.apache.wicket.settings.ISecuritySettings#setCryptFactory(org.apache.wicket.util.crypt.ICryptFactory)
- */
@Override
public void setCryptFactory(ICryptFactory cryptFactory)
{
- if (cryptFactory == null)
- {
- throw new IllegalArgumentException("cryptFactory cannot be null");
- }
+ Args.notNull(cryptFactory, "Crypt factory");
this.cryptFactory = cryptFactory;
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/776c42dc/wicket-util/src/main/java/org/apache/wicket/util/crypt/AbstractCrypt.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/crypt/AbstractCrypt.java b/wicket-util/src/main/java/org/apache/wicket/util/crypt/AbstractCrypt.java
index 4d2c7e2..e28db30 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/crypt/AbstractCrypt.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/crypt/AbstractCrypt.java
@@ -86,7 +86,9 @@ public abstract class AbstractCrypt implements ICrypt
try
{
byte[] encrypted = encryptStringToByteArray(plainText);
- return new String(new Base64(-1, null, true).encode(encrypted), CHARACTER_ENCODING);
+ Base64 base64 = new Base64(-1, null, true);
+ byte[] encoded = base64.encode(encrypted);
+ return new String(encoded, CHARACTER_ENCODING);
}
catch (GeneralSecurityException e)
{
@@ -142,7 +144,7 @@ public abstract class AbstractCrypt implements ICrypt
* byte array to decrypt
* @return the decrypted text
*/
- private final byte[] decryptByteArray(final byte[] encrypted)
+ private byte[] decryptByteArray(final byte[] encrypted)
{
try
{
@@ -163,7 +165,7 @@ public abstract class AbstractCrypt implements ICrypt
* @return the string encrypted
* @throws GeneralSecurityException
*/
- private final byte[] encryptStringToByteArray(final String plainText)
+ private byte[] encryptStringToByteArray(final String plainText)
throws GeneralSecurityException
{
try
http://git-wip-us.apache.org/repos/asf/wicket/blob/776c42dc/wicket-util/src/main/java/org/apache/wicket/util/crypt/ClassCryptFactory.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/crypt/ClassCryptFactory.java b/wicket-util/src/main/java/org/apache/wicket/util/crypt/ClassCryptFactory.java
index a144ecc..b2e260c 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/crypt/ClassCryptFactory.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/crypt/ClassCryptFactory.java
@@ -57,30 +57,27 @@ public class ClassCryptFactory implements ICryptFactory
this.encryptionKey = encryptionKey;
}
- /**
- * @see org.apache.wicket.util.crypt.ICryptFactory#newCrypt()
- */
@Override
public ICrypt newCrypt()
{
try
{
ICrypt crypt = (ICrypt)(cryptClass.get()).newInstance();
- log.info("using encryption/decryption object " + crypt);
+ log.info("using encryption/decryption object {}", crypt);
crypt.setKey(encryptionKey);
return crypt;
}
catch (Exception e)
{
log.warn("************************** WARNING **************************");
- log.warn("As the instantion of encryption/decryption class:");
+ log.warn("As the instantiation of encryption/decryption class:");
log.warn("\t" + cryptClass);
log.warn("failed, Wicket will fallback on a dummy implementation");
log.warn("\t(" + NoCrypt.class.getName() + ")");
- log.warn("This is not recommended for production systems.");
+ log.warn("This is NOT recommended for production systems.");
log.warn("Please override method org.apache.wicket.Application.newCrypt()");
- log.warn("to provide a custom encryption/decryption implementation");
- log.warn("The cause of the instantion failure: ");
+ log.warn("to provide a custom encryption/decryption implementation.");
+ log.warn("The cause of the instantiation failure: ");
log.warn("\t" + e.getMessage());
if (log.isDebugEnabled())
{
@@ -88,7 +85,7 @@ public class ClassCryptFactory implements ICryptFactory
}
else
{
- log.warn("set log level to DEBUG to display the stack trace.");
+ log.warn("Set log level to DEBUG to display the stack trace.");
}
log.warn("*************************************************************");
http://git-wip-us.apache.org/repos/asf/wicket/blob/776c42dc/wicket-util/src/main/java/org/apache/wicket/util/crypt/CryptFactoryCachingDecorator.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/crypt/CryptFactoryCachingDecorator.java b/wicket-util/src/main/java/org/apache/wicket/util/crypt/CryptFactoryCachingDecorator.java
index 3a8be90..9fc7142 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/crypt/CryptFactoryCachingDecorator.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/crypt/CryptFactoryCachingDecorator.java
@@ -17,6 +17,8 @@
package org.apache.wicket.util.crypt;
+import org.apache.wicket.util.lang.Args;
+
/**
* {@link ICryptFactory} decorator that caches the call to {@link ICryptFactory#newCrypt()}
*
@@ -35,16 +37,10 @@ public class CryptFactoryCachingDecorator implements ICryptFactory
*/
public CryptFactoryCachingDecorator(final ICryptFactory delegate)
{
- if (delegate == null)
- {
- throw new IllegalArgumentException("delegate cannot be null");
- }
+ Args.notNull(delegate, "delegate");
this.delegate = delegate;
}
- /**
- * @see org.apache.wicket.util.crypt.ICryptFactory#newCrypt()
- */
@Override
public final ICrypt newCrypt()
{
http://git-wip-us.apache.org/repos/asf/wicket/blob/776c42dc/wicket-util/src/main/java/org/apache/wicket/util/crypt/NoCryptFactory.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/crypt/NoCryptFactory.java b/wicket-util/src/main/java/org/apache/wicket/util/crypt/NoCryptFactory.java
index a7baba5..f33efce 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/crypt/NoCryptFactory.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/crypt/NoCryptFactory.java
@@ -26,18 +26,10 @@ public class NoCryptFactory implements ICryptFactory
{
private static final ICrypt crypt = new NoCrypt();
- /**
- * Construct.
- */
- public NoCryptFactory()
- {
-
- }
-
@Override
public ICrypt newCrypt()
{
return crypt;
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/776c42dc/wicket-util/src/main/java/org/apache/wicket/util/crypt/SunJceCrypt.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/crypt/SunJceCrypt.java b/wicket-util/src/main/java/org/apache/wicket/util/crypt/SunJceCrypt.java
index 2af21f4..45642fb 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/crypt/SunJceCrypt.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/crypt/SunJceCrypt.java
@@ -20,7 +20,9 @@ import java.security.GeneralSecurityException;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.Security;
+import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.InvalidKeySpecException;
+import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
@@ -28,6 +30,8 @@ import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
+import org.apache.wicket.util.lang.Args;
+
/**
* Provide some simple means to encrypt and decrypt strings such as passwords. The whole
@@ -44,19 +48,35 @@ public class SunJceCrypt extends AbstractCrypt
*/
private final static int COUNT = 17;
- /** Name of encryption method */
+ /** Name of the default encryption method */
private static final String CRYPT_METHOD = "PBEWithMD5AndDES";
/** Salt */
private final static byte[] salt = { (byte)0x15, (byte)0x8c, (byte)0xa3, (byte)0x4a,
(byte)0x66, (byte)0x51, (byte)0x2a, (byte)0xbc };
+ /** Name of encryption method */
+ private final String cryptMethod;
+
/**
* Constructor
*/
public SunJceCrypt()
{
- if (Security.getProviders("Cipher." + CRYPT_METHOD).length > 0)
+ this(CRYPT_METHOD);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param cryptMethod
+ * the name of encryption method
+ */
+ public SunJceCrypt(String cryptMethod)
+ {
+ this.cryptMethod = Args.notNull(cryptMethod, "Crypt method");
+
+ if (Security.getProviders("Cipher." + cryptMethod).length > 0)
{
return; // we are good to go!
}
@@ -77,7 +97,7 @@ public class SunJceCrypt extends AbstractCrypt
* Crypts the given byte array
*
* @param input
- * byte array to be crypted
+ * byte array to be encrypted
* @param mode
* crypt mode
* @return the input crypted. Null in case of an error
@@ -88,8 +108,8 @@ public class SunJceCrypt extends AbstractCrypt
throws GeneralSecurityException
{
SecretKey key = generateSecretKey();
- PBEParameterSpec spec = new PBEParameterSpec(salt, COUNT);
- Cipher ciph = Cipher.getInstance(CRYPT_METHOD);
+ AlgorithmParameterSpec spec = createParameterSpec();
+ Cipher ciph = Cipher.getInstance(cryptMethod);
ciph.init(mode, key, spec);
return ciph.doFinal(input);
}
@@ -106,10 +126,27 @@ public class SunJceCrypt extends AbstractCrypt
* @throws InvalidKeySpecException
* invalid encryption key
*/
- private final SecretKey generateSecretKey() throws NoSuchAlgorithmException,
+ private SecretKey generateSecretKey() throws NoSuchAlgorithmException,
InvalidKeySpecException
{
- final PBEKeySpec spec = new PBEKeySpec(getKey().toCharArray());
- return SecretKeyFactory.getInstance(CRYPT_METHOD).generateSecret(spec);
+ SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(cryptMethod);
+ KeySpec spec = createKeySpec();
+ return keyFactory.generateSecret(spec);
+ }
+
+ /**
+ * @return the parameter spec to be used for the configured crypt method
+ */
+ protected AlgorithmParameterSpec createParameterSpec()
+ {
+ return new PBEParameterSpec(salt, COUNT);
+ }
+
+ /**
+ * @return the key spec to be used for the configured crypt method
+ */
+ protected KeySpec createKeySpec()
+ {
+ return new PBEKeySpec(getKey().toCharArray());
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/776c42dc/wicket-util/src/main/java/org/apache/wicket/util/crypt/TrivialCrypt.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/crypt/TrivialCrypt.java b/wicket-util/src/main/java/org/apache/wicket/util/crypt/TrivialCrypt.java
index 300fb7c..5aab8e7 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/crypt/TrivialCrypt.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/crypt/TrivialCrypt.java
@@ -25,17 +25,6 @@ import java.security.GeneralSecurityException;
*/
public class TrivialCrypt extends AbstractCrypt
{
- /**
- * Constructor
- */
- public TrivialCrypt()
- {
- super();
- }
-
- /**
- * @see org.apache.wicket.util.crypt.AbstractCrypt#crypt(byte[], int)
- */
@Override
protected byte[] crypt(final byte[] input, final int mode) throws GeneralSecurityException
{