Hello, dev. 
I have the following problem.

I'm trying to code a new crypto for IAIK. This is a very initial work copied 
from Merlin with few adaptations.

The crypto.properties is
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.IAIK
org.apache.ws.security.crypto.IAIK.cert.provider=iaik.security.provider.IAIK
...
...

The IAIK provider has been registered in java.security

#
# List of providers and their preference orders (see above):
#
security.provider.1=sun.security.provider.Sun
security.provider.2=iaik.security.provider.IAIK
security.provider.3=sun.security.rsa.SunRsaSign
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider

Tried with java 1.5.0 and java 1.4.2. (wss4j 1.5.1)

When the client load the IAIK class the following error occours:

- Caught Exception while in Loader.getResource. This may be innocuous.
java.lang.NullPointerException: name
at java.util.zip.ZipFile.getEntry(ZipFile.java:247)
at java.util.jar.JarFile.getEntry(JarFile.java:204)
at java.util.jar.JarFile.getJarEntry(JarFile.java:187)
at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:674)
at sun.misc.URLClassPath.getResource(URLClassPath.java:161)
at sun.misc.URLClassPath.getResource(URLClassPath.java:213)
at java.lang.ClassLoader.getBootstrapResource(ClassLoader.java:1113)
at java.lang.ClassLoader.getResource(ClassLoader.java:974)
at java.lang.ClassLoader.getResource(ClassLoader.java:972)
at org.apache.ws.security.util.Loader.getResource(Loader.java:94)
at 
org.apache.ws.security.components.crypto.AbstractCrypto.<init>(AbstractCrypto.java:91)
at org.apache.ws.security.components.crypto.IAIK.<init>(IAIK.java:41)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at 
org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:180)
at 
org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:153)
at 
org.apache.ws.security.handler.WSHandler.loadSignatureCrypto(WSHandler.java:347)
at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:124)
at org.apache.ws.axis.security.WSDoAllSender.invoke(WSDoAllSender.java:170)
at 
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:127)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:1910)
at samples.message.TestMsg.doit(TestMsg.java:85)
at samples.message.TestMsg.main(TestMsg.java:106)
- Caught Exception while in Loader.getResource. This may be innocuous.
java.lang.NullPointerException: name
at java.util.zip.ZipFile.getEntry(ZipFile.java:247)
at java.util.jar.JarFile.getEntry(JarFile.java:204)
at java.util.jar.JarFile.getJarEntry(JarFile.java:187)
at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:674)
at sun.misc.URLClassPath.getResource(URLClassPath.java:161)
at sun.misc.URLClassPath.getResource(URLClassPath.java:213)
at java.lang.ClassLoader.getBootstrapResource(ClassLoader.java:1113)
at java.lang.ClassLoader.getResource(ClassLoader.java:974)
at java.lang.ClassLoader.getResource(ClassLoader.java:972)
at org.apache.ws.security.util.Loader.getResource(Loader.java:62)
at org.apache.ws.security.util.Loader.getResource(Loader.java:102)
at 
org.apache.ws.security.components.crypto.AbstractCrypto.<init>(AbstractCrypto.java:91)
at org.apache.ws.security.components.crypto.IAIK.<init>(IAIK.java:41)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at 
org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:180)
at 
org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:153)
at 
org.apache.ws.security.handler.WSHandler.loadSignatureCrypto(WSHandler.java:347)
at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:124)
at org.apache.ws.axis.security.WSDoAllSender.invoke(WSDoAllSender.java:170)
at 
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:127)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:1910)
at samples.message.TestMsg.doit(TestMsg.java:85)
at samples.message.TestMsg.main(TestMsg.java:106)
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at 
org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:180)
at 
org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:153)
at 
org.apache.ws.security.handler.WSHandler.loadSignatureCrypto(WSHandler.java:347)
at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:124)
at org.apache.ws.axis.security.WSDoAllSender.invoke(WSDoAllSender.java:170)
at 
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:127)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:1910)
at samples.message.TestMsg.doit(TestMsg.java:85)
at samples.message.TestMsg.main(TestMsg.java:106)
Caused by: java.lang.NullPointerException: name
at java.util.zip.ZipFile.getEntry(ZipFile.java:247)
at java.util.jar.JarFile.getEntry(JarFile.java:204)
at java.util.jar.JarFile.getJarEntry(JarFile.java:187)
at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:674)
at sun.misc.URLClassPath.getResource(URLClassPath.java:161)
at sun.misc.URLClassPath.getResource(URLClassPath.java:213)
at java.lang.ClassLoader.getBootstrapResource(ClassLoader.java:1113)
at java.lang.ClassLoader.getResource(ClassLoader.java:974)
at java.lang.ClassLoader.getResource(ClassLoader.java:972)
at java.lang.ClassLoader.getSystemResource(ClassLoader.java:1075)
at org.apache.ws.security.util.Loader.getResource(Loader.java:76)
at org.apache.ws.security.util.Loader.getResource(Loader.java:102)
at 
org.apache.ws.security.components.crypto.AbstractCrypto.<init>(AbstractCrypto.java:91)
at org.apache.ws.security.components.crypto.IAIK.<init>(IAIK.java:41)
... 18 more
- Unable to instantiate (1): org.apache.ws.security.components.crypto.IAIK
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at 
org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:180)
at 
org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:153)
at 
org.apache.ws.security.handler.WSHandler.loadSignatureCrypto(WSHandler.java:347)
at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:124)
at org.apache.ws.axis.security.WSDoAllSender.invoke(WSDoAllSender.java:170)
at 
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:127)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:1910)
at samples.message.TestMsg.doit(TestMsg.java:85)
at samples.message.TestMsg.main(TestMsg.java:106)
Caused by: java.lang.NullPointerException: name
at java.util.zip.ZipFile.getEntry(ZipFile.java:247)
at java.util.jar.JarFile.getEntry(JarFile.java:204)
at java.util.jar.JarFile.getJarEntry(JarFile.java:187)
at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:674)
at sun.misc.URLClassPath.getResource(URLClassPath.java:161)
at sun.misc.URLClassPath.getResource(URLClassPath.java:213)
at java.lang.ClassLoader.getBootstrapResource(ClassLoader.java:1113)
at java.lang.ClassLoader.getResource(ClassLoader.java:974)
at java.lang.ClassLoader.getResource(ClassLoader.java:972)
at java.lang.ClassLoader.getSystemResource(ClassLoader.java:1075)
at org.apache.ws.security.util.Loader.getResource(Loader.java:76)
at org.apache.ws.security.util.Loader.getResource(Loader.java:102)
at 
org.apache.ws.security.components.crypto.AbstractCrypto.<init>(AbstractCrypto.java:91)
at org.apache.ws.security.components.crypto.IAIK.<init>(IAIK.java:41)
... 18 more
java.lang.InstantiationException: org.apache.ws.security.components.crypto.IAIK
at java.lang.Class.newInstance0(Class.java:335)
at java.lang.Class.newInstance(Class.java:303)
at 
org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:188)
at 
org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:153)
at 
org.apache.ws.security.handler.WSHandler.loadSignatureCrypto(WSHandler.java:347)
at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:124)
at org.apache.ws.axis.security.WSDoAllSender.invoke(WSDoAllSender.java:170)
at 
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:127)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:1910)
at samples.message.TestMsg.doit(TestMsg.java:85)
at samples.message.TestMsg.main(TestMsg.java:106)
- Unable to instantiate (2): org.apache.ws.security.components.crypto.IAIK
java.lang.InstantiationException: org.apache.ws.security.components.crypto.IAIK
at java.lang.Class.newInstance0(Class.java:335)
at java.lang.Class.newInstance(Class.java:303)
at 
org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:188)
at 
org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:153)
at 
org.apache.ws.security.handler.WSHandler.loadSignatureCrypto(WSHandler.java:347)
at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:124)
at org.apache.ws.axis.security.WSDoAllSender.invoke(WSDoAllSender.java:170)
at 
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:127)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:1910)
at samples.message.TestMsg.doit(TestMsg.java:85)
at samples.message.TestMsg.main(TestMsg.java:106)

