You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2014/11/20 19:39:10 UTC

wicket git commit: WICKET-5768 Code review with Martin. "secret key" removed from AbstractCrypt, IMHO not the right place for it.

Repository: wicket
Updated Branches:
  refs/heads/WICKET-5768-improve-crypt 1ffc984ca -> 80bad259c


WICKET-5768 Code review with Martin. "secret key" removed from
AbstractCrypt, IMHO not the right place for it.

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/80bad259
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/80bad259
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/80bad259

Branch: refs/heads/WICKET-5768-improve-crypt
Commit: 80bad259cde060706beebd5e8408d219aac56f8d
Parents: 1ffc984
Author: Andrea Del Bene <ad...@apache.org>
Authored: Thu Nov 20 17:54:36 2014 +0100
Committer: Andrea Del Bene <ad...@apache.org>
Committed: Thu Nov 20 17:54:36 2014 +0100

----------------------------------------------------------------------
 .../crypt/AbstractKeyInSessionCryptFactory.java | 88 ++++++++++++++++++++
 .../AbstractKeyInSessionJceCryptFactory.java    | 88 --------------------
 .../crypt/KeyInSessionSunJceCryptFactory.java   |  2 +-
 .../apache/wicket/util/crypt/AbstractCrypt.java | 25 ------
 .../org/apache/wicket/util/crypt/NoCrypt.java   |  5 --
 .../apache/wicket/util/crypt/SunJceCrypt.java   | 23 +++--
 6 files changed, 107 insertions(+), 124 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/80bad259/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/AbstractKeyInSessionCryptFactory.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/AbstractKeyInSessionCryptFactory.java b/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/AbstractKeyInSessionCryptFactory.java
