Author: werner
Date: Tue Oct 11 01:22:56 2005
New Revision: 312837
URL: http://svn.apache.org/viewcvs?rev=312837&view=rev
Log:
Some fixes and modifications for configurable JCE security
provider, setting of AES-128 as default symmetric encryption
algorithm.
Modified:
webservices/wss4j/trunk/src/org/apache/ws/security/WSConstants.java
webservices/wss4j/trunk/src/org/apache/ws/security/WSSConfig.java
webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandlerConstants.java
webservices/wss4j/trunk/src/org/apache/ws/security/message/WSEncryptBody.java
webservices/wss4j/trunk/src/org/apache/ws/security/processor/EncryptedKeyProcessor.java
webservices/wss4j/trunk/src/org/apache/ws/security/util/WSSecurityUtil.java
Modified: webservices/wss4j/trunk/src/org/apache/ws/security/WSConstants.java
URL:
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/WSConstants.java?rev=312837&r1=312836&r2=312837&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/org/apache/ws/security/WSConstants.java
(original)
+++ webservices/wss4j/trunk/src/org/apache/ws/security/WSConstants.java Tue Oct
11 01:22:56 2005
@@ -186,6 +186,9 @@
* method to use triple DES as the symmetric algorithm to encrypt data.
* <p/>
* This is a required method as defined by XML encryption.
+ * The String to use in WSDD file (in accordance to w3c specifications:
+ * <br/>
+ * http://www.w3.org/2001/04/xmlenc#tripledes-cbc
*/
public static final String TRIPLE_DES =
EncryptionConstants.ALGO_ID_BLOCKCIPHER_TRIPLEDES;
@@ -194,6 +197,9 @@
* method to use AES with 128 bit key as the symmetric algorithm to
encrypt data.
* <p/>
* This is a required method as defined by XML encryption.
+ * The String to use in WSDD file (in accordance to w3c specifications:
+ * <br/>
+ * http://www.w3.org/2001/04/xmlenc#aes128-cbc
*/
public static final String AES_128 =
EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128;
@@ -202,6 +208,9 @@
* method to use AES with 256 bit key as the symmetric algorithm to
encrypt data.
* <p/>
* This is a required method as defined by XML encryption.
+ * The String to use in WSDD file (in accordance to w3c specifications:
+ * <br/>
+ * http://www.w3.org/2001/04/xmlenc#aes256-cbc
*/
public static final String AES_256 =
EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES256;
@@ -210,6 +219,9 @@
* method to use AES with 192 bit key as the symmetric algorithm to
encrypt data.
* <p/>
* This is a optional method as defined by XML encryption.
+ * The String to use in WSDD file (in accordance to w3c specifications:
+ * <br/>
+ * http://www.w3.org/2001/04/xmlenc#aes192-cbc
*/
public static final String AES_192 =
EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES192;
Modified: webservices/wss4j/trunk/src/org/apache/ws/security/WSSConfig.java
URL:
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/WSSConfig.java?rev=312837&r1=312836&r2=312837&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/org/apache/ws/security/WSSConfig.java (original)
+++ webservices/wss4j/trunk/src/org/apache/ws/security/WSSConfig.java Tue Oct
11 01:22:56 2005
@@ -70,8 +70,9 @@
protected WSSConfig() {
org.apache.xml.security.Init.init();
- addJceProvider("BC",
"org.bouncycastle.jce.provider.BouncyCastleProvider");
- setJceProviderId("BC");
+ if (addJceProvider("BC",
"org.bouncycastle.jce.provider.BouncyCastleProvider")) {
+ setJceProviderId("BC");
+ }
Transform.init();
try {
Transform.register(STRTransform.implementedTransformURI,
@@ -245,46 +246,51 @@
}
- public boolean addJceProvider(String id, String className) {
- /*
- * Check if provider already exists, if not add it, otherwise
- * not (don't allow overwrite to protect standard providers).
- *
- * After adding to hashmap, load the class and register with
- * standard security provider.
- */
- if (jceProvider.get(id) == null) {
- jceProvider.put(id, className);
- return loadProvider(id, className);
- }
- return false;
- }
+ /**
+ * Add a new JCE security provider to use for WSS4J.
+ *
+ * If the provider is not already known the method loads a security
provider
+ * class and adds the provider to the java security service.
+ *
+ *
+ * @param id
+ * The id string of the provider
+ * @param className
+ * Name of the class the implements the provider. This class
+ * must be a subclass of <code>java.security.Provider</code>
+ *
+ * @return Returns <code>true</code> if the provider was successfully
+ * added, <code>false</code> otherwise.
+ */
+ public boolean addJceProvider(String id, String className) {
+ if (jceProvider.get(id) == null && loadProvider(id, className))
{
+ jceProvider.put(id, className);
+ return true;
+ }
+ return false;
+ }
/**
- * Sets the JCE provider to use in all following security operations.
- *
- * The method checks if the provider is known. If yes it sets
- * the provider id and returns true. Otherwise the provider id
- * remains unchanged and the method returns false.
- *
- * @param id is the JCE provider's id
- * @return <code>true</code> if set, <code>false</code> otherwise
- * @see addJceProvider
- */
- public boolean setJceProviderId(String id) {
- /*
- * Check if provider exists, if yes just set id and
- * return, otherwsie do nothing and return false
- * (or shall we use exceptions here - which are more
- * expensive).
- */
- if (jceProvider.get(id) != null) {
- jceProviderId = id;
- JCEMapper.setProviderId(id);
- return true;
- }
- return false;
- }
+ * Sets the JCE provider to use in all following security operations.
+ *
+ * The method checks if the provider is known. If yes it sets the
provider
+ * id and returns true. Otherwise the provider id remains unchanged and
the
+ * method returns false.
+ *
+ * @param id
+ * is the JCE provider's id
+ * @return Returns <code>true</code> if set, <code>false</code>
+ * otherwise
+ * @see addJceProvider
+ */
+ public boolean setJceProviderId(String id) {
+ if (jceProvider.get(id) != null) {
+ jceProviderId = id;
+ JCEMapper.setProviderId(id);
+ return true;
+ }
+ return false;
+ }
public String getJceProviderId() {
return jceProviderId;
Modified:
webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandlerConstants.java
URL:
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandlerConstants.java?rev=312837&r1=312836&r2=312837&view=diff
==============================================================================
---
webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandlerConstants.java
(original)
+++
webservices/wss4j/trunk/src/org/apache/ws/security/handler/WSHandlerConstants.java
Tue Oct 11 01:22:56 2005
@@ -568,7 +568,7 @@
* <p/>
* The application may set this parameter using the following method:
* <pre>
- * call.setProperty(WSDoAllConstants.ENC_SYM_ALGO, "AES256");
+ * call.setProperty(WSDoAllConstants.ENC_SYM_ALGO, WSConstants.AES_256);
* </pre>
* However, the parameter in the WSDD deployment file overwrites the
* property setting (deployment setting overwrites application setting).
Modified:
webservices/wss4j/trunk/src/org/apache/ws/security/message/WSEncryptBody.java
URL:
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/message/WSEncryptBody.java?rev=312837&r1=312836&r2=312837&view=diff
==============================================================================
---
webservices/wss4j/trunk/src/org/apache/ws/security/message/WSEncryptBody.java
(original)
+++
webservices/wss4j/trunk/src/org/apache/ws/security/message/WSEncryptBody.java
Tue Oct 11 01:22:56 2005
@@ -46,6 +46,7 @@
import javax.crypto.SecretKey;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
import java.security.cert.X509Certificate;
import java.util.Vector;
@@ -61,7 +62,7 @@
private static Log log = LogFactory.getLog(WSEncryptBody.class.getName());
private static Log tlog = LogFactory.getLog("org.apache.ws.security.TIME");
- protected String symEncAlgo = WSConstants.TRIPLE_DES;
+ protected String symEncAlgo = WSConstants.AES_128;
protected String keyEncAlgo = WSConstants.KEYTRANSPORT_RSA15;
protected String encCanonAlgo = null;
protected byte[] embeddedKey = null;
@@ -603,33 +604,51 @@
}
private KeyGenerator getKeyGenerator() throws WSSecurityException {
- KeyGenerator keyGen = null;
- try {
- if (symEncAlgo.equalsIgnoreCase(WSConstants.TRIPLE_DES)) {
- keyGen = KeyGenerator.getInstance("DESede");
- } else if (symEncAlgo.equalsIgnoreCase(WSConstants.AES_128)) {
- keyGen = KeyGenerator.getInstance("2.16.840.1.101.3.4.1.2");
- } else if (symEncAlgo.equalsIgnoreCase(WSConstants.AES_192)) {
- keyGen = KeyGenerator.getInstance("2.16.840.1.101.3.4.1.22");
- } else if (symEncAlgo.equalsIgnoreCase(WSConstants.AES_256)) {
- keyGen = KeyGenerator.getInstance("2.16.840.1.101.3.4.1.42");
- } else {
- return null;
- }
- } catch (NoSuchAlgorithmException e) {
- throw new
WSSecurityException(WSSecurityException.UNSUPPORTED_ALGORITHM, null, null, e);
- }
- return keyGen;
- }
-
- /**
- * Create DOM subtree for <code>xenc:EncryptedKey</code>
- *
- * @param doc the SOAP enevelope parent document
- * @param keyTransportAlgo specifies which alogrithm to use to encrypt the
- * symmetric key
- * @return an <code>xenc:EncryptedKey</code> element
- */
+ KeyGenerator keyGen = null;
+ String id = wssConfig.getJceProviderId();
+ try {
+ /*
+ * Assume AES as default, so initialize it
+ */
+ if (id == null) {
+ keyGen = KeyGenerator.getInstance("AES");
+ } else {
+ keyGen = KeyGenerator.getInstance("AES", id);
+ }
+ if
(symEncAlgo.equalsIgnoreCase(WSConstants.TRIPLE_DES)) {
+ if (id == null) {
+ keyGen =
KeyGenerator.getInstance("DESede");
+ } else {
+ keyGen =
KeyGenerator.getInstance("DESede", id);
+ }
+ } else if
(symEncAlgo.equalsIgnoreCase(WSConstants.AES_128)) {
+ keyGen.init(128);
+ } else if
(symEncAlgo.equalsIgnoreCase(WSConstants.AES_192)) {
+ keyGen.init(192);
+ } else if
(symEncAlgo.equalsIgnoreCase(WSConstants.AES_256)) {
+ keyGen.init(256);
+ } else {
+ return null;
+ }
+ } catch (NoSuchAlgorithmException e) {
+ throw new WSSecurityException(
+
WSSecurityException.UNSUPPORTED_ALGORITHM, null, null, e);
+ } catch (NoSuchProviderException e) {
+ throw new WSSecurityException(
+
WSSecurityException.UNSUPPORTED_ALGORITHM, null, null, e);
+ }
+ return keyGen;
+ }
+
+ /**
+ * Create DOM subtree for <code>xenc:EncryptedKey</code>
+ *
+ * @param doc
+ * the SOAP enevelope parent document
+ * @param keyTransportAlgo
+ * specifies which alogrithm to use to encrypt the symmetric
key
+ * @return an <code>xenc:EncryptedKey</code> element
+ */
public static Element createEnrcyptedKey(Document doc,
String keyTransportAlgo) {
Element encryptedKey =
Modified:
webservices/wss4j/trunk/src/org/apache/ws/security/processor/EncryptedKeyProcessor.java
URL:
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/processor/EncryptedKeyProcessor.java?rev=312837&r1=312836&r2=312837&view=diff
==============================================================================
---
webservices/wss4j/trunk/src/org/apache/ws/security/processor/EncryptedKeyProcessor.java
(original)
+++
webservices/wss4j/trunk/src/org/apache/ws/security/processor/EncryptedKeyProcessor.java
Tue Oct 11 01:22:56 2005
@@ -264,7 +264,6 @@
try {
privateKey = crypto.getPrivateKey(alias, password);
- System.out.println("Private Key class: " +
privateKey.getClass().getName());
} catch (Exception e) {
throw new
WSSecurityException(WSSecurityException.FAILED_ENC_DEC, null, null, e);
}
Modified:
webservices/wss4j/trunk/src/org/apache/ws/security/util/WSSecurityUtil.java
URL:
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/util/WSSecurityUtil.java?rev=312837&r1=312836&r2=312837&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/org/apache/ws/security/util/WSSecurityUtil.java
(original)
+++ webservices/wss4j/trunk/src/org/apache/ws/security/util/WSSecurityUtil.java
Tue Oct 11 01:22:56 2005
@@ -44,7 +44,6 @@
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.util.Vector;
@@ -635,44 +634,56 @@
}
public static Cipher getCipherInstance(String cipherAlgo, String jceId)
- throws WSSecurityException {
- Cipher cipher = null;
- try {
- if (cipherAlgo.equalsIgnoreCase(WSConstants.KEYTRANSPORT_RSA15)) {
- cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING", jceId);
- } else if (
-
cipherAlgo.equalsIgnoreCase(WSConstants.KEYTRANSPORT_RSAOEP)) {
- cipher = Cipher.getInstance("RSA/NONE/OAEPPADDING", jceId);
- } else {
- throw new
WSSecurityException(WSSecurityException.UNSUPPORTED_ALGORITHM,
- "unsupportedKeyTransp",
- new Object[]{cipherAlgo});
- }
- } catch (NoSuchPaddingException ex) {
- throw new
WSSecurityException(WSSecurityException.UNSUPPORTED_ALGORITHM,
- "unsupportedKeyTransp",
- new Object[]{"No such padding: " + cipherAlgo});
- } catch (NoSuchProviderException ex) {
- throw new
WSSecurityException(WSSecurityException.UNSUPPORTED_ALGORITHM,
- "unsupportedKeyTransp",
- new Object[]{"no provider: " + cipherAlgo});
- } catch (NoSuchAlgorithmException ex) {
- throw new
WSSecurityException(WSSecurityException.UNSUPPORTED_ALGORITHM,
- "unsupportedKeyTransp",
- new Object[]{"No such algorithm: " + cipherAlgo});
- }
- return cipher;
- }
-
- /**
- * Fetch the result of a given action from a given result vector
- * <p/>
- *
- * @param wsResultVector The result vector to fetch an action from
- * @param action The action to fetch
- * @return The result fetched from the result vector, null if the result
- * could not be found
- */
+ throws WSSecurityException {
+ Cipher cipher = null;
+ try {
+ if
(cipherAlgo.equalsIgnoreCase(WSConstants.KEYTRANSPORT_RSA15)) {
+ if (jceId == null) {
+ cipher =
Cipher.getInstance("RSA/ECB/PKCS1PADDING");
+ } else {
+ cipher =
Cipher.getInstance("RSA/ECB/PKCS1PADDING", jceId);
+ }
+ } else if (cipherAlgo
+
.equalsIgnoreCase(WSConstants.KEYTRANSPORT_RSAOEP)) {
+ if (jceId == null) {
+ cipher =
Cipher.getInstance("RSA/NONE/OAEPPADDING");
+ } else {
+ cipher =
Cipher.getInstance("RSA/NONE/OAEPPADDING", jceId);
+ }
+ } else {
+ throw new WSSecurityException(
+
WSSecurityException.UNSUPPORTED_ALGORITHM,
+ "unsupportedKeyTransp", new
Object[] { cipherAlgo });
+ }
+ } catch (NoSuchPaddingException ex) {
+ throw new WSSecurityException(
+
WSSecurityException.UNSUPPORTED_ALGORITHM,
+ "unsupportedKeyTransp", new Object[] {
"No such padding: "
+ + cipherAlgo });
+ } catch (NoSuchProviderException ex) {
+ throw new WSSecurityException(
+
WSSecurityException.UNSUPPORTED_ALGORITHM,
+ "unsupportedKeyTransp", new Object[] {
"no provider: "
+ + cipherAlgo });
+ } catch (NoSuchAlgorithmException ex) {
+ throw new WSSecurityException(
+
WSSecurityException.UNSUPPORTED_ALGORITHM,
+ "unsupportedKeyTransp",
+ new Object[] { "No such algorithm: " +
cipherAlgo });
+ }
+ return cipher;
+ }
+
+ /**
+ * Fetch the result of a given action from a given result vector <p/>
+ *
+ * @param wsResultVector
+ * The result vector to fetch an action from
+ * @param action
+ * The action to fetch
+ * @return The result fetched from the result vector, null if the result
+ * could not be found
+ */
public static WSSecurityEngineResult fetchActionResult(Vector
wsResultVector, int action) {
WSSecurityEngineResult wsResult = null;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]