The initial source

package org.apache.ws.security.components.crypto;

import org.apache.ws.security.WSSecurityException;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.cert.CertPath;
import java.security.cert.CertPathValidator;
import java.security.cert.CertPathValidatorException;
import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.PKIXParameters;
import java.security.cert.X509Certificate;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Vector;


public class IAIK extends AbstractCrypto {

    public IAIK(Properties properties) throws CredentialException, IOException {
        super(properties);
    }
    
    public IAIK(Properties properties, ClassLoader loader) throws 
CredentialException, IOException {
        super(properties,loader);
    }

    public X509Certificate[] getX509Certificates(byte[] data, boolean reverse)
            throws WSSecurityException {
        InputStream in = new ByteArrayInputStream(data);
        CertPath path = null;
        try {
            String provider = 
properties.getProperty("org.apache.ws.security.crypto.IAIK.cert.provider");
            CertificateFactory factory = 
CertificateFactory.getInstance("X.509",provider);
            path = factory.generateCertPath(in);
        } catch (CertificateException e) {
            throw new 
WSSecurityException(WSSecurityException.SECURITY_TOKEN_UNAVAILABLE,
                    "parseError");
        } catch (NoSuchProviderException ex) {
                                throw new 
WSSecurityException(WSSecurityException.FAILURE,"certpath", new Object[] { 
ex.getMessage() },                                                         
(Throwable) ex);
        }
        List l = path.getCertificates();
        X509Certificate[] certs = new X509Certificate[l.size()];
        Iterator iterator = l.iterator();
        for (int i = 0; i < l.size(); i++) {
            certs[(reverse) ? (l.size() - 1 - i) : i] = (X509Certificate) 
iterator.next();
        }
        return certs;
    }