new file mode 100644
index 0000000..70d44e7
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/AbstractKeyInSessionCryptFactory.java
@@ -0,0 +1,88 @@
+/*
+ * 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.
+ */
+package org.apache.wicket.core.util.crypt;
+
+
+import java.io.Serializable;
+
+import org.apache.wicket.MetaDataKey;
+import org.apache.wicket.Session;
+import org.apache.wicket.util.crypt.ICrypt;
+
+/**
+ * Base class to implement crypt factories that store crypt into user session.
+ * Note that the use of this crypt factory will result in an immediate creation of a http session.
+ * 
+ * @author andrea del bene
+ *
+ * @param <T>
+ * 				the type for the secret key.
+ */
+public abstract class AbstractKeyInSessionCryptFactory<T extends Serializable>
+{
+	/** metadata-key used to store crypto-key in session metadata */
+	private static final MetaDataKey<Serializable> KEY = new MetaDataKey<Serializable>()
+	{
+		private static final long serialVersionUID = 1L;
+	};
+	
+	public AbstractKeyInSessionCryptFactory()
+	{
+		super();
+	}
+	
+	/**
+	 * Creates a new crypt for the current user session. If no user session is 
+	 * available, a new one is created.
+	 * 
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public ICrypt newCrypt()
+	{
+		Session session = Session.get();
+		session.bind();
+	
+		// retrieve or generate encryption key from session
+		Serializable key = session.getMetaData(KEY);
+		if (key == null)
+		{
+			// generate new key
+			key = generateKey(session);
+			session.setMetaData(KEY, key);
+		}
+	
+		// build the crypt based on session key
+		ICrypt crypt = createCrypt((T)key);
+		return crypt;
+	}
+
+	/**
+	 * Generates the secret key for a new crypt.
+	 * 
+	 * @param session
+	 * 				the current user session where crypt will be stored
+	 * @return
+	 * 				the secret key for a new crypt
+	 */
+	protected abstract T generateKey(Session session);	
+
+	/**
+	 * @return the {@link org.apache.wicket.util.crypt.ICrypt} to use
+	 */
+	protected abstract ICrypt createCrypt(T key);	
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/80bad259/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/AbstractKeyInSessionJceCryptFactory.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/AbstractKeyInSessionJceCryptFactory.java b/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/AbstractKeyInSessionJceCryptFactory.java
deleted file mode 100644
index 77ffa27..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/core/util/crypt/AbstractKeyInSessionJceCryptFactory.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * 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.
- */
-package org.apache.wicket.core.util.crypt;
-
-
-import java.io.Serializable;
-
-import org.apache.wicket.MetaDataKey;
-import org.apache.wicket.Session;
-import org.apache.wicket.util.crypt.ICrypt;
-
-/**
- * Base class to implement crypt factories that store crypt into user session.
- * Note that the use of this crypt factory will result in an immediate creation of a http session.
- * 
- * @author andrea del bene
- *
- * @param <T>
- * 				the type for the secret key.
- */
-public abstract class AbstractKeyInSessionJceCryptFactory<T extends Serializable>
-{
-	/** metadata-key used to store crypto-key in session metadata */
-	static final MetaDataKey<Serializable> KEY = new MetaDataKey<Serializable>()
-	{
-		private static final long serialVersionUID = 1L;
-	};
-	
-	public AbstractKeyInSessionJceCryptFactory()
-	{
-		super();
-	}
-	
-	/**
-	 * Creates a new crypt for the current user session. If no user session is 
-	 * available, a new one is created.
-	 * 
-	 * @return
-	 */
-	@SuppressWarnings("unchecked")
-	public ICrypt newCrypt()
-	{
-		Session session = Session.get();
-		session.bind();
-	
-		// retrieve or generate encryption key from session
-		Serializable key = session.getMetaData(KEY);
-		if (key == null)
-		{
-			// generate new key
-			key = generateKey(session);
-			session.setMetaData(KEY, key);
-		}
-	
-		// build the crypt based on session key
-		ICrypt crypt = createCrypt((T)key);
-		return crypt;
-	}
-
-	/**
-	 * Generates the secret key for a new crypt.
-	 * 
-	 * @param session
-	 * 				the current user session where crypt will be stored
-	 * @return
-	 * 				the secret key for a new crypt
-	 */
-	protected abstract T generateKey(Session session);	
-
-	/**
-	 * @return the {@link org.apache.wicket.util.crypt.ICrypt} to use
-	 */
-	protected abstract ICrypt createCrypt(T key);	
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/80bad259/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 9158edd..69de6de 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
@@ -33,7 +33,7 @@ import org.apache.wicket.util.lang.Args;
  *
  * @author igor.vaynberg
  */
-public class KeyInSessionSunJceCryptFactory extends AbstractKeyInSessionJceCryptFactory<String> implements ICryptFactory
+public class KeyInSessionSunJceCryptFactory extends AbstractKeyInSessionCryptFactory<String> implements ICryptFactory
 {	
 	final String cryptMethod;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/80bad259/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 5f68192..7e426c0 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
@@ -22,7 +22,6 @@ import java.security.GeneralSecurityException;
 
 import javax.crypto.Cipher;
 
-import org.apache.wicket.util.lang.Args;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,30 +39,6 @@ public abstract class AbstractCrypt<T extends Serializable> implements ICrypt
 	/** Log. */
 	private static final Logger log = LoggerFactory.getLogger(AbstractCrypt.class);
 
-	/** Key used to de-/encrypt the data */
-	private final T encryptionKey;
-	
-	/**
-	 * Constructor
-	 * 
-	 * @param encryptionKey
-	 * 				the encryption key to use
-	 */
-	public AbstractCrypt(final T encryptionKey)
-	{
-		this.encryptionKey = Args.notNull(encryptionKey, "encryptionKey");
-	}
-	
-	/**
-	 * Get encryption private key
-	 * 
-	 * @return encryption private key
-	 */
-	public T getKey()
-	{
-		return encryptionKey;
-	}
-
 	/**
 	 * Crypts the given byte array
 	 * 

http://git-wip-us.apache.org/repos/asf/wicket/blob/80bad259/wicket-util/src/main/java/org/apache/wicket/util/crypt/NoCrypt.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/crypt/NoCrypt.java b/wicket-util/src/main/java/org/apache/wicket/util/crypt/NoCrypt.java
index 7c14aa0..c9c9c8d 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/crypt/NoCrypt.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/crypt/NoCrypt.java
@@ -28,11 +28,6 @@ import java.security.GeneralSecurityException;
  */
 public class NoCrypt extends AbstractCrypt<String>
 {
-	public NoCrypt()
-	{
-		super("");
-	}
-
 	/**
 	 * Decrypts a string into a string.
 	 * 

http://git-wip-us.apache.org/repos/asf/wicket/blob/80bad259/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 941ffe9..8fa4385 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
@@ -58,6 +58,9 @@ public class SunJceCrypt extends AbstractCrypt<String>
 
 	/** The name of encryption method (cipher) */
 	private final String cryptMethod;
+	
+	/** Key used to de-/encrypt the data */
+	private final String encryptionPassword;	
 
 	/**
 	 * Constructor
@@ -80,12 +83,12 @@ public class SunJceCrypt extends AbstractCrypt<String>
 		this(cryptMethod, generateRandomKey());
 	}
 
-	public SunJceCrypt(String cryptMethod, String key)
+	public SunJceCrypt(String cryptMethod, String encryptionPassword)
 	{
-		super(key);
+		this.encryptionPassword = encryptionPassword;
 		this.cryptMethod = Args.notNull(cryptMethod, "Crypt method");
 		
-		checkChiperIsSupported(cryptMethod);
+		checkCipherIsSupported(cryptMethod);
 	}
 	
 	/**
@@ -94,7 +97,7 @@ public class SunJceCrypt extends AbstractCrypt<String>
 	 * @param cryptMethod
 	 * 				the name of encryption method (the cipher) 
 	 */
-	private void checkChiperIsSupported(String cryptMethod)
+	private void checkCipherIsSupported(String cryptMethod)
 	{
 		if (Security.getProviders("Cipher." + cryptMethod).length > 0)
 		{
@@ -192,8 +195,18 @@ public class SunJceCrypt extends AbstractCrypt<String>
 	 * 
 	 * @return the random string key
 	 */
-	protected static String generateRandomKey()
+	public static String generateRandomKey()
 	{
 		return UUID.randomUUID().toString();
 	}
+	
+	/**
+	 * Returns the secret key used by this Crypt
+	 * 
+	 * @return the secret key
+	 */
+	public String getKey()
+	{
+		return encryptionPassword;
+	}
 }