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]