Author: werner
Date: Mon Oct 10 08:46:54 2005
New Revision: 312670

URL: http://svn.apache.org/viewcvs?rev=312670&view=rev
Log:
Introduce functions and modifications to be able to

configure the JCE security provider.

Modified:
    webservices/wss4j/trunk/src/org/apache/ws/security/WSSConfig.java
    webservices/wss4j/trunk/src/org/apache/ws/security/WSSecurityEngine.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/processor/Processor.java
    
webservices/wss4j/trunk/src/org/apache/ws/security/processor/ReferenceListProcessor.java
    
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SAMLTokenProcessor.java
    
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SignatureConfirmationProcessor.java
    
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SignatureProcessor.java
    
webservices/wss4j/trunk/src/org/apache/ws/security/processor/TimestampProcessor.java
    
webservices/wss4j/trunk/src/org/apache/ws/security/processor/UsernameTokenProcessor.java
    webservices/wss4j/trunk/src/org/apache/ws/security/util/WSSecurityUtil.java

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=312670&r1=312669&r2=312670&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/org/apache/ws/security/WSSConfig.java (original)
+++ webservices/wss4j/trunk/src/org/apache/ws/security/WSSConfig.java Mon Oct 
10 08:46:54 2005
@@ -24,6 +24,9 @@
 import org.apache.ws.security.action.Action;
 import org.apache.ws.security.processor.Processor;
 import org.apache.xml.security.transforms.Transform;
+import org.apache.xml.security.algorithms.JCEMapper;
+
+import java.util.HashMap;
 
 import javax.xml.namespace.QName;
 
@@ -58,23 +61,17 @@
     protected boolean precisionInMilliSeconds = true;
 
     protected boolean enableSignatureConfirmation = true;