    public byte[] getCertificateData(boolean reverse, X509Certificate[] certs)
            throws WSSecurityException {
        Vector list = new Vector();
        for (int i = 0; i < certs.length; i++) {
            if (reverse) {
                list.insertElementAt(certs[i], 0);
            } else {
                list.add(certs[i]);
            }
        }
        try {
            String provider = 
properties.getProperty("org.apache.ws.security.crypto.IAIK.cert.provider");
            CertificateFactory factory = 
CertificateFactory.getInstance("X.509",provider);
            CertPath path = factory.generateCertPath(list);
            return path.getEncoded();
        } catch (CertificateEncodingException e) {
            throw new 
WSSecurityException(WSSecurityException.SECURITY_TOKEN_UNAVAILABLE,
                    "encodeError");
        } catch (CertificateException e) {
            throw new 
WSSecurityException(WSSecurityException.SECURITY_TOKEN_UNAVAILABLE,
                    "parseError");
        } catch (NoSuchProviderException ex) {
                                throw new 
WSSecurityException(WSSecurityException.FAILURE,"certpath", new Object[] { 
ex.getMessage() },(Throwable) ex);
        }
    }

    public boolean validateCertPath(X509Certificate[] certs)
                    throws WSSecurityException {
                try {
                        // Generate cert path
                        java.util.List certList = 
java.util.Arrays.asList(certs);
                        CertPath path = 
this.getCertificateFactory().generateCertPath(certList);

                        // Use the certificates in the keystore as TrustAnchors
                        PKIXParameters param = new 
PKIXParameters(this.keystore);

                        // Do not check a revocation list
                        param.setRevocationEnabled(false);

                        // Verify the trust path using the above settings
                        String provider = 
properties.getProperty("org.apache.ws.security.crypto.IAIK.cert.provider");
                        CertPathValidator certPathValidator;
                        if (provider == null || provider.length() == 0) {
                                        certPathValidator = 
CertPathValidator.getInstance("PKIX");
                        } else {
                                        certPathValidator = 
CertPathValidator.getInstance("PKIX",
                                                                        
provider);
                        }
                        certPathValidator.validate(path, param);
                } catch (NoSuchProviderException ex) {
                                throw new 
WSSecurityException(WSSecurityException.FAILURE,
                                                                "certpath", new 
Object[] { ex.getMessage() },
                                                                (Throwable) ex);
                } catch (NoSuchAlgorithmException ex) {
                                throw new 
WSSecurityException(WSSecurityException.FAILURE,
                                                                "certpath", new 
Object[] { ex.getMessage() },
                                                                (Throwable) ex);
                } catch (CertificateException ex) {
                                throw new 
WSSecurityException(WSSecurityException.FAILURE,
                                                                "certpath", new 
Object[] { ex.getMessage() },
                                                                (Throwable) ex);
                } catch (InvalidAlgorithmParameterException ex) {
                                throw new 
WSSecurityException(WSSecurityException.FAILURE,
                                                                "certpath", new 
Object[] { ex.getMessage() },
                                                                (Throwable) ex);
                } catch (CertPathValidatorException ex) {
                                throw new 
WSSecurityException(WSSecurityException.FAILURE,
                                                                "certpath", new 
Object[] { ex.getMessage() },
                                                                (Throwable) ex);
                } catch (KeyStoreException ex) {
                                throw new 
WSSecurityException(WSSecurityException.FAILURE,
                                                                "certpath", new 
Object[] { ex.getMessage() },
                                                                (Throwable) ex);
                }
                return true;
    }
}

Any help or suggestions?


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

Reply via email to