+    
+    protected HashMap jceProvider = new HashMap(10);
+    protected String jceProviderId = null;
+    
+    
+    
 
     protected WSSConfig() {
         org.apache.xml.security.Init.init();
-        try {
-            Class c = Loader
-                    
.loadClass("org.bouncycastle.jce.provider.BouncyCastleProvider");
-            String Id = "BC";
-            if (java.security.Security.getProvider(Id) == null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("The provider " + Id
-                            + " had to be added to the 
java.security.Security");
-                }
-                java.security.Security.addProvider((java.security.Provider) c
-                        .newInstance());
-            }
-        } catch (Throwable t) {
-        }
+        addJceProvider("BC", 
"org.bouncycastle.jce.provider.BouncyCastleProvider");
+        setJceProviderId("BC");
         Transform.init();
         try {
             Transform.register(STRTransform.implementedTransformURI,
@@ -227,5 +224,69 @@
             }
         }
         return null;
+    }
+    
+    private boolean loadProvider(String id, String className) {
+        try {
+            Class c = Loader
+                    .loadClass(className);
+            if (java.security.Security.getProvider(id) == null) {
+                if (log.isDebugEnabled()) {
+                    log.debug("The provider " + id
+                            + " had to be added to the 
java.security.Security");
+                }
+                java.security.Security.addProvider((java.security.Provider) c
+                        .newInstance());
+            }
+            return true;
+        } catch (Throwable t) {
+               return false;
+        }
+       
+    }
+    
+    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;
+    }
+    
+    /**
+     * 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;
+    }
+    
+    public String getJceProviderId() {
+       return jceProviderId;
     }
 }

Modified: 
webservices/wss4j/trunk/src/org/apache/ws/security/WSSecurityEngine.java
URL: 
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/WSSecurityEngine.java?rev=312670&r1=312669&r2=312670&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/org/apache/ws/security/WSSecurityEngine.java 
(original)
+++ webservices/wss4j/trunk/src/org/apache/ws/security/WSSecurityEngine.java 
Mon Oct 10 08:46:54 2005
@@ -249,7 +249,7 @@
             QName el = new QName(elem.getNamespaceURI(), elem.getLocalName());
             Processor p = wssConfig.getProcessor(el);
             if (p != null) {
-                p.handleToken((Element) elem, sigCrypto, decCrypto, cb, 
wsDocInfo, returnResults);
+                p.handleToken((Element) elem, sigCrypto, decCrypto, cb, 
wsDocInfo, returnResults, wssConfig);
             } else {
                 /*
                 * Add check for a BinarySecurityToken, add info to WSDocInfo. 
If BST is

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=312670&r1=312669&r2=312670&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 
Mon Oct 10 08:46:54 2005
@@ -322,7 +322,7 @@
         if (tlog.isDebugEnabled()) {
             t2 = System.currentTimeMillis();
         }
-        Cipher cipher = WSSecurityUtil.getCipherInstance(keyEncAlgo);
+        Cipher cipher = WSSecurityUtil.getCipherInstance(keyEncAlgo, 
wssConfig.getJceProviderId());
         try {
             cipher.init(Cipher.ENCRYPT_MODE, remoteCert);
         } catch (InvalidKeyException e) {

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=312670&r1=312669&r2=312670&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
 Mon Oct 10 08:46:54 2005
@@ -20,6 +20,7 @@
 import org.apache.commons.logging.LogFactory;

 import org.apache.ws.security.WSConstants;

 import org.apache.ws.security.WSDocInfo;

+import org.apache.ws.security.WSSConfig;

 import org.apache.ws.security.WSPasswordCallback;

 import org.apache.ws.security.WSSecurityEngine;

 import org.apache.ws.security.WSSecurityEngineResult;

@@ -56,11 +57,13 @@
             LogFactory.getLog("org.apache.ws.security.TIME");

 

     byte[] decryptedBytes = null;

+    WSSConfig wssConfig = null;

 

-    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults) throws 
WSSecurityException {

+    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults, WSSConfig wsc) 
throws WSSecurityException {

         if (log.isDebugEnabled()) {

             log.debug("Found encrypted key element");

         }

+        wssConfig = wsc;

         if (decCrypto == null) {

             throw new WSSecurityException(WSSecurityException.FAILURE,

                     "noDecCryptoFile");

@@ -107,7 +110,7 @@
             throw new WSSecurityException

                     (WSSecurityException.UNSUPPORTED_ALGORITHM, "noEncAlgo");

         }

-        Cipher cipher = WSSecurityUtil.getCipherInstance(keyEncAlgo);

+        Cipher cipher = WSSecurityUtil.getCipherInstance(keyEncAlgo, 
wssConfig.getJceProviderId());

         /*

          * Well, we can decrypt the session (symmetric) key. Now lookup 
CipherValue, this is the value of the

          * encrypted session key (session key usually is a symmetrical key 
that encrypts

@@ -261,6 +264,7 @@
 

             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/processor/Processor.java
URL: 
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/processor/Processor.java?rev=312670&r1=312669&r2=312670&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/org/apache/ws/security/processor/Processor.java 
(original)
+++ webservices/wss4j/trunk/src/org/apache/ws/security/processor/Processor.java 
Mon Oct 10 08:46:54 2005
@@ -18,6 +18,7 @@
 package org.apache.ws.security.processor;

 

 import org.apache.ws.security.WSDocInfo;

+import org.apache.ws.security.WSSConfig;

 import org.apache.ws.security.WSSecurityException;

 import org.apache.ws.security.components.crypto.Crypto;

 import org.w3c.dom.Element;

@@ -26,5 +27,7 @@
 import java.util.Vector;

 

 public interface Processor {

-    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults) throws 
WSSecurityException;

+       public void handleToken(Element elem, Crypto crypto, Crypto decCrypto,

+                       CallbackHandler cb, WSDocInfo wsDocInfo, Vector 
returnResults,

+                       WSSConfig config) throws WSSecurityException;

 }


Modified: 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/ReferenceListProcessor.java
URL: 
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/processor/ReferenceListProcessor.java?rev=312670&r1=312669&r2=312670&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/ReferenceListProcessor.java
 (original)
+++ 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/ReferenceListProcessor.java
 Mon Oct 10 08:46:54 2005
@@ -21,6 +21,7 @@
 import org.apache.commons.logging.LogFactory;

 import org.apache.ws.security.WSConstants;

 import org.apache.ws.security.WSDocInfo;

+import org.apache.ws.security.WSSConfig;

 import org.apache.ws.security.WSSecurityEngineResult;

 import org.apache.ws.security.WSSecurityException;

 import org.apache.ws.security.components.crypto.Crypto;

@@ -38,7 +39,7 @@
 public class ReferenceListProcessor implements Processor {

     private static Log log = 
LogFactory.getLog(ReferenceListProcessor.class.getName());

 

-    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults) throws 
WSSecurityException {

+    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults, WSSConfig wsc) 
throws WSSecurityException {

         if (log.isDebugEnabled()) {

             log.debug("Found reference list element");

         }


Modified: 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SAMLTokenProcessor.java
URL: 
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/processor/SAMLTokenProcessor.java?rev=312670&r1=312669&r2=312670&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SAMLTokenProcessor.java
 (original)
+++ 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SAMLTokenProcessor.java
 Mon Oct 10 08:46:54 2005
@@ -21,6 +21,7 @@
 import org.apache.commons.logging.LogFactory;

 import org.apache.ws.security.WSConstants;

 import org.apache.ws.security.WSDocInfo;

+import org.apache.ws.security.WSSConfig;

 import org.apache.ws.security.WSSecurityEngineResult;

 import org.apache.ws.security.WSSecurityException;

 import org.apache.ws.security.components.crypto.Crypto;

@@ -34,7 +35,7 @@
 public class SAMLTokenProcessor implements Processor {

     private static Log log = 
LogFactory.getLog(SAMLTokenProcessor.class.getName());

 

-    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults) throws 
WSSecurityException {

+    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults, WSSConfig wsc) 
throws WSSecurityException {

         if (log.isDebugEnabled()) {

             log.debug("Found SAML Assertion element");

         }


Modified: 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SignatureConfirmationProcessor.java
URL: 
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/processor/SignatureConfirmationProcessor.java?rev=312670&r1=312669&r2=312670&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SignatureConfirmationProcessor.java
 (original)
+++ 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SignatureConfirmationProcessor.java
 Mon Oct 10 08:46:54 2005
@@ -21,6 +21,7 @@
 import org.apache.commons.logging.LogFactory;

 import org.apache.ws.security.WSConstants;

 import org.apache.ws.security.WSDocInfo;

+import org.apache.ws.security.WSSConfig;

 import org.apache.ws.security.WSSecurityEngineResult;

 import org.apache.ws.security.WSSecurityException;

 import org.apache.ws.security.components.crypto.Crypto;

@@ -33,7 +34,7 @@
 public class SignatureConfirmationProcessor implements Processor {

     private static Log log = 
LogFactory.getLog(SignatureConfirmationProcessor.class.getName());

 

-    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults) throws 
WSSecurityException {

+    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults, WSSConfig wsc) 
throws WSSecurityException {

         if (log.isDebugEnabled()) {

             log.debug("Found SignatureConfirmation list element");

         }


Modified: 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SignatureProcessor.java
URL: 
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/processor/SignatureProcessor.java?rev=312670&r1=312669&r2=312670&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SignatureProcessor.java
 (original)
+++ 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/SignatureProcessor.java
 Mon Oct 10 08:46:54 2005
@@ -22,6 +22,7 @@
 import org.apache.ws.security.WSConstants;

 import org.apache.ws.security.WSDocInfo;

 import org.apache.ws.security.WSDocInfoStore;

+import org.apache.ws.security.WSSConfig;

 import org.apache.ws.security.WSSecurityEngine;

 import org.apache.ws.security.WSSecurityEngineResult;

 import org.apache.ws.security.WSSecurityException;

@@ -58,7 +59,7 @@
     private static Log tlog =

             LogFactory.getLog("org.apache.ws.security.TIME");

 

-    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults) throws 
WSSecurityException {

+    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults, WSSConfig wsc) 
throws WSSecurityException {

         if (log.isDebugEnabled()) {

             log.debug("Found signature element");

         }


Modified: 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/TimestampProcessor.java
URL: 
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/processor/TimestampProcessor.java?rev=312670&r1=312669&r2=312670&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/TimestampProcessor.java
 (original)
+++ 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/TimestampProcessor.java
 Mon Oct 10 08:46:54 2005
@@ -21,6 +21,7 @@
 import org.apache.commons.logging.LogFactory;

 import org.apache.ws.security.WSConstants;

 import org.apache.ws.security.WSDocInfo;

+import org.apache.ws.security.WSSConfig;

 import org.apache.ws.security.WSSecurityEngineResult;

 import org.apache.ws.security.WSSecurityException;

 import org.apache.ws.security.components.crypto.Crypto;

@@ -36,7 +37,7 @@
 public class TimestampProcessor implements Processor {

     private static Log log = 
LogFactory.getLog(TimestampProcessor.class.getName());

 

-    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults) throws 
WSSecurityException {

+    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults, WSSConfig wsc) 
throws WSSecurityException {

         if (log.isDebugEnabled()) {

             log.debug("Found Timestamp list element");

         }


Modified: 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/UsernameTokenProcessor.java
URL: 
http://svn.apache.org/viewcvs/webservices/wss4j/trunk/src/org/apache/ws/security/processor/UsernameTokenProcessor.java?rev=312670&r1=312669&r2=312670&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/UsernameTokenProcessor.java
 (original)
+++ 
webservices/wss4j/trunk/src/org/apache/ws/security/processor/UsernameTokenProcessor.java
 Mon Oct 10 08:46:54 2005
@@ -22,6 +22,7 @@
 import org.apache.ws.security.WSConstants;

 import org.apache.ws.security.WSDocInfo;

 import org.apache.ws.security.WSPasswordCallback;

+import org.apache.ws.security.WSSConfig;

 import org.apache.ws.security.WSSecurityEngineResult;

 import org.apache.ws.security.WSSecurityException;

 import org.apache.ws.security.WSUsernameTokenPrincipal;

@@ -39,7 +40,7 @@
 public class UsernameTokenProcessor implements Processor {

     private static Log log = 
LogFactory.getLog(UsernameTokenProcessor.class.getName());

 

-    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults) throws 
WSSecurityException {

+    public void handleToken(Element elem, Crypto crypto, Crypto decCrypto, 
CallbackHandler cb, WSDocInfo wsDocInfo, Vector returnResults, WSSConfig wsc) 
throws WSSecurityException {

         if (log.isDebugEnabled()) {

             log.debug("Found UsernameToken list element");

         }


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=312670&r1=312669&r2=312670&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 
Mon Oct 10 08:46:54 2005
@@ -634,15 +634,15 @@
         }
     }
 
-    public static Cipher getCipherInstance(String cipherAlgo)
+    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", "BC");
+                cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING", jceId);
             } else if (
                     
cipherAlgo.equalsIgnoreCase(WSConstants.KEYTRANSPORT_RSAOEP)) {
-                cipher = Cipher.getInstance("RSA/NONE/OAEPPADDING", "BC");
+                cipher = Cipher.getInstance("RSA/NONE/OAEPPADDING", jceId);
             } else {
                 throw new 
WSSecurityException(WSSecurityException.UNSUPPORTED_ALGORITHM,
                         "unsupportedKeyTransp",



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to