aboutsummaryrefslogtreecommitdiff
path: root/spss.test/src
diff options
context:
space:
mode:
authorgregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d>2003-11-11 22:36:36 +0000
committergregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d>2003-11-11 22:36:36 +0000
commit643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc (patch)
tree9e750c9103ad923b291820bc85fcbd669c2e7900 /spss.test/src
parentbc620256eb9b4dc6a33244b1105e58773358dbe6 (diff)
downloadmoa-id-spss-643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc.tar.gz
moa-id-spss-643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc.tar.bz2
moa-id-spss-643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc.zip
git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@51 d688527b-c9ab-4aba-bd8d-4036d912da1d
Diffstat (limited to 'spss.test/src')
-rw-r--r--spss.test/src/ExportECDSA.java249
-rw-r--r--spss.test/src/at/gv/egovernment/moa/spss/client/call/MOACaller.java38
-rw-r--r--spss.test/src/at/gv/egovernment/moa/spss/client/call/SignatureCreationCaller.java23
-rw-r--r--spss.test/src/at/gv/egovernment/moa/spss/client/call/SignatureVerificationCaller.java28
-rw-r--r--spss.test/src/testclient/LasttestClient.java389
-rw-r--r--spss.test/src/testclient/TestClient.java1665
-rw-r--r--spss.test/src/testgenerator/CMSKeyStore.java198
-rw-r--r--spss.test/src/testgenerator/CMSKeyStoreConstants.java51
-rw-r--r--spss.test/src/testgenerator/CreatePKCSSignature.java874
-rw-r--r--spss.test/src/testgenerator/DataGenerator.java45
-rw-r--r--spss.test/src/testgenerator/EtsiProperties.java113
-rw-r--r--spss.test/src/testgenerator/LauchAll.java28
-rw-r--r--spss.test/src/testgenerator/LaunchVX.java24
-rw-r--r--spss.test/src/testgenerator/Pass.java22
-rw-r--r--spss.test/src/testgenerator/SetupCMSKeyStore.java671
-rw-r--r--spss.test/src/testgenerator/SignatureManifestCheckParams.java176
-rw-r--r--spss.test/src/testgenerator/Supplement.java62
-rw-r--r--spss.test/src/testgenerator/TestCMS.java118
-rw-r--r--spss.test/src/testgenerator/TestCases.java611
-rw-r--r--spss.test/src/testgenerator/TestGeneratorCX0.java2940
-rw-r--r--spss.test/src/testgenerator/TestGeneratorCX1.java1054
-rw-r--r--spss.test/src/testgenerator/TestGeneratorCX2.java1050
-rw-r--r--spss.test/src/testgenerator/TestGeneratorFeature41.java1167
-rw-r--r--spss.test/src/testgenerator/TestGeneratorVC0.java1057
-rw-r--r--spss.test/src/testgenerator/TestGeneratorVX.java2793
-rw-r--r--spss.test/src/testgenerator/TestGeneratorVX2.java1600
-rw-r--r--spss.test/src/testgenerator/TestGeneratorVXErrors.java1775
-rw-r--r--spss.test/src/testgenerator/TestPKCS12.java107
-rw-r--r--spss.test/src/testgenerator/VXResponseBean.java180
29 files changed, 19108 insertions, 0 deletions
diff --git a/spss.test/src/ExportECDSA.java b/spss.test/src/ExportECDSA.java
new file mode 100644
index 000000000..d47a0841b
--- /dev/null
+++ b/spss.test/src/ExportECDSA.java
@@ -0,0 +1,249 @@
+import iaik.asn1.structures.Name;
+import iaik.pkcs.pkcs11.provider.IAIKPkcs11;
+import iaik.pkcs.pkcs12.CertificateBag;
+import iaik.pkcs.pkcs12.KeyBag;
+import iaik.pkcs.pkcs12.PKCS12;
+import iaik.security.provider.IAIK;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.security.Key;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+import java.security.Security;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Properties;
+
+/**
+ * @author Administrator
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class ExportECDSA {
+
+ public static void main(String[] args) throws Exception {
+ iaik.security.provider.IAIK.addAsJDK14Provider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+
+ PKCS12 input = new PKCS12(new FileInputStream("C:\\eclipse\\workspace\\spss.server\\data\\deploy\\conf\\moa-spss\\keys\\ecc(ego).p12"));
+ input.decrypt("ego".toCharArray());
+ KeyBag newkb = input.getKeyBag();
+ System.out.println("KeyNew:"+newkb.getFriendlyName());
+ System.out.println(newkb.getPrivateKey());
+ CertificateBag newcbs[] = input.getCertificateBags();
+ System.out.println(newcbs.length);
+ System.out.println("CertNew:"+newcbs[0].getFriendlyName());
+ System.out.println(newcbs[0]);
+ System.out.println(newcbs[0].getCertificate().getSerialNumber().toString());
+ System.out.println(((Name)newcbs[0].getCertificate().getSubjectDN()).getRFC2253String());
+ }
+
+ public static void main2(String[] args) throws Exception {
+
+
+
+ /* Export P12 Cert in .Cer File *
+ PKCS12 pkcs12 = new PKCS12(new FileInputStream("resources/ecc(ego).p12"));
+ pkcs12.decrypt("ego".toCharArray());
+ X509Certificate[] ret = CertificateBag.getCertificates(pkcs12.getCertificateBags());
+
+ byte []cert = ret[0].getEncoded();
+ FileOutputStream fos = new FileOutputStream("cert1.cer");
+ fos.write(cert);
+ fos.close();
+ */
+
+ Properties config = new Properties();
+ config.put("PKCS11_NATIVE_MODULE","cryptoki.dll");
+ config.put("SLOT_ID","0");
+
+ IAIK iaik = new IAIK();
+ Security.addProvider(iaik);
+ IAIKPkcs11 pkcs11Provider_ = new IAIKPkcs11(config);
+ Security.addProvider(pkcs11Provider_);
+
+ KeyStore tokenKeyStore = pkcs11Provider_.getTokenManager().getKeyStore();
+ tokenKeyStore.load(null,"0000".toCharArray());
+
+ byte [] keyid = {0x01,0x02,0x03,0x04};
+
+ PrivateKey k = (PrivateKey)tokenKeyStore.getKey("MOAHSMRSAKEY_cert",null);
+ KeyBag kb = new KeyBag(k,"MOAHSMRSAKEY_pri",keyid);
+ System.out.println("Key:"+k);
+
+ java.security.cert.Certificate[] ret = tokenKeyStore.getCertificateChain("MOAHSMRSAKEY_cert");
+
+ System.out.println(ret.getClass().getName());
+
+ CertificateBag cb = new CertificateBag((iaik.x509.X509Certificate)ret[0],"MOAHSMRSAKEY_cert",keyid);
+ CertificateBag chain[] = new CertificateBag[1];
+ chain[0] = cb;
+ System.out.println("Cert:"+cb);
+ FileOutputStream fos = new FileOutputStream("hsm.p12");
+
+ PKCS12 pkcs12 = new PKCS12(kb,chain);
+ System.out.println("Encrypting...");
+ pkcs12.encrypt("moa".toCharArray());
+ System.out.println("Write...");
+ pkcs12.writeTo(fos);
+ fos.close();
+
+
+ PKCS12 input = new PKCS12(new FileInputStream("hsm.p12"));
+ input.decrypt("moa".toCharArray());
+ KeyBag newkb = input.getKeyBag();
+ System.out.println("KeyNew:"+newkb.getFriendlyName());
+ System.out.println(newkb.getPrivateKey());
+ CertificateBag newcbs[] = input.getCertificateBags();
+ System.out.println("CertNew:"+newcbs[0].getFriendlyName());
+ System.out.println(newcbs[0]);
+
+ }
+
+ public static void test(String[] args) throws Exception {
+ iaik.security.provider.IAIK.addAsJDK14Provider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+
+ Properties config = new Properties();
+ config.put("PKCS11_NATIVE_MODULE","cryptoki.dll");
+ config.put("SLOT_ID","0");
+
+ IAIK iaik = new IAIK();
+ Security.addProvider(iaik);
+ IAIKPkcs11 pkcs11Provider_ = new IAIKPkcs11(config);
+ Security.addProvider(pkcs11Provider_);
+
+ KeyStore tokenKeyStore = pkcs11Provider_.getTokenManager().getKeyStore();
+ tokenKeyStore.load(null,"0000".toCharArray());
+
+ FileInputStream inputStream = new FileInputStream("MOA.Serversignatur.TestECDSA.der");
+ CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509", "IAIK");
+ Collection certificateCollection = certificateFactory.generateCertificates(inputStream);
+ X509Certificate[] certificateChain =
+ (X509Certificate[]) certificateCollection.toArray(new X509Certificate[certificateCollection.size()]);
+
+ System.out.println("Number of Cert:"+certificateCollection.size());
+
+ tokenKeyStore.setCertificateEntry("ECDSA_cert",certificateChain[0]);
+
+ System.out.println("DONE");
+
+ Enumeration enum2 = tokenKeyStore.aliases();
+
+ while (enum2.hasMoreElements()) {
+ String alias = enum2.nextElement().toString();
+
+ if (tokenKeyStore.isKeyEntry(alias)) {
+ System.out.println("________________________________________________________________________________");
+ System.out.println("Key entry with alias: " + alias);
+ Key key = tokenKeyStore.getKey(alias, null);
+ System.out.println(key);
+ java.security.cert.Certificate[] certificateChain2 = tokenKeyStore.getCertificateChain(alias);
+ if (certificateChain2 != null) {
+ System.out.println("Certificate chain of length: " + certificateChain2.length);
+ for (int i = 0; i < certificateChain2.length; i++) {
+ System.out.println("--------------------------------------------------------------------------------");
+ System.out.println(certificateChain2[i]);
+ }
+ } else {
+ System.out.println("Certificate chain is null!");
+ }
+ System.out.println("________________________________________________________________________________");
+ } else if (tokenKeyStore.isCertificateEntry(alias)) {
+ System.out.println("________________________________________________________________________________");
+ System.out.println("Certificate entry with alias: " + alias);
+ java.security.cert.Certificate certificate = tokenKeyStore.getCertificate(alias);
+ System.out.println(certificate);
+ System.out.println("________________________________________________________________________________");
+ } else {
+ System.out.println("________________________________________________________________________________");
+ System.out.println("ERROR! Unknown entry type with alias: " + alias);
+ System.out.println("________________________________________________________________________________");
+ }
+ }
+
+ //tokenKeyStore.setCertificateEntry()
+
+ /*IAIKPKCS11PublicKey key = (IAIKPKCS11PublicKey)tokenKeyStore.getKey("ECDSA_pub",null);
+
+ ECDSAPublicKey pkcs11EcDsaPublicKey = (ECDSAPublicKey)key.getKeyObject();
+
+ ByteArrayAttribute ecdsaParamsAttribute = (ByteArrayAttribute) pkcs11EcDsaPublicKey.getEcdsaParams();
+ ByteArrayAttribute ecPointAttribute = (ByteArrayAttribute) pkcs11EcDsaPublicKey.getEcPoint();
+
+ if (!ecdsaParamsAttribute.isPresent()) {
+ throw new IAIKPkcs11Exception("The PKCS#11 ECDSA key object does not possess a ECDSA parameters attribute.");
+ }
+ if (!ecPointAttribute.isPresent()) {
+ throw new IAIKPkcs11Exception("The PKCS#11 ECDSA key object does not possess a EC point attribute.");
+ }
+
+ byte[] x509encodedPublicKey;
+ try {
+ byte[] encodedParameters = ecdsaParamsAttribute.getByteArrayValue();
+ byte[] encodedPublicKeyValue = ecPointAttribute.getByteArrayValue();
+
+ ECDSAKeyFactory fact = new ECDSAKeyFactory();
+
+ // encoding the algorithm ID with the parameters
+ ObjectID OBJECT_ID_EC_KEY = new ObjectID("1.2.840.10045.2.1");
+ AlgorithmID EC_ALGORITHM_ID = new AlgorithmID(OBJECT_ID_EC_KEY);
+
+
+ ASN1 parametersASN1 = new ASN1(encodedParameters);
+
+ EC_ALGORITHM_ID.setParameter(parametersASN1.toASN1Object());
+
+ // encoding the X.509 subject public key info structure
+ SEQUENCE publicKeyInfo = new SEQUENCE();
+
+ publicKeyInfo.addComponent(EC_ALGORITHM_ID.toASN1Object());
+ publicKeyInfo.addComponent(new BIT_STRING(encodedPublicKeyValue));
+
+ x509encodedPublicKey = DerCoder.encode(publicKeyInfo);
+
+ } catch (CodingException ex) {
+ ex.printStackTrace();
+ throw new InvalidKeySpecException("Error during encoding of ECDSA public key: " + ex.toString());
+ }
+
+ int size = 0;
+
+ X509EncodedKeySpec keySpec = new X509EncodedKeySpec(x509encodedPublicKey);
+ byte [] enc = keySpec.getEncoded();
+ size = enc.length;
+
+ BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("ecdsakey.key"));
+ bos.write(enc);
+ bos.flush();
+ bos.close();
+
+ byte [] data = new byte[size];
+
+ BufferedInputStream bis = new BufferedInputStream(new FileInputStream("ecdsakey.key"));
+ bis.read(data);
+ bis.close();
+
+
+ ASN1Object asn1 = DerCoder.decode(data);
+ System.out.println("Objectcount:"+asn1.countComponents());
+ ASN1Object asnobject1 = asn1.getComponentAt(0);
+ System.out.println(asnobject1);
+
+ ASN1Object asnobject1_1 = asnobject1.getComponentAt(0);
+ System.out.println(asnobject1_1);
+
+ ASN1Object asnobject1_2 = asnobject1.getComponentAt(1);
+ System.out.println(asnobject1_2);
+
+ ASN1Object asnobject2 = asn1.getComponentAt(1);
+ System.out.println(asnobject2);*/
+
+ }
+}
diff --git a/spss.test/src/at/gv/egovernment/moa/spss/client/call/MOACaller.java b/spss.test/src/at/gv/egovernment/moa/spss/client/call/MOACaller.java
new file mode 100644
index 000000000..13a06b2fb
--- /dev/null
+++ b/spss.test/src/at/gv/egovernment/moa/spss/client/call/MOACaller.java
@@ -0,0 +1,38 @@
+package at.gv.egovernment.moa.spss.client.call;
+
+import java.rmi.RemoteException;
+import java.util.Vector;
+
+import javax.xml.namespace.QName;
+import javax.xml.rpc.Call;
+import javax.xml.rpc.Service;
+import javax.xml.rpc.ServiceException;
+import javax.xml.rpc.ServiceFactory;
+
+import org.apache.axis.message.SOAPBodyElement;
+import org.w3c.dom.Element;
+
+/**
+ * @author Patrick Peck
+ * @version $Id$
+ */
+public class MOACaller {
+
+ protected Element doCall(QName serviceName, Element request, String endPoint)
+ throws RemoteException, ServiceException, Exception {
+ Service service = ServiceFactory.newInstance().createService(serviceName);
+ Call call = service.createCall();
+ SOAPBodyElement body =
+ new SOAPBodyElement(request);
+ SOAPBodyElement[] params = new SOAPBodyElement[] {body};
+ Vector responses;
+ SOAPBodyElement response;
+
+ call.setTargetEndpointAddress(endPoint);
+ responses = (Vector) call.invoke(params);
+ response = (SOAPBodyElement) responses.get(0);
+
+ return response.getAsDOM();
+ }
+
+}
diff --git a/spss.test/src/at/gv/egovernment/moa/spss/client/call/SignatureCreationCaller.java b/spss.test/src/at/gv/egovernment/moa/spss/client/call/SignatureCreationCaller.java
new file mode 100644
index 000000000..0ca4a23c0
--- /dev/null
+++ b/spss.test/src/at/gv/egovernment/moa/spss/client/call/SignatureCreationCaller.java
@@ -0,0 +1,23 @@
+package at.gv.egovernment.moa.spss.client.call;
+
+import java.rmi.RemoteException;
+
+import javax.xml.namespace.QName;
+import javax.xml.rpc.ServiceException;
+
+import org.w3c.dom.Element;
+
+/**
+ * @author Patrick Peck
+ * @version $Id$
+ */
+public class SignatureCreationCaller extends MOACaller {
+
+ private static final QName SERVICE_QNAME = new QName("SignatureCreation");
+
+ public Element createXMLSignature(Element request, String endPoint)
+ throws ServiceException, RemoteException, Exception {
+ return doCall(SERVICE_QNAME, request, endPoint);
+ }
+
+}
diff --git a/spss.test/src/at/gv/egovernment/moa/spss/client/call/SignatureVerificationCaller.java b/spss.test/src/at/gv/egovernment/moa/spss/client/call/SignatureVerificationCaller.java
new file mode 100644
index 000000000..612a1d345
--- /dev/null
+++ b/spss.test/src/at/gv/egovernment/moa/spss/client/call/SignatureVerificationCaller.java
@@ -0,0 +1,28 @@
+package at.gv.egovernment.moa.spss.client.call;
+
+import java.rmi.RemoteException;
+
+import javax.xml.namespace.QName;
+import javax.xml.rpc.ServiceException;
+
+import org.w3c.dom.Element;
+
+/**
+ * @author Patrick Peck
+ * @version $Id$
+ */
+public class SignatureVerificationCaller extends MOACaller {
+
+ private static final QName SERVICE_QNAME = new QName("SignatureVerification");
+
+ public Element verifyCMSSignature(Element request, String endPoint)
+ throws ServiceException, RemoteException, Exception {
+ return doCall(SERVICE_QNAME, request, endPoint);
+ }
+
+ public Element verifyXMLSignature(Element request, String endPoint)
+ throws ServiceException, RemoteException, Exception {
+ return doCall(SERVICE_QNAME, request, endPoint);
+ }
+
+}
diff --git a/spss.test/src/testclient/LasttestClient.java b/spss.test/src/testclient/LasttestClient.java
new file mode 100644
index 000000000..339b6609d
--- /dev/null
+++ b/spss.test/src/testclient/LasttestClient.java
@@ -0,0 +1,389 @@
+package testclient;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintStream;
+import java.io.RandomAccessFile;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Date;
+
+
+/**
+ * @author Sven
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class LasttestClient {
+
+
+ public int max_thread_count = 300;
+ public int thread_counter = 0;
+ public int error_count = 0;
+ public int turns = 0;
+
+ public long max = 0;
+ public long min = Long.MAX_VALUE;
+
+ public PrintStream Log = null;
+
+ public boolean stop = false;
+
+ private String readFile(String filename) throws Exception
+ {
+ RandomAccessFile raf = new RandomAccessFile(filename, "r");
+ if (raf.length() > Integer.MAX_VALUE)
+ throw new IOException("file too big to fit in byte array.");
+
+ byte[] result = new byte[(int) raf.length()];
+
+ raf.read(result);
+
+ return new String(result);
+
+ }
+
+
+
+ public String buildRequest(String filename) throws Exception
+ {
+ String data = readFile(filename);
+ int index = data.indexOf(">");
+
+ String xml_head = data.substring(0,index+1);
+ data = data.substring(index+1);
+ //Log.println("Data2:\n"+data);
+
+ data =
+ xml_head +
+ "<soap:Envelope "+
+ "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\" "+
+ "soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\"> "+
+ "<soap:Body> "+
+ data +
+ "</soap:Body>"+
+ "</soap:Envelope>";
+
+ if(data.indexOf("10.16.46.109")!=-1)
+ data = replaceString(data,"10.16.46.109","127.0.0.1");
+
+ System.out.println("Request:"+data);
+
+ return data;
+
+ }
+
+ public String buildEndpoint(String request,String server)
+ {
+ String ep = null;
+ if(request.indexOf("<Create")!=-1) ep = server + "moa-spss/services/SignatureCreation";
+ else ep = server + "moa-spss/services/SignatureVerification";
+ return ep;
+ }
+
+ public void startTest(String filename,String server,int req_per_second,int turns) throws Exception
+ {
+ this.turns = turns;
+ String request = buildRequest(filename);
+ String ep = buildEndpoint(request,server);
+
+ boolean result = doTestRequest(request,ep);
+
+ if(result)
+ {
+ System.out.println("TestRequest OK. Lasttest wird gestartet.");
+ Dispatcher dp = new Dispatcher(this,request,ep,req_per_second,turns);
+ dp.start();
+ while(!stop)
+ {
+ System.out.println("Checking Stop Condition ...(Running "+thread_counter+", Min "+(min)+", Max "+(max)+", "+new Date(System.currentTimeMillis())+")");
+ Thread.sleep(3000);
+ }
+ System.out.println("Fehler:"+error_count+" (Running "+thread_counter+", Min "+(min)+", Max "+(max)+", "+new Date(System.currentTimeMillis())+")");
+ }
+ else
+ {
+ System.out.println("TestRequest lieferte einen Fehler. Lasttest wird nicht gestartet.");
+ }
+ }
+
+ public boolean doTestRequest(String request,String endpoint) throws Exception
+ {
+ HttpURLConnection urlc = (HttpURLConnection)(new URL(endpoint)).openConnection();
+ urlc.setDoInput(true);
+ urlc.setDoOutput(true);
+ urlc.setRequestProperty("SOAPAction","");
+ BufferedWriter ow = new BufferedWriter(new OutputStreamWriter(urlc.getOutputStream()));
+ ow.write(request);
+ ow.flush();
+
+ int code = 0;
+ try {
+ code = urlc.getResponseCode();
+ }
+ catch(IOException ioe)
+ {
+ ow.close();
+ urlc.disconnect();
+ return false;
+ }
+ BufferedReader iw = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
+ while(iw.readLine()!=null) {}
+ ow.close();
+
+ if(code==500)
+ {
+ return false;
+ }
+ else
+ {
+ BufferedReader br = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
+ StringBuffer response = new StringBuffer();
+ String line = null;
+ while((line = br.readLine()) != null)
+ {
+ response.append(line);
+ }
+
+ iw.close();
+ urlc.disconnect();
+
+ String resp = response.toString();
+
+ int pos = resp.indexOf("ErrorCode>");
+ if(pos==-1)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ }
+
+ private String replaceString(
+ String input,
+ String oldPart,
+ String newPart)
+ throws Exception {
+ String erg = null;
+
+ //First Part
+ erg = input.substring(0, input.indexOf(oldPart));
+ //Insert new Part
+ erg += newPart;
+
+ //insert REST
+ erg
+ += input.substring(
+ input.indexOf(oldPart) + oldPart.length(),
+ input.length());
+
+ return erg;
+ }
+
+ public static void main(String[] args) throws Exception
+ {
+ int sek = 0;
+ int turns = 0;
+
+ if(args.length!=4)
+ {
+ System.out.println("Parameteranzahl falsch. Bitte verwenden Sie die Syntax <Requestdatei><ServerURL><Request_pro_Sekunde(Zahl)><Anzahl_der_Durchläufe(Zahl oder INF)>");
+ return;
+ }
+
+ try {
+ sek = Integer.parseInt(args[2]);
+ if(args[3].equals("INF"))
+ {
+ turns = 0;
+ }
+ else
+ turns = Integer.parseInt(args[3]);
+ }
+ catch(NumberFormatException e)
+ {
+ System.out.println("Einer der Parameter (Requestanzahl oder Testanzahl) ist keine Zahl !");
+ return;
+ }
+
+ System.out.println("Starte Lastest mit folgenden Parametern ...");
+ System.out.println("Requestdatei: "+args[0]);
+ System.out.println("ServerURL: "+args[1]);
+ System.out.println("Requests pro Sekunde: "+sek);
+ System.out.println("Durchläufe: "+(turns==0?"INF":turns+""));
+
+
+ LasttestClient lc = new LasttestClient();
+ //lc.startTest("data/CX0/TestGeneratorCX0.001.Req.xml","http://161.106.2.255:8080/",10,1000);
+ lc.startTest(args[0],args[1],sek,turns);
+ }
+}
+
+class Dispatcher extends Thread
+{
+ private String request = null;
+ private String endpoint = null;
+ private LasttestClient parent = null;
+ private int max;
+ private int turns;
+ public Dispatcher(LasttestClient parent,String request,String endpoint,int max,int turns)
+ {
+ this.request = request;
+ this.endpoint = endpoint;
+ this.parent = parent;
+ this.max = max;
+ this.turns = turns;
+ }
+
+ public void run()
+ {
+ this.setPriority(Thread.NORM_PRIORITY+1);
+ System.out.println("Dispatcher wird gestartet...");
+ TestThread[] old_reqs = buildRequests();
+ for(int turn_counter=0;turns==0?true:(turn_counter<turns);turn_counter++)
+ {
+ System.out.println("Durchlauf "+turn_counter);
+ if(turns==0) turn_counter--;
+ TestThread[] reqs = buildRequests();
+ for(int counter=0;counter<max;counter++)
+ {
+ old_reqs[counter].start();
+ }
+ old_reqs = reqs;
+ try {
+ Thread.sleep(1000);
+ }
+ catch(Exception e) { e.printStackTrace(); }
+ }
+ parent.stop = true;
+ }
+
+ public TestThread[] buildRequests()
+ {
+ TestThread[] ret = new TestThread[max];
+ for(int counter=0;counter<max;counter++)
+ {
+ ret[counter] = new TestThread(parent,request,endpoint);
+ }
+ return ret;
+ }
+}
+
+class TestThread extends Thread
+{
+ private String request = null;
+ private String endpoint = null;
+ private LasttestClient parent = null;
+ public TestThread(LasttestClient parent,String request,String endpoint)
+ {
+ this.request = request;
+ this.endpoint = endpoint;
+ this.parent = parent;
+
+ }
+
+
+ /**
+ * @see java.lang.Runnable#run()
+ */
+ public void run() {
+ parent.thread_counter++;
+
+ try {
+ if(!doRequest())
+ {
+ parent.error_count++;
+ }
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ parent.error_count++;
+ }
+ parent.thread_counter--;
+ }
+
+ public boolean doRequest() throws Exception
+ {
+ long start = System.currentTimeMillis();
+ HttpURLConnection urlc = (HttpURLConnection)(new URL(endpoint)).openConnection();
+ urlc.setDoInput(true);
+ urlc.setDoOutput(true);
+ urlc.setAllowUserInteraction(false);
+ urlc.setUseCaches(false);
+ HttpURLConnection.setFollowRedirects(false);
+ urlc.setRequestProperty("SOAPAction","");
+
+
+ BufferedWriter ow = new BufferedWriter(new OutputStreamWriter(urlc.getOutputStream()));
+ ow.write(request);
+ ow.flush();
+
+ int code = 0;
+ /*try {
+ code = urlc.getResponseCode();
+ }
+ catch(IOException ioe)
+ {
+ ow.close();
+ urlc.disconnect();
+ return false;
+ }*/
+ ow.close();
+ BufferedReader iw = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
+ while(iw.readLine()!=null) {}
+
+ if(code==500)
+ {
+ return false;
+ }
+ else
+ {
+ BufferedReader br = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
+ StringBuffer response = new StringBuffer();
+ String line = null;
+ while((line = br.readLine()) != null)
+ {
+ response.append(line);
+ }
+
+ iw.close();
+ urlc.disconnect();
+ long end = System.currentTimeMillis();
+
+ String resp = response.toString();
+
+ int pos = resp.indexOf("ErrorCode>");
+ if(pos==-1)
+ {
+ long diff = end-start;
+ if(parent.max<diff)
+ {
+ parent.max=diff;
+ }
+ if(parent.min>diff)
+ {
+ parent.min=diff;
+ }
+ return true;
+
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ }
+
+} \ No newline at end of file
diff --git a/spss.test/src/testclient/TestClient.java b/spss.test/src/testclient/TestClient.java
new file mode 100644
index 000000000..aac30499f
--- /dev/null
+++ b/spss.test/src/testclient/TestClient.java
@@ -0,0 +1,1665 @@
+package testclient;
+
+import iaik.ixsil.algorithms.Transform;
+import iaik.ixsil.algorithms.TransformImplExclusiveCanonicalXML;
+import iaik.ixsil.init.IXSILInit;
+import iaik.ixsil.util.URI;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintStream;
+import java.io.RandomAccessFile;
+import java.io.UTFDataFormatException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.security.KeyStore;
+import java.security.Principal;
+import java.security.Security;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+import org.xml.sax.SAXParseException;
+
+import at.gv.egovernment.moa.spss.client.call.SignatureCreationCaller;
+import at.gv.egovernment.moa.spss.client.call.SignatureVerificationCaller;
+import at.gv.egovernment.moa.util.Base64Utils;
+import at.gv.egovernment.moa.util.Constants;
+import at.gv.egovernment.moa.util.DOMUtils;
+import at.gv.egovernment.moa.util.XPathUtils;
+
+import com.sun.net.ssl.internal.ssl.Provider;
+
+/**
+ * @author Sven
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class TestClient
+{
+
+ // stats
+ private int pos_ok = 0;
+ private int pos_nok = 0;
+ private int pos_exc = 0;
+ private int neg_ok = 0;
+ private int neg_nok = 0;
+ private int neg_exc = 0;
+ private long max_request = 0;
+ private long min_request = 99999;
+ private long all_request = 0;
+ private int count_all_request = 0;
+ private int count_tests = 0;
+
+ private TreeMap suits = new TreeMap();
+ private PrintStream Log = null;
+ private static File directory = null;
+ private static String directorystring = null;
+ private static Provider ssl_provider = null;
+ private static boolean ssl_connection = false;
+ private static String defaultserver = "http://localhost:8080/";
+ private static String defaultdirectory = "data/feature41/";
+ private static String server;
+
+ private static boolean ignoreSignatureValue = false;
+
+ // end points
+ private static String VERIFICATION_ENDPOINT = "moa-spss/services/SignatureVerification";
+ private static String CREATION_ENDPOINT = "moa-spss/services/SignatureCreation";
+ private static String SSL_VERIFICATION_ENDPOINT = null;
+ private static String SSL_CREATION_ENDPOINT = null;
+
+ private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss.SSS");
+
+ // super cool stuff
+ private static ArrayList testtimes = new ArrayList();
+ private static ArrayList testnames = new ArrayList();
+ private static ArrayList testvalues = new ArrayList();
+ private static ArrayList testerrors = new ArrayList();
+ private static int ELEMS_MAX = 40;
+ private static String ELEMS_ICON = "O";
+ private static String ELEMS_ICON_BAD = "X";
+
+ private static final boolean debug = true;
+
+ public static void main(String[] args)
+ {
+ long start = System.currentTimeMillis();
+ long end = 0;
+ System.out.println("Lade IXSIL ...");
+ try
+ {
+ IXSILInit.init(new URI("init/properties/init.properties"));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+ System.out.println("Starte TestClient @ " + sdf.format(new Date(start)) + "...");
+
+ if (args.length == 0)
+ {
+ directory = new File(defaultdirectory);
+ server = defaultserver;
+ System.out.println("DefaultPfad wird benutzt (" + directory.getPath() + ")");
+ System.out.println("DefaultServer wird benutzt (" + server + ")");
+ }
+ else if (args.length == 1)
+ {
+ System.out.println("Pfad " + args[0] + " wird benutzt ");
+ directory = new File(args[0]);
+ server = defaultserver;
+ System.out.println("DefaultServer wird benutzt (" + server + ")");
+ }
+ else if (args.length == 2)
+ {
+ System.out.println("Pfad " + args[0] + " wird benutzt ");
+ directory = new File(args[0]);
+ System.out.println("Server " + args[1] + " wird benutzt ");
+ server = args[1];
+ }
+
+ VERIFICATION_ENDPOINT = server + VERIFICATION_ENDPOINT;
+ CREATION_ENDPOINT = server + CREATION_ENDPOINT;
+ TestClient tc = new TestClient();
+ tc.run();
+ end = System.currentTimeMillis();
+ System.out.println("Ende TestClient @ " + sdf.format(new Date(end)) + "...");
+ System.out.println("Durchlaufzeit: " + ((end - start) / 1000) + " sekunden");
+
+ }
+
+ public void run()
+ {
+ ssl_provider = new Provider();
+ Security.addProvider(ssl_provider);
+ Log = System.out;
+ try
+ {
+ prepareFiles();
+ runSuits();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ Log.println("----- Auswertung:");
+ Log.println("----- Positiv Tests:" + (pos_ok + pos_nok + pos_exc));
+ Log.println("----- OK:" + (pos_ok));
+ Log.println("----- nicht OK:" + (pos_nok));
+ Log.println("----- Exception aufgetreten:" + (pos_exc));
+ Log.println("----- Negativ Test:" + (neg_ok + neg_nok + neg_exc));
+ Log.println("----- OK:" + (neg_ok));
+ Log.println("----- nicht OK:" + (neg_nok));
+ Log.println("----- Exception aufgetreten:" + (neg_exc));
+ Log.println("----- schnellste Anfrage:" + min_request + " ms");
+ Log.println("----- langsamste Anfrage:" + max_request + " ms");
+ if (count_all_request > 2)
+ Log.println(
+ "----- durchschnittliche Anfrage:"
+ + ((all_request - max_request - min_request) / (count_all_request - 2))
+ + " ms");
+ else if (count_all_request == 0)
+ Log.println("----- keine gültigen Messungen für Durchschnittsermittlung");
+ else
+ Log.println("----- durchschnittliche Anfrage:" + ((all_request) / (count_all_request)) + " ms");
+ }
+
+ private void prepareFiles() throws Exception
+ {
+
+ if (!directory.isDirectory())
+ {
+ throw new Exception("Das angegebene Verzeichnis ist kein Verzeichnis. Bitte Pfad überprüfen.");
+ }
+
+ directorystring = directory.getAbsolutePath();
+
+ String[] list = directory.list();
+ for (int counter = 0; counter < list.length; counter++)
+ {
+
+ if (list[counter].endsWith("Req.xml")
+ || list[counter].endsWith("Res.xml")
+ || list[counter].endsWith("Config.xml"))
+ {
+ String suitename = list[counter].substring(0, list[counter].indexOf("."));
+
+ if (!suits.containsKey(suitename))
+ suits.put(suitename, null);
+
+ ArrayList al = (ArrayList) suits.get(suitename);
+ if (al == null)
+ {
+ al = new ArrayList();
+ suits.put(suitename, al);
+ }
+ al.add(list[counter]);
+ }
+ }
+
+ }
+
+ private void runSuits()
+ {
+ Iterator i = suits.keySet().iterator();
+ while (i.hasNext())
+ {
+ String suitename = (String) i.next();
+ Log.println("Suite:" + suitename);
+ ArrayList al = (ArrayList) suits.get(suitename);
+ testtimes.clear();
+ testnames.clear();
+ testvalues.clear();
+ testerrors.clear();
+ runTests(al, suitename);
+ printGraph(testnames, testtimes, testvalues, testerrors, suitename);
+ }
+ }
+
+ private void runTests(ArrayList testlist, String suitename)
+ {
+ TreeMap tests = new TreeMap();
+ String config = null;
+
+ int size = testlist.size();
+ for (int counter = 0; counter < size; counter++)
+ {
+ String filename = (String) testlist.get(counter);
+ StringTokenizer st = new StringTokenizer(filename, ".");
+ String prefix = st.nextToken();
+ String number = st.nextToken();
+
+ if (number.equals("Config"))
+ {
+ config = filename;
+ continue;
+ }
+
+ ArrayList testfiles = null;
+ if (!tests.containsKey(number))
+ {
+ testfiles = new ArrayList();
+ tests.put(number, testfiles);
+ }
+ else
+ {
+ testfiles = (ArrayList) tests.get(number);
+ }
+ testfiles.add(filename);
+ }
+
+ Iterator i = tests.keySet().iterator();
+ while (i.hasNext())
+ {
+ String number = (String) i.next();
+ runTest((ArrayList) tests.get(number), null, number, suitename);
+ }
+ }
+
+ private void runTest(ArrayList files, String config, String number, String suitename)
+ {
+ String request = null;
+ String response = null;
+ String errorresponse = null;
+
+ //Log.println("Test:"+number+" Mit Config:"+config);
+ int size = files.size();
+ for (int counter = 0; counter < size; counter++)
+ {
+ String filename = (String) files.get(counter);
+ //Log.println("File:"+filename);
+ if (filename.endsWith("ErrRes.xml"))
+ errorresponse = filename;
+ else if (filename.endsWith("Res.xml"))
+ response = filename;
+ else if (filename.endsWith("Req.xml"))
+ request = filename;
+ else
+ Log.println("Nicht relevant:" + filename);
+ }
+
+ if (request != null)
+ {
+ for (int counter = 0; counter < 1; counter++)
+ {
+ if (response != null && errorresponse != null)
+ Log.println(
+ "Test " + number + " nicht gültig ! Sowohl Response als auch ErrorResponse vorhanden !");
+ else if (response != null)
+ runPosTest(request, response, config, number, suitename);
+ else if (errorresponse != null)
+ runNegTest(request, errorresponse, config, number, suitename);
+ }
+ }
+ else
+ {
+ Log.println("Test " + number + " nicht gültig ! Kein Request vorhanden !");
+ }
+ }
+
+ private void runPosTest(String request, String response, String config, String number, String suitename)
+ {
+ long start = System.currentTimeMillis();
+ long end = 0;
+ Log.println("\n----- Starte Test <" + number + "> (positiv) -----");
+ Log.println("----- Request: " + request);
+ Log.println("----- Response: " + response);
+ try
+ {
+ long start_req = 0;
+ long end_req = 0;
+
+ Log.println("----- Lade Request:" + directorystring + "/" + request);
+ FileInputStream fis = new FileInputStream(directorystring + "/" + request);
+ Document root_doc = DOMUtils.parseDocument(fis, false, Constants.ALL_SCHEMA_LOCATIONS, null);
+ Element root = root_doc.getDocumentElement();
+ if (debug)
+ Log.println(DOMUtils.serializeNode(root));
+
+ Log.println("----- Lade Response:" + directorystring + "/" + response);
+ FileInputStream fis2 = new FileInputStream(directorystring + "/" + response);
+ Document root_response_doc = DOMUtils.parseDocument(fis2, true, Constants.ALL_SCHEMA_LOCATIONS, null);
+ Element root_response = root_response_doc.getDocumentElement();
+
+ //can_root_response.normalize();
+
+ if (request.endsWith("CX3.001.Req.xml"))
+ {
+ printKeyStoreInformation("./resources/client.keystore", "changeit");
+ System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
+ System.setProperty("javax.net.ssl.keyStore", "./resources/client.keystore");
+ System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
+ System.setProperty("javax.net.ssl.trustStore", "./resources/client.keystore");
+ System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
+
+ ssl_connection = true;
+ }
+ else
+ ssl_connection = false;
+
+ if (request.endsWith("CX0.005.Req.xml")) // ECDSA
+ ignoreSignatureValue = true;
+ else
+ ignoreSignatureValue = false;
+
+ boolean compare = false;
+
+ Transform can = new TransformImplExclusiveCanonicalXML();
+ can.setInput(XPathUtils.selectNodeList(root_response, XPathUtils.ALL_NODES_XPATH), null);
+
+ InputStream is = (InputStream) can.transform();
+ Document can_root_response_doc =
+ DOMUtils.parseDocument(is, true, Constants.ALL_SCHEMA_LOCATIONS, null);
+ Element can_root_response = root_response_doc.getDocumentElement();
+
+ if (checkNode(root, "VerifyCMSSignatureRequest"))
+ {
+ Log.println("----- Anfrage wird gesendet ...");
+ SignatureVerificationCaller svc = new SignatureVerificationCaller();
+ start_req = System.currentTimeMillis();
+ Element root_serverresponse = svc.verifyCMSSignature(root, VERIFICATION_ENDPOINT);
+ end_req = System.currentTimeMillis();
+
+ Transform can2 = new TransformImplExclusiveCanonicalXML();
+ can2.setInput(XPathUtils.selectNodeList(root_serverresponse, XPathUtils.ALL_NODES_XPATH), null);
+ InputStream is2 = (InputStream) can2.transform();
+
+ Document can_root_serverresponse_doc =
+ DOMUtils.parseDocument(is2, true, Constants.ALL_SCHEMA_LOCATIONS, null);
+ Element can_root_serverresponse = can_root_serverresponse_doc.getDocumentElement();
+ if (debug)
+ Log.println("----- Antwort sollte so aussehen ...\n" + DOMUtils.serializeNode(can_root_response));
+ if (debug)
+ Log.println("----- Antwort vom Server ...\n" + DOMUtils.serializeNode(can_root_serverresponse));
+
+ Log.println("----- Antwort validieren ...\n");
+ DOMUtils.validateElement(can_root_serverresponse, Constants.ALL_SCHEMA_LOCATIONS, null);
+ Log.println("----- Antwort vergleichen ...\n");
+
+ String error = findErrorNode(can_root_serverresponse);
+ if (error != null)
+ {
+ compare = false;
+ Log.println("----- ServerError: " + error);
+ testerrors.add(error);
+ }
+ else
+ {
+ compare = compareElements(can_root_response, can_root_serverresponse);
+ testerrors.add(null);
+ }
+
+ }
+ else if (checkNode(root, "VerifyXMLSignatureRequest"))
+ {
+ Log.println("----- Anfrage wird gesendet ...");
+ SignatureVerificationCaller svc = new SignatureVerificationCaller();
+ start_req = System.currentTimeMillis();
+ Element root_serverresponse = svc.verifyXMLSignature(root, VERIFICATION_ENDPOINT);
+ end_req = System.currentTimeMillis();
+
+ Transform can2 = new TransformImplExclusiveCanonicalXML();
+ can2.setInput(XPathUtils.selectNodeList(root_serverresponse, XPathUtils.ALL_NODES_XPATH), null);
+ InputStream is2 = (InputStream) can2.transform();
+
+ Document can_root_serverresponse_doc =
+ DOMUtils.parseDocument(is2, false, Constants.ALL_SCHEMA_LOCATIONS, null);
+ Element can_root_serverresponse = can_root_serverresponse_doc.getDocumentElement();
+
+ if (debug)
+ Log.println("----- Antwort sollte so aussehen ...\n" + DOMUtils.serializeNode(can_root_response));
+ if (debug)
+ Log.println("----- Antwort vom Server ...\n" + DOMUtils.serializeNode(can_root_serverresponse));
+
+ Log.println("----- Antwort validieren ...\n");
+ DOMUtils.validateElement(can_root_serverresponse, Constants.ALL_SCHEMA_LOCATIONS, null);
+ Log.println("----- Antwort vergleichen ...\n");
+ String error = findErrorNode(can_root_serverresponse);
+ if (error != null)
+ {
+ compare = false;
+ Log.println("----- ServerError: " + error);
+ testerrors.add(error);
+ }
+ else
+ {
+ compare = compareElements(can_root_response, can_root_serverresponse);
+ testerrors.add(null);
+ }
+ }
+ else if (checkNode(root, "CreateXMLSignatureRequest"))
+ {
+ Log.println("----- Anfrage wird gesendet ...");
+ SignatureCreationCaller scc = new SignatureCreationCaller();
+ start_req = System.currentTimeMillis();
+ Element root_serverresponse = scc.createXMLSignature(root, CREATION_ENDPOINT);
+ end_req = System.currentTimeMillis();
+
+ Transform can2 = new TransformImplExclusiveCanonicalXML();
+ can2.setInput(XPathUtils.selectNodeList(root_serverresponse, XPathUtils.ALL_NODES_XPATH), null);
+ InputStream is2 = (InputStream) can2.transform();
+
+ Document can_root_serverresponse_doc =
+ DOMUtils.parseDocument(is2, false, Constants.ALL_SCHEMA_LOCATIONS, null);
+ Element can_root_serverresponse = can_root_serverresponse_doc.getDocumentElement();
+
+ if (debug)
+ Log.println("----- Antwort sollte so aussehen ...\n" + DOMUtils.serializeNode(can_root_response));
+ //Log.println("----- Antwort vom Server (von Can)...\n"+DOMUtils.serializeNode(root_serverresponse));
+ if (debug)
+ Log.println("----- Antwort vom Server ...\n" + DOMUtils.serializeNode(can_root_serverresponse));
+
+ Log.println("----- Antwort validieren ...\n");
+ DOMUtils.validateElement(can_root_serverresponse, Constants.ALL_SCHEMA_LOCATIONS, null);
+ Log.println("----- Antwort vergleichen ...\n");
+
+ String error = findErrorNode(can_root_serverresponse);
+ if (error != null)
+ {
+ compare = false;
+ Log.println("----- ServerError: " + error);
+ testerrors.add(error);
+ }
+ else
+ {
+ compare = compareElements(can_root_response, can_root_serverresponse);
+ testerrors.add(null);
+ }
+
+ }
+ else
+ {
+ throw new Exception("Responsetyp nicht bekannt");
+ }
+
+ if (compare)
+ {
+ pos_ok++;
+ testvalues.add(" OK");
+ Log.println("----- Keine Fehler aufgetreten");
+ }
+ else
+ {
+ pos_nok++;
+ testvalues.add("NOK");
+ Log.println("----- Response war nicht ok !");
+ }
+
+ Date start_date = new Date(start_req);
+ Date end_date = new Date(end_req);
+ long diff = end_req - start_req;
+ Log.println("----- Requeststart: " + sdf.format(start_date));
+ Log.println("----- Requestende: " + sdf.format(end_date));
+ Log.println("----- Requestdauer: " + diff + " ms");
+ if (diff > max_request)
+ max_request = diff;
+ if (diff < min_request)
+ min_request = diff;
+ all_request += diff;
+ count_all_request++;
+
+ // :)
+ testtimes.add(new Long(diff));
+ testnames.add(number);
+ }
+ catch (Exception e)
+ {
+ testtimes.add(new Long(-1L));
+ testnames.add(number);
+ testvalues.add("EXC");
+ testerrors.add(e.getMessage());
+ pos_exc++;
+ Log.println("----- Exception:\n");
+ e.printStackTrace(Log);
+ }
+ end = System.currentTimeMillis();
+ Log.println("----- Durchlaufzeit: " + ((end - start) / 1000) + " sekunden");
+ Log.println("----- Ende Test <" + number + "> -----\n");
+ }
+
+ private void runNegTest(
+ String request,
+ String errorresponse,
+ String config,
+ String number,
+ String suitename)
+ {
+ long start = System.currentTimeMillis();
+ long end = 0;
+ Log.println("\n----- Starte Test <" + number + "> (negativ) -----");
+ Log.println("----- Config: " + config);
+ Log.println("----- Request: " + request);
+ Log.println("----- ErrorResponse: " + errorresponse);
+ int error_no = 0;
+ try
+ {
+
+ FileInputStream fis = null;
+ Document root_doc = null;
+ Element root = null;
+ long start_req = 0;
+ long end_req = 0;
+
+ try
+ {
+ error_no = Integer.parseInt(readFile(directorystring + "/" + errorresponse));
+ }
+ catch (NumberFormatException nfe)
+ {
+ throw new Exception(
+ "Fehler beim Lesen der Datei "
+ + directorystring
+ + "/"
+ + errorresponse
+ + ". Die Fehlernummer konnte nicht ermittelt werden");
+ }
+
+ try
+ {
+ Log.println("----- Lade Request: " + directorystring + "/" + request);
+ fis = new FileInputStream(directorystring + "/" + request);
+ root_doc = DOMUtils.parseDocument(fis, false, Constants.ALL_SCHEMA_LOCATIONS, null);
+ root = root_doc.getDocumentElement();
+ }
+ catch (SAXParseException saxpe)
+ {
+ Log.println("Fehler beim Lesen der Requestdatei !");
+ throw saxpe;
+ }
+
+ try
+ {
+ if (request.endsWith("CX4.051.Req.xml"))
+ {
+ printKeyStoreInformation("./resources/sven.keystore", "example");
+ System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
+ System.setProperty("javax.net.ssl.keyStore", "./resources/sven.keystore");
+ System.setProperty("javax.net.ssl.keyStorePassword", "example");
+ System.setProperty("javax.net.ssl.trustStore", "./resources/sven.keystore");
+ System.setProperty("javax.net.ssl.trustStorePassword", "example");
+
+ ssl_connection = true;
+ }
+ else if (request.endsWith("CX3.052.Req.xml"))
+ {
+ printKeyStoreInformation("./resources/client.keystore", "changeit");
+ System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
+ System.setProperty("javax.net.ssl.keyStore", "./resources/client.keystore");
+ System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
+ System.setProperty("javax.net.ssl.trustStore", "./resources/client.keystore");
+ System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
+
+ ssl_connection = true;
+ }
+ else
+ ssl_connection = false;
+
+ Element root_serverresponse = null;
+
+ if (checkNode(root, "VerifyCMSSignatureRequest"))
+ {
+ SignatureVerificationCaller svc = new SignatureVerificationCaller();
+ start_req = System.currentTimeMillis();
+ root_serverresponse = svc.verifyCMSSignature(root, VERIFICATION_ENDPOINT);
+ end_req = System.currentTimeMillis();
+ Log.println(DOMUtils.serializeNode(root_serverresponse));
+ }
+ else if (checkNode(root, "VerifyXMLSignatureRequest"))
+ {
+ SignatureVerificationCaller svc = new SignatureVerificationCaller();
+ start_req = System.currentTimeMillis();
+ root_serverresponse = svc.verifyXMLSignature(root, VERIFICATION_ENDPOINT);
+ end_req = System.currentTimeMillis();
+ Log.println(DOMUtils.serializeNode(root_serverresponse));
+ }
+ else if (checkNode(root, "CreateXMLSignatureRequest"))
+ {
+ SignatureCreationCaller svc = new SignatureCreationCaller();
+ start_req = System.currentTimeMillis();
+ root_serverresponse = svc.createXMLSignature(root, CREATION_ENDPOINT);
+ end_req = System.currentTimeMillis();
+ Log.println(DOMUtils.serializeNode(root_serverresponse));
+ }
+
+ Transform can2 = new TransformImplExclusiveCanonicalXML();
+ can2.setInput(XPathUtils.selectNodeList(root_serverresponse, XPathUtils.ALL_NODES_XPATH), null);
+ InputStream is2 = (InputStream) can2.transform();
+
+ Document can_root_serverresponse_doc =
+ DOMUtils.parseDocument(is2, false, Constants.ALL_SCHEMA_LOCATIONS, null);
+ Element can_root_serverresponse = can_root_serverresponse_doc.getDocumentElement();
+
+ int errno = getErrorNumber(can_root_serverresponse);
+
+ if (errno == -1)
+ {
+ Log.println("Kein Fehler aufgetreten oder Fehlernummer konnte nicht ermittelt werden.");
+ neg_nok++;
+ testvalues.add("NOK");
+ testerrors.add("Kein Fehler aufgetreten oder Fehlernummer konnte nicht ermittelt werden.");
+ }
+ else
+ {
+ Log.println("----- Fehlercode vom Server:" + errno);
+ Log.println("----- Fehlercode vom Test:" + error_no);
+ if (errno == error_no)
+ {
+ Log.println("Test erfolgreich !");
+ testvalues.add(" OK");
+ testerrors.add(null);
+ neg_ok++;
+ }
+ else
+ {
+ Log.println("Test nicht erfolgreich !");
+ neg_nok++;
+ testvalues.add("NOK");
+ testerrors.add("Fehlercodes nicht gleich: Server " + errno + " Client " + error_no);
+ }
+ }
+
+ }
+ catch (org.apache.axis.AxisFault af)
+ {
+ end_req = System.currentTimeMillis();
+ /*
+ * Sample Fault:
+ AxisFault
+ faultCode: {http://xml.apache.org/axis/}Server.userException
+ faultString: at.gv.egovernment.moa.spss.server.MOAApplicationException: Fehler beim Validieren der Anfrage
+ faultActor: null
+ faultDetail:
+ ErrorResponse:
+ <ns2:ErrorCode>1100</ns2:ErrorCode>
+ <ns2:Info>Fehler beim Validieren der Anfrage</ns2:Info>
+ */
+ Element base = af.getFaultDetails()[0];
+ System.out.println(DOMUtils.serializeNode(base));
+
+ int error_no_server = getErrorNumber(base);
+ if (error_no_server == -1)
+ {
+ Log.println("Kein Fehler aufgetreten oder Fehlernummer konnte nicht ermittelt werden.");
+ neg_nok++;
+ testvalues.add("NOK");
+ testerrors.add("Kein Fehler aufgetreten oder Fehlernummer konnte nicht ermittelt werden.");
+ }
+ else
+ {
+ Log.println("----- Fehlercode vom Server:" + error_no_server);
+ Log.println("----- Fehlercode vom Test:" + error_no);
+ if (error_no_server == error_no)
+ {
+ Log.println("Test erfolgreich !");
+ testvalues.add(" OK");
+ testerrors.add(null);
+ neg_ok++;
+ }
+ else
+ {
+ Log.println("Test nicht erfolgreich !");
+ neg_nok++;
+ testvalues.add("NOK");
+ testerrors.add("Fehlercodes nicht gleich: Server " + error_no_server + " Client " + error_no);
+ }
+ }
+ }
+ long diff = end_req - start_req;
+ Log.println("----- Requestdauer: " + diff + " ms");
+ if (diff > max_request)
+ max_request = diff;
+ if (diff < min_request)
+ min_request = diff;
+ all_request += diff;
+ count_all_request++;
+ testtimes.add(new Long(diff));
+ testnames.add(number);
+
+ }
+ catch (UTFDataFormatException e)
+ {
+ method2(request, error_no, number);
+ }
+ catch (SAXParseException e)
+ {
+ method2(request, error_no, number);
+ }
+ catch (Exception e)
+ {
+ neg_exc++;
+ testtimes.add(new Long(-1L));
+ testnames.add(number);
+ testvalues.add("EXC");
+ testerrors.add(e.getMessage());
+ Log.println("----- Exception:\n");
+ e.printStackTrace(Log);
+ }
+ end = System.currentTimeMillis();
+ Log.println("----- Durchlaufzeit: " + ((end - start) / 1000) + " sekunden");
+ Log.println("----- Ende Test <" + number + "> -----\n");
+ }
+
+ private void method2(String request, int error_no, String number)
+ {
+ try
+ {
+ Log.println("----- Methode 2\n");
+ String data = readFile(directorystring + "/" + request);
+ //Log.println("Data:\n"+data);
+ int index = data.indexOf(">");
+ if (index != -1)
+ {
+ String xml_head = data.substring(0, index);
+ data = data.substring(index + 1);
+ //Log.println("Data2:\n"+data);
+
+ data =
+ xml_head
+ + "<soap:Envelope "
+ + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\" "
+ + "soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\"> "
+ + "<soap:Body> "
+ + data
+ + "</soap:Body>"
+ + "</soap:Envelope>";
+ //Log.println("Data3:\n"+data);
+
+ String ep = null;
+ if (data.indexOf("<Create") != -1)
+ ep = server + "moa-spss/services/SignatureCreation";
+ else
+ ep = server + "moa-spss/services/SignatureVerification";
+
+ HttpURLConnection urlc = (HttpURLConnection) (new URL(ep)).openConnection();
+ urlc.setDoInput(true);
+ urlc.setDoOutput(true);
+ urlc.setRequestProperty("SOAPAction", "");
+ BufferedWriter ow = new BufferedWriter(new OutputStreamWriter(urlc.getOutputStream()));
+ ow.write(data);
+ ow.flush();
+ int code = 0;
+ try
+ {
+ code = urlc.getResponseCode();
+ }
+ catch (IOException ioe)
+ {
+ code = 500;
+ }
+
+ if (code == 500)
+ {
+ BufferedReader err_br = new BufferedReader(new InputStreamReader(urlc.getErrorStream()));
+ StringBuffer err_response = new StringBuffer();
+ String err_line = null;
+ while ((err_line = err_br.readLine()) != null)
+ {
+ err_response.append(err_line);
+ }
+
+ Log.println("ErrResponse:\n" + err_response);
+
+ if (error_no == 0)
+ {
+ Log.println("Test erfolgreich !");
+ testvalues.add(" OK");
+ testtimes.add(new Long(-1));
+ testnames.add(number);
+ testerrors.add(null);
+ neg_ok++;
+ }
+ else
+ {
+ Log.println("Test nicht erfolgreich !");
+ neg_nok++;
+ testvalues.add("NOK");
+ testtimes.add(new Long(-1));
+ testnames.add(number);
+ testerrors.add("Test nicht erfolgreich !");
+ }
+
+ }
+ else
+ {
+ BufferedReader br = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
+ StringBuffer response = new StringBuffer();
+ String line = null;
+ while ((line = br.readLine()) != null)
+ {
+ response.append(line);
+ }
+ String resp = response.toString();
+ Log.println("Response:\n" + response);
+
+ int pos = resp.indexOf("ErrorCode>");
+ if (pos == -1)
+ {
+ Log.println("Test nicht erfolgreich !");
+ neg_nok++;
+ testvalues.add("NOK");
+ testtimes.add(new Long(-1));
+ testnames.add(number);
+ testerrors.add("Test nicht erfolgreich !");
+ }
+ else
+ {
+ resp = resp.substring(pos + "ErrorCode>".length());
+ pos = resp.indexOf("<");
+ if (pos == -1)
+ {
+ Log.println("Test nicht erfolgreich !");
+ neg_nok++;
+ testvalues.add("NOK");
+ testtimes.add(new Long(-1));
+ testnames.add(number);
+ testerrors.add("Test nicht erfolgreich !");
+ }
+ else
+ {
+ resp = resp.substring(0, pos);
+
+ int err_resp = -1;
+ try
+ {
+ err_resp = Integer.parseInt(resp);
+ }
+ catch (NumberFormatException nfe)
+ {
+ }
+ //Log.println("ResponseCode:\n"+resp);
+
+ Log.println("----- Fehlercode vom Server:" + err_resp);
+ Log.println("----- Fehlercode vom Test:" + error_no);
+
+ if (err_resp == error_no)
+ {
+ Log.println("Test erfolgreich !");
+ neg_ok++;
+ testvalues.add(" OK");
+ testtimes.add(new Long(-1));
+ testnames.add(number);
+ testerrors.add(null);
+ }
+ else
+ {
+ Log.println("Test nicht erfolgreich !");
+ neg_ok++;
+ testvalues.add("NOK");
+ testtimes.add(new Long(-1));
+ testnames.add(number);
+ testerrors.add("Fehlercodes nicht gleich: Server " + err_resp + " Client " + error_no);
+ }
+ }
+ }
+ }
+ }
+ }
+ catch (Exception ee)
+ {
+ ee.printStackTrace();
+ }
+ }
+
+ private boolean compareElements(Element root1, Element root2)
+ {
+ //Log.println("----- Compare Elements:"+root1.getNodeName()+" "+root2.getNodeName());
+ filterTree(root1);
+ filterTree(root2);
+ return compareNodes(root1, root2, 0, "root/", false);
+ }
+
+ private boolean compareNodes(Node n1, Node n2, int level, String path, boolean attribute)
+ {
+ /*try {
+ Log.println(DOMUtils.serializeNode(n1));
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ }*/
+ boolean equal = false;
+ //Log.println("----- Compare Node "+level+":"+n1+" "+n2);
+ //Log.println("----- Compare Node "+level+":"+n1.getNodeName()+" "+n2.getNodeName());
+ //Log.println("----- Checking:"+path+getPathString(n1));
+ NodeList nl1 = n1.getChildNodes();
+ NodeList nl2 = n2.getChildNodes();
+
+ int size1 = nl1.getLength();
+ int size2 = nl2.getLength();
+
+ if (debug)
+ display_one(n1);
+ if (debug)
+ display_one(n2);
+
+ if (debug)
+ if (n1.getNodeName().equals("Base64Content") && n2.getNodeName().equals("Base64Content"))
+ {
+ try
+ {
+ Log.println(
+ "CONT:"
+ + new String(Base64Utils.decode(strip(n1.getChildNodes().item(0).getNodeValue()), false)));
+ Log.println(
+ "CONT:"
+ + new String(Base64Utils.decode(strip(n2.getChildNodes().item(0).getNodeValue()), false)));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ if (size1 != size2)
+ {
+ Log.println(
+ "----- Anzahl der Kinder nicht gleich:"
+ + path
+ + getPathString(n1)
+ + "("
+ + size1
+ + ") / "
+ + getPathString(n2)
+ + "("
+ + size2
+ + ")");
+ return false;
+ }
+
+ equal = compareNodeExact(n1, n2, level, path + getPathString(n1) + "/");
+ if (!equal)
+ {
+ Log.println("----- Knoten sind nicht identisch:" + path + getPathString(n1));
+ return false;
+ }
+
+ if (n1.hasAttributes() || n2.hasAttributes())
+ {
+ equal = compareNodeAttriubtes(n1, n2, level + 1, path + getPathString(n1) + "/(a)");
+ if (!equal)
+ {
+ Log.println("----- Attribute stimmen nicht überein:" + path + getPathString(n1));
+ return false;
+ }
+ }
+ if (size1 == 0)
+ {
+ return true;
+ }
+
+ for (int counter = 0; counter < size1; counter++)
+ {
+ boolean found = false;
+ Node comp_n1 = nl1.item(counter);
+
+ //if(comp_n1==null) return false;
+
+ Node comp_n2 = null;
+ size2 = nl2.getLength();
+ for (int counter2 = 0; counter2 < size2; counter2++)
+ {
+ comp_n2 = nl2.item(counter2);
+
+ /*equal = compareNodeExact(comp_n1,comp_n2,level+1);
+ if(equal) return false;*/
+ //Log.println("COMP_N1:"+comp_n1);
+ //Log.println("COMP_N2:"+comp_n2);
+ equal = compareNodes(comp_n1, comp_n2, level + 1, path + getPathString(comp_n1) + "/", false);
+ if (equal)
+ {
+ n2.removeChild(comp_n2);
+ counter2 = size2;
+ nl2 = n2.getChildNodes();
+ size2 = nl2.getLength();
+ }
+
+ }
+
+ if (!equal)
+ {
+ Log.println("----- Keine Übereinstimmung gefunden:" + path + getPathString(comp_n1));
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private boolean compareNodeExact(Node n1, Node n2, int level, String path)
+ {
+ if (n1.getNodeType() == Node.TEXT_NODE)
+ {
+ Text textnode = (Text) n1;
+ /*Log.println("----- *****"+textnode.getNodeName());
+ Log.println("----- *****"+textnode.getParentNode().getNodeName());
+ Log.println("----- *****"+textnode.getNodeValue());*/
+ }
+
+ //Log.println("----- Checking:"+path);
+ String n1_name = n1.getNodeName();
+ String n2_name = n2.getNodeName();
+ /*Log.println("----- !!!!!"+n1.getNodeName());
+ Log.println("----- !!!!!"+n1.getNodeValue());
+ Log.println("----- !!!!!"+n1.getLocalName());
+ Log.println("----- !!!!!"+n1.getPrefix());
+ Log.println("----- !!!!!"+n1.getNextSibling());
+ Log.println("----- !!!!!"+n1.getPreviousSibling());*/
+
+ //Log.println("----- Compare Node "+level+":"+n1_name+" "+n2_name);
+ if (!((n1_name == null && n2_name == null)
+ || (n1_name != null && n2_name != null && n1_name.equals(n2_name))))
+ {
+ Log.println("----- Name stimmt nicht überein:" + path);
+ return false;
+ }
+
+ //Log.println("----- Compare Node "+level+":"+n1.getNodeType()+" "+n2.getNodeType());
+ if (n1.getNodeType() != n2.getNodeType())
+ {
+ Log.println("----- Knotentyp stimmt nicht überein:" + path);
+ return false;
+ }
+
+ String n1_ns = n1.getPrefix();
+ String n2_ns = n2.getPrefix();
+ //Log.println("----- Compare Node "+level+":"+n1_ns+" "+n2_ns);
+ if (!((n1_ns == null && n2_ns == null) || (n1_ns != null && n2_ns != null && n1_ns.equals(n2_ns))))
+ {
+ Log.println("----- NameSpace stimmt nicht überein:" + path);
+ return false;
+ }
+
+ String n1_value = n1.getNodeValue();
+ String n2_value = n2.getNodeValue();
+
+ boolean special = false;
+ special = specialValues(n1_value, n2_value, path);
+ if (special)
+ return true;
+
+ //Log.println("----- Compare Node "+level+":"+n1_value+" "+n2_value);
+ if (!((n1_value == null && n2_value == null)
+ || (n1_value != null && n2_value != null && n1_value.equals(n2_value))))
+ {
+ Log.println("----- Wert stimmt nicht überein:" + path);
+ Log.println("----- Value1:\n" + n1_value);
+ Log.println("----- Value2:\n" + n2_value);
+ return false;
+ }
+
+ return true;
+ }
+
+ private boolean compareNodeAttriubtesWithoutSize(Node n1, Node n2, int level, String path)
+ {
+ return true;
+ }
+
+ private boolean compareNodeAttriubtes(Node n1, Node n2, int level, String path)
+ {
+ //Log.println("----- Compare NodeAttributes "+level+":"+n1.getNodeName()+" "+n2.getNodeName());
+ Element n1elem = (Element) n1;
+ Element n2elem = (Element) n2;
+
+ NamedNodeMap nnm1 = n1.getAttributes();
+ NamedNodeMap nnm2 = n2.getAttributes();
+
+ int size1 = 0;
+ int size2 = 0;
+
+ boolean specialattrs = specialAttributesSize(path);
+
+ if (!specialattrs)
+ {
+
+ if (nnm1 == null && nnm2 == null)
+ return true;
+ if (nnm1 == null || nnm2 == null)
+ {
+ Log.println("----- Anzahl der Attribute nicht gleich:" + path + ":" + getPathString(n1));
+ return false;
+ }
+ size1 = nnm1.getLength();
+ size2 = nnm2.getLength();
+
+ if (size1 != size2)
+ {
+ Log.println("----- Anzahl der Attribute nicht gleich:" + path + ":" + getPathString(n1));
+ return false;
+ }
+
+ }
+ else
+ {
+ return compareNodeAttriubtesWithoutSize(n1, n2, level, path);
+ }
+
+ for (int counter = 0; counter < size1; counter++)
+ {
+ Node attribute_node1 = nnm1.item(counter);
+ Node attribute_node2 = nnm2.item(counter);
+
+ String attr1_name = attribute_node1.getNodeName();
+ String attr2_name = attribute_node2.getNodeName();
+
+ //Log.println("----- Checking:"+path+">"+attr1_name);
+
+ String value1 = n1elem.getAttribute(attr1_name);
+ String value2 = n2elem.getAttribute(attr2_name);
+
+ boolean special = false;
+
+ special = specialAttributes(value1, value2);
+ if (special)
+ {
+ return special;
+ }
+
+ if (!value1.equals(value2))
+ {
+ Log.println("----- Keine Übereinstimmung gefunden:" + path + getPathString(n1));
+ return false;
+ }
+ //Log.println("----- Compare NodeAttributes > "+level+":"+attribute_node1+" "+attribute_node2);
+
+ /*boolean equal = compareNodes(attribute_node1,attribute_node2,level+1,path+attribute_node1.getNodeName()+"/",true);
+ if(!equal)
+ {
+ //Log.println("----- no match for:"+attribute_node1.getNodeName());
+ return false;
+ }*/
+
+ }
+
+ return true;
+ }
+
+ private boolean checkNode(Node base, String name)
+ {
+ if (base.getNodeName().equals(name))
+ {
+ return true;
+ }
+
+ NodeList children = base.getChildNodes();
+ int size = children.getLength();
+ for (int counter = 0; counter < size; counter++)
+ {
+ boolean found = checkNode(children.item(counter), name);
+ if (found)
+ return true;
+ }
+ return false;
+ }
+
+ private void display_one(Node base)
+ {
+ int att_size = 0;
+ if (base.getAttributes() != null)
+ {
+ att_size = base.getAttributes().getLength();
+ }
+ if (base.getNodeName().equals("#text"))
+ Log.println(
+ base.getNodeName()
+ + base.getChildNodes().getLength()
+ + ":"
+ + att_size
+ + " ("
+ + base.getNodeValue()
+ + ")");
+ else
+ Log.println(base.getNodeName() + base.getChildNodes().getLength() + ":" + att_size);
+ }
+
+ private void display(Node base)
+ {
+ display(base, 1);
+ }
+
+ private void display(Node base, int level)
+ {
+ String spacer = "";
+ for (int counter = 0; counter < level; counter++)
+ {
+ spacer += " ";
+ }
+
+ int att_size = 0;
+ if (base.getAttributes() != null)
+ {
+ att_size = base.getAttributes().getLength();
+ }
+ if (base.getNodeName().equals("#text"))
+ Log.println(
+ spacer
+ + base.getNodeName()
+ + base.getChildNodes().getLength()
+ + ":"
+ + att_size
+ + " ("
+ + base.getNodeValue()
+ + ")");
+ else
+ Log.println(spacer + base.getNodeName() + base.getChildNodes().getLength() + ":" + att_size);
+
+ NodeList children = base.getChildNodes();
+ int size = children.getLength();
+ for (int counter = 0; counter < size; counter++)
+ {
+ display(children.item(counter), level + 1);
+ }
+ }
+
+ private void filterTree(Node base)
+ {
+ ArrayList removeList = new ArrayList();
+
+ NodeList children = base.getChildNodes();
+ int size = children.getLength();
+ for (int counter = 0; counter < size; counter++)
+ {
+ Node child1 = children.item(counter);
+ if (child1.getNodeType() == Node.TEXT_NODE && child1.getNodeValue().trim().equals(""))
+ {
+ removeList.add(child1);
+ }
+ }
+
+ size = removeList.size();
+ for (int counter = 0; counter < size; counter++)
+ {
+ base.removeChild((Node) removeList.get(counter));
+ }
+
+ children = base.getChildNodes();
+ size = children.getLength();
+ for (int counter = 0; counter < size; counter++)
+ {
+ filterTree(children.item(counter));
+ }
+
+ }
+
+ private String readFile(String filename) throws Exception
+ {
+ RandomAccessFile raf = new RandomAccessFile(filename, "r");
+ if (raf.length() > Integer.MAX_VALUE)
+ throw new IOException("file too big to fit in byte array.");
+
+ byte[] result = new byte[(int) raf.length()];
+
+ raf.read(result);
+
+ return new String(result);
+
+ }
+
+ private String getPathString(Node n)
+ {
+ if (n.getNodeType() == Node.TEXT_NODE)
+ {
+ return n.getParentNode().getNodeName() + "(text)";
+ }
+ else
+ {
+ return n.getNodeName();
+ }
+
+ }
+
+ private String replaceString(String input, String oldPart, String newPart) throws Exception
+ {
+ String erg = null;
+
+ //First Part
+ erg = input.substring(0, input.indexOf(oldPart));
+ //Insert new Part
+ erg += newPart;
+
+ //insert REST
+ erg += input.substring(input.indexOf(oldPart) + oldPart.length(), input.length());
+
+ return erg;
+ }
+
+ private String replaceStringWithCheck(String input, String oldPart, String newPart) throws Exception
+ {
+ String erg = null;
+
+ if (input.indexOf(oldPart) == -1)
+ return input;
+
+ return replaceString(input, oldPart, newPart);
+ }
+
+ private void printKeyStoreInformation(String keystore, String pw) throws Exception
+ {
+ KeyStore ks = KeyStore.getInstance("JKS", "SUN");
+ ks.load(new FileInputStream(keystore), pw.toCharArray());
+ Enumeration enum = ks.aliases();
+ while (enum.hasMoreElements())
+ {
+ String certname = (String) enum.nextElement();
+ Log.println("Cert:" + certname);
+ sun.security.x509.X509CertImpl c = (sun.security.x509.X509CertImpl) ks.getCertificate(certname);
+ Principal p = c.getIssuerDN();
+ Log.println(" Issuer:" + p.getName());
+ p = c.getSubjectDN();
+ Log.println(" Subject:" + p.getName());
+ Log.println(" Serial:" + c.getSerialNumber());
+ }
+ }
+
+ private void printGraph(
+ ArrayList names,
+ ArrayList times,
+ ArrayList values,
+ ArrayList errors,
+ String suitename)
+ {
+ long max = getMax(times, names);
+ //Log.println("MAX:"+max);
+ if (max == -1)
+ {
+ Log.println("Kein Graph möglich !");
+ return;
+ }
+ Log.println("names:" + names.size());
+ Log.println("times:" + times.size());
+ Log.println("values:" + values.size());
+ Log.println("errors:" + errors.size());
+ Log.println("# | Status | Suite:" + suitename);
+ int size = times.size();
+ for (int counter = 0; counter < size; counter++)
+ {
+ String output = "";
+ long value = ((Long) times.get(counter)).longValue();
+ if (value != -1)
+ {
+ output = names.get(counter) + " | " + values.get(counter) + " | " + getElement(value, max);
+
+ }
+ else
+ {
+ output = names.get(counter) + " | " + values.get(counter) + " | " + ELEMS_ICON_BAD;
+ }
+
+ if (errors.get(counter) != null)
+ {
+ output += buildSpacer(70 - output.length()) + errors.get(counter);
+ }
+ Log.println(output);
+ }
+
+ }
+
+ private String getElement(long value, long max)
+ {
+ boolean plus = false;
+ int elems = (int) (((((double) value) / ((double) max)) * (ELEMS_MAX / 2)));
+ if (elems > ELEMS_MAX)
+ {
+ elems = ELEMS_MAX;
+ plus = true;
+ }
+ StringBuffer sb = new StringBuffer();
+ for (int counter = 0; counter < elems; counter++)
+ {
+ sb.append(ELEMS_ICON);
+ }
+ for (int counter = 0; counter < (ELEMS_MAX - elems); counter++)
+ {
+ sb.append(" ");
+ }
+ if (plus)
+ sb.append("> ");
+ else
+ sb.append(" ");
+
+ sb.append(value + " ms");
+
+ return sb.toString();
+ }
+
+ private long getMax(ArrayList times, ArrayList names)
+ {
+ int count = 0;
+ double sum = 0;
+ int size = times.size();
+ for (int counter = 0; counter < size; counter++)
+ {
+ //Log.println(times.get(counter)+":"+names.get(counter));
+ long value = ((Long) times.get(counter)).longValue();
+ if (value != -1)
+ {
+ sum += value;
+ count++;
+ }
+ }
+
+ if (count == 0)
+ return -1;
+
+ return ((long) (sum / count));
+ }
+
+ private boolean specialAttributes(String value1, String value2)
+ {
+ //if(value1.startsWith("reference-") && value2.startsWith("reference-")) return true;
+ if (value1.startsWith("signature-") && value2.startsWith("signature-"))
+ return true;
+
+ return false;
+ }
+
+ private boolean specialAttributesSize(String path)
+ {
+ if (path.endsWith("/xsl:template/(a)"))
+ return true;
+ return false;
+ }
+
+ private boolean specialValues(String value1, String value2, String path)
+ {
+
+ //Log.println(path);
+ if (ignoreSignatureValue)
+ {
+ if (path.endsWith("/dsig:SignatureValue(text)/"))
+ {
+ return true;
+ }
+ }
+ else
+ {
+ if (path.endsWith("/dsig:SignatureValue(text)/"))
+ {
+ String stripped_1 = strip(value1);
+ String stripped_2 = strip(value2);
+ return stripped_1.equals(stripped_2);
+ }
+ }
+
+ if (path.endsWith("/dsig:X509Certificate(text)/"))
+ {
+ String stripped_1 = strip(value1);
+ String stripped_2 = strip(value2);
+ return stripped_1.equals(stripped_2);
+ }
+
+ if (path.endsWith("/dsig:Object(text)/"))
+ {
+ String stripped_1 = strip(value1);
+ String stripped_2 = strip(value2);
+ return stripped_1.equals(stripped_2);
+ }
+
+ if (path.endsWith("/Base64Content(text)/"))
+ {
+ String stripped_1 = strip(value1);
+ String stripped_2 = strip(value2);
+ return stripped_1.equals(stripped_2);
+ }
+
+ if (path.endsWith("/FailedReference(text)/"))
+ {
+ try
+ {
+ int stripped_1 = Integer.parseInt(value1);
+ int stripped_2 = Integer.parseInt(value2);
+ return stripped_1 == stripped_2;
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+ }
+
+ return false;
+ }
+
+ private String strip(String input)
+ {
+ String output = replaceStringAll(input, " ", "");
+ output = replaceStringAll(output, "\n", "");
+ output = replaceStringAll(output, "\r", "");
+ return output;
+ }
+
+ public static String replaceStringAll(String input, String oldPart, String newPart)
+ {
+
+ String erg = null;
+
+ int pos = input.indexOf(oldPart);
+ if (pos == -1)
+ return input;
+
+ while (true)
+ {
+
+ //First Part
+ pos = input.indexOf(oldPart);
+ if (pos == -1)
+ break;
+ erg = input.substring(0, pos);
+
+ //Insert new Part
+ erg += newPart;
+
+ //insert REST
+ erg += input.substring(input.indexOf(oldPart) + oldPart.length(), input.length());
+
+ input = erg;
+ }
+ return erg;
+ }
+
+ private int getErrorNumber(Element root)
+ {
+ ArrayList result = new ArrayList();
+ findNode(root, "ErrorCode", result);
+ if (result.size() != 1)
+ return -1;
+ Node n = (Node) result.get(0);
+ String text = (String) n.getChildNodes().item(0).getNodeValue();
+ try
+ {
+ int error = Integer.parseInt(text);
+ return error;
+ }
+ catch (NumberFormatException nfe)
+ {
+ Log.println(text + " ist keine gültige Fehlernummer");
+ return -1;
+ }
+ }
+
+ private void findNode(Node base, String name, ArrayList foundNodes)
+ {
+ findNode(base, name, foundNodes, -1);
+ }
+
+ private void findNode(Node base, String name, ArrayList foundNodes, int max_level)
+ {
+ findNode(base, name, foundNodes, max_level, 0);
+ }
+
+ private void findNode(Node base, String name, ArrayList foundNodes, int max_level, int level)
+ {
+ if (max_level != -1 && max_level <= level)
+ return;
+ //System.out.println("FINDNODE "+name);
+ //System.out.println("CHECKING "+base.getNodeName());
+ if (base.getNodeName().endsWith(name))
+ {
+ //System.out.println("ADD BASE !"+name);
+ foundNodes.add(base);
+ }
+
+ NodeList children = base.getChildNodes();
+ int size = children.getLength();
+ for (int counter = 0; counter < size; counter++)
+ {
+ findNode(children.item(counter), name, foundNodes, max_level, level + 1);
+ }
+ }
+
+ private String findErrorNode(Node n)
+ {
+ ArrayList al = new ArrayList();
+ findNode(n, "ErrorResponse", al);
+ if (al.size() != 0)
+ {
+ al.clear();
+ findNode(n, "ErrorCode", al);
+ String code = ((Node) al.get(0)).getChildNodes().item(0).getNodeValue();
+ al.clear();
+ findNode(n, "Info", al);
+ String msg = ((Node) al.get(0)).getChildNodes().item(0).getNodeValue();
+
+ return "ErrorCode: " + code + " / ErrorMsg: " + msg;
+ }
+ else
+ return null;
+ }
+
+ private String buildSpacer(int length)
+ {
+ if (length <= 0)
+ return "";
+ else
+ {
+ StringBuffer output = new StringBuffer();
+ for (int counter = 0; counter < length; counter++)
+ {
+ output.append(" ");
+ }
+ return output.toString();
+ }
+ }
+
+} \ No newline at end of file
diff --git a/spss.test/src/testgenerator/CMSKeyStore.java b/spss.test/src/testgenerator/CMSKeyStore.java
new file mode 100644
index 000000000..a85da893b
--- /dev/null
+++ b/spss.test/src/testgenerator/CMSKeyStore.java
@@ -0,0 +1,198 @@
+// Copyright (C) 1997-2002 IAIK
+// email: jce-info@iaik.tu-graz.ac.at
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE.
+//
+// $Header$
+//
+// $Header$
+//
+
+package testgenerator;
+
+import iaik.utils.Util;
+import iaik.x509.X509Certificate;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+
+public class CMSKeyStore implements CMSKeyStoreConstants {
+
+ static Object[][] certificates = new Object[3][7];
+ static PrivateKey[][] keys = new PrivateKey[3][7];
+ static X509Certificate[] ca_certificates = new X509Certificate[2];
+ static PrivateKey[] ca_keys = new PrivateKey[2];
+
+ public final static int RSA = 0;
+ public final static int DSA = 1;
+ public final static int ESDH = 2;
+
+ public final static int SZ_512_SIGN = 0;
+ public final static int SZ_1024_SIGN = 1;
+ public final static int SZ_2048_SIGN = 2;
+ public final static int SZ_512_CRYPT = 3;
+ public final static int SZ_1024_CRYPT = 4;
+ public final static int SZ_1024_CRYPT_ = 5;
+ public final static int SZ_2048_CRYPT = 6;
+
+ static KeyStore key_store;
+
+ static {
+ System.out.println("initializing KeyStore...");
+ loadKeyStore();
+ initKeyStore();
+ }
+
+ private static void loadKeyStore() {
+ // try to locate the KeyStore
+ // first check the current working directory
+ System.out.println("User.dir:"+System.getProperty("user.dir"));
+ File ks = new File(System.getProperty("user.dir"), KS_FILENAME);
+ if (!ks.exists()) {
+ System.out.println("Can not find the KeyStore in directory:");
+ System.out.println(ks.getAbsolutePath());
+ System.exit(1);
+ }
+
+ // now try to create and load the KeyStore
+ try {
+ key_store = KeyStore.getInstance("IAIKKeyStore");
+ key_store.load(new FileInputStream(ks), KS_PASSWORD);
+ } catch (Exception ex) {
+ System.out.println("Unable to load KeyStore!");
+ ex.printStackTrace();
+ System.exit(1);
+ }
+ }
+
+ private static void initKeyStore() {
+
+ try {
+ ca_certificates[RSA] = Util.convertCertificateChain(key_store.getCertificateChain(CA_RSA))[0];
+ ca_keys[RSA] = (PrivateKey)key_store.getKey(CA_RSA, KS_PASSWORD);
+
+ // RSA for signing
+ certificates[RSA][SZ_512_SIGN] = Util.convertCertificateChain(key_store.getCertificateChain(RSA_512_SIGN));
+ keys[RSA][SZ_512_SIGN] = (PrivateKey)key_store.getKey(RSA_512_SIGN, KS_PASSWORD);
+ certificates[RSA][SZ_1024_SIGN] = Util.convertCertificateChain(key_store.getCertificateChain(RSA_1024_SIGN));
+ keys[RSA][SZ_1024_SIGN] = (PrivateKey)key_store.getKey(RSA_1024_SIGN, KS_PASSWORD);
+ certificates[RSA][SZ_2048_SIGN] = Util.convertCertificateChain(key_store.getCertificateChain(RSA_2048_SIGN));
+ keys[RSA][SZ_2048_SIGN] = (PrivateKey)key_store.getKey(RSA_2048_SIGN, KS_PASSWORD);
+ // RSA for encrypting
+ certificates[RSA][SZ_512_CRYPT] = Util.convertCertificateChain(key_store.getCertificateChain(RSA_512_CRYPT));
+ keys[RSA][SZ_512_CRYPT] = (PrivateKey)key_store.getKey(RSA_512_CRYPT, KS_PASSWORD);
+ certificates[RSA][SZ_1024_CRYPT] = Util.convertCertificateChain(key_store.getCertificateChain(RSA_1024_CRYPT));
+ keys[RSA][SZ_1024_CRYPT] = (PrivateKey)key_store.getKey(RSA_1024_CRYPT, KS_PASSWORD);
+ certificates[RSA][SZ_1024_CRYPT_] = Util.convertCertificateChain(key_store.getCertificateChain(RSA_1024_CRYPT_));
+ keys[RSA][SZ_1024_CRYPT_] = (PrivateKey)key_store.getKey(RSA_1024_CRYPT_, KS_PASSWORD);
+ certificates[RSA][SZ_2048_CRYPT] = Util.convertCertificateChain(key_store.getCertificateChain(RSA_2048_CRYPT));
+ keys[RSA][SZ_2048_CRYPT] = (PrivateKey)key_store.getKey(RSA_2048_CRYPT, KS_PASSWORD);
+ } catch (Exception ex) {
+ System.out.println("Unable to get RSA certificates from KeyStore.");
+ ex.printStackTrace();
+ }
+
+ try {
+ ca_certificates[DSA] = Util.convertCertificateChain(key_store.getCertificateChain(CA_DSA))[0];
+ ca_keys[DSA] = (PrivateKey)key_store.getKey(CA_DSA, KS_PASSWORD);
+
+ certificates[DSA][SZ_512_SIGN] = Util.convertCertificateChain(key_store.getCertificateChain(DSA_512));
+ keys[DSA][SZ_512_SIGN] = (PrivateKey)key_store.getKey(DSA_512, KS_PASSWORD);
+ certificates[DSA][SZ_1024_SIGN] = Util.convertCertificateChain(key_store.getCertificateChain(DSA_1024));
+ keys[DSA][SZ_1024_SIGN] = (PrivateKey)key_store.getKey(DSA_1024, KS_PASSWORD);
+
+ } catch (Exception ex) {
+ System.out.println("Unable to get DSA certificate from KeyStore.");
+ ex.printStackTrace();
+ }
+
+ /*try {
+ certificates[ESDH][SZ_512_CRYPT] = Util.convertCertificateChain(key_store.getCertificateChain(ESDH_512));
+ keys[ESDH][SZ_512_CRYPT] = (PrivateKey)key_store.getKey(ESDH_512, KS_PASSWORD);
+ certificates[ESDH][SZ_1024_CRYPT] = Util.convertCertificateChain(key_store.getCertificateChain(ESDH_1024));
+ keys[ESDH][SZ_1024_CRYPT] = (PrivateKey)key_store.getKey(ESDH_1024, KS_PASSWORD);
+ certificates[ESDH][SZ_1024_CRYPT_] = Util.convertCertificateChain(key_store.getCertificateChain(ESDH_1024_));
+ keys[ESDH][SZ_1024_CRYPT_] = (PrivateKey)key_store.getKey(ESDH_1024_, KS_PASSWORD);
+ certificates[ESDH][SZ_2048_CRYPT] = Util.convertCertificateChain(key_store.getCertificateChain(ESDH_2048));
+ keys[ESDH][SZ_2048_CRYPT] = (PrivateKey)key_store.getKey(ESDH_2048, KS_PASSWORD);
+ } catch (Exception ex) {
+ System.out.println("Unable to get Diffie-Hellman certificate from KeyStore.");
+ ex.printStackTrace();
+ }*/
+ }
+
+ /**
+ * Returns the private key of a CA certificate.
+ *
+ * @param type {@link #RSA RSA} or {@link #DSA DSA} or {@link #ESDH ESDH}
+ */
+ public static PrivateKey getPrivateKey(int type, int size) {
+ try {
+ return keys[type][size];
+ } catch (ArrayIndexOutOfBoundsException ex) {
+ throw new RuntimeException("Wrong type or size!");
+ }
+ }
+
+ /**
+ * Returns a demo user certificate.
+ *
+ * @param type {@link #RSA RSA} or {@link #DSA DSA} or {@link #ESDH ESDH}
+ */
+ public static X509Certificate[] getCertificateChain(int type, int size) {
+ try {
+ return (X509Certificate[])certificates[type][size];
+ } catch (ArrayIndexOutOfBoundsException ex) {
+ throw new RuntimeException("Wrong type or size!");
+ }
+ }
+
+ /**
+ * Returns the private key of a CA certificate.
+ *
+ * @param type {@link #RSA RSA} or {@link #DSA DSA}
+ */
+ public static PrivateKey getCaPrivateKey(int type) {
+ try {
+ return ca_keys[type];
+ } catch (ArrayIndexOutOfBoundsException ex) {
+ throw new RuntimeException("Wrong type or size!");
+ }
+ }
+
+ /**
+ * Returns a demo CA certificate.
+ *
+ * @param type {@link #RSA RSA} or {@link #DSA DSA}
+ */
+ public static X509Certificate getCaCertificate(int type) {
+ try {
+ return ca_certificates[type];
+ } catch (ArrayIndexOutOfBoundsException ex) {
+ throw new RuntimeException("Wrong type or size!");
+ }
+ }
+}
diff --git a/spss.test/src/testgenerator/CMSKeyStoreConstants.java b/spss.test/src/testgenerator/CMSKeyStoreConstants.java
new file mode 100644
index 000000000..6e4892d64
--- /dev/null
+++ b/spss.test/src/testgenerator/CMSKeyStoreConstants.java
@@ -0,0 +1,51 @@
+// Copyright (C) 1997-2002 IAIK
+// email: jce-info@iaik.tu-graz.ac.at
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE.
+//
+// $Header$
+//
+
+package testgenerator;
+
+public interface CMSKeyStoreConstants {
+ public final static String CA_RSA = "CA.RSA";
+ public final static String CA_DSA = "CA.DSA";
+ public final static String RSA_512_SIGN = "RSA_SIGN.512";
+ public final static String RSA_512_CRYPT = "RSA_CRYPT.512";
+ public final static String RSA_1024_SIGN = "RSA_SIGN.1024";
+ public final static String RSA_1024_CRYPT = "RSA_CRYPT.1024";
+ public final static String RSA_1024_CRYPT_ = "RSA_CRYPT_.1024";
+ public final static String RSA_2048_SIGN = "RSA_SIGN.2048";
+ public final static String RSA_2048_CRYPT = "RSA_CRYPT.2048";
+ public final static String DSA_512 = "DSA.512";
+ public final static String DSA_1024 = "DSA.1024";
+ public final static String ESDH_512 = "ESDH.512";
+ public final static String ESDH_1024 = "ESDH.1024";
+ public final static String ESDH_1024_ = "ESDH_.1024";
+ public final static String ESDH_2048 = "ESDH.2048";
+ public final static String KS_FILENAME = "resources/cms.keystore";
+ public final static char[] KS_PASSWORD = "topSecret".toCharArray();
+}
+ \ No newline at end of file
diff --git a/spss.test/src/testgenerator/CreatePKCSSignature.java b/spss.test/src/testgenerator/CreatePKCSSignature.java
new file mode 100644
index 000000000..896daf6d1
--- /dev/null
+++ b/spss.test/src/testgenerator/CreatePKCSSignature.java
@@ -0,0 +1,874 @@
+package testgenerator;
+
+import iaik.ixsil.algorithms.CanonicalizationAlgorithm;
+import iaik.ixsil.algorithms.CanonicalizationAlgorithmImplCanonicalXML;
+import iaik.ixsil.algorithms.CanonicalizationAlgorithmImplCanonicalXMLWithComments;
+import iaik.ixsil.algorithms.CanonicalizationAlgorithmImplExclusiveCanonicalXML;
+import iaik.ixsil.algorithms.CanonicalizationAlgorithmImplExclusiveCanonicalXMLWithComments;
+import iaik.ixsil.algorithms.DigestAlgorithmImplSHA1;
+import iaik.ixsil.algorithms.SignatureAlgorithmImplECDSA;
+import iaik.ixsil.algorithms.SignatureAlgorithmImplRSA;
+import iaik.ixsil.algorithms.Transform;
+import iaik.ixsil.core.Position;
+import iaik.ixsil.core.Signer;
+import iaik.ixsil.core.SignerManifest;
+import iaik.ixsil.core.SignerReference;
+import iaik.ixsil.core.SignerSignature;
+import iaik.ixsil.core.SignerSignedInfo;
+import iaik.ixsil.core.URIResolverParameters;
+import iaik.ixsil.init.IXSILConstants;
+import iaik.ixsil.keyinfo.KeyManagerImpl;
+import iaik.ixsil.keyinfo.retrieval.KeyProviderImplRetrievalMethod;
+import iaik.ixsil.keyinfo.retrieval.RetrievalMethod;
+import iaik.ixsil.keyinfo.x509.KeyProviderImplX509Data;
+import iaik.ixsil.keyinfo.x509.X509Data;
+import iaik.ixsil.util.URI;
+import iaik.pkcs.pkcs12.PKCS12;
+import iaik.security.ecc.interfaces.ECDSAPrivateKey;
+import iaik.utils.Base64OutputStream;
+import java.io.ByteArrayOutputStream;
+import java.security.cert.X509Certificate;
+import java.security.interfaces.RSAPrivateKey;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.xml.serialize.DOMWriterImpl;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
+
+/**
+ * @author Stevie (Admin)
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class CreatePKCSSignature extends TestCases{
+
+ private static final int canAlgCanXML = 1;
+ private static final int canAlgCanXMLwithCom = 2;
+ private static final int canAlgExcXML = 3;
+ private static final int canAlgExcXMLwithCom = 4;
+
+ private Document doc;
+ public Signer signer;
+ private SignerSignature signature;
+ private SignerSignedInfo signedInfo;
+ private PKCS12 pkcs12;
+ private String x509CertString;
+ public CreatePKCSSignature() throws Exception {
+ iaik.security.provider.IAIK.addAsProvider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+ }
+
+ // Schritt 1
+
+ public void init() throws Exception{
+ pkcs12 = decryptPKCS12(
+ configuration_.getProperty("PKCS12file"),
+ configuration_.getProperty("PKCS12password"));
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ signer = new Signer(baseURI);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ signature = signer.getSignature();
+ signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set signature algorithm
+ SignatureAlgorithmImplRSA signatureAlg =
+ new SignatureAlgorithmImplRSA();
+ RSAPrivateKey privateKey = getPrivateKey(pkcs12);
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+
+ }
+ public void init(String iD) throws Exception{
+ pkcs12 = decryptPKCS12(
+ configuration_.getProperty("PKCS12file"),
+ configuration_.getProperty("PKCS12password"));
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ signer = new Signer(baseURI);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ signature = signer.getSignature();
+ signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set signature algorithm
+ SignatureAlgorithmImplRSA signatureAlg =
+ new SignatureAlgorithmImplRSA();
+ RSAPrivateKey privateKey = getPrivateKey(pkcs12);
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+ signature.setId(iD);
+ }
+
+ public void init(Document doc, Position position) throws Exception{
+ pkcs12 = decryptPKCS12(
+ configuration_.getProperty("PKCS12file"),
+ configuration_.getProperty("PKCS12password"));
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ signer = new Signer(doc, baseURI, position);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ signature = signer.getSignature();
+ signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set signature algorithm
+ SignatureAlgorithmImplRSA signatureAlg =
+ new SignatureAlgorithmImplRSA();
+ RSAPrivateKey privateKey = getPrivateKey(pkcs12);
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+
+ }
+
+ public void init(Document doc, Position position,String iD) throws Exception{
+ pkcs12 = decryptPKCS12(
+ configuration_.getProperty("PKCS12file"),
+ configuration_.getProperty("PKCS12password"));
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ signer = new Signer(doc, baseURI, position);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ signature = signer.getSignature();
+ signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set signature algorithm
+ SignatureAlgorithmImplRSA signatureAlg =
+ new SignatureAlgorithmImplRSA();
+ RSAPrivateKey privateKey = getPrivateKey(pkcs12);
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+ signature.setId(iD);
+
+ }
+
+
+ public void initECDSA() throws Exception{
+ pkcs12 = decryptPKCS12(
+ configuration_.getProperty("ECDSPKCS12file"),
+ configuration_.getProperty("ECDSPKCS12password"));
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ signer = new Signer(baseURI);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ signature = signer.getSignature();
+ signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set signature algorithm
+ SignatureAlgorithmImplECDSA signatureAlg = new SignatureAlgorithmImplECDSA();
+
+ ECDSAPrivateKey privateKey = (ECDSAPrivateKey)pkcs12.getKeyBag().getPrivateKey();
+
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+
+ SignerSignature signature = signer.getSignature();
+ SignerSignedInfo signedInfo = signature.getSignerSignedInfo();
+
+ }
+
+ // Schritt 2
+
+ public void setCanoncialization(int CanonicalizationMethodNumber) throws Exception
+ {
+ // Set canonicalization algorithm
+ CanonicalizationAlgorithm calg = null;
+
+ switch (CanonicalizationMethodNumber)
+ {
+ case canAlgCanXML :
+ calg = new CanonicalizationAlgorithmImplCanonicalXML(); break;
+ case canAlgCanXMLwithCom :
+ calg = new CanonicalizationAlgorithmImplCanonicalXMLWithComments(); break;
+ case canAlgExcXML :
+ calg = new CanonicalizationAlgorithmImplExclusiveCanonicalXML(); break;
+ case canAlgExcXMLwithCom :
+ calg = new CanonicalizationAlgorithmImplExclusiveCanonicalXMLWithComments(); break;
+ }
+
+ signedInfo.setCanonicalizationAlgorithm(calg);
+
+ }
+ /**
+ * Method createReference.
+ * @param booelan env: if set, the data-string will be enveloped, else an uri pointing to data will be created
+ * @param data
+ * @throws Exception
+ */
+ // Schritt 3.1
+
+ public void createEnvelopedDataObject(String iD, String data) throws Exception
+ {
+ iaik.ixsil.core.Object object = null;
+ object = signature.createObject(data);
+ object.setId(iD);
+ signature.addObject(object);
+ }
+
+ public void createEnvelopedDataObject(String iD, Element doc) throws Exception
+ {
+ iaik.ixsil.core.Object object = null;
+ object = signature.createObject(doc);
+ object.setId(iD);
+ signature.addObject(object);
+ }
+
+ public void createReference(URI uri, URI type) throws Exception
+ {
+ SignerReference reference = signedInfo.createReference();
+
+ reference.setURI(uri);
+ reference.setType(type);
+ DigestAlgorithmImplSHA1 digestAlg =
+ new DigestAlgorithmImplSHA1();
+
+ reference.setDigestAlgorithm(digestAlg);
+ signedInfo.addReference(reference);
+
+ }
+
+ public void createReference(boolean env, String data, String iD) throws Exception
+ {
+ SignerReference reference = signedInfo.createReference();
+
+ if (env) {
+ iaik.ixsil.core.Object object = null;
+ object = signature.createObject(data);
+ object.setId("envelopedData");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg =
+ new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ reference.setURI(
+ new URI("#xpointer(id('envelopedData')/node())"));
+ } else {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data);
+
+ reference.setURI(refURI);
+ if (iD!=null)
+ reference.setId(iD);
+ DigestAlgorithmImplSHA1 digestAlg =
+ new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+
+ signedInfo.addReference(reference);
+
+ }
+ public void createReference(boolean env, String data) throws Exception
+ {
+ createReference(env,data,null);
+ }
+
+ public void createETSIObjects(String data) throws Exception
+ {
+ SignerReference reference = signedInfo.createReference();
+
+ URI refURI = null;
+ refURI = new URI(data);
+
+ reference.setURI(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('etsi-signed-1-1')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"));
+ reference.setType(new URI("http://uri.etsi.org/01903/v1.1.1#SignedProperties"));
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ signedInfo.addReference(reference);
+
+ iaik.ixsil.core.Object object = null;
+ object = signature.createObject(getElement("TEST"));
+ object.setId("etsi-signed-1-1");
+ signature.addObject(object);
+ }
+
+ public Element getElement(String data) throws Exception
+ {
+ String etsinamespace = "http://uri.etsi.org/01903/v1.1.1#";
+
+ getX509Content();
+
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ //dbf.setNamespaceAware(true);
+ //dbf.setValidating(true);
+
+ Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+
+
+ Element qualprop = doc.createElementNS(etsinamespace,"etsi:QualifyingProperties");
+ qualprop.setAttributeNS(null,"Target","#signature-1-1");
+ qualprop.setAttributeNS(IXSILConstants.NAMESPACE_URI_NAMESPACES_,"xmlns:etsi",etsinamespace);
+ //qualprop.setPrefix("etsi");*/
+ //qualprop.setAttributeNodeNS(doc.createAttributeNS(etsinamespace,"etsi"));
+ Element signprop = doc.createElementNS(etsinamespace,"etsi:SignedProperties");
+ Element signsigprop = doc.createElementNS(etsinamespace,"etsi:SignedSignatureProperties");
+ Element signdataobjectprop = doc.createElementNS(etsinamespace,"etsi:SignedDataObjectProperties");
+ Element signdate = doc.createElementNS(etsinamespace,"etsi:SigningTime");
+ Text datevalue = doc.createTextNode("2003-05-10T00:01:01");
+ Element signcert = doc.createElementNS(etsinamespace,"etsi:SigningCertificate");
+ Element cert = doc.createElementNS(etsinamespace,"etsi:Cert");
+ Element signpolyident = doc.createElementNS(etsinamespace,"etsi:SignaturePolicyIdentifier");
+ Element signpolyimp = doc.createElementNS(etsinamespace,"etsi:SignaturePolicyImplied");
+ Element certdig = doc.createElementNS(etsinamespace,"etsi:CertDigest");
+ Element digmeth = doc.createElementNS(etsinamespace,"etsi:DigestMethod");
+ digmeth.setAttribute("Algorithm","http://www.w3.org/2000/09/xmldsig#sha1");
+ Element digvalue = doc.createElementNS(etsinamespace,"etsi:DigestValue");
+
+ ByteArrayOutputStream fos = new ByteArrayOutputStream();
+ Base64OutputStream base64os = new Base64OutputStream(fos);
+ base64os.write(this.X509hash.getBytes());
+ base64os.flush();
+
+ Text dig_value = doc.createTextNode(fos.toString());
+ Element is = doc.createElementNS(etsinamespace,"etsi:IssuerSerial");
+ Element i = doc.createElement("dsig:X509IssuerName");
+ Text i_value = doc.createTextNode(this.X509name);
+ Element s = doc.createElement("dsig:X509SerialNumber");
+ Text s_value = doc.createTextNode(this.X509number.toString());
+ Element dataobjformat = doc.createElementNS(etsinamespace,"etsi:DataObjectFormat");
+ dataobjformat.setAttribute("ObjectReference","#reference-1-1");
+ Element mimetype = doc.createElementNS(etsinamespace,"etsi:MimeType");
+ //mimetype.setNodeValue("text/plain");
+ Text mimevalue = doc.createTextNode("text/html");
+
+ qualprop.appendChild(signprop);
+ signprop.appendChild(signsigprop);
+ signsigprop.appendChild(signdate);
+ signdate.appendChild(datevalue);
+ signsigprop.appendChild(signcert);
+ signcert.appendChild(cert);
+ cert.appendChild(certdig);
+ certdig.appendChild(digmeth);
+ certdig.appendChild(digvalue);
+ digvalue.appendChild(dig_value);
+ cert.appendChild(is);
+ is.appendChild(i);
+ i.appendChild(i_value);
+ is.appendChild(s);
+ s.appendChild(s_value);
+ signsigprop.appendChild(signpolyident);
+ signpolyident.appendChild(signpolyimp);
+ signprop.appendChild(signdataobjectprop);
+ signdataobjectprop.appendChild(dataobjformat);
+ dataobjformat.appendChild(mimetype);
+ mimetype.appendChild(mimevalue);
+
+
+
+ return qualprop;
+ }
+
+
+
+ public void createReferenceEnvElement(Element data) throws Exception
+ {
+ SignerReference reference = signedInfo.createReference();
+
+ iaik.ixsil.core.Object object = null;
+ object = signature.createObject(data);
+ object.setId("envelopedData");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg =
+ new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ reference.setURI(
+ new URI("#xpointer(Data/node())"));
+
+
+ signedInfo.addReference(reference);
+
+ }
+ public void createReferenceWithTransforms(URI uriToData, Transform[] transforms) throws Exception
+ {
+ createReferenceWithTransforms(uriToData, transforms,null);
+ }
+
+ public void createReferenceWithTransforms(URI uriToData, Transform[] transforms, String iD) throws Exception
+ {
+ SignerReference reference = signedInfo.createReference();
+
+ // Create and configure reference
+ URI refURI = null;
+ //String baseDir = configuration_.getProperty("baseDir");
+ refURI = uriToData;
+
+ reference.setURI(refURI);
+ if (iD!=null)
+ reference.setId(iD);
+
+ DigestAlgorithmImplSHA1 digestAlg =
+ new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ for (int trNr=0; trNr < transforms.length; trNr++)
+ {
+ reference.insertTransformAt(transforms[trNr],trNr);
+ //transforms[trNr].transform();
+ }
+
+ signedInfo.addReference(reference);
+
+
+ }
+ public Element createReferenceWithManifest(
+ URI uriToData1, String iD1) throws Exception
+ {
+ return createReferencesWithManifest(uriToData1,iD1,null);
+ }
+
+ public Element createReferenceWithManifest(
+ URI uriToData1, String iD1, String type) throws Exception
+ {
+ /*
+ public void createReferenceWithManifest(
+ URI uriToData1, String iD1,
+ URI uriToData2, String iD2
+ ) throws Exception
+ */
+ SignerReference reference = signedInfo.createReference();
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ manifestRef.setDigestAlgorithm(digestAlg);
+
+ manifestRef.setURI(uriToData1);
+ manifest.addReference(manifestRef);
+
+ manifest.setId(iD1);
+ iaik.ixsil.core.Object manifestObject =
+ signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ reference = signedInfo.createReference();
+ reference.setURI(new URI("#xpointer(id('"+iD1+"'))"));
+ if (type==null)
+ reference.setType(
+ new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ else
+ reference.setType(new URI(type));
+
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);
+ return manifest.toElement();
+ }
+
+ public Element createReferencesWithManifest(
+ URI uriToData1, String iD1,
+ URI uriToData2
+ ) throws Exception
+ {
+ /*
+ public void createReferenceWithManifest(
+ URI uriToData1, String iD1,
+ URI uriToData2, String iD2
+ ) throws Exception
+ */
+ SignerReference reference = signedInfo.createReference();
+
+ SignerManifest manifest = signer.createManifest();
+
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+
+ SignerReference manifestRef = manifest.createReference();
+ manifestRef.setDigestAlgorithm(digestAlg);
+ manifestRef.setURI(uriToData1);
+ manifest.addReference(manifestRef);
+
+ if (uriToData2!=null)
+ {
+ SignerReference manifestRef2 = manifest.createReference();
+ manifestRef2.setDigestAlgorithm(digestAlg);
+ manifestRef2.setURI(uriToData2);
+ manifest.addReference(manifestRef2);
+ }
+ manifest.setId(iD1);
+ iaik.ixsil.core.Object manifestObject =
+ signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ reference = signedInfo.createReference();
+ reference.setURI(new URI("#xpointer(id('"+iD1+"'))"));
+ reference.setType(
+ new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);
+ /*
+ if (iD2!=null)
+ {
+ SignerReference reference2 = signedInfo.createReference();
+ SignerManifest manifest2 = signer.createManifest();
+ SignerReference manifestRef2 = manifest.createReference();
+
+
+ manifestRef2.setDigestAlgorithm(digestAlg);
+
+ manifestRef2.setURI(uriToData2);
+
+ manifest2.addReference(manifestRef2);
+ manifest2.setId(iD2);
+ iaik.ixsil.core.Object manifestObject2 =
+ signature.createObject(manifest2);
+ signature.addObject(manifestObject2);
+ manifest2.computeDigestValues();
+
+ reference2 = signedInfo.createReference();
+ reference2.setURI(new URI("#xpointer(id('"+iD1+"'))"));
+ reference2.setType(
+ new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference2.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference2);
+
+ }
+ */
+ return manifest.toElement();
+ }
+
+public Element createReferencesWithManifest(
+ URI uriToData1, String iD1,
+ URI uriToData2, String type
+ ) throws Exception
+ {
+ SignerReference reference = signedInfo.createReference();
+
+ SignerManifest manifest = signer.createManifest();
+
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+
+ SignerReference manifestRef = manifest.createReference();
+ manifestRef.setDigestAlgorithm(digestAlg);
+ manifestRef.setURI(uriToData1);
+ manifest.addReference(manifestRef);
+
+ SignerReference manifestRef2 = manifest.createReference();
+ manifestRef2.setDigestAlgorithm(digestAlg);
+ manifestRef2.setURI(uriToData2);
+ manifest.addReference(manifestRef2);
+
+ manifest.setId(iD1);
+ iaik.ixsil.core.Object manifestObject =
+ signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ reference = signedInfo.createReference();
+ reference.setURI(new URI("#xpointer(id('"+iD1+"'))"));
+ reference.setType(new URI(type));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);
+ return manifest.toElement();
+ }
+
+
+ public void setKeyInformation() throws Exception
+ {
+ // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+
+ X509Certificate[] certs = getCertificates(pkcs12);
+ X509Data x509Data = new X509Data();
+
+ for (int i = 0; i < certs.length; i++) {
+ x509Data.insertHintAt(certs[i], i);
+ }
+
+ KeyProviderImplX509Data x509DataKeyProvider =
+ new KeyProviderImplX509Data(signer.toDocument());
+
+ x509DataKeyProvider.insertX509DataAt(x509Data, 0);
+
+ // X509Data key information (certificate chain)
+ keyManager.addKeyProvider(x509DataKeyProvider);
+
+ Element e = (Element)keyManager.getKeyInfo();
+ NodeList nl = e.getChildNodes();
+ x509CertString = ((new DOMWriterImpl(true)).writeToString(nl.item(0).getChildNodes().item(1)));
+ if(x509CertString==null)
+ x509CertString = ((new DOMWriterImpl(true)).writeToString(nl.item(0).getChildNodes().item(0)));
+
+ signer.getSignature().setKeyManager(keyManager);
+
+
+
+ }
+ public void setKeyInformation(String retrievalMethod) throws Exception
+ { // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+ KeyProviderImplRetrievalMethod x509RetrievalMethod =
+ new KeyProviderImplRetrievalMethod(signer.toDocument());
+
+ URI fileURI = null;
+
+ if (retrievalMethod == "XML")
+ fileURI =
+ new URI(
+ "file:"
+ + configuration_.getProperty("baseDir")
+ + configuration_.getProperty("RetrievalURIXML"));
+ else
+ fileURI =
+ new URI(
+ "file:"
+ + configuration_.getProperty("baseDir")
+ + configuration_.getProperty("RetrievalURIRaw"));
+
+ RetrievalMethod retMet =
+ new RetrievalMethod(
+ signer.toDocument(),
+ new URIResolverParameters(fileURI));
+
+ retMet.setURI(fileURI);
+
+ if (retrievalMethod == "XML")
+ retMet.setType(
+ new URI(configuration_.getProperty("RetrievalTypeXML")));
+ else
+ retMet.setType(
+ new URI(configuration_.getProperty("RetrievalTypeRaw")));
+
+ x509RetrievalMethod.insertRetrievalMethodAt(retMet, 0);
+ keyManager.addKeyProvider(x509RetrievalMethod);
+ Element e = (Element)keyManager.getKeyInfo();
+ NodeList nl = e.getChildNodes();
+ x509CertString = ((new DOMWriterImpl(true)).writeToString(nl.item(0).getChildNodes().item(0)));
+
+
+ signer.getSignature().setKeyManager(keyManager);
+ }
+
+ public void setKeyInformation(int pos) throws Exception
+ {
+ // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+
+ X509Certificate[] certs = getCertificates(pkcs12);
+ X509Data x509Data = new X509Data();
+
+ x509Data.insertHintAt(certs[pos], 0);
+
+
+ KeyProviderImplX509Data x509DataKeyProvider =
+ new KeyProviderImplX509Data(signer.toDocument());
+
+ x509DataKeyProvider.insertX509DataAt(x509Data, 0);
+
+ // X509Data key information (certificate chain)
+ keyManager.addKeyProvider(x509DataKeyProvider);
+
+ signer.getSignature().setKeyManager(keyManager);
+
+ Element e = (Element)keyManager.getKeyInfo();
+ NodeList nl = e.getChildNodes();
+ x509CertString = ((new DOMWriterImpl(true)).writeToString(nl.item(0).getChildNodes().item(0)));
+
+ //((Element)signer.getSignature().getSignatureDOMElement().getChildNodes().item(0)).setAttributeNS(IXSILConstants.NAMESPACE_URI_NAMESPACES_,"xmlns:data","http://uri.data.org");
+
+ //display(signer.getSignature().getSignatureDOMElement());
+ }
+
+ private void display(Node base)
+ {
+ display(base,1);
+ }
+
+ private void display(Node base,int level)
+ {
+ String spacer = "";
+ for(int counter=0;counter<level;counter++)
+ {
+ spacer+=" ";
+ }
+
+ int att_size=0;
+ if(base.getAttributes()!=null)
+ {
+ att_size=base.getAttributes().getLength();
+ }
+ if(base.getNodeName().equals("#text"))
+ System.out.println(spacer+base.getNodeName()+base.getChildNodes().getLength()+":"+att_size+" ("+base.getNodeValue()+")");
+ else
+ System.out.println(spacer+base.getNodeName()+base.getChildNodes().getLength()+":"+att_size);
+
+ NamedNodeMap nnm = base.getAttributes();
+ if(nnm!=null)
+ {
+ int size = nnm.getLength();
+ for(int counter=0;counter<size;counter++)
+ {
+ display(nnm.item(counter),level+3);
+ }
+ }
+
+ NodeList children = base.getChildNodes();
+ int size = children.getLength();
+ for(int counter=0;counter<size;counter++)
+ {
+ display(children.item(counter),level+1);
+ }
+ }
+
+ public void setKeyInformation(boolean xpointer, URI fileURI, URI typeURI, Transform[] transforms) throws Exception
+ { // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+ KeyProviderImplRetrievalMethod x509RetrievalMethod =
+ new KeyProviderImplRetrievalMethod(signer.toDocument());
+
+ RetrievalMethod retMet = null;
+
+ if (xpointer)
+ {
+ retMet = new RetrievalMethod(signer.toDocument(),null);
+ }
+ else
+ {
+ retMet = new RetrievalMethod(signer.toDocument(),new URIResolverParameters(fileURI));
+ }
+
+
+
+ retMet.setURI(fileURI);
+
+
+ retMet.setType(typeURI);
+
+ if (transforms!=null)
+ {for (int trNr=0; trNr < transforms.length; trNr++)
+ retMet.insertTransformAt(transforms[trNr],trNr);
+ }
+
+
+ x509RetrievalMethod.insertRetrievalMethodAt(retMet, 0);
+ keyManager.addKeyProvider(x509RetrievalMethod);
+
+ Element e = (Element)keyManager.getKeyInfo();
+ NodeList nl = e.getChildNodes();
+ x509CertString = ((new DOMWriterImpl(true)).writeToString(nl.item(0).getChildNodes().item(0)));
+
+
+ signer.getSignature().setKeyManager(keyManager);
+
+
+ }
+
+/* public Document createPKCS12Sig(
+ String TestNumber,
+ int CanonicalizationMethodNumber,
+ String data,
+ boolean env,
+ boolean mani,
+ String data2,
+ boolean env2,
+ String retrievalMethod)
+ throws Exception {
+
+
+
+ if (data2 != null) {
+ reference = signedInfo.createReference();
+ if (env2) {
+ iaik.ixsil.core.Object object = null;
+ object = signature.createObject(data2);
+ object.setId("envelopedData2");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg =
+ new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ reference.setURI(
+ new URI("#xpointer(id('envelopedData2')/node())"));
+ } else {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data2);
+
+ reference.setURI(refURI);
+ DigestAlgorithmImplSHA1 digestAlg =
+ new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+ signedInfo.addReference(reference);
+ }
+
+ // Add reference to signature
+
+
+
+ // Compute signature value
+ signer.getSignature().sign();
+
+ return signer.toDocument();
+ }
+*/
+ public Document returnSig() throws Exception {
+ //signature.getObjects();
+
+ signer.getSignature().sign();
+
+ //((Element)signer.getSignature().getSignatureDOMElement().getChildNodes().item(0)).removeAttribute("xmlns:data");
+ //display(((Element)signer.getSignature().getSignatureDOMElement().getChildNodes().item(0)));
+ //.removeAttributeNS(IXSILConstants.NAMESPACE_URI_NAMESPACES_,"xmlns:data");
+
+ return signer.toDocument();
+
+ }
+ public String getX509CertString() throws Exception{
+ TestCases tc = new TestCases();
+
+ if(x509CertString==null) return null;
+ String result = TestCases.replaceString(x509CertString,"<?xml version=\"1.0\"?>","");
+ if(x509CertString.indexOf("xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"")!=-1)
+ result = TestCases.replaceString(result,"xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"","");
+
+ return result;
+ }
+}
diff --git a/spss.test/src/testgenerator/DataGenerator.java b/spss.test/src/testgenerator/DataGenerator.java
new file mode 100644
index 000000000..d0743612e
--- /dev/null
+++ b/spss.test/src/testgenerator/DataGenerator.java
@@ -0,0 +1,45 @@
+package testgenerator;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+
+/**
+ * @author Administrator
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class DataGenerator {
+
+ public static final String text_to_be_signed="Something to be Signed :) ";
+
+ public static void main(String[] args) throws Exception {
+ generateData("1kb.txt",1000);
+ generateData("10kb.txt",10000);
+ generateData("20kb.txt",20000);
+ generateData("50kb.txt",50000);
+ generateData("100kb.txt",100000);
+ generateData("500kb.txt",500000);
+ generateData("1mb.txt",1000000);
+ generateData("10mb.txt",10000000);
+ }
+
+ public static void generateData(String filename,int size) throws Exception
+ {
+ StringBuffer sb = new StringBuffer(size);
+ int max = size-text_to_be_signed.length();
+ while(sb.length()<(max))
+ {
+ sb.append(text_to_be_signed);
+ }
+
+ sb.append(text_to_be_signed.substring(0,(size-sb.length())));
+
+ BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
+ bw.write(sb.toString());
+ bw.flush();
+ bw.close();
+ }
+}
diff --git a/spss.test/src/testgenerator/EtsiProperties.java b/spss.test/src/testgenerator/EtsiProperties.java
new file mode 100644
index 000000000..c306ddeb6
--- /dev/null
+++ b/spss.test/src/testgenerator/EtsiProperties.java
@@ -0,0 +1,113 @@
+package testgenerator;
+
+import iaik.ixsil.init.IXSILConstants;
+
+import iaik.utils.Base64OutputStream;
+
+import java.io.ByteArrayOutputStream;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+/**
+ * @author knirschs
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class EtsiProperties extends TestCases {
+
+ /**
+ * Constructor for EtsiProperties.
+ *
+ */
+ private Element qualprop;
+ private Element signdataobjectprop;
+ private static String etsinamespace = "http://uri.etsi.org/01903/v1.1.1#";
+ private Document doc;
+
+ public EtsiProperties() throws Exception{
+
+ getX509Content();
+
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ //dbf.setNamespaceAware(true);
+ //dbf.setValidating(true);
+
+ doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+
+
+ qualprop = doc.createElementNS(etsinamespace,"etsi:QualifyingProperties");
+ qualprop.setAttributeNS(null,"Target","#signature");
+ qualprop.setAttributeNS(IXSILConstants.NAMESPACE_URI_NAMESPACES_,"xmlns:etsi",etsinamespace);
+ //qualprop.setPrefix("etsi");*/
+ //qualprop.setAttributeNodeNS(doc.createAttributeNS(etsinamespace,"etsi"));
+ Element signprop = doc.createElementNS(etsinamespace,"etsi:SignedProperties");
+ Element signsigprop = doc.createElementNS(etsinamespace,"etsi:SignedSignatureProperties");
+ signdataobjectprop = doc.createElementNS(etsinamespace,"etsi:SignedDataObjectProperties");
+ Element signdate = doc.createElementNS(etsinamespace,"etsi:SigningTime");
+ Text datevalue = doc.createTextNode("2003-03-01T00:01:01");
+ Element signcert = doc.createElementNS(etsinamespace,"etsi:SigningCertificate");
+ Element cert = doc.createElementNS(etsinamespace,"etsi:Cert");
+ Element signpolyident = doc.createElementNS(etsinamespace,"etsi:SignaturePolicyIdentifier");
+ Element signpolyimp = doc.createElementNS(etsinamespace,"etsi:SignaturePolicyImplied");
+ Element certdig = doc.createElementNS(etsinamespace,"etsi:CertDigest");
+ Element digmeth = doc.createElementNS(etsinamespace,"etsi:DigestMethod");
+ digmeth.setAttribute("Algorithm","http://www.w3.org/2000/09/xmldsig#sha1");
+ Element digvalue = doc.createElementNS(etsinamespace,"etsi:DigestValue");
+
+ ByteArrayOutputStream fos = new ByteArrayOutputStream();
+ Base64OutputStream base64os = new Base64OutputStream(fos);
+ base64os.write(this.X509hash.getBytes());
+ base64os.flush();
+
+ Text dig_value = doc.createTextNode(fos.toString());
+ Element is = doc.createElementNS(etsinamespace,"etsi:IssuerSerial");
+ Element i = doc.createElement("dsig:X509IssuerName");
+ Text i_value = doc.createTextNode(this.X509name);
+ Element s = doc.createElement("dsig:X509SerialNumber");
+ Text s_value = doc.createTextNode(this.X509number.toString());
+
+
+ qualprop.appendChild(signprop);
+ signprop.appendChild(signsigprop);
+ signsigprop.appendChild(signdate);
+ signdate.appendChild(datevalue);
+ signsigprop.appendChild(signcert);
+ signcert.appendChild(cert);
+ cert.appendChild(certdig);
+ certdig.appendChild(digmeth);
+ certdig.appendChild(digvalue);
+ digvalue.appendChild(dig_value);
+ cert.appendChild(is);
+ is.appendChild(i);
+ i.appendChild(i_value);
+ is.appendChild(s);
+ s.appendChild(s_value);
+ signsigprop.appendChild(signpolyident);
+ signpolyident.appendChild(signpolyimp);
+ signprop.appendChild(signdataobjectprop);
+
+
+ }
+ public Element getQualProp()
+ {
+ return qualprop;
+ }
+ public void addDataObjectFormat(String reference) throws Exception
+ {
+ Element dataobjformat = doc.createElementNS(etsinamespace,"etsi:DataObjectFormat");
+ dataobjformat.setAttribute("ObjectReference",reference);
+ Element mimetype = doc.createElementNS(etsinamespace,"etsi:MimeType");
+ //mimetype.setNodeValue("text/plain");
+ Text mimevalue = doc.createTextNode("text/html");
+ signdataobjectprop.appendChild(dataobjformat);
+ dataobjformat.appendChild(mimetype);
+ mimetype.appendChild(mimevalue);
+ }
+
+}
diff --git a/spss.test/src/testgenerator/LauchAll.java b/spss.test/src/testgenerator/LauchAll.java
new file mode 100644
index 000000000..70965ae09
--- /dev/null
+++ b/spss.test/src/testgenerator/LauchAll.java
@@ -0,0 +1,28 @@
+package testgenerator;
+
+/**
+ * @author Administrator
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class LauchAll {
+
+ public static void main(String[] args) {
+ try {
+ TestGeneratorCX0.main(null);
+ TestGeneratorCX1.main(null);
+ TestGeneratorCX2.main(null);
+ TestGeneratorVC0.main(null);
+ TestGeneratorVX.main(null);
+ TestGeneratorVX2.main(null);
+ TestGeneratorVXErrors.main(null);
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/spss.test/src/testgenerator/LaunchVX.java b/spss.test/src/testgenerator/LaunchVX.java
new file mode 100644
index 000000000..3c4191411
--- /dev/null
+++ b/spss.test/src/testgenerator/LaunchVX.java
@@ -0,0 +1,24 @@
+package testgenerator;
+
+/**
+ * @author Administrator
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class LaunchVX {
+
+ public static void main(String[] args) {
+ try {
+ TestGeneratorVX.main(null);
+ TestGeneratorVX2.main(null);
+ TestGeneratorVXErrors.main(null);
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/spss.test/src/testgenerator/Pass.java b/spss.test/src/testgenerator/Pass.java
new file mode 100644
index 000000000..b6fef9575
--- /dev/null
+++ b/spss.test/src/testgenerator/Pass.java
@@ -0,0 +1,22 @@
+package testgenerator;
+
+import iaik.apps.util.passphrase.PassphrasePrompt;
+
+/**
+ * @author Administrator
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class Pass implements PassphrasePrompt
+{
+ public Pass() {};
+ public void setCancelAllowed(boolean b) {};
+ public void setMessage(Object o) {};
+ public boolean isCancelAllowed() { return false; }
+ public char[] promptPassphrase() { return "1111".toCharArray(); };
+ public void setProtectedResourceInfo(Object o) {};
+
+}
diff --git a/spss.test/src/testgenerator/SetupCMSKeyStore.java b/spss.test/src/testgenerator/SetupCMSKeyStore.java
new file mode 100644
index 000000000..441e64236
--- /dev/null
+++ b/spss.test/src/testgenerator/SetupCMSKeyStore.java
@@ -0,0 +1,671 @@
+// Copyright (C) 1997-2002 IAIK
+// email: jce-info@iaik.tu-graz.ac.at
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE.
+//
+// $Header$
+//
+
+package testgenerator;
+
+import iaik.asn1.CodingException;
+import iaik.asn1.ObjectID;
+import iaik.asn1.structures.AlgorithmID;
+import iaik.asn1.structures.GeneralName;
+import iaik.asn1.structures.GeneralNames;
+import iaik.asn1.structures.Name;
+import iaik.asn1.structures.PolicyInformation;
+import iaik.asn1.structures.PolicyQualifierInfo;
+import iaik.security.provider.IAIK;
+import iaik.x509.SimpleChainVerifier;
+import iaik.x509.X509Certificate;
+import iaik.x509.X509ExtensionException;
+import iaik.x509.extensions.AuthorityKeyIdentifier;
+import iaik.x509.extensions.BasicConstraints;
+import iaik.x509.extensions.CertificatePolicies;
+import iaik.x509.extensions.KeyUsage;
+import iaik.x509.extensions.SubjectAltName;
+import iaik.x509.extensions.SubjectKeyIdentifier;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.math.BigInteger;
+import java.security.InvalidKeyException;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.cert.CertificateException;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.Random;
+
+/**
+ * Creates a default KeyStore in the current working directory.
+ * These keys are used by many demos included in IAIK-JCE.
+ * The aliases and the password for accessing the keys and
+ * certificates can be found in {@link demo.keystore.CMSKeyStoreConstants CMSKeyStoreConstants}.
+ *
+ * @see CMSKeyStoreConstants
+ */
+public class SetupCMSKeyStore implements CMSKeyStoreConstants {
+
+ // the keylength of the CA certificate shall be 1024
+ private final static int CA_KEYLENGTH = 1024;
+
+ // the key store to create
+ KeyStore key_store;
+ // the file where the key store shall be saved
+ String keystore_file;
+ // takes the existing keys from the KeyStore and only creates new certificates
+ boolean create_only_certificates = true;
+
+ // the private keys
+ KeyPair ca_rsa = null;
+ // RSA for signing
+ KeyPair rsa512_sign = null;
+ KeyPair rsa1024_sign = null;
+ KeyPair rsa2048_sign = null;
+ // RSA for encrypting
+ KeyPair rsa512_crypt = null;
+ KeyPair rsa1024_crypt = null;
+ KeyPair rsa1024_crypt_ = null;
+ KeyPair rsa2048_crypt = null;
+
+ KeyPair ca_dsa = null;
+ KeyPair dsa512 = null;
+ KeyPair dsa1024 = null;
+ KeyPair esdh512 = null;
+ KeyPair esdh1024 = null;
+ KeyPair esdh1024_ = null;
+ KeyPair esdh2048 = null;
+
+ // create RSA keys and certificates
+ boolean create_rsa = true;
+ // create DSA keys and certificates
+ boolean create_dsa = true;
+ // create ESDH keys and certificates
+ boolean create_esdh = true;
+
+ /**
+ * Generate a KeyPair using the specified algorithm with the given size.
+ *
+ * @param algorithm the algorithm to use
+ * @param bits the length of the key (modulus) in bits
+ * @return the KeyPair
+ */
+ public static KeyPair generateKeyPair(String algorithm, int bits)
+ throws NoSuchAlgorithmException {
+
+ KeyPairGenerator generator = null;
+
+ try {
+ generator = KeyPairGenerator.getInstance(algorithm, "IAIK");
+
+ } catch (NoSuchProviderException ex) {
+ throw new NoSuchAlgorithmException("Provider IAIK not found!");
+ }
+
+ generator.initialize(bits);
+ KeyPair kp = generator.generateKeyPair();
+
+ return kp;
+ }
+
+ /**
+ * Creates a certificate from the given values.
+ *
+ * @param subject the subject of the certificate
+ * @param publicKey the public key to include
+ * @param issuer the issuer of the certificate
+ * @param privateKey the private key for signing the certificate
+ * @param algorithm the signature algorithm to use
+ */
+ public static X509Certificate createCertificate(Name subject, PublicKey publicKey,
+ Name issuer, PrivateKey privateKey, AlgorithmID algorithm, byte[] keyID, boolean forSigning) {
+
+ // create a new certificate
+ X509Certificate cert = new X509Certificate();
+
+ try {
+ // set the values
+ cert.setSerialNumber(new BigInteger(20, new Random()));
+ cert.setSubjectDN(subject);
+ cert.setPublicKey(publicKey);
+ cert.setIssuerDN(issuer);
+
+ GregorianCalendar date = new GregorianCalendar();
+ date.add(Calendar.DATE, -1);
+ // not before now
+ cert.setValidNotBefore(date.getTime());
+
+ if (issuer.equals(subject)) {
+ date.add(Calendar.MONTH, 12);
+ BasicConstraints basicConstraints = new BasicConstraints(true);
+ cert.addExtension(basicConstraints);
+ KeyUsage keyUsage = new KeyUsage(KeyUsage.keyCertSign | KeyUsage.cRLSign);
+ cert.addExtension(keyUsage);
+ } else {
+ date.add(Calendar.MONTH, 11);
+ KeyUsage keyUsage = null;
+ if (forSigning) {
+ keyUsage = new KeyUsage(KeyUsage.digitalSignature |
+ KeyUsage.nonRepudiation);
+ } else {
+ keyUsage = new KeyUsage(KeyUsage.keyEncipherment |
+ KeyUsage.dataEncipherment);
+ }
+ cert.addExtension(keyUsage);
+ AuthorityKeyIdentifier authID = new AuthorityKeyIdentifier();
+ authID.setKeyIdentifier(keyID);
+ cert.addExtension(authID);
+ GeneralNames generalNames = new GeneralNames();
+ generalNames.addName(new GeneralName(GeneralName.rfc822Name, "smimetest@iaik.at"));
+ generalNames.addName(new GeneralName(GeneralName.rfc822Name, "smimetest@iaik.tu-graz.ac.at"));
+ SubjectAltName subjectAltName = new SubjectAltName(generalNames);
+ cert.addExtension(subjectAltName);
+ }
+ String explicitText = "This certificate only may be used for test purposes";
+ PolicyQualifierInfo policyQualifier = new PolicyQualifierInfo(null, null, explicitText);
+ PolicyInformation[] policyInformations =
+ { new PolicyInformation(new ObjectID("1.3.6.1.4.1.2706.17.0.11.1.1"),
+ new PolicyQualifierInfo[] { policyQualifier }) };
+ CertificatePolicies certPolicies = new CertificatePolicies(policyInformations);
+
+ SubjectKeyIdentifier subjectKeyID = new SubjectKeyIdentifier(cert.getPublicKey());
+ cert.addExtension(subjectKeyID);
+
+ cert.addExtension(certPolicies);
+ cert.setValidNotAfter(date.getTime());
+ // and sign the certificate
+ cert.sign(algorithm ,privateKey);
+ } catch (CertificateException ex) {
+ throw new RuntimeException("Error creating the certificate: "+ex.getMessage());
+ } catch (InvalidKeyException ex) {
+ throw new RuntimeException("Error creating the certificate: "+ex.getMessage());
+ } catch (NoSuchAlgorithmException ex) {
+ throw new RuntimeException("Error creating the certificate: "+ex.getMessage());
+ } catch (X509ExtensionException ex) {
+ throw new RuntimeException("Error adding extension: "+ex.getMessage());
+ } catch (CodingException ex) {
+ throw new RuntimeException("Error adding SubjectKeyIdentifier extension: "+ex.getMessage());
+ }
+/*
+ System.out.println(cert.toString(true));
+ iaik.utils.Util.waitKey();
+*/
+
+ return cert;
+ }
+
+ /**
+ * Load or create a KeyStore and initialize it.
+ */
+ private void initializeKeyStore() {
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+ String line;
+
+ try {
+ // default directory is the current user dir
+ String keystore_dir = System.getProperty("user.dir");
+ File ks = new File(keystore_dir, KS_FILENAME);
+
+ // KeyStore does already exist
+ if (ks.exists()) {
+ keystore_file = ks.getAbsolutePath();
+ if (create_only_certificates) {
+ System.out.println("Create only new certificates from already existing keys!");
+ }
+ else {
+ System.out.println("Existing KeyStore will be deleted!");
+ }
+ System.out.println("KeyStore: "+keystore_file);
+ }
+ else {
+ // there is no KeyStore -> create also new keys
+ create_only_certificates = false;
+
+ while (true) {
+ System.out.print("Create new KeyStore in directory: "+keystore_dir+" [y]");
+ line = reader.readLine();
+ if (line.length() == 0 || line.equals("y")) {
+ ks = new File(keystore_dir, KS_FILENAME);
+ keystore_file = ks.getAbsolutePath();
+ System.out.println("KeyStore will be saved to: "+keystore_file);
+ break;
+ }
+ System.out.print("Enter directory: ");
+ keystore_dir = reader.readLine();
+ }
+ }
+
+ // get a new KeyStore onject
+ key_store = KeyStore.getInstance("IAIKKeyStore");
+
+ if (create_only_certificates) {
+ // take private keys from existing KeyStore
+ key_store.load(new FileInputStream(ks), KS_PASSWORD);
+ }
+ else {
+ // create a new KeyStore
+ key_store.load(null, null);
+ }
+
+ } catch (Exception ex) {
+ System.out.println("Error creating new IAIK KeyStore!");
+ throw new RuntimeException("Error creating new KeyStore: "+ex.getMessage());
+ }
+ }
+
+ /**
+ * Save the KeyStore to disk.
+ */
+ private void saveKeyStore() {
+ try {
+ // write the KeyStore to disk
+ FileOutputStream os = new FileOutputStream(keystore_file);
+ key_store.store(os, KS_PASSWORD);
+ os.close();
+ } catch (Exception ex) {
+ System.out.println("Error saving KeyStore!");
+ ex.printStackTrace();
+ }
+ }
+
+ /**
+ * Add the private key and the certificate chain to the key store.
+ */
+ public void addToKeyStore(KeyPair keyPair, X509Certificate[] chain, String alias) throws KeyStoreException {
+ key_store.setKeyEntry(alias, keyPair.getPrivate(), KS_PASSWORD, chain);
+ }
+
+ /**
+ * Returns a KeyPair form the KeyStore.
+ */
+ private KeyPair getKeyPair(String type) throws Exception {
+ PrivateKey privKey = (PrivateKey)key_store.getKey(type, KS_PASSWORD);
+ PublicKey pubKey = key_store.getCertificateChain(type)[0].getPublicKey();
+ return new KeyPair(pubKey, privKey);
+ }
+
+ /**
+ * Get all private keys from the KeyStore.
+ */
+ private void getPrivateKeys() {
+ // RSA
+ try {
+ ca_rsa = getKeyPair(CA_RSA);
+ // for signing
+ rsa512_sign = getKeyPair(RSA_512_SIGN);
+ rsa1024_sign = getKeyPair(RSA_1024_SIGN);
+ rsa2048_sign = getKeyPair(RSA_2048_SIGN);
+ // for encrypting
+ rsa512_crypt = getKeyPair(RSA_512_CRYPT);
+ rsa1024_crypt = getKeyPair(RSA_1024_CRYPT);
+ rsa1024_crypt_ = getKeyPair(RSA_1024_CRYPT_);
+ rsa2048_crypt = getKeyPair(RSA_2048_CRYPT);
+ } catch (Exception ex) {
+ System.out.println("Unable to get RSA keys from KeyStore.");
+ ex.printStackTrace();
+ create_rsa = false;
+ }
+ // DSA
+ try {
+ ca_dsa = getKeyPair(CA_DSA);
+ dsa512 = getKeyPair(DSA_512);
+ dsa1024 = getKeyPair(DSA_1024);
+ } catch (Exception ex) {
+ System.out.println("Unable to get DSA keys from KeyStore.");
+ ex.printStackTrace();
+ create_dsa = false;
+ }
+ // ESDH
+ try {
+ esdh512 = getKeyPair(ESDH_512);
+ esdh1024 = getKeyPair(ESDH_1024);
+ esdh1024_ = getKeyPair(ESDH_1024_);
+ esdh2048 = getKeyPair(ESDH_2048);
+ } catch (Exception ex) {
+ System.out.println("Unable to get ESDH keys from KeyStore.");
+ ex.printStackTrace();
+ create_esdh = false;
+ }
+ }
+
+ /**
+ * Gernerate new prviate keys.
+ */
+ private void generatePrivateKeys() {
+ try {
+ // first create the KeyPairs
+ if (create_rsa) {
+ try {
+ System.out.println("generate RSA KeyPair for CA certificate ["+CA_KEYLENGTH+" bits]...");
+ ca_rsa = generateKeyPair("RSA", CA_KEYLENGTH);
+ System.out.println("Generate RSA signing keys...");
+ System.out.println("generate RSA KeyPair for a test certificate [512 bits]...");
+ rsa512_sign = generateKeyPair("RSA", 512);
+ System.out.println("generate RSA KeyPair for a test certificate [1024 bits]...");
+ rsa1024_sign = generateKeyPair("RSA", 1024);
+ System.out.println("generate RSA KeyPair for a test certificate [2048 bits]...");
+ rsa2048_sign = generateKeyPair("RSA", 2048);
+ System.out.println("Generate RSA encryption keys...");
+ System.out.println("generate RSA KeyPair for a test certificate [512 bits]...");
+ rsa512_crypt = generateKeyPair("RSA", 512);
+ System.out.println("generate RSA KeyPair for a test certificate [1024 bits]...");
+ rsa1024_crypt = generateKeyPair("RSA", 1024);
+ System.out.println("generate second RSA KeyPair for a test certificate [1024 bits]...");
+ rsa1024_crypt_ = generateKeyPair("RSA", 1024);
+ System.out.println("generate RSA KeyPair for a test certificate [2048 bits]...");
+ rsa2048_crypt = generateKeyPair("RSA", 2048);
+ } catch (NoSuchAlgorithmException ex) {
+ create_rsa = false;
+ System.out.println("No implementation for RSA! RSA certificates are not created!\n");
+ }
+ }
+ if (create_dsa) {
+ try {
+ System.out.println("generate DSA KeyPair for CA certificate ["+CA_KEYLENGTH+" bits]...");
+ ca_dsa = generateKeyPair("DSA", CA_KEYLENGTH);
+ System.out.println("generate DSA KeyPair for a test certificate [512 bits]...");
+ dsa512 = generateKeyPair("DSA", 512);
+ System.out.println("generate DSA KeyPair for a test certificate [1024 bits]...");
+ dsa1024 = generateKeyPair("DSA", 1024);
+ } catch (NoSuchAlgorithmException ex) {
+ create_dsa = false;
+ System.out.println("No implementation for DSA! DSA certificates are not created!\n");
+ }
+ }
+
+ if (create_esdh) {
+ try {
+ System.out.println("generate ESDH KeyPair for a test certificate [512 bits]...");
+ esdh512 = generateKeyPair("ESDH", 512);
+ System.out.println("generate ESDH KeyPair for a test certificate [1024 bits]...");
+ esdh1024 = generateKeyPair("ESDH", 1024);
+ System.out.println("generate ESDH KeyPair for a test certificate [1024 bits]...");
+ esdh1024_ = generateKeyPair("ESDH", 1024);
+ System.out.println("generate ESDH KeyPair for a test certificate [2048 bits]...");
+ esdh2048 = generateKeyPair("ESDH", 2048);
+ } catch (NoSuchAlgorithmException ex) {
+ create_esdh = false;
+ System.out.println("No implementation for ESDH! ESDH certificates are not created!\n");
+ }
+ }
+ } catch (Exception ex) {
+ System.out.println("Exception: "+ex);
+ }
+ }
+
+ public void generateCertificates() {
+
+ try {
+
+ // Now create the certificates
+ Name issuer = new Name();
+ issuer.addRDN(ObjectID.country, "AT");
+ issuer.addRDN(ObjectID.organization ,"IAIK");
+ issuer.addRDN(ObjectID.organizationalUnit ,"JavaSecurity");
+
+ Name subject = new Name();
+ subject.addRDN(ObjectID.country, "AT");
+ subject.addRDN(ObjectID.organization ,"IAIK");
+ subject.addRDN(ObjectID.organizationalUnit ,"JavaSecurity");
+
+ //
+ // create self signed CA certs
+ //
+ X509Certificate caRSA = null;
+ X509Certificate caDSA = null;
+ X509Certificate[] chain = new X509Certificate[1];
+ // for verifying the created certificates
+ SimpleChainVerifier verifier = new SimpleChainVerifier();
+
+ if (create_rsa) {
+ issuer.addRDN(ObjectID.commonName ,"IAIK RSA Test CA");
+ System.out.println("create self signed RSA CA certificate...");
+ caRSA = createCertificate(issuer, ca_rsa.getPublic(),
+ issuer, ca_rsa.getPrivate(), AlgorithmID.sha1WithRSAEncryption, null, true);
+ // verify the self signed certificate
+ caRSA.verify();
+ // set the CA cert as trusted root
+ verifier.addTrustedCertificate(caRSA);
+ chain[0] = caRSA;
+ addToKeyStore(ca_rsa, chain, CA_RSA);
+ issuer.removeRDN(ObjectID.commonName);
+ }
+
+ if (create_dsa) {
+ issuer.addRDN(ObjectID.commonName ,"IAIK DSA Test CA");
+ System.out.println("create self signed DSA CA certificate...");
+ caDSA = createCertificate(issuer, ca_dsa.getPublic(),
+ issuer, ca_dsa.getPrivate(), AlgorithmID.dsaWithSHA, null, true);
+ // verify the self signed certificate
+ caDSA.verify();
+ // set the CA cert as trusted root
+ verifier.addTrustedCertificate(caDSA);
+ chain[0] = caDSA;
+ addToKeyStore(ca_dsa, chain, CA_DSA);
+ issuer.removeRDN(ObjectID.commonName);
+ }
+
+ //
+ // create certificates
+ //
+ chain = new X509Certificate[2];
+
+ // create a RSA certificate
+ if (create_rsa) {
+ issuer.addRDN(ObjectID.commonName ,"IAIK RSA Test CA");
+ SubjectKeyIdentifier subjectKeyID = (SubjectKeyIdentifier)caRSA.getExtension(SubjectKeyIdentifier.oid);
+ // 512
+ // for signing
+ System.out.println("Create RSA demo certificates to be used for signing...");
+
+ // 512
+ subject.addRDN(ObjectID.commonName, "RSA 512 bit Demo Signing Certificate");
+ System.out.println("create 512 bit RSA demo certificate...");
+ chain[0] = createCertificate(subject, rsa512_sign.getPublic(),
+ issuer, ca_rsa.getPrivate(), AlgorithmID.sha1WithRSAEncryption, subjectKeyID.get(), true);
+ chain[1] = caRSA;
+ // and verify the chain
+ verifier.verifyChain(chain);
+ addToKeyStore(rsa512_sign, chain, RSA_512_SIGN);
+ subject.removeRDN(ObjectID.commonName);
+
+ // 1024
+
+ subject.addRDN(ObjectID.commonName ,"RSA 1024 bit Demo Signing Certificate");
+ System.out.println("create 1024 bit RSA demo certificate...");
+ chain[0] = createCertificate(subject, rsa1024_sign.getPublic(),
+ issuer, ca_rsa.getPrivate(), AlgorithmID.sha1WithRSAEncryption, subjectKeyID.get(), true);
+ chain[1] = caRSA;
+ verifier.verifyChain(chain);
+ addToKeyStore(rsa1024_sign, chain, RSA_1024_SIGN);
+ subject.removeRDN(ObjectID.commonName);
+
+ // 2048
+
+ subject.addRDN(ObjectID.commonName ,"RSA 2048 bit Demo Signing Certificate");
+ System.out.println("create 2048 bit RSA demo certificate...");
+ chain[0] = createCertificate(subject, rsa2048_sign.getPublic(),
+ issuer, ca_rsa.getPrivate(), AlgorithmID.sha1WithRSAEncryption, subjectKeyID.get(), true);
+ chain[1] = caRSA;
+ verifier.verifyChain(chain);
+
+ addToKeyStore(rsa2048_sign, chain, RSA_2048_SIGN);
+ subject.removeRDN(ObjectID.commonName);
+
+ // for encrypting
+ System.out.println("Create RSA demo certificates to be used for encryption...");
+ // 512
+ subject.addRDN(ObjectID.commonName, "RSA 512 bit Demo Encryption Certificate");
+ System.out.println("create 512 bit RSA demo certificate...");
+ chain[0] = createCertificate(subject, rsa512_crypt.getPublic(),
+ issuer, ca_rsa.getPrivate(), AlgorithmID.sha1WithRSAEncryption, subjectKeyID.get(), false);
+ chain[1] = caRSA;
+ // and verify the chain
+ verifier.verifyChain(chain);
+ addToKeyStore(rsa512_crypt, chain, RSA_512_CRYPT);
+ subject.removeRDN(ObjectID.commonName);
+
+ // 1024
+
+ subject.addRDN(ObjectID.commonName ,"RSA 1024 bit Demo Encryption Certificate");
+ System.out.println("create 1024 bit RSA demo certificate...");
+ chain[0] = createCertificate(subject, rsa1024_crypt.getPublic(),
+ issuer, ca_rsa.getPrivate(), AlgorithmID.sha1WithRSAEncryption, subjectKeyID.get(), false);
+ chain[1] = caRSA;
+ verifier.verifyChain(chain);
+ addToKeyStore(rsa1024_crypt, chain, RSA_1024_CRYPT);
+
+ System.out.println("create second 1024 bit RSA demo Encryption certificate...");
+ chain[0] = createCertificate(subject, rsa1024_crypt_.getPublic(),
+ issuer, ca_rsa.getPrivate(), AlgorithmID.sha1WithRSAEncryption, subjectKeyID.get(), false);
+ chain[1] = caRSA;
+ verifier.verifyChain(chain);
+ addToKeyStore(rsa1024_crypt_, chain, RSA_1024_CRYPT_);
+ subject.removeRDN(ObjectID.commonName);
+
+ // 2048
+
+ subject.addRDN(ObjectID.commonName ,"RSA 2048 bit Demo Encryption Certificate");
+ System.out.println("create 2048 bit RSA demo certificate...");
+ chain[0] = createCertificate(subject, rsa2048_crypt.getPublic(),
+ issuer, ca_rsa.getPrivate(), AlgorithmID.sha1WithRSAEncryption, subjectKeyID.get(), false);
+ chain[1] = caRSA;
+ verifier.verifyChain(chain);
+ addToKeyStore(rsa2048_crypt, chain, RSA_2048_CRYPT);
+ subject.removeRDN(ObjectID.commonName);
+ issuer.removeRDN(ObjectID.commonName);
+ }
+
+ // create a DSA test certificate
+ if (create_dsa) {
+ issuer.addRDN(ObjectID.commonName ,"IAIK DSA Test CA");
+ // 512
+ subject.addRDN(ObjectID.commonName ,"DSA 512 bit Demo Certificate");
+ System.out.println("create 512 bit DSA demo certificate...");
+ SubjectKeyIdentifier subjectKeyID = (SubjectKeyIdentifier)caDSA.getExtension(SubjectKeyIdentifier.oid);
+ chain[0] = createCertificate(subject, dsa512.getPublic(),
+ issuer, ca_dsa.getPrivate(), AlgorithmID.dsaWithSHA, subjectKeyID.get(), true);
+ subject.removeRDN(ObjectID.commonName);
+ chain[1] = caDSA;
+ verifier.verifyChain(chain);
+
+ addToKeyStore(dsa512, chain, DSA_512);
+ // 1024
+ subject.addRDN(ObjectID.commonName ,"DSA 1024 bit Demo Certificate");
+ System.out.println("create 1024 bit DSA demo certificate...");
+ chain[0] = createCertificate(subject, dsa1024.getPublic(),
+ issuer, ca_dsa.getPrivate(), AlgorithmID.dsaWithSHA, subjectKeyID.get(), true);
+ subject.removeRDN(ObjectID.commonName);
+ chain[1] = caDSA;
+ verifier.verifyChain(chain);
+ addToKeyStore(dsa1024, chain, DSA_1024);
+ issuer.removeRDN(ObjectID.commonName);
+ }
+
+ // create a ESDH test certificate
+ if (create_esdh) {
+ issuer.addRDN(ObjectID.commonName ,"IAIK DSA Test CA");
+ // 512
+ subject.addRDN(ObjectID.commonName ,"ESDH 512 bit Demo Certificate");
+ System.out.println("create 512 bit ESDH demo certificate...");
+ SubjectKeyIdentifier subjectKeyID = (SubjectKeyIdentifier)caDSA.getExtension(SubjectKeyIdentifier.oid);
+ chain[0] = createCertificate(subject, esdh512.getPublic(),
+ issuer, ca_dsa.getPrivate(), AlgorithmID.dsaWithSHA, subjectKeyID.get(), false);
+ subject.removeRDN(ObjectID.commonName);
+ chain[1] = caDSA;
+ verifier.verifyChain(chain);
+ addToKeyStore(esdh512, chain, ESDH_512);
+ // 1024
+ subject.addRDN(ObjectID.commonName ,"ESDH 1024 bit Demo Certificate 1");
+ System.out.println("create 1024 bit ESDH demo certificate...");
+ chain[0] = createCertificate(subject, esdh1024.getPublic(),
+ issuer, ca_dsa.getPrivate(), AlgorithmID.dsaWithSHA, subjectKeyID.get(), false);
+ subject.removeRDN(ObjectID.commonName);
+ chain[1] = caDSA;
+ verifier.verifyChain(chain);
+ addToKeyStore(esdh1024, chain, ESDH_1024);
+ // 1024
+ subject.addRDN(ObjectID.commonName ,"ESDH 1024 bit Demo Certificate 2");
+ System.out.println("create second 1024 bit ESDH demo certificate...");
+ chain[0] = createCertificate(subject, esdh1024_.getPublic(),
+ issuer, ca_dsa.getPrivate(), AlgorithmID.dsaWithSHA, subjectKeyID.get(), false);
+ subject.removeRDN(ObjectID.commonName);
+ chain[1] = caDSA;
+ verifier.verifyChain(chain);
+ addToKeyStore(esdh1024_, chain, ESDH_1024_);
+ // 2048
+ subject.addRDN(ObjectID.commonName ,"ESDH 2048 bit Demo Certificate");
+ System.out.println("create 2048 bit ESDH demo certificate...");
+ chain[0] = createCertificate(subject, esdh2048.getPublic(),
+ issuer, ca_dsa.getPrivate(), AlgorithmID.dsaWithSHA, subjectKeyID.get(), false);
+ subject.removeRDN(ObjectID.commonName);
+ chain[1] = caDSA;
+ verifier.verifyChain(chain);
+ addToKeyStore(esdh2048, chain, ESDH_2048);
+ issuer.removeRDN(ObjectID.commonName);
+ }
+
+ System.out.println("\nCertificates created!");
+
+ } catch (Exception ex) {
+ System.out.println("Exception: "+ex);
+ }
+ }
+
+ public static void start() {
+ SetupCMSKeyStore suks = new SetupCMSKeyStore();
+ suks.initializeKeyStore();
+ if (suks.create_only_certificates) {
+ suks.getPrivateKeys();
+ }
+ else {
+ suks.generatePrivateKeys();
+ }
+ suks.generateCertificates();
+ suks.saveKeyStore();
+ }
+
+ /**
+ * Creates the test certificates.
+ */
+ public static void main(String arg[]) throws IOException {
+
+ IAIK.addAsProvider(true);
+ start();
+ System.in.read();
+ }
+} \ No newline at end of file
diff --git a/spss.test/src/testgenerator/SignatureManifestCheckParams.java b/spss.test/src/testgenerator/SignatureManifestCheckParams.java
new file mode 100644
index 000000000..b1505418d
--- /dev/null
+++ b/spss.test/src/testgenerator/SignatureManifestCheckParams.java
@@ -0,0 +1,176 @@
+package testgenerator;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.xml.serialize.DOMWriterImpl;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+
+/**
+ * @author knirschs
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class SignatureManifestCheckParams {
+/* So solls mal aussehen :-)
+
+ <SignatureManifestCheckParams ReturnReferenceInputData="true">
+ <ReferenceInfo>
+ <VerifyTransformsInfoProfile>
+ <dsig:Transforms>
+ <dsig:Transform Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116">
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>
+ </dsig:Transform>
+ </dsig:Transforms>
+ <TransformParameter URI="validURI">
+ <Base64Content>validBase64Data</Base64Content>
+ </TransformParameter>
+ </VerifyTransformsInfoProfile>
+ <VerifyTransformsInfoProfileID>validID</VerifyTransformsInfoProfileID>
+ </ReferenceInfo>
+ </SignatureManifestCheckParams>
+*/
+ private Document document;
+ private Element refInfo;
+ private Element verifyTrans;
+ private Element transPara;
+ private Element dsigTrans;
+
+ public SignatureManifestCheckParams(String returnReferenceInputData) throws Exception{
+
+ // Find the implementation
+ DocumentBuilderFactory factory
+ = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ DOMImplementation impl = builder.getDOMImplementation();
+
+ // Create the document
+ document = impl.createDocument(null, "SignatureManifestCheckParams", null);
+
+ //document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); // Create from whole cloth
+ Element root = document.getDocumentElement();
+ if (returnReferenceInputData!=null)
+ root.setAttribute("ReturnReferenceInputData",returnReferenceInputData);
+
+ refInfo = (Element) document.createElement("ReferenceInfo");
+ root.appendChild(refInfo);
+
+ verifyTrans = (Element) document.createElement("VerifyTransformsInfoProfile");
+
+
+ }
+
+ public void addTransPara(String URI)
+ {
+ transPara = document.createElement("TransformParameter");
+ transPara.setAttribute("URI",URI);
+ verifyTrans.appendChild(transPara);
+
+ }
+
+
+ /**
+ * Method addDsigTransform: To add an dsig:Tranform element with a special algorithm
+ * @param algName
+ */
+ public void addDsigTransform(String algName, Element el)
+ {
+ if (dsigTrans==null)
+ {
+ dsigTrans = (Element) document.createElementNS("http://www.w3.org/2000/09/xmldsig#","Transforms");
+ dsigTrans.setPrefix("dsig");
+ verifyTrans.appendChild(dsigTrans);
+
+ refInfo.appendChild(verifyTrans);
+ }
+
+
+ Element trans = document.createElementNS("http://www.w3.org/2000/09/xmldsig#","Transform");
+ trans.setPrefix("dsig");
+ trans.setAttribute("Algorithm",algName);
+ if (el!=null) trans.appendChild(el);
+ dsigTrans.appendChild(trans);
+ }
+
+ public void addDisgTransform(Element transformElement)
+ {
+ if (dsigTrans==null)
+ {
+ dsigTrans = (Element) document.createElementNS("http://www.w3.org/2000/09/xmldsig#","Transforms");
+ dsigTrans.setPrefix("dsig");
+ verifyTrans.appendChild(dsigTrans);
+
+ refInfo.appendChild(verifyTrans);
+ }
+
+ dsigTrans.appendChild(transformElement);
+ }
+
+ /**
+ * Method addTransformsProfileID.
+ * @param id
+ */
+ public void addTransformsProfileID(String id)
+ {
+ Element profID = (Element) document.createElement("VerifyTransformsInfoProfileID");
+ profID.appendChild(document.createTextNode(id));
+ refInfo.appendChild(profID);
+ }
+
+ public void addTransParaElement(String elemName, String content)
+ {
+ if (elemName!="Hash") {
+
+ Element eleName = document.createElement(elemName);
+ eleName.appendChild(document.createTextNode(content));
+ transPara.appendChild(eleName);
+
+ } else {
+
+ Element eleName = document.createElement(elemName);
+ Element digMethod = document.createElementNS("http://www.w3.org/2000/09/xmldsig#","DigestMethod");
+ digMethod.setPrefix("dsig");
+ digMethod.setAttribute("Algorithm","http://www.w3.org/2000/09/xmldsig#sha1");
+ eleName.appendChild(digMethod);
+ Element hash = document.createElementNS("http://www.w3.org/2000/09/xmldsig#","DigestValue");
+ hash.setPrefix("dsig");
+ hash.appendChild(document.createTextNode(content));
+ eleName.appendChild(hash);
+
+ transPara.appendChild(eleName);
+
+
+ }
+
+ }
+
+public String returnDoc() throws Exception
+ {
+ String result =(new DOMWriterImpl(true)).writeToString(document.getDocumentElement());
+
+ TestCases tc = new TestCases();
+
+ result = TestCases.replaceString(result,"<?xml version=\"1.0\"?>","");
+ try {
+ result = TestCases.replaceString(result," xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"","");
+ result = TestCases.replaceString(result," xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"","");
+ result = TestCases.replaceString(result," xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"","");
+ } catch (Exception e) {
+ }
+
+
+ return result;
+ }
+
+ public Document getDoc() throws Exception
+ {
+ return document;
+ }
+}
diff --git a/spss.test/src/testgenerator/Supplement.java b/spss.test/src/testgenerator/Supplement.java
new file mode 100644
index 000000000..41edd4118
--- /dev/null
+++ b/spss.test/src/testgenerator/Supplement.java
@@ -0,0 +1,62 @@
+package testgenerator;
+
+/**
+ * @author Stevie (Admin)
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class Supplement {
+
+ private String supplement;
+ /**
+ * Constructor for Supplement.
+ */
+ public Supplement() {
+ supplement = " <SupplementProfile>\n";
+
+ }
+
+ public void addMetaInfo(String mimeType, String description)
+ {
+ supplement += " <MetaInfo>\n" +
+ " <MimeType>" + mimeType + "</MimeType>";
+ if (!(description==null))
+ {
+ supplement+= " <Description>" + description + "</Description>";
+ }
+
+ supplement+= " </MetaInfo>";
+ }
+
+ public void addBase64Content(String fileName, String data)
+ {
+ supplement+= " <Content Reference=\"" + fileName + "\">\n"+
+ " <Base64Content>"+data+"</Base64Content>\n" +
+ " </Content>\n";
+
+ }
+
+ public void addXMLContent(String fileName, String data)
+ {
+ supplement+= " <Content Reference=\"" + fileName + "\">\n"+
+ " <XMLContent xml:space=\"preserve\">"+data+"</XMLContent>\n" +
+ " </Content>\n";
+
+ }
+
+
+ public void closeSupplement()
+ {
+ supplement+= " </SupplementProfile>\n";
+ }
+
+ public String getSupplement()
+ {
+ return supplement;
+ }
+
+
+}
diff --git a/spss.test/src/testgenerator/TestCMS.java b/spss.test/src/testgenerator/TestCMS.java
new file mode 100644
index 000000000..e4d022383
--- /dev/null
+++ b/spss.test/src/testgenerator/TestCMS.java
@@ -0,0 +1,118 @@
+package testgenerator;
+
+import iaik.asn1.CodingException;
+import iaik.asn1.ObjectID;
+import iaik.asn1.structures.AlgorithmID;
+import iaik.asn1.structures.Attribute;
+import iaik.asn1.structures.ChoiceOfTime;
+import iaik.cms.CMSException;
+import iaik.cms.ContentInfoStream;
+import iaik.cms.SignedDataStream;
+import iaik.cms.SignerInfo;
+import iaik.utils.StreamCopier;
+import iaik.x509.X509Certificate;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.KeyStore;
+import java.security.Provider;
+import java.security.Security;
+import java.security.SignatureException;
+
+
+/**
+ * @author Administrator
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class TestCMS {
+
+ public static void main(String[] args)
+ {
+ try {
+ iaik.security.provider.IAIK.addAsProvider(true);
+
+ Provider [] list = Security.getProviders();
+ for(int counter=0;counter<list.length;counter++)
+ {
+ System.out.println(list[counter].getName());
+ }
+
+ KeyStore.getInstance("IAIKKeyStore");
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ public static String getSignedDataStream(byte[] signedData, byte[] message,boolean two_users) throws CMSException, IOException {
+
+ // we are testing the stream interface
+ ByteArrayInputStream is = new ByteArrayInputStream(signedData);
+ // create the ContentInfo object
+ ContentInfoStream cis = new ContentInfoStream(is);
+ System.out.println("This ContentInfo holds content of type " + cis.getContentType().getName());
+ SignedDataStream signed_data = null;
+
+ if (message == null) {
+ // implicitly signed; get the content
+ signed_data = (SignedDataStream)cis.getContent();
+ }
+ else {
+ // explicitly signed; set the data stream for digesting the message
+ AlgorithmID[] algIDs = { AlgorithmID.sha1, AlgorithmID.md5 };
+ signed_data = new SignedDataStream(new ByteArrayInputStream(message), algIDs);
+
+ }
+
+ // get an InputStream for reading the signed content
+ InputStream data = signed_data.getInputStream();
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ StreamCopier sc = new StreamCopier(data, os);
+ sc.copyStream();
+
+
+ if (message != null) {
+ // if explicitly signed read now the DER encoded object
+ // an explicit S/MIME signed message also consits of message|signature
+ signed_data.decode(cis.getContentInputStream());
+ }
+
+ System.out.println("SignedData contains the following signer information:");
+ SignerInfo[] signer_infos = signed_data.getSignerInfos();
+
+ for (int i=0; i<signer_infos.length; i++) {
+ try {
+ // verify the signed data using the SignerInfo at index i
+ X509Certificate signer_cert = signed_data.verify(i);
+ // if the signature is OK the certificate of the signer is returned
+ System.out.println("Signature OK from signer: "+signer_cert.getSubjectDN());
+ Attribute signingTime = signer_infos[i].getSignedAttribute(ObjectID.signingTime);
+ if (signingTime != null) {
+ ChoiceOfTime cot = new ChoiceOfTime(signingTime.getValue()[0]);
+ System.out.println("This message has been signed at " + cot.getDate());
+ }
+ Attribute contentType = signer_infos[i].getSignedAttribute(ObjectID.contentType);
+ if (contentType != null) {
+ System.out.println("The content has CMS content type " + contentType.getValue()[0]);
+ }
+
+ } catch (SignatureException ex) {
+ // if the signature is not OK a SignatureException is thrown
+ System.out.println("Signature ERROR from signer: "+signed_data.getCertificate((signer_infos[i].getSignerIdentifier())).getSubjectDN());
+ ex.printStackTrace();
+ } catch (CodingException ex) {
+ System.out.println("Attribute decoding error: " + ex.getMessage());
+ ex.printStackTrace();
+ }
+ }
+
+ return os.toString();
+ }
+
+}
diff --git a/spss.test/src/testgenerator/TestCases.java b/spss.test/src/testgenerator/TestCases.java
new file mode 100644
index 000000000..db61af297
--- /dev/null
+++ b/spss.test/src/testgenerator/TestCases.java
@@ -0,0 +1,611 @@
+package testgenerator;
+import iaik.ixsil.init.IXSILInit;
+import iaik.ixsil.util.DOMUtilsImpl;
+import iaik.ixsil.util.URI;
+
+import iaik.asn1.ASN1Object;
+import iaik.asn1.ObjectID;
+import iaik.asn1.structures.AlgorithmID;
+import iaik.asn1.structures.Attribute;
+import iaik.asn1.structures.ChoiceOfTime;
+import iaik.asn1.structures.Name;
+import iaik.cms.CMSException;
+import iaik.cms.ContentInfo;
+import iaik.cms.IssuerAndSerialNumber;
+import iaik.cms.SignedData;
+import iaik.cms.SignerInfo;
+import iaik.pkcs.pkcs12.CertificateBag;
+import iaik.pkcs.pkcs12.KeyBag;
+import iaik.pkcs.pkcs12.PKCS12;
+import iaik.security.ecc.interfaces.ECDSAPrivateKey;
+import iaik.security.provider.IAIK;
+import iaik.utils.Base64OutputStream;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.BufferedWriter;
+import java.io.ByteArrayOutputStream;
+import java.io.CharArrayWriter;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.math.BigInteger;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.security.interfaces.RSAPrivateKey;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Properties;
+
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * Base class for all tutorial units.
+ * Provides some basic functionality, such as properties and signature
+ * serialization.
+ */
+public class TestCases
+{
+ public String Node2String(Node outputNode)
+ throws
+ TransformerFactoryConfigurationError,
+ TransformerConfigurationException,
+ TransformerException {
+ CharArrayWriter caw = new CharArrayWriter();
+ TransformerFactory transformerFactory =
+ TransformerFactory.newInstance();
+ Transformer transformer = transformerFactory.newTransformer();
+ transformer.setOutputProperty(OutputKeys.METHOD, "xml");
+ transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
+ transformer.transform(new DOMSource(outputNode), new StreamResult(caw));
+
+ String erg = caw.toString();
+ return erg;
+ }
+
+ public void findNode(Node base,String name,ArrayList foundNodes)
+ {
+ findNode(base,name,foundNodes,-1);
+ }
+
+
+ public void findNode(Node base,String name,ArrayList foundNodes, int max_level)
+ {
+ findNode(base,name,foundNodes,max_level,0);
+ }
+
+
+ public void findNode(Node base,String name,ArrayList foundNodes, int max_level, int level)
+ {
+ if(max_level!=-1 && max_level<=level) return;
+ //System.out.println("FINDNODE "+name);
+ //System.out.println("CHECKING "+base.getNodeName());
+ if(base.getNodeName().equals(name))
+ {
+ //System.out.println("ADD BASE !"+name);
+ foundNodes.add(base);
+ }
+
+ NodeList children = base.getChildNodes();
+ int size = children.getLength();
+ for(int counter=0;counter<size;counter++)
+ {
+ findNode(children.item(counter),name,foundNodes,max_level,level+1);
+ }
+ }
+
+ Properties configuration_;
+ boolean[] variations_;
+
+ /* ==================================================================================================== */
+
+ public TestCases() throws Exception
+ {
+ // Set some basic configuration properties
+ configuration_ = new Properties();
+
+ String baseDir = "e:/cio/projekte/basismodule/wartung/projekt/spss.test/";
+ String webBaseDir = "http://localhost:8080/moa-spss-testdata/";
+
+ configuration_.setProperty("baseDir", baseDir);
+ configuration_.setProperty("webbaseDir", webBaseDir);
+
+ configuration_.setProperty("PKCS12file", (baseDir + "/resources/test-ee2003_normal(buergerkarte).p12"));
+ configuration_.setProperty("PKCS12password", "buergerkarte");
+
+ configuration_.setProperty("ECDSPKCS12file", baseDir + "/resources/ecc(ego).p12");
+ configuration_.setProperty("ECDSPKCS12password", "ego");
+
+ configuration_.setProperty("IXSILInitPropertiesURI", "file:/" + baseDir + "resources/init.properties");
+
+ configuration_.setProperty("CERT", baseDir + "resources/test-ee2003_normal_extract.cer");
+
+ // Initialize IXSIL
+ IXSILInit.init(new URI(configuration_.getProperty("IXSILInitPropertiesURI")));
+
+ // Switch on debug information
+ IXSILInit.setPrintDebugLog(true);
+
+ // Add IAIK JCE provider
+ IAIK.addAsProvider();
+ }
+
+ public String X509name = null;
+ public BigInteger X509number = null;
+ public String X509hash = null;
+ public String X509sub = null;
+ public iaik.x509.X509Certificate user1_sign = null;
+
+ public void getX509Content() throws Exception
+ {
+ BufferedInputStream bis = new BufferedInputStream(new FileInputStream(configuration_.getProperty("CERT")));
+ iaik.x509.X509Certificate cert = new iaik.x509.X509Certificate(bis);
+ X509name = ((Name)(cert.getIssuerDN())).getRFC2253String();
+ X509number = cert.getSerialNumber();
+ X509hash = new String(cert.getFingerprintSHA());
+ X509sub = ((Name)(cert.getSubjectDN())).getRFC2253String();
+ }
+
+ /* ==================================================================================================== */
+
+ public void serialize2File(Document signature, String fileName) throws Exception
+ {
+ FileOutputStream signatureFIS = new FileOutputStream(fileName);
+ DOMUtilsImpl.serializeDocument(signature, signatureFIS);
+ }
+
+ /* ==================================================================================================== */
+
+ public static HashMap pkcs12cache = new HashMap();
+
+ public PKCS12 decryptPKCS12( String pkcs12file, String password ) throws Exception
+ {
+ if(pkcs12cache.containsKey(pkcs12file)) return (PKCS12) pkcs12cache.get(pkcs12file);
+ PKCS12 pkcs12 = new PKCS12(new FileInputStream(pkcs12file));
+
+// if (!pkcs12.verify(password.toCharArray())) {
+// System.out.println("could not verify pkcs12 " + pkcs12.toString() + " with password " + password);
+// } else {
+// System.out.println("verified pkcs12 " + pkcs12.toString() + " with password " + password);
+// }
+
+ pkcs12.decrypt(password.toCharArray());
+ System.out.println("decrypted pkcs12 " + pkcs12.toString() + " with password " + password);
+ pkcs12cache.put(pkcs12file,pkcs12);
+ return pkcs12;
+ }
+
+ /* ==================================================================================================== */
+
+ public static HashMap privkeycache = new HashMap();
+
+ public RSAPrivateKey getPrivateKey( PKCS12 pkcs12 ) throws Exception
+ {
+ if(privkeycache.containsKey(pkcs12)) return (RSAPrivateKey)privkeycache.get(pkcs12);
+ KeyBag[] keyBags = pkcs12.getKeyBags();
+ System.out.println("PKCS12.getKeyBags(): " + keyBags.length + " KeyBags found");
+ privkeycache.put(pkcs12,keyBags[0].getPrivateKey());
+ return (RSAPrivateKey) keyBags[0].getPrivateKey();
+ }
+
+ public static HashMap ecdsaprivkeycache = new HashMap();
+
+ public ECDSAPrivateKey getPrivateKeyECDS( PKCS12 pkcs12 ) throws Exception
+ {
+ if(ecdsaprivkeycache.containsKey(pkcs12)) return (ECDSAPrivateKey)ecdsaprivkeycache.get(pkcs12);
+ KeyBag[] keyBags = pkcs12.getKeyBags();
+ System.out.println("PKCS12.getKeyBags(): " + keyBags.length + " KeyBags found");
+ ecdsaprivkeycache.put(pkcs12,keyBags[0].getPrivateKey());
+ return (ECDSAPrivateKey) keyBags[0].getPrivateKey();
+ }
+
+ /* ==================================================================================================== */
+
+ public static HashMap x509cache = new HashMap();
+
+ public X509Certificate[] getCertificates( PKCS12 pkcs12 ) throws Exception
+ {
+ if(x509cache.containsKey(pkcs12)) return (X509Certificate[])x509cache.get(pkcs12);
+ X509Certificate[] ret = CertificateBag.getCertificates(pkcs12.getCertificateBags());
+ x509cache.put(pkcs12,ret);
+ return ret;
+ }
+
+ /* ==================================================================================================== */
+ /* ==================Created and or changed Methods by Stefan Knirsch================================== */
+ /* ==================================================================================================== */
+
+ public String vxReqFile(String testNumber)
+ {
+ return configuration_.getProperty("baseDir") +
+ "/data/VX0/"+
+ configuration_.getProperty("TestClass") +
+ "." +
+ testNumber +
+ ".Req.xml";
+ }
+
+ public String vxResFile(String testNumber)
+ {
+ return configuration_.getProperty("baseDir") +
+ "/data/VX0/"+
+ configuration_.getProperty("TestClass") +
+ "." +
+ testNumber +
+ ".Res.xml";
+ }
+
+ public String vxReqFileL(String testNumber,String filename)
+ {
+ return configuration_.getProperty("baseDir") +
+ "/data/LVX"+filename+"/"+
+ configuration_.getProperty("TestClass") +
+ "." +
+ testNumber +
+ ".Req.xml";
+ }
+
+ public String vxResFileL(String testNumber,String filename)
+ {
+ return configuration_.getProperty("baseDir") +
+ "/data/LVX"+filename+"/"+
+ configuration_.getProperty("TestClass") +
+ "." +
+ testNumber +
+ ".Res.xml";
+ }
+
+ public void createVXConfig() throws Exception {
+
+ String file =
+ configuration_.getProperty("baseDir")
+ + "resources/"
+ + configuration_.getProperty("TestClass")
+ + ".Config.xml";
+ String config =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+
+ "<MOAConfiguration xmlns=\"http://reference.e-government.gv.at/namespace/moaconfig/20021122#\">"
+ + "<TrustProfile id=\"TrustProfile1\" uri=\"file://SERVER_WORKING_DIRECTORY/TrustProfile1\"/>"
+ + "<SupplementProfile id=\"SupplementProfile1\" uri=\"file://SERVER_WORKING_DIRECTORY/SupplementProfile1\"/>"
+ + "<SupplementProfile id=\"SupplementProfile2\" uri=\"file://SERVER_WORKING_DIRECTORY/SupplementProfile2\"/>"
+ + "</MOAConfiguration>";
+
+ FileOutputStream fos = new FileOutputStream(file);
+ fos.write(config.getBytes());
+ }
+
+ /**
+ * Method replaceString.
+ * @param input: String to be changed
+ * @param oldPart: subString in input to be changed
+ * @param newPart: new subString instead of the oldPart
+ * @return String
+ * @throws Exception
+ */
+ public static String replaceString(
+ String input,
+ String oldPart,
+ String newPart)
+ throws Exception {
+ String erg = null;
+
+ //First Part
+ erg = input.substring(0, input.indexOf(oldPart));
+ //Insert new Part
+ erg += newPart;
+
+ //insert REST
+ erg
+ += input.substring(
+ input.indexOf(oldPart) + oldPart.length(),
+ input.length());
+
+ return erg;
+ }
+
+ public static String replaceStringAll(
+ String input,
+ String oldPart,
+ String newPart)
+ throws Exception {
+
+ String erg = input;
+
+ while(true)
+ {
+
+ //First Part
+ int pos = input.indexOf(oldPart);
+ if(pos==-1) break;
+ erg = input.substring(0, pos);
+
+ //Insert new Part
+ erg += newPart;
+
+ //insert REST
+ erg
+ += input.substring(
+ input.indexOf(oldPart) + oldPart.length(),
+ input.length());
+
+ input = erg;
+ }
+ return erg;
+ }
+
+ /**
+ * Method readFile.
+ * @param filename
+ * @return String
+ * @throws Exception
+ */
+
+ public String readFile(String filename) throws Exception {
+
+ /*StringBuffer data = new StringBuffer();
+ String line = null;
+ BufferedReader br = new BufferedReader(new FileReader(filename));
+ while ((line = br.readLine()) != null) {
+ data.append(line);
+ data.append("\n");
+ }
+ */
+ RandomAccessFile raf = new RandomAccessFile(filename, "r");
+ if (raf.length() > Integer.MAX_VALUE)
+ throw new IOException("file too big to fit in byte array.");
+
+ byte[] result = new byte[(int) raf.length()];
+
+ raf.read(result);
+
+ return new String(result);
+
+ }
+ /**
+ * Method readBinaryFileAsBase64.
+ * @param filename
+ * @return Stringrepresentation as Base64 of the inputfile and saves that file
+ * @throws Exception
+ */
+ public String readBinaryFileAsBase64_new(String filename) throws Exception {
+
+ RandomAccessFile raf = new RandomAccessFile(filename, "r");
+ if (raf.length() > Integer.MAX_VALUE)
+ throw new IOException("file too big to fit in byte array.");
+ byte[] result = new byte[(int) raf.length()];
+ //READ the original binary Data
+ raf.read(result);
+
+ //Convert the data to bas64 and store it in a new file
+
+ ByteArrayOutputStream fos = new ByteArrayOutputStream();
+ Base64OutputStream base64os = new Base64OutputStream(fos);
+ base64os.write(result);
+ base64os.flush();
+
+ return fos.toString();
+
+ }
+ public String readBinaryFileAsBase64(String filename) throws Exception {
+
+ RandomAccessFile raf = new RandomAccessFile(filename, "r");
+ if (raf.length() > Integer.MAX_VALUE)
+ throw new IOException("file too big to fit in byte array.");
+ byte[] result = new byte[(int) raf.length()];
+ //READ the original binary Data
+ raf.read(result);
+
+ //Convert the data to bas64 and store it in a new file
+ FileOutputStream fos = new FileOutputStream(filename + "base64.enc");
+ Base64OutputStream base64os = new Base64OutputStream(fos);
+ base64os.write(result);
+ base64os.flush();
+ base64os.close();
+
+ //read the converted data und return it
+ raf = new RandomAccessFile(filename + "base64.enc", "r");
+ if (raf.length() > Integer.MAX_VALUE)
+ throw new IOException("Converted base64 file too big to fit in byte array.");
+ result = new byte[(int) raf.length()];
+ //READ the original binary Data
+ raf.read(result);
+
+ return new String(result);
+
+ }
+
+ /**
+ * Method writeFile.
+ * @param filename
+ * @param data
+ * @throws Exception
+ */
+ public void writeFile(String filename, String data) throws Exception {
+ BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
+ bw.write(data);
+ bw.close();
+ }
+
+ /**
+ * Method writeFileBinary
+ * @param filename
+ * @param data
+ * @throws Exception
+ */
+ public void writeFileBinary(String filename, byte[] data) throws Exception {
+ BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream(filename));
+ bw.write(data);
+ bw.close();
+ }
+ /**
+ * Method getDate.
+ * @param changeHours to change the time into the past or future
+ * @return String
+ */
+
+ public String getDate(long changeHours) {
+
+ //Use the XML-Format for the Time
+ SimpleDateFormat formatter =
+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'+01:00");
+ //get the current Time
+ Date currentTime = new Date();
+ //add or substract a few hours
+ currentTime.setTime(
+ (currentTime.getTime() + changeHours * 1000 * 60 * 60));
+
+ return formatter.format(currentTime);
+ }
+
+ public ASN1Object createSignedCMSData(byte[] message, int mode,boolean two_users) throws Exception {
+
+ System.out.println("Create a new message signed by user 1:");
+
+ // create a new SignedData object which includes the data
+ SignedData signed_data = new SignedData(message, mode);
+ // SignedData shall include the certificate chain for verifying
+
+ PKCS12 pkcs12 = decryptPKCS12(
+ configuration_.getProperty("PKCS12file"),
+ configuration_.getProperty("PKCS12password"));
+
+ BufferedInputStream bis = new BufferedInputStream(new FileInputStream(configuration_.getProperty("CERT")));
+ iaik.x509.X509Certificate cert = new iaik.x509.X509Certificate(bis);
+ user1_sign = cert;
+ X509name = ((Name)(cert.getIssuerDN())).getRFC2253String();
+ X509number = cert.getSerialNumber();
+ X509hash = new String(cert.getFingerprintSHA());
+ X509sub = ((Name)cert.getSubjectDN()).getRFC2253String();
+
+ iaik.x509.X509Certificate[] certarray = new iaik.x509.X509Certificate[1];
+ certarray[0] = cert;
+
+ signed_data.setCertificates(certarray);
+
+
+ RSAPrivateKey privateKey = getPrivateKey( pkcs12 );
+
+ // cert at index 0 is the user certificate
+ IssuerAndSerialNumber issuer = new IssuerAndSerialNumber((Name)cert.getIssuerDN(),X509number);
+
+ // create a new SignerInfo
+ SignerInfo signer_info = new SignerInfo(issuer, AlgorithmID.sha1, privateKey);
+ // create some authenticated attributes
+ // the message digest attribute is automatically added
+ Attribute[] attributes = new Attribute[2];
+ // content type is data
+ attributes[0] = new Attribute(ObjectID.contentType, new ASN1Object[] {ObjectID.cms_data});
+ // signing time is now
+ attributes[1] = new Attribute(ObjectID.signingTime, new ASN1Object[] {new ChoiceOfTime().toASN1Object()});
+ // set the attributes
+ signer_info.setSignedAttributes(attributes);
+ // finish the creation of SignerInfo by calling method addSigner
+ try {
+ signed_data.addSignerInfo(signer_info);
+
+ if(two_users)
+ {
+ // another SignerInfo without authenticated attributes and MD5 as hash algorithm
+ signer_info = new SignerInfo(new IssuerAndSerialNumber((Name)cert.getIssuerDN(),X509number),
+ AlgorithmID.md5, privateKey);
+ // the message digest itself is protected
+ signed_data.addSignerInfo(signer_info);
+ }
+
+ } catch (NoSuchAlgorithmException ex) {
+ ex.printStackTrace();
+ throw new CMSException("No implementation for signature algorithm: "+ex.getMessage());
+ }
+
+ ContentInfo ci = new ContentInfo(signed_data);
+ return ci.toASN1Object();
+ }
+
+ public ASN1Object createSignedCMSData(byte[] message, int mode,boolean two_users,String pkcs12file,String pkcs12password,String certname) throws Exception {
+
+ System.out.println("Create a new message signed by user 1:");
+
+ // create a new SignedData object which includes the data
+ SignedData signed_data = new SignedData(message, mode);
+ // SignedData shall include the certificate chain for verifying
+
+ PKCS12 pkcs12 = decryptPKCS12(
+ configuration_.getProperty(pkcs12file),
+ configuration_.getProperty(pkcs12password));
+
+ BufferedInputStream bis = new BufferedInputStream(new FileInputStream(configuration_.getProperty(certname)));
+ iaik.x509.X509Certificate cert = new iaik.x509.X509Certificate(bis);
+ X509name = ((Name)(cert.getIssuerDN())).getRFC2253String();
+ X509number = cert.getSerialNumber();
+ X509hash = new String(cert.getFingerprintSHA());
+ X509sub = ((Name)cert.getSubjectDN()).getRFC2253String();
+
+ iaik.x509.X509Certificate[] certarray = new iaik.x509.X509Certificate[1];
+ certarray[0] = cert;
+
+ signed_data.setCertificates(certarray);
+
+
+ RSAPrivateKey privateKey = getPrivateKey( pkcs12 );
+
+ // cert at index 0 is the user certificate
+ IssuerAndSerialNumber issuer = new IssuerAndSerialNumber((Name)cert.getIssuerDN(),X509number);
+
+ // create a new SignerInfo
+ SignerInfo signer_info = new SignerInfo(issuer, AlgorithmID.sha1, privateKey);
+ // create some authenticated attributes
+ // the message digest attribute is automatically added
+ Attribute[] attributes = new Attribute[2];
+ // content type is data
+ attributes[0] = new Attribute(ObjectID.contentType, new ASN1Object[] {ObjectID.cms_data});
+ // signing time is now
+ attributes[1] = new Attribute(ObjectID.signingTime, new ASN1Object[] {new ChoiceOfTime().toASN1Object()});
+ // set the attributes
+ signer_info.setSignedAttributes(attributes);
+ // finish the creation of SignerInfo by calling method addSigner
+ try {
+ signed_data.addSignerInfo(signer_info);
+
+ if(two_users)
+ {
+ // another SignerInfo without authenticated attributes and MD5 as hash algorithm
+ signer_info = new SignerInfo(new IssuerAndSerialNumber((Name)cert.getIssuerDN(),X509number),
+ AlgorithmID.md5, privateKey);
+ // the message digest itself is protected
+ signed_data.addSignerInfo(signer_info);
+ }
+
+ } catch (NoSuchAlgorithmException ex) {
+ throw new CMSException("No implementation for signature algorithm: "+ex.getMessage());
+ }
+
+ ContentInfo ci = new ContentInfo(signed_data);
+ return ci.toASN1Object();
+ }
+
+public String cutXML(String input)
+ {
+ int pos = input.indexOf(">");
+ if(pos!=-1)
+ return input.substring(pos+1);
+ else
+ return input;
+ }
+
+
+}
diff --git a/spss.test/src/testgenerator/TestGeneratorCX0.java b/spss.test/src/testgenerator/TestGeneratorCX0.java
new file mode 100644
index 000000000..31778c6a2
--- /dev/null
+++ b/spss.test/src/testgenerator/TestGeneratorCX0.java
@@ -0,0 +1,2940 @@
+
+package testgenerator;
+import iaik.apps.util.passphrase.PassphrasePrompt;
+import iaik.asn1.structures.Name;
+import iaik.ixsil.algorithms.CanonicalizationAlgorithmImplCanonicalXML;
+import iaik.ixsil.algorithms.DigestAlgorithmImplSHA1;
+import iaik.ixsil.algorithms.SignatureAlgorithmImplECDSA;
+import iaik.ixsil.algorithms.SignatureAlgorithmImplRSA;
+import iaik.ixsil.algorithms.TransformImplBase64Decode;
+import iaik.ixsil.core.Signer;
+import iaik.ixsil.core.SignerManifest;
+import iaik.ixsil.core.SignerReference;
+import iaik.ixsil.core.SignerSignature;
+import iaik.ixsil.core.SignerSignedInfo;
+import iaik.ixsil.init.IXSILConstants;
+import iaik.ixsil.init.IXSILInit;
+import iaik.ixsil.keyinfo.KeyManagerImpl;
+import iaik.ixsil.keyinfo.x509.KeyProviderImplX509Data;
+import iaik.ixsil.keyinfo.x509.X509Data;
+import iaik.ixsil.util.URI;
+import iaik.pkcs.pkcs11.objects.Certificate;
+import iaik.pkcs.pkcs11.objects.PrivateKey;
+import iaik.pkcs.pkcs11.objects.PublicKey;
+import iaik.pkcs.pkcs11.provider.IAIKPkcs11;
+import iaik.pkcs.pkcs11.provider.keys.IAIKPKCS11RsaPrivateKey;
+import iaik.pkcs.pkcs11.provider.keys.IAIKPKCS11RsaPublicKey;
+import iaik.pkcs.pkcs12.CertificateBag;
+import iaik.pkcs.pkcs12.PKCS12;
+import iaik.security.ecc.interfaces.ECDSAPrivateKey;
+import iaik.security.provider.IAIK;
+import iaik.utils.Base64OutputStream;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.RandomAccessFile;
+import java.net.URL;
+import java.security.Key;
+import java.security.KeyStore;
+import java.security.Security;
+import java.security.Signature;
+import java.security.cert.X509Certificate;
+import java.security.interfaces.RSAPrivateKey;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Properties;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.xerces.dom.DocumentFragmentImpl;
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+
+import at.gv.egovernment.moa.util.Base64Utils;
+import at.gv.egovernment.moa.util.DOMUtils;
+
+import sun.misc.BASE64Encoder;
+
+/**
+ * @author stephan
+ */
+public class TestGeneratorCX0 extends TestCases {
+
+ String datadirectory = "data/CX0/";
+ String datadirectory_3 = "data/CX3/";
+ String datadirectory_4 = "data/CX4/";
+ String datadirectory_l = "data/LCX";
+
+ public String defaultblock = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\">\n"+
+ " <!-- Hint -->\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ public static void main(String[] args) throws Exception {
+ TestGeneratorCX0 testcase = new TestGeneratorCX0();
+
+ testcase.createConfig();
+ testcase.create001();
+ testcase.create002();
+ testcase.create003();
+ //testcase.create004();
+ testcase.create005();
+ //testcase.create006();
+ testcase.create007();
+ testcase.create008();
+ testcase.create009();
+ testcase.create010();
+ testcase.create011();
+ testcase.create012();
+ testcase.create013();
+ testcase.create014();
+ testcase.create015();
+ testcase.create016();
+ testcase.create017();
+ testcase.create018();
+ testcase.create019();
+
+ testcase.create051();
+ testcase.create052();
+ testcase.create053();
+ testcase.create054();
+ testcase.create055();
+ testcase.create056();
+ testcase.create057();
+ testcase.create058();
+ testcase.create059();
+ testcase.create060();
+ //testcase.create061();
+ testcase.create062();
+ //testcase.create063();
+ testcase.create064();
+ testcase.create065();
+
+ //testcase.createL00();*/
+
+ }
+
+ /* ==================================================================================================== */
+
+ public TestGeneratorCX0() throws Exception {
+
+ super();
+
+ // Set config properties
+ configuration_.setProperty("TestClass", "TestGeneratorCX0");
+// configuration_.setProperty("privateKeyFile", baseDir + "additionalFiles/keys/RSAPrivateKey.der");
+// configuration_.setProperty("publicKeyFile", baseDir + "additionalFiles/keys/RSAPublicKey.der");
+// configuration_.setProperty("signatureFile", baseDir + "additionalFiles/signatures/Signature.unit1.xml");
+
+ iaik.security.provider.IAIK.addAsProvider();
+ iaik.security.provider.IAIK.addAsJDK14Provider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+ //iaik.security.ecc.provider.ECCProvider.addAsProvider();
+ }
+
+ /* ==================================================================================================== */
+
+ public Document createECDSPKCS12Sig(String tn,String fileref) throws Exception
+ {
+ String TestNumber = tn;
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ // String res = "emtpy";
+ // FileOutputStream resFOS = new FileOutputStream(resFile);
+ // resFOS.write(res.getBytes());
+
+ PKCS12 pkcs12 = decryptPKCS12(
+ configuration_.getProperty("ECDSPKCS12file"),
+ configuration_.getProperty("ECDSPKCS12password" ) );
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ Signer signer = new Signer(baseURI);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ SignerSignedInfo signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set canonicalization algorithm
+ CanonicalizationAlgorithmImplCanonicalXML c14nAlg =
+ new CanonicalizationAlgorithmImplCanonicalXML();
+ signedInfo.setCanonicalizationAlgorithm(c14nAlg);
+
+ CertificateBag cb[] = pkcs12.getCertificateBags();
+ System.out.println("LEN:"+cb.length);
+ iaik.x509.X509Certificate cert[] = cb[0].getCertificates(cb);
+ System.out.println("LEN2:"+cert.length);
+ System.out.println("CERT:"+(((Name)(cert[0].getIssuerDN())).getRFC2253String()));
+
+
+ // Set signature algorithm
+ /* TODO: Change to ECDS Impl */
+ SignatureAlgorithmImplECDSA signatureAlg = new SignatureAlgorithmImplECDSA();
+ ECDSAPrivateKey privateKey = getPrivateKeyECDS( pkcs12 );
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(fileref);
+
+ SignerReference reference = signedInfo.createReference();
+ reference.setURI(refURI);
+ reference.setId("reference-1-1");
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ // Add reference to signature
+ signedInfo.addReference(reference);
+
+ // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+ X509Certificate[] certs = getCertificates(pkcs12);
+ X509Data x509Data = new X509Data();
+ for (int i = 0; i < certs.length; i++)
+ {
+ x509Data.insertHintAt(certs[i], i);
+ }
+
+ KeyProviderImplX509Data x509DataKeyProvider = new KeyProviderImplX509Data(signer.toDocument());
+ x509DataKeyProvider.insertX509DataAt(x509Data, 0);
+
+ // X509Data key information (certificate chain)
+ keyManager.addKeyProvider(x509DataKeyProvider);
+
+ signer.getSignature().setKeyManager(keyManager);
+ signer.getSignature().setId("signature-1-1");
+ // Compute signature value
+ signer.getSignature().sign();
+ Document doc = signer.toDocument();
+ System.out.println(doc.getDocumentElement().getNodeName());
+
+ return doc;
+ }
+
+ public Document createPKCS12Sig(String tn,String fileref) throws Exception
+ {
+ return createPKCS12Sig(tn,fileref,false,false,null,false);
+ }
+
+ public Document createPKCS12Sig(String tn,String fileref,String id1,String id2) throws Exception
+ {
+ return createPKCS12Sig(tn,fileref,false,false,null,false,id1,id2);
+ }
+
+ public Document createPKCS12SigWithEnveloping(String TestNumber,String data) throws Exception
+ {
+ return createPKCS12Sig(TestNumber,data,true,false,null,false);
+ }
+
+ public Document createPKCS12Sig(String TestNumber,String data,boolean env,boolean mani) throws Exception
+ {
+ return createPKCS12Sig(TestNumber,data,env,mani,null,false);
+ }
+
+ public Document createPKCS12Sig(String TestNumber,String data,boolean env,boolean mani,String data2,boolean env2) throws Exception
+ {
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ PKCS12 pkcs12 = decryptPKCS12(
+ configuration_.getProperty("PKCS12file"),
+ configuration_.getProperty("PKCS12password" ) );
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ Signer signer = new Signer(baseURI);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ SignerSignature signature = signer.getSignature();
+ SignerSignedInfo signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set canonicalization algorithm
+ CanonicalizationAlgorithmImplCanonicalXML c14nAlg =
+ new CanonicalizationAlgorithmImplCanonicalXML();
+ signedInfo.setCanonicalizationAlgorithm(c14nAlg);
+
+ // Set signature algorithm
+ SignatureAlgorithmImplRSA signatureAlg = new SignatureAlgorithmImplRSA();
+ RSAPrivateKey privateKey = getPrivateKey( pkcs12 );
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+
+ if(!mani)
+ {
+ SignerReference reference = signedInfo.createReference();
+ if(env)
+ {
+ iaik.ixsil.core.Object object = null;
+ //object = signature.createObject(data);
+ if(data.startsWith("<xml"))
+ {
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(data.getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if(data.startsWith("<Testdaten"))
+ {
+
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>"+data).getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if(data.startsWith("b64:"))
+ {
+ data = data.substring(4);
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.newDocument();
+ Element root = doc.createElement("root");
+ doc.appendChild(root);
+ //String encoded = Base64Utils.encode(data.getBytes());
+ String encoded = Base64Utils.encode(data.getBytes());
+ /*encoded = replaceStringAll(encoded,"\n","");
+ encoded = replaceStringAll(encoded,"\r","");*/
+ Text textnode = doc.createTextNode(encoded);
+
+ System.out.println("Encoded:"+encoded);
+ //root.appendChild(textnode);
+
+ DocumentFragment df = doc.createDocumentFragment();
+
+ df.appendChild(textnode);
+
+ object = signature.createObject(df);
+
+ TransformImplBase64Decode trans = new TransformImplBase64Decode();
+ InputStream s = new ByteArrayInputStream(encoded.getBytes());
+ trans.setInput(s,null);
+
+ reference.insertTransformAt(trans,0);
+ }
+ else
+ {
+ object = signature.createObject(data);
+ }
+
+ object.setId("signed-data-1-1-1");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ reference.setURI(new URI("#xpointer(id('signed-data-1-1-1')/node())"));
+
+
+ }
+ else
+ {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data);
+
+
+ reference.setURI(refURI);
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+ reference.setId("reference-1-1");
+ signedInfo.addReference(reference);
+ }
+
+ if(data2!=null)
+ {
+ SignerReference reference = signedInfo.createReference();
+ reference = signedInfo.createReference();
+ if(env2)
+ {
+ iaik.ixsil.core.Object object = null;
+ if(data2.startsWith("<xml"))
+ {
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(data.getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if(data2.startsWith("<Testdaten"))
+ {
+
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>"+data).getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else
+ object = signature.createObject(data2);
+
+ if(!env)
+ object.setId("signed-data-1-2-1");
+ else
+ object.setId("signed-data-1-2-1");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ if(!env)
+ reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())"));
+ else
+ reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())"));
+ }
+ else
+ {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data2);
+
+
+ reference.setURI(refURI);
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+ reference.setId("reference-1-2");
+ signedInfo.addReference(reference);
+ }
+
+ // Add reference to signature
+
+
+
+ if(mani)
+ {
+
+ /*iaik.ixsil.core.Object object = null;
+ if(env)
+ object = signature.createObject(readFile(data));
+ else
+ object = signature.createObject(data);
+
+ object.setId("envelopedData");
+ signature.addObject(object);*/
+ SignerReference reference = signedInfo.createReference();
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ manifestRef.setDigestAlgorithm(digestAlg);
+
+ manifestRef.setURI(new URI(data));
+ manifestRef.setId("reference-1-1");
+
+ manifest.addReference(manifestRef);
+ manifest.setId("dsig-manifest-1-1");
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ reference = signedInfo.createReference();
+ reference.setURI(
+ new URI("#dsig-manifest-1-1"));
+ reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);
+
+
+ /*Element envelopedDataElem =
+ signer.toDocument().createElement("EnvelopedDataElement");
+
+ if(env)
+ {
+ envelopedDataElem.appendChild(
+ signer.toDocument().createTextNode(readFile(data)));
+ }
+ else
+ {
+ envelopedDataElem.appendChild(
+ signer.toDocument().createTextNode(data));
+ }
+
+ iaik.ixsil.core.Object object = signature.createObject(envelopedDataElem);
+ signature.addObject(object);
+
+ // Create Manifest with a single reference pointing to the enveloped data
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+ manifestRef.setURI(
+ new URI(
+ null,
+ null,
+ null,
+ null,
+ "xmlns(dsig="
+ + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_
+ + ") "
+ + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[1]/descendant::node())"));
+ manifestRef.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+ manifest.addReference(manifestRef);
+
+ // Add Manifest to signature structure (use an Object) and compute digest values for manifest reference
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ // Create and configure reference to manifest
+ reference = signedInfo.createReference();
+ reference.setURI(
+ new URI(
+ null,
+ null,
+ null,
+ null,
+ "xmlns(dsig="
+ + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_
+ + ") "
+ + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[2]/dsig:Manifest)"));
+ reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);*/
+ }
+
+ // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+ X509Certificate[] certs = getCertificates(pkcs12);
+ X509Data x509Data = new X509Data();
+ x509Data.insertHintAt(certs[1], 0);
+ /*for (int i = 0; i < certs.length; i++)
+ {
+
+ }*/
+
+ KeyProviderImplX509Data x509DataKeyProvider = new KeyProviderImplX509Data(signer.toDocument());
+ x509DataKeyProvider.insertX509DataAt(x509Data, 0);
+
+ // X509Data key information (certificate chain)
+ keyManager.addKeyProvider(x509DataKeyProvider);
+
+ signer.getSignature().setKeyManager(keyManager);
+ signer.getSignature().setId("signature-1-1");
+ // Compute signature value
+ signer.getSignature().sign();
+
+ return signer.toDocument();
+ }
+
+ public Document createPKCS12Sig(String TestNumber,String data,boolean env,boolean mani,String data2,boolean env2,String id1,String id2) throws Exception
+ {
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ PKCS12 pkcs12 = decryptPKCS12(
+ configuration_.getProperty("PKCS12file"),
+ configuration_.getProperty("PKCS12password" ) );
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ Signer signer = new Signer(baseURI);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ SignerSignature signature = signer.getSignature();
+ SignerSignedInfo signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set canonicalization algorithm
+ CanonicalizationAlgorithmImplCanonicalXML c14nAlg =
+ new CanonicalizationAlgorithmImplCanonicalXML();
+ signedInfo.setCanonicalizationAlgorithm(c14nAlg);
+
+ // Set signature algorithm
+ SignatureAlgorithmImplRSA signatureAlg = new SignatureAlgorithmImplRSA();
+ RSAPrivateKey privateKey = getPrivateKey( pkcs12 );
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+
+ if(!mani)
+ {
+ SignerReference reference = signedInfo.createReference();
+ if(env)
+ {
+ iaik.ixsil.core.Object object = null;
+ //object = signature.createObject(data);
+ if(data.startsWith("<xml"))
+ {
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(data.getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if(data.startsWith("<Testdaten"))
+ {
+
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>"+data).getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if(data.startsWith("b64:"))
+ {
+ data = data.substring(4);
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.newDocument();
+ Element root = doc.createElement("root");
+ doc.appendChild(root);
+ //String encoded = Base64Utils.encode(data.getBytes());
+ String encoded = Base64Utils.encode(data.getBytes());
+ /*encoded = replaceStringAll(encoded,"\n","");
+ encoded = replaceStringAll(encoded,"\r","");*/
+ Text textnode = doc.createTextNode(encoded);
+
+ System.out.println("Encoded:"+encoded);
+ //root.appendChild(textnode);
+
+ DocumentFragment df = doc.createDocumentFragment();
+
+ df.appendChild(textnode);
+
+ object = signature.createObject(df);
+
+ TransformImplBase64Decode trans = new TransformImplBase64Decode();
+ InputStream s = new ByteArrayInputStream(encoded.getBytes());
+ trans.setInput(s,null);
+
+ reference.insertTransformAt(trans,0);
+ }
+ else
+ {
+ object = signature.createObject(data);
+ }
+
+ object.setId("signed-data-1-1-1");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ reference.setURI(new URI("#xpointer(id('signed-data-1-1-1')/node())"));
+
+
+ }
+ else
+ {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data);
+
+
+ reference.setURI(refURI);
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+ reference.setId("reference-2-1");
+ signedInfo.addReference(reference);
+ }
+
+ if(data2!=null)
+ {
+ SignerReference reference = signedInfo.createReference();
+ reference = signedInfo.createReference();
+ if(env2)
+ {
+ iaik.ixsil.core.Object object = null;
+ if(data2.startsWith("<xml"))
+ {
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(data.getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if(data2.startsWith("<Testdaten"))
+ {
+
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>"+data).getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else
+ object = signature.createObject(data2);
+
+ if(!env)
+ object.setId("signed-data-1-2-1");
+ else
+ object.setId("signed-data-1-2-1");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ if(!env)
+ reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())"));
+ else
+ reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())"));
+ }
+ else
+ {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data2);
+
+
+ reference.setURI(refURI);
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+ reference.setId("reference-1-2");
+ signedInfo.addReference(reference);
+ }
+
+ // Add reference to signature
+
+
+
+ if(mani)
+ {
+
+ /*iaik.ixsil.core.Object object = null;
+ if(env)
+ object = signature.createObject(readFile(data));
+ else
+ object = signature.createObject(data);
+
+ object.setId("envelopedData");
+ signature.addObject(object);*/
+ SignerReference reference = signedInfo.createReference();
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ manifestRef.setDigestAlgorithm(digestAlg);
+
+ manifestRef.setURI(new URI(data));
+ manifestRef.setId("reference-1-1");
+
+ manifest.addReference(manifestRef);
+ manifest.setId("dsig-manifest-1-1");
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ reference = signedInfo.createReference();
+ reference.setURI(
+ new URI("#dsig-manifest-1-1"));
+ reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);
+
+
+ /*Element envelopedDataElem =
+ signer.toDocument().createElement("EnvelopedDataElement");
+
+ if(env)
+ {
+ envelopedDataElem.appendChild(
+ signer.toDocument().createTextNode(readFile(data)));
+ }
+ else
+ {
+ envelopedDataElem.appendChild(
+ signer.toDocument().createTextNode(data));
+ }
+
+ iaik.ixsil.core.Object object = signature.createObject(envelopedDataElem);
+ signature.addObject(object);
+
+ // Create Manifest with a single reference pointing to the enveloped data
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+ manifestRef.setURI(
+ new URI(
+ null,
+ null,
+ null,
+ null,
+ "xmlns(dsig="
+ + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_
+ + ") "
+ + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[1]/descendant::node())"));
+ manifestRef.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+ manifest.addReference(manifestRef);
+
+ // Add Manifest to signature structure (use an Object) and compute digest values for manifest reference
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ // Create and configure reference to manifest
+ reference = signedInfo.createReference();
+ reference.setURI(
+ new URI(
+ null,
+ null,
+ null,
+ null,
+ "xmlns(dsig="
+ + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_
+ + ") "
+ + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[2]/dsig:Manifest)"));
+ reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);*/
+ }
+
+ // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+ X509Certificate[] certs = getCertificates(pkcs12);
+ X509Data x509Data = new X509Data();
+ x509Data.insertHintAt(certs[1], 0);
+ /*for (int i = 0; i < certs.length; i++)
+ {
+
+ }*/
+
+ KeyProviderImplX509Data x509DataKeyProvider = new KeyProviderImplX509Data(signer.toDocument());
+ x509DataKeyProvider.insertX509DataAt(x509Data, 0);
+
+ // X509Data key information (certificate chain)
+ keyManager.addKeyProvider(x509DataKeyProvider);
+
+ signer.getSignature().setKeyManager(keyManager);
+ signer.getSignature().setId("signature-2-1");
+ // Compute signature value
+ signer.getSignature().sign();
+
+ return signer.toDocument();
+ }
+
+ public Document createHSMSig(String TestNumber,String data,boolean env,boolean mani,String data2,boolean env2) throws Exception
+ {
+ String keyId = null;
+ String certId = null;
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ Signer signer = new Signer(baseURI);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ SignerSignature signature = signer.getSignature();
+ SignerSignedInfo signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set canonicalization algorithm
+ CanonicalizationAlgorithmImplCanonicalXML c14nAlg =
+ new CanonicalizationAlgorithmImplCanonicalXML();
+ signedInfo.setCanonicalizationAlgorithm(c14nAlg);
+
+ Properties config = new Properties();
+ config.put("PKCS11_NATIVE_MODULE","cryptoki.dll");
+ config.put("SLOT_ID","0");
+ config.put("DEFAULT_PROMPT_DIALOG","testgenerator.Pass");
+
+ Security.addProvider(new IAIK());
+ IAIKPkcs11 pkcs11Provider_ = new IAIKPkcs11(config);
+ Security.addProvider(pkcs11Provider_);
+
+ // Set signature algorithm
+ SignatureAlgorithmImplRSA signatureAlg = new SignatureAlgorithmImplRSA();
+ signatureAlg.setJCEProviderName(pkcs11Provider_.getName());
+
+ // HSM Action start
+
+ // load the keystore of the PKCS#11 provider given via input stream
+ KeyStore tokenKeyStore = pkcs11Provider_.getTokenManager().getKeyStore();
+ tokenKeyStore.load(null,"1111".toCharArray());
+
+ Enumeration enum = tokenKeyStore.aliases();
+
+ String ali = null;
+ while(enum.hasMoreElements())
+ {
+ //enum.nextElement();
+ ali = (String)enum.nextElement();
+ //ali = (String)enum.nextElement();
+ System.out.println("Alias:"+ali);
+ if(tokenKeyStore.containsAlias(ali)) System.out.println("ALIAS vorhanden");
+ if(tokenKeyStore.isKeyEntry(ali)) System.out.println("KEYENTRY vorhanden");
+ }
+
+ Enumeration enum2 = tokenKeyStore.aliases();
+
+ while (enum2.hasMoreElements()) {
+ String alias = enum2.nextElement().toString();
+
+ if (tokenKeyStore.isKeyEntry(alias)) {
+ System.out.println("________________________________________________________________________________");
+ System.out.println("Key entry with alias: " + alias);
+ Key key = tokenKeyStore.getKey(alias, null);
+ System.out.println(key);
+ java.security.cert.Certificate[] certificateChain2 = tokenKeyStore.getCertificateChain(alias);
+ if (certificateChain2 != null) {
+ System.out.println("Certificate chain of length: " + certificateChain2.length);
+ for (int i = 0; i < certificateChain2.length; i++) {
+ System.out.println("--------------------------------------------------------------------------------");
+ System.out.println(certificateChain2[i]);
+ }
+ } else {
+ System.out.println("Certificate chain is null!");
+ }
+ System.out.println("________________________________________________________________________________");
+ } else if (tokenKeyStore.isCertificateEntry(alias)) {
+ System.out.println("________________________________________________________________________________");
+ System.out.println("Certificate entry with alias: " + alias);
+ java.security.cert.Certificate certificate = tokenKeyStore.getCertificate(alias);
+ System.out.println(certificate);
+ System.out.println("________________________________________________________________________________");
+ } else {
+ System.out.println("________________________________________________________________________________");
+ System.out.println("ERROR! Unknown entry type with alias: " + alias);
+ System.out.println("________________________________________________________________________________");
+ }
+ }
+
+
+ IAIKPKCS11RsaPrivateKey privateKey = (IAIKPKCS11RsaPrivateKey)tokenKeyStore.getKey("MOAHSMRSAKEY_cert", null);
+ keyId = new String(privateKey.getKeyID());
+
+ System.out.println(new String(privateKey.getKeyID()));
+ //System.out.println("got:"+signatureKey+" : "+signatureKey.getClass().getName());
+
+ Signature signatureEngine = Signature.getInstance("ExternalSHA1WithRSA", pkcs11Provider_.getName());
+ signatureEngine.initSign(privateKey);
+ /*signatureEngine.update("This is some data to be signed.".getBytes());
+ byte[] bytesig = signatureEngine.sign();
+ System.out.println("SIG:"+new String(bytesig));
+
+ System.out.println("KEY:\n"+privateKey);*/
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+
+ SignerReference reference = signedInfo.createReference();
+
+ if(!mani)
+ {
+ if(env)
+ {
+ iaik.ixsil.core.Object object = null;
+ object = signature.createObject(data);
+ object.setId("signed-data-0-1");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ reference.setURI(new URI("#xpointer(id('signed-data-0-1')/node())"));
+ }
+ else
+ {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data);
+
+
+ reference.setURI(refURI);
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+ reference.setId("reference-1-1");
+ signedInfo.addReference(reference);
+ }
+
+ if(data2!=null)
+ {
+ reference = signedInfo.createReference();
+ if(env2)
+ {
+ iaik.ixsil.core.Object object = null;
+ object = signature.createObject(data2);
+ object.setId("signed-data-0-2");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ reference.setURI(new URI("#xpointer(id('signed-data-0-2')/node())"));
+ }
+ else
+ {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data2);
+
+
+ reference.setURI(refURI);
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+ signedInfo.addReference(reference);
+ }
+
+ // Add reference to signature
+
+
+
+ if(mani)
+ {
+
+ /*iaik.ixsil.core.Object object = null;
+ if(env)
+ object = signature.createObject(readFile(data));
+ else
+ object = signature.createObject(data);
+
+ object.setId("envelopedData");
+ signature.addObject(object);*/
+
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ manifestRef.setDigestAlgorithm(digestAlg);
+
+ manifestRef.setURI(new URI(data));
+
+ manifest.addReference(manifestRef);
+ manifest.setId("manifest-1");
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ reference = signedInfo.createReference();
+ reference.setURI(
+ new URI("#xpointer(id('manifest-1'))"));
+ reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);
+
+
+ /*Element envelopedDataElem =
+ signer.toDocument().createElement("EnvelopedDataElement");
+
+ if(env)
+ {
+ envelopedDataElem.appendChild(
+ signer.toDocument().createTextNode(readFile(data)));
+ }
+ else
+ {
+ envelopedDataElem.appendChild(
+ signer.toDocument().createTextNode(data));
+ }
+
+ iaik.ixsil.core.Object object = signature.createObject(envelopedDataElem);
+ signature.addObject(object);
+
+ // Create Manifest with a single reference pointing to the enveloped data
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+ manifestRef.setURI(
+ new URI(
+ null,
+ null,
+ null,
+ null,
+ "xmlns(dsig="
+ + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_
+ + ") "
+ + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[1]/descendant::node())"));
+ manifestRef.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+ manifest.addReference(manifestRef);
+
+ // Add Manifest to signature structure (use an Object) and compute digest values for manifest reference
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ // Create and configure reference to manifest
+ reference = signedInfo.createReference();
+ reference.setURI(
+ new URI(
+ null,
+ null,
+ null,
+ null,
+ "xmlns(dsig="
+ + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_
+ + ") "
+ + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[2]/dsig:Manifest)"));
+ reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);*/
+ }
+
+ enum2 = tokenKeyStore.aliases();
+
+ while(enum2.hasMoreElements())
+ {
+ System.out.println(enum2.nextElement());
+ }
+
+ enum2 = tokenKeyStore.aliases();
+
+ while (enum2.hasMoreElements()) {
+ String alias = enum2.nextElement().toString();
+
+ if (tokenKeyStore.isKeyEntry(alias)) {
+ System.out.println("________________________________________________________________________________");
+ System.out.println("Key entry with alias: " + alias);
+ Key key = tokenKeyStore.getKey(alias, null);
+ System.out.println(key);
+ java.security.cert.Certificate[] certificateChain2 = tokenKeyStore.getCertificateChain(alias);
+ if (certificateChain2 != null) {
+ System.out.println("Certificate chain of length: " + certificateChain2.length);
+ for (int i = 0; i < certificateChain2.length; i++) {
+ System.out.println("--------------------------------------------------------------------------------");
+ System.out.println(certificateChain2[i]);
+ }
+ } else {
+ System.out.println("Certificate chain is null!");
+ }
+ System.out.println("________________________________________________________________________________");
+ } else if (tokenKeyStore.isCertificateEntry(alias)) {
+ System.out.println("________________________________________________________________________________");
+ System.out.println("Certificate entry with alias: " + alias);
+ java.security.cert.Certificate certificate = tokenKeyStore.getCertificate(alias);
+ System.out.println(certificate);
+ System.out.println("________________________________________________________________________________");
+ } else {
+ System.out.println("________________________________________________________________________________");
+ System.out.println("ERROR! Unknown entry type with alias: " + alias);
+ System.out.println("________________________________________________________________________________");
+ }
+ }
+
+ // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+ //DOMUtils.serializeNode(keyManager.getKeyInfo());
+
+ java.security.cert.Certificate[] certificateChain = tokenKeyStore.getCertificateChain("MOAHSMRSAKEY_cert");
+
+ System.out.println("CERTLEN:"+certificateChain.length);
+
+ X509Data x509Data = new X509Data();
+ for (int i = 0; i < certificateChain.length; i++)
+ {
+ System.out.println("CERT:"+((Name)(((X509Certificate)certificateChain[i]).getIssuerDN())).getRFC2253String());
+ x509Data.insertHintAt((X509Certificate)certificateChain[i], i);
+ }
+
+ KeyProviderImplX509Data x509DataKeyProvider = new KeyProviderImplX509Data(signer.toDocument());
+ x509DataKeyProvider.insertX509DataAt(x509Data, 0);
+
+ // X509Data key information (certificate chain)
+ keyManager.addKeyProvider(x509DataKeyProvider);
+
+ signer.getSignature().setKeyManager(keyManager);
+ signer.getSignature().setId("signature-1-1");
+
+ // Compute signature value
+ signer.getSignature().sign();
+
+ return signer.toDocument();
+ }
+
+ public Document createPKCS12SigSL(String TestNumber,String data) throws Exception
+ {
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ PKCS12 pkcs12 = decryptPKCS12(
+ configuration_.getProperty("PKCS12file"),
+ configuration_.getProperty("PKCS12password" ) );
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ Signer signer = new Signer(baseURI);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ SignerSignature signature = signer.getSignature();
+ SignerSignedInfo signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set canonicalization algorithm
+ CanonicalizationAlgorithmImplCanonicalXML c14nAlg =
+ new CanonicalizationAlgorithmImplCanonicalXML();
+ signedInfo.setCanonicalizationAlgorithm(c14nAlg);
+
+ // Set signature algorithm
+ SignatureAlgorithmImplRSA signatureAlg = new SignatureAlgorithmImplRSA();
+ RSAPrivateKey privateKey = getPrivateKey( pkcs12 );
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+
+ SignerReference reference = signedInfo.createReference();
+
+ // env
+ /*iaik.ixsil.core.Object object = null;
+ object = signature.createObject(data);
+ object.setId("envelopedData");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ reference.setURI(new URI("#xpointer(id('envelopedData')/node())"));*/
+
+ // detached
+ // Create and configure reference
+ URI refURI = null;
+ refURI = new URI(data);
+
+ reference.setURI(refURI);
+ reference.setId("reference-1-1");
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ signedInfo.addReference(reference);
+
+ reference = signedInfo.createReference();
+
+ refURI = null;
+ refURI = new URI(data);
+
+ //reference.setURI(new URI("#xpointer(id('ETSIProperties'))/*/*"));
+ reference.setURI(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('etsi-signed-1-1')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"));
+ reference.setType(new URI("http://uri.etsi.org/01903/v1.1.1#SignedProperties"));
+ digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ signedInfo.addReference(reference);
+
+ /*iaik.ixsil.core.Object object = null;
+ object = signature.createObject(data);
+ object.setId("SLManifestObject");
+
+ signature.addObject(object);*/
+
+
+ /*SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+
+ digestAlg = new DigestAlgorithmImplSHA1();
+ manifestRef.setDigestAlgorithm(digestAlg);
+
+ manifestRef.setURI(new URI(data));
+
+ manifest.addReference(manifestRef);
+ manifest.setId("SLManifestObject");
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ reference = manifest.createReference();
+ reference.setType(new URI("http://www.buergerkarte.at/specifications/Security-Layer/20020225#SignatureManifest"));
+ reference.setURI(new URI("#SLManifestObject"));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);*/
+
+ iaik.ixsil.core.Object object = null;
+ object = signature.createObject(getElement("TEST"));
+ object.setId("etsi-signed-1-1");
+ signature.addObject(object);
+
+
+
+ /*if(mani)
+ {
+
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ manifestRef.setDigestAlgorithm(digestAlg);
+
+ manifestRef.setURI(new URI(data));
+
+ manifest.addReference(manifestRef);
+ manifest.setId("manifestObject");
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ reference = signedInfo.createReference();
+ reference.setURI(
+ new URI("#xpointer(id('manifestObject'))"));
+ reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);
+
+ }*/
+
+ signature.setId("signature-1-1");
+
+ // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+ X509Certificate[] certs = getCertificates(pkcs12);
+ X509Data x509Data = new X509Data();
+ x509Data.insertHintAt(certs[1], 0);
+
+ KeyProviderImplX509Data x509DataKeyProvider = new KeyProviderImplX509Data(signer.toDocument());
+ x509DataKeyProvider.insertX509DataAt(x509Data, 0);
+
+ // X509Data key information (certificate chain)
+ keyManager.addKeyProvider(x509DataKeyProvider);
+
+ signer.getSignature().setKeyManager(keyManager);
+
+ // Compute signature value
+ signer.getSignature().sign();
+
+ return signer.toDocument();
+ }
+
+ public Element getElement(String data) throws Exception
+ {
+ String etsinamespace = "http://uri.etsi.org/01903/v1.1.1#";
+
+ getX509Content();
+
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ //dbf.setNamespaceAware(true);
+ //dbf.setValidating(true);
+
+ Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+
+
+ Element qualprop = doc.createElementNS(etsinamespace,"etsi:QualifyingProperties");
+ qualprop.setAttributeNS(null,"Target","#signature-1-1");
+ qualprop.setAttributeNS(IXSILConstants.NAMESPACE_URI_NAMESPACES_,"xmlns:etsi",etsinamespace);
+ //qualprop.setPrefix("etsi");*/
+ //qualprop.setAttributeNodeNS(doc.createAttributeNS(etsinamespace,"etsi"));
+ Element signprop = doc.createElementNS(etsinamespace,"etsi:SignedProperties");
+ Element signsigprop = doc.createElementNS(etsinamespace,"etsi:SignedSignatureProperties");
+ Element signdataobjectprop = doc.createElementNS(etsinamespace,"etsi:SignedDataObjectProperties");
+ Element signdate = doc.createElementNS(etsinamespace,"etsi:SigningTime");
+ Text datevalue = doc.createTextNode("2003-05-10T00:01:01");
+ Element signcert = doc.createElementNS(etsinamespace,"etsi:SigningCertificate");
+ Element cert = doc.createElementNS(etsinamespace,"etsi:Cert");
+ Element signpolyident = doc.createElementNS(etsinamespace,"etsi:SignaturePolicyIdentifier");
+ Element signpolyimp = doc.createElementNS(etsinamespace,"etsi:SignaturePolicyImplied");
+ Element certdig = doc.createElementNS(etsinamespace,"etsi:CertDigest");
+ Element digmeth = doc.createElementNS(etsinamespace,"etsi:DigestMethod");
+ digmeth.setAttribute("Algorithm","http://www.w3.org/2000/09/xmldsig#sha1");
+ Element digvalue = doc.createElementNS(etsinamespace,"etsi:DigestValue");
+
+ ByteArrayOutputStream fos = new ByteArrayOutputStream();
+ Base64OutputStream base64os = new Base64OutputStream(fos);
+ base64os.write(this.X509hash.getBytes());
+ base64os.flush();
+
+ Text dig_value = doc.createTextNode(fos.toString());
+ Element is = doc.createElementNS(etsinamespace,"etsi:IssuerSerial");
+ Element i = doc.createElement("dsig:X509IssuerName");
+ Text i_value = doc.createTextNode(this.X509name);
+ Element s = doc.createElement("dsig:X509SerialNumber");
+ Text s_value = doc.createTextNode(this.X509number.toString());
+ Element dataobjformat = doc.createElementNS(etsinamespace,"etsi:DataObjectFormat");
+ dataobjformat.setAttribute("ObjectReference","#reference-1-1");
+ Element mimetype = doc.createElementNS(etsinamespace,"etsi:MimeType");
+ //mimetype.setNodeValue("text/plain");
+ Text mimevalue = doc.createTextNode("text/plain");
+
+ qualprop.appendChild(signprop);
+ signprop.appendChild(signsigprop);
+ signsigprop.appendChild(signdate);
+ signdate.appendChild(datevalue);
+ signsigprop.appendChild(signcert);
+ signcert.appendChild(cert);
+ cert.appendChild(certdig);
+ certdig.appendChild(digmeth);
+ certdig.appendChild(digvalue);
+ digvalue.appendChild(dig_value);
+ cert.appendChild(is);
+ is.appendChild(i);
+ i.appendChild(i_value);
+ is.appendChild(s);
+ s.appendChild(s_value);
+ signsigprop.appendChild(signpolyident);
+ signpolyident.appendChild(signpolyimp);
+ signprop.appendChild(signdataobjectprop);
+ signdataobjectprop.appendChild(dataobjformat);
+ dataobjformat.appendChild(mimetype);
+ mimetype.appendChild(mimevalue);
+
+
+
+ return qualprop;
+ }
+
+
+ public void createConfig() throws Exception {
+
+ String file = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ ".Config.xml";
+ String config =
+
+"<MOAConfiguration xmlns=\"http://reference.e-government.gv.at/namespace/moaconfig/20021122#\">"+
+" <KeyGroup id=\"PKCS12RSAKey1\"> <Key id=\"resources/test-ee2003_normal(buergerkarte).p12\"/> </KeyGroup>"+
+" <KeyGroup id=\"PKCS12RSAKeyExpired\"> <Key id=\"sicher-demo(buergerkarte).p12\"/> </KeyGroup>"+
+" <KeyGroup id=\"PKCS12ECDSAKey1\"> <Key id=\"ecc.p12\"/> </KeyGroup> "+
+" <KeyGroup id=\"DSAinPKCS12\"> <Key id=\"DSA.512.p12\"/> </KeyGroup> "+
+" <KeyGroup id=\"HSMRSAKey1\"> <Key id=\"???\"/> </KeyGroup>"+
+" <KeyGroup id=\"HSMECDSAKey1\"> <Key id=\"???\"/> </KeyGroup>"+
+" <DigestMethodAlgorithm name=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+
+" <SignatureAlgorithm name=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>"+
+" <CanonicalizationAlgorithm name=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>"+
+"</MOAConfiguration>";
+
+
+ /*"<MOAConfiguration>\n"+
+ " <KeyGroup id=\"PKCS12RSAKey1\"/> <!-- mapped auf \"test(1234).p12\" -->\n"+
+ "</MOAConfiguration>\n"+
+ "<!-- CanonicalizationMethod = http://www.w3.org/TR/2001/REC-xml-c14n-20010315 -->" +
+ "<!-- SignatureMethod = http://www.w3.org/2000/09/xmldsig#rsa-sha1 -->";*/
+
+ FileOutputStream fos = new FileOutputStream(file);
+ fos.write(config.getBytes());
+ fos.flush();
+ fos.close();
+
+ String file_3 = configuration_.getProperty("baseDir") + datadirectory_3 +
+ "TestGeneratorCX3" +
+ ".Config.xml";
+
+ fos = new FileOutputStream(file_3);
+ fos.write(config.getBytes());
+ fos.flush();
+ fos.close();
+
+ String file_4 = configuration_.getProperty("baseDir") + datadirectory_4 +
+ "TestGeneratorCX4" +
+ ".Config.xml";
+
+ fos = new FileOutputStream(file_4);
+ fos.write(config.getBytes());
+ fos.flush();
+ fos.close();
+
+ }
+
+ public void createL00() throws Exception {
+ createL001("1kb");
+ createL001("10kb");
+ createL001("20kb");
+ createL001("50kb");
+ createL001("100kb");
+ createL001("500kb");
+ createL001("1mb");
+ createL001("10mb");
+ }
+
+ public void createL001(String filename) throws Exception {
+ String TestNumber = "001";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory_l+filename+"/" +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/"+filename+".txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory_l+filename+"/" +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/"+filename+".txt");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+ }
+
+ /* ==================================================================================================== */
+
+ public void create001() throws Exception {
+
+ String TestNumber = "001";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+
+ // CX3 wird gleich mit generiert
+
+ String reqFile_3 = configuration_.getProperty("baseDir") + datadirectory_3 +
+ "TestGeneratorCX3" +
+ ".";
+ String reqFile_4 = configuration_.getProperty("baseDir") + datadirectory_4 +
+ "TestGeneratorCX4" +
+ ".";
+
+ writeFile(reqFile_3+"001" + ".Req.xml",req);
+ writeFile(reqFile_4+"051" + ".Req.xml",req);
+
+ req = replaceString(req,"PKCS12RSAKey1","PKCS12RSAKeyNotAllowed");
+
+ writeFile(reqFile_3+"052" + ".Req.xml",req);
+
+ String resFile_3 = configuration_.getProperty("baseDir") + datadirectory_3 +
+ "TestGeneratorCX3" +
+ "." ;
+ String resFile_4 = configuration_.getProperty("baseDir") + datadirectory_4 +
+ "TestGeneratorCX4" +
+ "." ;
+
+ writeFile(resFile_3+ "001" + ".Res.xml",erg);
+ writeFile(resFile_4+ "051" + ".ErrRes.xml","0000");
+ writeFile(resFile_3+ "052" + ".ErrRes.xml","2231");
+
+ }
+
+ public void writeFile(String filename,String data) throws Exception
+ {
+ BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
+ bw.write(data);
+ bw.close();
+ }
+
+
+ public void create002() throws Exception {
+
+ String TestNumber = "002";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create003() throws Exception {
+
+ String TestNumber = "003";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" ?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create004() throws Exception {
+
+ /*Properties config = new Properties();
+ config.put("PKCS11_NATIVE_MODULE","cryptoki.dll");
+ config.put("SLOT_ID","0");
+
+ Security.addProvider(new IAIK());
+ IAIKPkcs11 pkcs11Provider_ = new IAIKPkcs11(config);
+ Security.addProvider(pkcs11Provider_);
+
+ // load the keystore of the PKCS#11 provider given via input stream
+ KeyStore tokenKeyStore = pkcs11Provider_.getTokenManager().getKeyStore();
+
+ Object signatureKey = tokenKeyStore.getKey("HSMRSAKEY", null);
+ //System.out.println("got:"+signatureKey+" : "+signatureKey.getClass().getName());
+ if(signatureKey instanceof IAIKPKCS11RsaPrivateKey)
+ {
+ System.out.println("GOT PRIVATE KEY:"+(IAIKPKCS11RsaPrivateKey)signatureKey);
+ java.security.cert.Certificate[] certificateChain = tokenKeyStore.getCertificateChain("HSMRSAKEY");
+ X509Certificate signerCertificate = (X509Certificate) certificateChain[0];
+
+ }
+ if(signatureKey instanceof IAIKPKCS11RsaPublicKey)
+ {
+ System.out.println("GOT PUBLIC KEY:"+(IAIKPKCS11RsaPublicKey)signatureKey);
+ }*/
+
+ String TestNumber = "004";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" ?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>MOAHSMRSAKEY</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createHSMSig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt",false,false,null,false);
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create005() throws Exception {
+
+ String TestNumber = "005";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" ?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12ECDSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createECDSPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+
+ public void create006() throws Exception {
+
+ String TestNumber = "006";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+
+ writeFile(reqFile,"");
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ writeFile(resFile,"0000");
+ }
+
+ public void create007() throws Exception {
+
+ String TestNumber = "007";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt\">\n"+
+ " <XMLContent xml:space=\"preserve\">Dies sind Testdaten</XMLContent>\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create008() throws Exception {
+
+ String TestNumber = "008";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt\">\n"+
+ " <Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg==</Base64Content>\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+
+ /* ==================================================================================================== */
+
+ public void create009() throws Exception {
+
+ // based on create000()
+
+ String TestNumber = "009";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"enveloping\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12SigWithEnveloping(TestNumber,"b64:Dies sind Testdaten");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create010() throws Exception {
+
+ // based on create000()
+
+ String TestNumber = "010";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"enveloping\" ChildOfManifest=\"false\">\n"+
+ " <DataObject>\n"+
+ " <XMLContent xml:space=\"preserve\"><Testdaten>Dies sind Testdaten</Testdaten></XMLContent>\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12SigWithEnveloping(TestNumber,"<Testdaten>Dies sind Testdaten</Testdaten>");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create011() throws Exception {
+
+ // based on create000()
+
+ String TestNumber = "011";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"enveloping\" ChildOfManifest=\"false\">\n"+
+ " <DataObject>\n"+
+ " <Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg==</Base64Content>\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12SigWithEnveloping(TestNumber,"b64:Dies sind Testdaten");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create012() throws Exception {
+
+ // based on create000()
+
+ String TestNumber = "012";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" >\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt\">\n"+
+ " <XMLContent xml:space=\"preserve\">Dies sind Testdaten</XMLContent>\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+
+ public void create013() throws Exception {
+
+ // based on create000()
+
+ String TestNumber = "013";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"true\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\" />\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt",false,true);
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create014() throws Exception {
+
+ // based on create000()
+
+ String TestNumber = "014";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"true\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testUTF8.txt\" />\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12SigSL(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testUTF8.txt");
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create015() throws Exception {
+
+ // based on create000()
+
+ String TestNumber = "015";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " <DataObjectInfo Structure=\"detached\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt",false,false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt",false);
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create016() throws Exception {
+
+ // based on create000()
+
+ String TestNumber = "016";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"enveloping\">\n"+
+ " <DataObject>\n"+
+ " <XMLContent xml:space=\"preserve\">Dies sind Testdaten</XMLContent>\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " <DataObjectInfo Structure=\"enveloping\">\n"+
+ " <DataObject>\n"+
+ " <XMLContent xml:space=\"preserve\">Dies sind Testdaten</XMLContent>\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,"Dies sind Testdaten",true,false,"Dies sind Testdaten",true);
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create017() throws Exception {
+
+ // based on create000()
+
+ String TestNumber = "017";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " <DataObjectInfo Structure=\"enveloping\">\n"+
+ " <DataObject>\n"+
+ " <XMLContent xml:space=\"preserve\">Dies sind Testdaten</XMLContent>\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt",false,false,"Dies sind Testdaten",true);
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create018() throws Exception {
+
+ // based on create000()
+
+ String TestNumber = "018";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ Document signatureDoc2 = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt","id","id");
+
+ String erg = makeOutputFile(signatureDoc,signatureDoc2);
+
+ writeFile(resFile,erg);
+
+ }
+
+ public void create019() throws Exception {
+
+ String TestNumber = "019";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"enveloping\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testXML.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/xml</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Res.xml";
+
+ Document signatureDoc = createPKCS12SigWithEnveloping(TestNumber,"b64:"+readFile(configuration_.getProperty("baseDir")+"resources/testXML.txt"));
+
+ String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,erg);
+ }
+
+ public void create064() throws Exception {
+
+ // based on create000()
+
+ String TestNumber = "064";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"enveloping\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"testDatenFalsch.txt\">\n"+
+ " <Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg==</Base64Content>\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ //Document signatureDoc = createPKCS12SigWithEnveloping(TestNumber,"Dies sind Testdaten");
+
+ //String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,"1110");
+
+ }
+
+
+ public void create051() throws Exception {
+
+ String TestNumber = "051";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"/>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " <SuperExtraElementThatShouldNotBeValidWithTheSchema/>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"1100");
+
+ }
+
+ public void create052() throws Exception {
+
+ String TestNumber = "052";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,"version=\"1.0\"","");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"0000");
+
+ }
+
+ public void create053() throws Exception {
+
+ String TestNumber = "053";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,"version=\"1.0\"","version=\"5.0alpha3\"");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"0000");
+
+ }
+
+ public void create054() throws Exception {
+
+ String TestNumber = "054";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,"ISO-8859-1","SuperSvenEncoding:)");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"0000");
+
+ }
+
+ public void create055() throws Exception {
+
+ String TestNumber = "055";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,"xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"","xmlns=\"http://www.w3.org/2000/09/svens_schema#\"");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"1100");
+
+ }
+
+ public void create056() throws Exception {
+
+ String TestNumber = "056";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,"PKCS12RSAKey1","wrong_value_KeyIdentifier");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"2231");
+
+ }
+
+ public void create057() throws Exception {
+
+ String TestNumber = "057";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,"PKCS12RSAKey1","PKCS12RSAKeyExpired");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"2220");
+
+ }
+
+ public void create058() throws Exception {
+
+ String TestNumber = "058";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,"PKCS12RSAKey1","DSAinPKCS12");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"2220");
+
+ }
+
+ public void create059() throws Exception {
+
+ String TestNumber = "059";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt",configuration_.getProperty("webbaseDir")+"not_here.txt");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"2208");
+
+ }
+
+ /*
+
+ public String defaultblock = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\">\n"+
+ " <!-- Hint -->\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ */
+
+ public void create060() throws Exception {
+
+ String TestNumber = "060";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,"Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"","");
+ /*req = this.replaceString(req,"<CreateTransformsInfoProfile>","");
+ req = this.replaceString(req,"<CreateTransformsInfo>","");
+ req = this.replaceString(req,"<FinalDataMetaInfo>","");
+ req = this.replaceString(req,"<MimeType>text/plain</MimeType>","");
+ req = this.replaceString(req,"</FinalDataMetaInfo>","");
+ req = this.replaceString(req,"</CreateTransformsInfo>","");
+ req = this.replaceString(req,"</CreateTransformsInfoProfile>","");*/
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"1102");
+
+ }
+
+ public void create061() throws Exception {
+
+ String TestNumber = "061";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,"Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"","");
+ req = this.replaceString(req,"<!-- Hint -->","<XMLContent xml:space=\"preserve\"><DieserTagIstNichtZu></XMLContent>");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"0000");
+
+ }
+
+ public void create062() throws Exception {
+
+ String TestNumber = "062";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,"Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDaten.txt\"","");
+ req = this.replaceString(req,"<!-- Hint -->","<Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg=</Base64Content>");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"1100");
+
+ }
+
+ public void create063() throws Exception {
+
+ String TestNumber = "063";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req = this.replaceString(defaultblock,"<MimeType>text/plain</MimeType>","<MimeType>something/some thing/something</MimeType>");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ writeFile(resFile,"1100");
+
+ }
+
+ public void create065() throws Exception {
+
+ String TestNumber = "065";
+ String reqFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".Req.xml";
+ String req =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<CreateXMLSignatureRequest\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >\n"+
+ " <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>\n"+
+ " <SingleSignatureInfo SecurityLayerConformity=\"false\">\n"+
+ " <DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">\n"+
+ " <DataObject>\n"+
+ " <XMLContent xml:space=\"preserve\">Dies sind Testdaten</XMLContent>\n"+
+ " </DataObject>\n"+
+ " <CreateTransformsInfoProfile>\n"+
+ " <CreateTransformsInfo>\n"+
+ " <FinalDataMetaInfo>\n"+
+ " <MimeType>text/plain</MimeType>\n"+
+ " </FinalDataMetaInfo>\n"+
+ " </CreateTransformsInfo>\n"+
+ " </CreateTransformsInfoProfile>\n"+
+ " </DataObjectInfo>\n"+
+ " </SingleSignatureInfo>\n"+
+ "</CreateXMLSignatureRequest>";
+
+ writeFile(reqFile,req);
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ String resFile = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ "." + TestNumber + ".ErrRes.xml";
+
+ //Document signatureDoc = createPKCS12Sig(TestNumber,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+
+ //String erg = makeOutputFile(signatureDoc);
+
+ writeFile(resFile,"1102");
+
+ }
+
+
+
+
+ public String makeOutputFile(Document signatureDoc) throws Exception
+ {
+ ArrayList foundNodes = new ArrayList();
+ findNode(signatureDoc.getDocumentElement(),"dsig:Signature",foundNodes);
+
+ Node outputNode = null;
+
+ if(foundNodes.size()>0)
+ {
+ outputNode = (Node)foundNodes.get(0);
+ }
+
+ String erg = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ int pos = erg.indexOf("<dsig");
+ erg = erg.substring(pos);
+
+ // insert the dsig:signature element in a MOA Response Message
+ erg = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
+ "<CreateXMLSignatureResponse\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " >"+
+ //" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\">\n"+
+ "<SignatureEnvironment>" +
+ erg + "</SignatureEnvironment></CreateXMLSignatureResponse>";
+
+ return erg;
+ }
+
+ public String makeOutputFile(Document signatureDoc,Document signatureDoc2) throws Exception
+ {
+ ArrayList foundNodes = new ArrayList();
+ findNode(signatureDoc.getDocumentElement(),"dsig:Signature",foundNodes);
+
+ Node outputNode = null;
+
+ if(foundNodes.size()>0)
+ {
+ outputNode = (Node)foundNodes.get(0);
+ }
+
+ String erg = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ int pos = erg.indexOf("<dsig");
+ erg = erg.substring(pos);
+
+ foundNodes.clear();
+ findNode(signatureDoc2.getDocumentElement(),"dsig:Signature",foundNodes);
+
+ outputNode = null;
+
+ if(foundNodes.size()>0)
+ {
+ outputNode = (Node)foundNodes.get(0);
+ }
+
+ String erg2 = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ pos = erg2.indexOf("<dsig");
+ erg2 = erg2.substring(pos);
+
+ // insert the dsig:signature element in a MOA Response Message
+ erg = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
+ "<CreateXMLSignatureResponse\n" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"+
+ " >"+
+ "<SignatureEnvironment>" +
+ erg +"</SignatureEnvironment><SignatureEnvironment>"+erg2+"</SignatureEnvironment> </CreateXMLSignatureResponse>";
+
+ //erg = replaceString(erg,"Id=\"signature-1-1\"","Id=\"signature-2-1\"");
+ //erg = replaceString(erg,"Id=\"reference-1-1\"","Id=\"reference-2-1\"");
+
+
+ return erg;
+ }
+
+ public String readFile(String filename) throws Exception
+ {
+ /*StringBuffer data = new StringBuffer();
+ String line = null;
+ BufferedReader br = new BufferedReader(new FileReader(filename));
+ while((line = br.readLine())!=null)
+ {
+ data.append(line);
+ data.append("\n");
+ }
+ return data.toString();*/
+
+ RandomAccessFile raf = new RandomAccessFile(filename, "r");
+ if (raf.length() > Integer.MAX_VALUE)
+ throw new IOException("file too big to fit in byte array.");
+
+ byte[] result = new byte[(int) raf.length()];
+
+ raf.read(result);
+
+ return new String(result);
+
+ }
+
+}
+
diff --git a/spss.test/src/testgenerator/TestGeneratorCX1.java b/spss.test/src/testgenerator/TestGeneratorCX1.java
new file mode 100644
index 000000000..44670742b
--- /dev/null
+++ b/spss.test/src/testgenerator/TestGeneratorCX1.java
@@ -0,0 +1,1054 @@
+package testgenerator;
+
+import iaik.ixsil.algorithms.Transform;
+import iaik.ixsil.algorithms.TransformImplBase64Decode;
+import iaik.ixsil.algorithms.TransformImplCanonicalXML;
+import iaik.ixsil.algorithms.TransformImplCanonicalXMLWithComments;
+import iaik.ixsil.algorithms.TransformImplEnvelopedSignature;
+import iaik.ixsil.algorithms.TransformImplExclusiveCanonicalXML;
+import iaik.ixsil.algorithms.TransformImplExclusiveCanonicalXMLWithComments;
+import iaik.ixsil.algorithms.TransformImplXPath;
+import iaik.ixsil.algorithms.TransformImplXPath2;
+import iaik.ixsil.algorithms.TransformImplXSLT;
+import iaik.ixsil.core.Position;
+import iaik.ixsil.util.URI;
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+import at.gv.egovernment.moa.util.Base64Utils;
+import at.gv.egovernment.moa.util.DOMUtils;
+
+/**
+ * @author Administrator
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class TestGeneratorCX1 extends TestCases {
+
+ String datadirectory = "data/CX1/";
+
+ String base64content = "RGllcyBzaW5kIFRlc3RkYXRlbg==";
+
+ String defaultblock =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
+ "<CreateXMLSignatureRequest xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" >"+
+ "<KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>"+
+ "<SingleSignatureInfo SecurityLayerConformity=\"false\">"+
+ "<DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">"+
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/BookData.xml"+"\">"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:book xmlns:data=\"http://uri.data.org\" data:hardback=\"yes\">"+
+ "<data:title>Gesundheitliche Auswirkungen elektronischer Signaturen</data:title>"+
+ "<data:first-name>Ellipse</data:first-name>"+
+ "<data:last-name>Kurvenreich</data:last-name>"+
+ "<data:birth-date>1951-04-16</data:birth-date>"+
+ "<data:birth-location>Hinterm Berg</data:birth-location>"+
+ "<data:register-number>6-930-21512-12</data:register-number>"+
+ "</data:book>"+
+ "</XMLContent>"+
+ "</DataObject>"+
+ "<CreateTransformsInfoProfile>"+
+ "<CreateTransformsInfo>"+
+ "<dsig:Transforms>"+
+ "<!-- insert transform -->"+
+ "</dsig:Transforms>"+
+ "<FinalDataMetaInfo>"+
+ "<MimeType>text/html</MimeType>"+
+ "<Description>http://www.description.com</Description>"+
+ "</FinalDataMetaInfo>"+
+ "</CreateTransformsInfo>"+
+ "<!-- insert supp -->"+
+ "</CreateTransformsInfoProfile>"+
+ "</DataObjectInfo>"+
+ "<!-- insert data2 -->"+
+ "</SingleSignatureInfo>"+
+ "</CreateXMLSignatureRequest>";
+
+ private static final int canAlgCanXML = 1;
+ private static final int canAlgCanXMLwithCom = 2;
+ private static final int canAlgExcXML = 3;
+ private static final int canAlgExcXMLwithCom = 4;
+
+
+ public String fileprefix = null;
+ public String filesuffix = null;
+
+ public TestGeneratorCX1() throws Exception {
+
+ super();
+
+ // Set config properties
+ configuration_.setProperty("TestClass", "TestGeneratorCX1");
+// configuration_.setProperty("privateKeyFile", baseDir + "additionalFiles/keys/RSAPrivateKey.der");
+// configuration_.setProperty("publicKeyFile", baseDir + "additionalFiles/keys/RSAPublicKey.der");
+// configuration_.setProperty("signatureFile", baseDir + "additionalFiles/signatures/Signature.unit1.xml");
+
+ iaik.security.provider.IAIK.addAsProvider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+ }
+
+ public static void main(String[] args) throws Exception {
+ TestGeneratorCX1 testcase = new TestGeneratorCX1();
+
+ testcase.createConfig();
+ testcase.create001();
+ testcase.create002();
+ testcase.create003();
+ testcase.create004();
+ testcase.create005();
+ testcase.create006();
+ testcase.create007();
+ testcase.create008();
+ testcase.create009();
+ testcase.create010();
+ testcase.create011();
+ testcase.create012();
+ testcase.create013();
+ testcase.create014();
+
+ testcase.create051();
+ testcase.create052();
+ testcase.create053();
+ testcase.create054();
+ testcase.create055();
+
+ }
+
+ public void createConfig() throws Exception {
+
+ String file = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ ".Config.xml";
+ String config =
+
+ "<MOAConfiguration xmlns=\"http://reference.e-government.gv.at/namespace/moaconfig/20021122#\">"+
+ " <KeyGroup id=\"PKCS12RSAKey1\"> <Key id=\"resources/test-ee2003_normal(buergerkarte).p12\"/> </KeyGroup>"+
+ " <KeyGroup id=\"PKCS12RSAKeyExpired\"> <Key id=\"sicher-demo(buergerkarte).p12\"/> </KeyGroup>"+
+
+ " <KeyGroup id=\"PKCS12ECDSAKey1\"> <Key id=\"ecc.p12\"/> </KeyGroup> "+
+ " <KeyGroup id=\"HSMRSAKey1\"> <Key id=\"???\"/> </KeyGroup>"+
+ " <KeyGroup id=\"HSMECDSAKey1\"> <Key id=\"???\"/> </KeyGroup>"+
+ " <DigestMethodAlgorithm name=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+
+ " <SignatureAlgorithm name=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>"+
+ " <CanonicalizationAlgorithm name=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>"+
+ " <CreateTransformsInfoProfile id=\"CreateTransformsInfoProfile1\" filename=\""+"file:/"+configuration_.getProperty("webbaseDir")+"CX1_bookprofile.xsl\"/>"+
+ "</MOAConfiguration>";
+
+
+ /*"<MOAConfiguration>"+
+ " <KeyGroup id=\"PKCS12RSAKey1\"/> <!-- mapped auf \"test(1234).p12\" -->"+
+ "</MOAConfiguration>"+
+ "<!-- CanonicalizationMethod = http://www.w3.org/TR/2001/REC-xml-c14n-20010315 -->" +
+ "<!-- SignatureMethod = http://www.w3.org/2000/09/xmldsig#rsa-sha1 -->";*/
+
+ FileOutputStream fos = new FileOutputStream(file);
+ fos.write(config.getBytes());
+ fos.flush();
+ fos.close();
+
+ fileprefix = configuration_.getProperty("baseDir")+ datadirectory + configuration_.getProperty("TestClass") + ".";
+ filesuffix = ".xml";
+ }
+
+ public void create001() throws Exception {
+
+ String TestNumber = "001";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xslt-19991116\">"+
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"><xsl:output method=\"html\" indent=\"no\"/><xsl:template match=\"data:book\" xmlns:data=\"http://uri.data.org\"><HTML><BODY><H1>Buch: <xsl:value-of select=\"data:title\"/></H1></BODY></HTML></xsl:template></xsl:stylesheet>"+
+ "</dsig:Transform>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = new FileInputStream(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl");
+ trans.setInput(s,null);
+ trans.setStyleSheet(s,null);
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create002() throws Exception {
+
+ String TestNumber = "002";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xslt-19991116\">"+
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"+
+ "<xsl:output method=\"html\" indent=\"no\"/>"+
+ "<xsl:template match=\"data:book\" xmlns:data=\"http://uri.data.org\">"+
+ "<HTML>"+
+ "<BODY>"+
+ "<H1>Buch: <xsl:value-of select=\"data:title\"/>"+
+ "</H1>"+
+ "</BODY>"+
+ "</HTML>"+
+ "</xsl:template>"+
+ "</xsl:stylesheet>"+
+ "</dsig:Transform>");
+
+ req = replaceString(req,"SecurityLayerConformity=\"false\"","SecurityLayerConformity=\"true\"");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = new FileInputStream(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl");
+ trans.setInput(s,null);
+ trans.setStyleSheet(s,null);
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+ //cpkcs.createReferenceWithManifest(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),"manifestObject");
+ cpkcs.createETSIObjects("file:/"+configuration_.getProperty("webbaseDir")+"resources/BookData.xml");
+ cpkcs.setKeyInformation(1);
+
+ cpkcs.signer.getSignature().setId("signature-1-1");
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create003() throws Exception {
+
+ String TestNumber = "003";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xpath-19991116\">"+
+ "<dsig:XPath xmlns:data=\"http://uri.data.org\">//data:book/data:first-name</dsig:XPath>"+
+ "</dsig:Transform>");
+
+ req = replaceString(req,"<MimeType>text/html</MimeType>","<MimeType>text/plain</MimeType>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplXPath trans = new TransformImplXPath();
+ InputStream s = new FileInputStream(configuration_.getProperty("baseDir")+"resources/BookData.xml");
+ trans.setInput(s,null);
+ trans.addNSDeclaration("data",new URI("http://uri.data.org"));
+ trans.setXPath("//data:book/data:first-name");
+ //trans.setXPath("ancestor-or-self::data:first-name");
+
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ output = replaceString(output,"<dsig:XPath xmlns:data=\"http://uri.data.org\">","<dsig:XPath>"); // workaround
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create004() throws Exception {
+
+ String TestNumber = "004";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/2002/06/xmldsig-filter2\">"+
+ "<xf2:XPath Filter=\"subtract\" xmlns:xf2=\"http://www.w3.org/2002/06/xmldsig-filter2\" xmlns:data=\"http://uri.data.org\">//data:book/data:first-name</xf2:XPath>"+
+ "</dsig:Transform>");
+
+ req = replaceString(req,"<MimeType>text/html</MimeType>","<MimeType>text/xml</MimeType>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplXPath2 trans = new TransformImplXPath2();
+ InputStream s = new FileInputStream(configuration_.getProperty("baseDir")+"resources/BookData.xml");
+ trans.setInput(s,null);
+ //trans.addNSDeclaration("data",new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"));
+ //trans.setXPath("/data:book/data:first-name/node()");
+ HashMap temp = new HashMap();
+ temp.put("data",new URI("http://uri.data.org"));
+ trans.addXPathFilter("//data:book/data:first-name",TransformImplXPath2.FILTER_MODE_SUBTRACT_,temp);
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ output = replaceString(output,"<xf2:XPath Filter=\"subtract\" xmlns:data=\"http://uri.data.org\"","<xf2:XPath Filter=\"subtract\" ");
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create005() throws Exception {
+
+ String TestNumber = "005";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>");
+
+ req = replaceString(req,"<MimeType>text/html</MimeType>","<MimeType>text/xml</MimeType>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplCanonicalXML trans = new TransformImplCanonicalXML();
+ InputStream s = new FileInputStream(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl");
+ trans.setInput(s,null);
+ /*trans.addNSDeclaration("data",new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"));
+ trans.setXPath("/data:book/data:first-name/node()");
+ trans.*/
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create006() throws Exception {
+
+ String TestNumber = "006";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments\"/>");
+
+ req = replaceString(req,"<MimeType>text/html</MimeType>","<MimeType>text/xml</MimeType>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplCanonicalXMLWithComments trans = new TransformImplCanonicalXMLWithComments();
+ InputStream s = new FileInputStream(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl");
+ trans.setInput(s,null);
+ /*trans.addNSDeclaration("data",new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"));
+ trans.setXPath("/data:book/data:first-name/node()");
+ trans.*/
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create007() throws Exception {
+
+ String TestNumber = "007";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"><ec:InclusiveNamespaces PrefixList=\"dsig\" xmlns:ec=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/></dsig:Transform>");
+
+ req = replaceString(req,"<MimeType>text/html</MimeType>","<MimeType>text/xml</MimeType>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplExclusiveCanonicalXML trans = new TransformImplExclusiveCanonicalXML();
+ InputStream s = new FileInputStream(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl");
+ trans.setInput(s,null);
+ trans.setInclusiveNamespacePrefixes("dsig");
+ /*trans.addNSDeclaration("data",new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"));
+ trans.setXPath("/data:book/data:first-name/node()");
+ trans.*/
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create008() throws Exception {
+
+ String TestNumber = "008";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#WithComments\"><ec:InclusiveNamespaces PrefixList=\"dsig\" xmlns:ec=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/></dsig:Transform>");
+
+ req = replaceString(req,"<MimeType>text/html</MimeType>","<MimeType>text/xml</MimeType>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplExclusiveCanonicalXMLWithComments trans = new TransformImplExclusiveCanonicalXMLWithComments();
+ InputStream s = new FileInputStream(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl");
+ trans.setInput(s,null);
+ trans.setInclusiveNamespacePrefixes("dsig");
+ /*trans.addNSDeclaration("data",new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"));
+ trans.setXPath("/data:book/data:first-name/node()");
+ trans.*/
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create009() throws Exception {
+
+ String TestNumber = "009";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/>");
+
+ req = replaceString(req,"<XMLContent xml:space=\"preserve\">"+
+ "<data:book xmlns:data=\"http://uri.data.org\" data:hardback=\"yes\">"+
+ "<data:title>Gesundheitliche Auswirkungen elektronischer Signaturen</data:title>"+
+ "<data:first-name>Ellipse</data:first-name>"+
+ "<data:last-name>Kurvenreich</data:last-name>"+
+ "<data:birth-date>1951-04-16</data:birth-date>"+
+ "<data:birth-location>Hinterm Berg</data:birth-location>"+
+ "<data:register-number>6-930-21512-12</data:register-number>"+
+ "</data:book>"+
+ "</XMLContent>","");
+
+ req = replaceString(req,
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/BookData.xml"+"\">",
+ "<DataObject Reference=\"\">");
+
+ //req = replaceString(req,"Structure=\"detached\"","Structure=\"enveloping\"");
+
+
+ req = replaceString(req,"<!-- insert data2 -->",
+ "<CreateSignatureInfo><CreateSignatureEnvironment><XMLContent xml:space=\"preserve\"><env:Document xmlns:env=\"http://uri.env.org\">Text</env:Document></XMLContent></CreateSignatureEnvironment><CreateSignatureEnvironmentProfile><CreateSignatureLocation xmlns:env=\"http://uri.env.org\" Index=\"1\">//env:Document</CreateSignatureLocation></CreateSignatureEnvironmentProfile></CreateSignatureInfo>");
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ InputStream bis = new ByteArrayInputStream(("<env:Document xmlns:env=\"http://uri.env.org\">Text</env:Document>").getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ //Dokument Parsen
+ Document reqDoc = builder.parse(bis);
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ String xPath_Pos = "/node()";
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "env xmlns:env=\"http://uri.env.org\"";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init(reqDoc,pos,"signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();
+
+ /*trans.addNSDeclaration("data",new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"));
+ trans.setXPath("/data:book/data:first-name/node()");
+ trans.*/
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(""),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ output = replaceString(output,"<dsig:Signature","<env:Document xmlns:env=\"http://uri.env.org\">Text<dsig:Signature");
+ output = replaceString(output,"</dsig:Signature>","</dsig:Signature></env:Document>");
+
+
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create010() throws Exception {
+
+ String TestNumber = "010";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>"+
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xslt-19991116\">"+
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"+
+ "<xsl:output method=\"html\" indent=\"no\"/>"+
+ "<xsl:template match=\"data:book\" xmlns:data=\"http://uri.data.org\">"+
+ "<HTML>"+
+ "<BODY>"+
+ "<H1>Buch: <xsl:value-of select=\"data:title\"/>"+
+ "</H1>"+
+ "</BODY>"+
+ "</HTML>"+
+ "</xsl:template>"+
+ "</xsl:stylesheet>"+
+ "</dsig:Transform>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[2];
+ TransformImplCanonicalXML trans = new TransformImplCanonicalXML();
+ InputStream s = new FileInputStream(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl");
+ trans.setInput(s,null);
+ /*trans.addNSDeclaration("data",new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"));
+ trans.setXPath("/data:book/data:first-name/node()");
+ trans.*/
+ tr[0] = trans;
+
+ TransformImplXSLT tr2 = new TransformImplXSLT();
+ InputStream s2 = new FileInputStream(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl");
+ tr2.setInput(s2,null);
+ tr2.setStyleSheet(s2,null);
+ tr[1] = tr2;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create011() throws Exception {
+
+ String TestNumber = "011";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xslt-19991116\">"+
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"+
+ "<xsl:include href=\""+configuration_.getProperty("webbaseDir")+"resources/CX1_book_not_here.xsl"+"\"/>"+
+ "</xsl:stylesheet>"+
+ "</dsig:Transform>");
+
+ req = replaceString(req,"<!-- insert supp -->",
+ "<Supplement>"+
+ "<Content Reference=\""+configuration_.getProperty("webbaseDir")+"resources/CX1_book_not_here.xsl"+"\">"+
+ "<Base64Content>"+
+ Base64Utils.encode(("<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"+
+ "<xsl:output method=\"html\" indent=\"no\"/>"+
+ "<xsl:template match=\"data:book\" xmlns:data=\"http://uri.data.org\">"+
+ "<HTML>"+
+ "<BODY>"+
+ "<H1>Buch: <xsl:value-of select=\"data:title\"/>"+
+ "</H1>"+
+ "</BODY>"+
+ "</HTML>"+
+ "</xsl:template>"+
+ "</xsl:stylesheet>").getBytes())+
+ "</Base64Content>"+
+ "</Content>"+
+ "</Supplement>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ URL u = new URL(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref_not_here.xsl");
+ URLConnection hu = u.openConnection();
+ //trans.setInput(s,null);
+ trans.setStyleSheet(hu.getInputStream(),new URI(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref_not_here.xsl"));
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+ //cpkcs.createReferenceWithManifest(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),"manifestObject");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ writeFile(resFile, output);
+ }
+
+ public void create012() throws Exception {
+
+ String TestNumber = "012";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xslt-19991116\">"+
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"+
+ "<xsl:include href=\""+configuration_.getProperty("webbaseDir")+"resources/CX1_book_not_here.xsl"+"\"/>"+
+ "</xsl:stylesheet>"+
+ "</dsig:Transform>");
+
+ req = replaceString(req,"<!-- insert data2 -->",
+ "<DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">"+
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/BookData.xml"+"\">"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:book xmlns:data=\"http://uri.data.org\" data:hardback=\"yes\">"+
+ "<data:title>Gesundheitliche Auswirkungen elektronischer Signaturen</data:title>"+
+ "<data:first-name>Ellipse</data:first-name>"+
+ "<data:last-name>Kurvenreich</data:last-name>"+
+ "<data:birth-date>1951-04-16</data:birth-date>"+
+ "<data:birth-location>Hinterm Berg</data:birth-location>"+
+ "<data:register-number>6-930-21512-12</data:register-number>"+
+ "</data:book>"+
+ "</XMLContent>"+
+ "</DataObject>"+
+ "<CreateTransformsInfoProfile>"+
+ "<CreateTransformsInfo>"+
+ "<dsig:Transforms>"+
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xslt-19991116\">"+
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"+
+ "<xsl:include href=\""+configuration_.getProperty("webbaseDir")+"resources/CX1_book_not_here.xsl\"/>"+
+ "</xsl:stylesheet>"+
+ "</dsig:Transform>"+
+ "</dsig:Transforms>"+
+ "<FinalDataMetaInfo>"+
+ "<MimeType>text/html</MimeType>"+
+ "</FinalDataMetaInfo>"+
+ "</CreateTransformsInfo>"+
+ "<Supplement>"+
+ "<Content Reference=\""+configuration_.getProperty("webbaseDir")+"resources/CX1_book_not_here.xsl"+"\">"+
+ "<Base64Content>"+
+ Base64Utils.encode(("<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"+
+ "<xsl:output method=\"html\" indent=\"no\"/>"+
+ "<xsl:template match=\"data:book\" xmlns:data=\"http://uri.data.org\">"+
+ "<HTML>"+
+ "<BODY>"+
+ "<H1>Buch: <xsl:value-of select=\"data:title\"/>"+
+ "</H1>"+
+ "</BODY>"+
+ "</HTML>"+
+ "</xsl:template>"+
+ "</xsl:stylesheet>").getBytes())+
+ "</Base64Content>"+
+ "</Content>"+
+ "</Supplement>"+
+ "</CreateTransformsInfoProfile>"+
+ "</DataObjectInfo>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ URL u = new URL(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref_not_here.xsl");
+ URLConnection hu = u.openConnection();
+ //trans.setInput(s,null);
+ trans.setStyleSheet(hu.getInputStream(),new URI(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref_not_here.xsl"));
+
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-2");
+ //cpkcs.createReferenceWithManifest(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),"manifestObject");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create013() throws Exception {
+
+ String TestNumber = "013";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,
+ "<CreateTransformsInfoProfile>"+
+ "<CreateTransformsInfo>"+
+ "<dsig:Transforms>"+
+ "<!-- insert transform -->"+
+ "</dsig:Transforms>"+
+ "<FinalDataMetaInfo>"+
+ "<MimeType>text/html</MimeType>"+
+ "<Description>http://www.description.com</Description>"+
+ "</FinalDataMetaInfo>"+
+ "</CreateTransformsInfo>"+
+ "<!-- insert supp -->"+
+ "</CreateTransformsInfoProfile>",
+ "<CreateTransformsInfoProfileID>CreateTransformsInfoProfile1</CreateTransformsInfoProfileID>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = new FileInputStream(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl");
+ trans.setInput(s,null);
+ trans.setStyleSheet(s,null);
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1-1");
+ //cpkcs.createReferenceWithManifest(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),"manifestObject");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create014() throws Exception {
+
+ String TestNumber = "014";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#base64\"/>");
+
+ req = replaceString(req,
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/BookData.xml"+"\">",
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testBase64.txt"+"\">");
+
+ req = replaceString(req,
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:book xmlns:data=\"http://uri.data.org\" data:hardback=\"yes\">"+
+ "<data:title>Gesundheitliche Auswirkungen elektronischer Signaturen</data:title>"+
+ "<data:first-name>Ellipse</data:first-name>"+
+ "<data:last-name>Kurvenreich</data:last-name>"+
+ "<data:birth-date>1951-04-16</data:birth-date>"+
+ "<data:birth-location>Hinterm Berg</data:birth-location>"+
+ "<data:register-number>6-930-21512-12</data:register-number>"+
+ "</data:book>"+
+ "</XMLContent>",
+ /*"<Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg==</Base64Content>"*/"");
+
+ req = replaceString(req,"<MimeType>text/html</MimeType>","<MimeType>text/plain</MimeType>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplBase64Decode trans = new TransformImplBase64Decode();
+ InputStream s = new FileInputStream(configuration_.getProperty("baseDir")+"resources/testBase64.txt");
+ trans.setInput(s,null);
+ /*trans.addNSDeclaration("data",new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"));
+ trans.setXPath("/data:book/data:first-name/node()");
+ trans.*/
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/testBase64.txt"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc);
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create051() throws Exception {
+
+ String TestNumber = "051";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xpath-19991116\">"+
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"+
+ "<xsl:output method=\"html\" indent=\"no\"/>"+
+ "<xsl:template match=\"data:book\" xmlns:data=\"http://uri.data.org\">"+
+ "<HTML>"+
+ "<BODY>"+
+ "<H1>Buch: <xsl:value-of select=\"data:title\"/>"+
+ "</H1>"+
+ "</BODY>"+
+ "</HTML>"+
+ "</xsl:template>"+
+ "</xsl:stylesheet>"+
+ "</dsig:Transform>");
+
+ req = replaceString(req,"SecurityLayerConformity=\"false\"","SecurityLayerConformity=\"true\"");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2202");
+ }
+
+ public void create052() throws Exception {
+
+ String TestNumber = "052";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xslt-19991116\">"+
+ "<XPath>/data:book/data:first-name/node()</XPath>"+
+ "</dsig:Transform>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2215");
+
+
+ }
+
+ public void create053() throws Exception {
+
+ String TestNumber = "053";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ " <dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xslt-19991116\">"+
+ " <xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"+
+ " <xsl:include href=\"file:/transform.xsl\"/>"+
+ " </xsl:stylesheet>"+
+ " </dsig:Transform>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2220");
+
+ }
+
+ public void create054() throws Exception {
+
+ String TestNumber = "054";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,
+ "<CreateTransformsInfoProfile>"+
+ "<CreateTransformsInfo>"+
+ "<dsig:Transforms>"+
+ "<!-- insert transform -->"+
+ "</dsig:Transforms>"+
+ "<FinalDataMetaInfo>"+
+ "<MimeType>text/html</MimeType>"+
+ "<Description>http://www.description.com</Description>"+
+ "</FinalDataMetaInfo>"+
+ "</CreateTransformsInfo>"+
+ "<!-- insert supp -->"+
+ "</CreateTransformsInfoProfile>",
+ "<CreateTransformsInfoProfileID>CreateTransformsInfoProfileNonValid</CreateTransformsInfoProfileID>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2234");
+
+ }
+
+ public void create055() throws Exception {
+
+ String TestNumber = "055";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert transform -->",
+ "<dsig:Transform Algorithm=\"http://www.w3.org/2002/06/xmldsig-filter2\">"+
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"+
+ "<xsl:output method=\"html\" indent=\"no\"/>"+
+ "<xsl:template match=\"data:book\" xmlns:data=\"http://uri.data.org\">"+
+ "<HTML>"+
+ "<BODY>"+
+ "<H1>Buch: <xsl:value-of select=\"data:title\"/>"+
+ "</H1>"+
+ "</BODY>"+
+ "</HTML>"+
+ "</xsl:template>"+
+ "</xsl:stylesheet>"+
+ "</dsig:Transform>");
+
+ req = replaceString(req,"SecurityLayerConformity=\"false\"","SecurityLayerConformity=\"true\"");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2216");
+ }
+
+ public void writeFile(String filename,String data) throws Exception
+ {
+ BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
+ bw.write(data);
+ bw.close();
+ }
+
+ public String makeOutputFile(Document signatureDoc) throws Exception
+ {
+ ArrayList foundNodes = new ArrayList();
+ findNode(signatureDoc.getDocumentElement(),"dsig:Signature",foundNodes);
+
+ Node outputNode = null;
+
+ if(foundNodes.size()>0)
+ {
+ outputNode = (Node)foundNodes.get(0);
+ }
+
+ String erg = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ int pos = erg.indexOf("<dsig");
+ erg = erg.substring(pos);
+
+ // insert the dsig:signature element in a MOA Response Message
+ erg = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
+ "<CreateXMLSignatureResponse" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\""+
+ ">"+
+ //" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\">"+
+ "<SignatureEnvironment>" +
+ erg + "</SignatureEnvironment> </CreateXMLSignatureResponse>";
+
+ return erg;
+ }
+}
diff --git a/spss.test/src/testgenerator/TestGeneratorCX2.java b/spss.test/src/testgenerator/TestGeneratorCX2.java
new file mode 100644
index 000000000..ed5c5194a
--- /dev/null
+++ b/spss.test/src/testgenerator/TestGeneratorCX2.java
@@ -0,0 +1,1050 @@
+package testgenerator;
+
+import iaik.ixsil.algorithms.Transform;
+import iaik.ixsil.algorithms.TransformImplEnvelopedSignature;
+import iaik.ixsil.core.Position;
+import iaik.ixsil.util.URI;
+
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+import at.gv.egovernment.moa.util.Base64Utils;
+import at.gv.egovernment.moa.util.Constants;
+import at.gv.egovernment.moa.util.DOMUtils;
+import at.gv.egovernment.moa.util.EntityResolverChain;
+import at.gv.egovernment.moa.util.MOAEntityResolver;
+import at.gv.egovernment.moa.util.MOAErrorHandler;
+import at.gv.egovernment.moa.util.StreamEntityResolver;
+
+/**
+ * @author Administrator
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class TestGeneratorCX2 extends TestCases {
+
+ String datadirectory = "data/CX2/";
+
+ String defaultblock =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
+ "<CreateXMLSignatureRequest xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+
+ "<KeyIdentifier>PKCS12RSAKey1</KeyIdentifier>"+
+ "<SingleSignatureInfo SecurityLayerConformity=\"false\">"+
+ "<DataObjectInfo Structure=\"detached\" ChildOfManifest=\"false\">"+
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"+"\">"+
+ "<XMLContent xml:space=\"preserve\">Dies sind Testdaten</XMLContent>"+
+ "</DataObject>"+
+ "<CreateTransformsInfoProfile>"+
+ "<CreateTransformsInfo>"+
+ "<FinalDataMetaInfo>"+
+ "<MimeType>text/plain</MimeType>"+
+ "</FinalDataMetaInfo>"+
+ "</CreateTransformsInfo>"+
+ "</CreateTransformsInfoProfile>"+
+ "</DataObjectInfo>"+
+ "<CreateSignatureInfo xmlns:data=\"http://uri.data.org\">"+
+ "<!-- insert create -->"+
+ "<CreateSignatureEnvironmentProfile>"+
+ "<CreateSignatureLocation Index=\"0\">//data:Document</CreateSignatureLocation>"+
+ "<!-- insert supp -->"+
+ "</CreateSignatureEnvironmentProfile>"+
+ "</CreateSignatureInfo>"+
+ "</SingleSignatureInfo>"+
+ "</CreateXMLSignatureRequest>";
+
+ public String fileprefix = null;
+ public String filesuffix = null;
+
+ private static final int canAlgCanXML = 1;
+ private static final int canAlgCanXMLwithCom = 2;
+ private static final int canAlgExcXML = 3;
+ private static final int canAlgExcXMLwithCom = 4;
+
+ public TestGeneratorCX2() throws Exception {
+
+ super();
+
+ // Set config properties
+ configuration_.setProperty("TestClass", "TestGeneratorCX2");
+// configuration_.setProperty("privateKeyFile", baseDir + "additionalFiles/keys/RSAPrivateKey.der");
+// configuration_.setProperty("publicKeyFile", baseDir + "additionalFiles/keys/RSAPublicKey.der");
+// configuration_.setProperty("signatureFile", baseDir + "additionalFiles/signatures/Signature.unit1.xml");
+
+ iaik.security.provider.IAIK.addAsProvider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+ }
+
+ public static void main(String[] args) throws Exception {
+ TestGeneratorCX2 testcase = new TestGeneratorCX2();
+
+ testcase.createConfig();
+ testcase.create001();
+ testcase.create002();
+ testcase.create003();
+ testcase.create004();
+ testcase.create005();
+ testcase.create006();
+ testcase.create007();
+ testcase.create008();
+ testcase.create009();
+
+ testcase.create051();
+ testcase.create052();
+ testcase.create053();
+ testcase.create054();
+ testcase.create055();
+ testcase.create056();
+ testcase.create057();
+
+ }
+
+ public void createConfig() throws Exception {
+
+ String file = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ ".Config.xml";
+ String config =
+
+ "<MOAConfiguration xmlns=\"http://reference.e-government.gv.at/namespace/moaconfig/20021122#\">"+
+ " <KeyGroup id=\"PKCS12RSAKey1\"> <Key id=\"resources/test-ee2003_normal(buergerkarte).p12\"/> </KeyGroup>"+
+ " <KeyGroup id=\"PKCS12RSAKeyExpired\"> <Key id=\"sicher-demo(buergerkarte).p12\"/> </KeyGroup>"+
+ " <KeyGroup id=\"PKCS12ECDSAKey1\"> <Key id=\"ecc.p12\"/> </KeyGroup> "+
+ " <KeyGroup id=\"HSMRSAKey1\"> <Key id=\"???\"/> </KeyGroup>"+
+ " <KeyGroup id=\"HSMECDSAKey1\"> <Key id=\"???\"/> </KeyGroup>"+
+ " <DigestMethodAlgorithm name=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+
+ " <SignatureAlgorithm name=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>"+
+ " <CanonicalizationAlgorithm name=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>"+
+ " <CreateSignatureEnvironmentProfile id=\"CreateSignatureEnvironmentProfile1\" filename=\""+"file:/"+configuration_.getProperty("webbaseDir")+"resources/CSEP.xml\"/>"+
+ "</MOAConfiguration>";
+
+ FileOutputStream fos = new FileOutputStream(file);
+ fos.write(config.getBytes());
+ fos.flush();
+ fos.close();
+
+ fileprefix = configuration_.getProperty("baseDir")+ datadirectory + configuration_.getProperty("TestClass") + ".";
+ filesuffix = ".xml";
+ }
+
+ public void create001() throws Exception {
+
+ String TestNumber = "001";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:Document xmlns:data=\"http://uri.data.org\">"+readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>"+
+ //readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+
+ "</XMLContent>"+
+ "</CreateSignatureEnvironment>");
+
+ writeFile(reqFile,req);
+
+ InputStream bis = new ByteArrayInputStream(("<data:Document xmlns:data=\"http://uri.data.org\">"+readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>").getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ //Dokument Parsen
+ Document reqDoc = builder.parse(bis);
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ String xPath_Pos = "/node()";
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\"";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc,pos,"signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt","reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc,"<data:Document xmlns:data=\"http://uri.data.org\">",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>");
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create002() throws Exception {
+
+ String TestNumber = "002";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testDocument.xml"+"\"/>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ InputStream bis = new ByteArrayInputStream(("<data:Document xmlns:data=\"http://uri.data.org\">"+readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>").getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ //Dokument Parsen
+ Document reqDoc = builder.parse(bis);
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ String xPath_Pos = "/node()";
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\"";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc,pos,"signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt","reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc,"<data:Document xmlns:data=\"http://uri.data.org\">",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>");
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create003() throws Exception {
+
+ String TestNumber = "003";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<Base64Content>"+readBinaryFileAsBase64(configuration_.getProperty("baseDir")+"resources/testDocument.xml")+"</Base64Content>"+
+ "</CreateSignatureEnvironment>");
+
+ //req = replaceString(req,"Index=\"0\">//data:Document","Index=\"0\">//Hugo");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ InputStream bis = new ByteArrayInputStream(("<data:Document xmlns:data=\"http://uri.data.org\">"+readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>").getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ //Dokument Parsen
+ Document reqDoc = builder.parse(bis);
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ String xPath_Pos = "/node()";
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\"";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc,pos,"signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt","reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc,"<data:Document xmlns:data=\"http://uri.data.org\">",cutXML(readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"))+"</data:Document>");
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create004() throws Exception {
+
+ String TestNumber = "004";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:Document xmlns:data=\"http://uri.data.org\">"+readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>"+
+ "</XMLContent>"+
+ "</CreateSignatureEnvironment>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ InputStream bis = new ByteArrayInputStream(("<data:Document xmlns:data=\"http://uri.data.org\">"+readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>").getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ //Dokument Parsen
+ Document reqDoc = builder.parse(bis);
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ String xPath_Pos = "/node()";
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\"";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc,pos,"signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt","reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc,"<data:Document xmlns:data=\"http://uri.data.org\">",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>");
+
+ writeFile(resFile, output);
+ }
+
+ public void create005() throws Exception {
+
+ String TestNumber = "005";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://tollesSchema.org/test.xsd\">Dies sind Testdaten</data:Document>"+
+ "</XMLContent>"+
+ "</CreateSignatureEnvironment>");
+
+ req = replaceString(req,"<!-- insert supp -->",
+ "<Supplement>"+
+ "<Content Reference=\"http://tollesSchema.org/test.xsd\">"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<xsd:schema targetNamespace=\"http://uri.data.org\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://uri.data.org\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" id=\"tollesSchema\">"+
+ "<xsd:element name=\"Document\">"+
+ "<xsd:complexType mixed=\"true\">"+
+ "<xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">"+
+ "<xsd:any namespace=\"##any\" processContents=\"lax\"/>"+
+ "</xsd:sequence>"+
+ "<xsd:attribute name=\"attr\" type=\"xsd:ID\" use=\"required\"/>"+
+ "</xsd:complexType>"+
+ "</xsd:element>"+
+ "</xsd:schema>"+
+ "</XMLContent>"+
+ "</Content>"+
+ "</Supplement>");
+
+ req = replaceString(req,"<FinalDataMetaInfo>",
+ "<dsig:Transforms><dsig:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/></dsig:Transforms>"+
+ "<FinalDataMetaInfo>");
+
+
+
+ //req = replaceString(req,"Index=\"0\">//data:Document","Index=\"0\">//data:Document");
+ System.out.println("!!!");
+ System.out.println(req);
+
+ req = replaceString(req,
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"+"\">"+
+ "<XMLContent xml:space=\"preserve\">Dies sind Testdaten</XMLContent>"+
+ "</DataObject>",
+ "<DataObject Reference=\"#document\">"+
+ "</DataObject>"
+ );
+
+ System.out.println(req);
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ //InputStream bis = new ByteArrayInputStream(("<data:Document attr=\"document\" xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://uri.data.org http://tollesSchema.org\">Dies sind Testdaten</data:Document>").getBytes());
+ InputStream bis = new ByteArrayInputStream(("<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://tollesSchema.org/test.xsd\">Dies sind Testdaten</data:Document>").getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ factory.setValidating(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+
+ Map m = new HashMap();
+ m.put("http://tollesSchema.org/test.xsd",new ByteArrayInputStream((
+ "<xsd:schema targetNamespace=\"http://uri.data.org\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://uri.data.org\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" id=\"tollesSchema\">"+
+ "<xsd:element name=\"Document\">"+
+ "<xsd:complexType mixed=\"true\">"+
+ "<xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">"+
+ "<xsd:any namespace=\"##any\" processContents=\"lax\"/>"+
+ "</xsd:sequence>"+
+ "<xsd:attribute name=\"attr\" type=\"xsd:ID\" use=\"required\"/>"+
+ "</xsd:complexType>"+
+ "</xsd:element></xsd:schema>").getBytes()));
+
+ EntityResolverChain chain = new EntityResolverChain();
+ chain.addEntityResolver(new StreamEntityResolver(m));
+ chain.addEntityResolver(new MOAEntityResolver());
+ builder.setEntityResolver(chain);
+
+ //Dokument Parsen
+ Document reqDoc = DOMUtils.parseDocument(bis,true,Constants.ALL_SCHEMA_LOCATIONS, null,chain,new MOAErrorHandler());
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ //String xPath_Pos = "/node()";
+ String xPath_Pos = "//data:Document";
+ //XPAth-Prefixe deklarieren
+ //String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\"";
+ String xPath_Prefix = "data http://uri.data.org";
+
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc,pos,"signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt","reference-1-1");
+ Transform[] tr = new Transform[1];
+ TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();
+ tr[0] = trans;
+ //Enveloped Transformation
+ cpkcs.createReferenceWithTransforms(new URI("#document"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc,"<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://tollesSchema.org/test.xsd\">",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>");
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create006() throws Exception {
+
+ String TestNumber = "006";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:Document xmlns:data=\"http://uri.data.org\">Dies sind Testdaten</data:Document>"+
+ "</XMLContent>"+
+ "</CreateSignatureEnvironment>");
+
+ req = replaceString(req,
+ "<CreateSignatureEnvironmentProfile>"+
+ "<CreateSignatureLocation Index=\"0\">//data:Document</CreateSignatureLocation>"+
+ "<!-- insert supp -->"+
+ "</CreateSignatureEnvironmentProfile>",
+ "<CreateSignatureEnvironmentProfileID>CreateSignatureEnvironmentProfile1</CreateSignatureEnvironmentProfileID>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ InputStream bis = new ByteArrayInputStream(("<data:Document xmlns:data=\"http://uri.data.org\">"+readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>").getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ //Dokument Parsen
+
+
+ Document reqDoc = builder.parse(bis);
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ String xPath_Pos = "/node()";
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\"";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc,pos,"signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt","reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc,"<data:Document xmlns:data=\"http://uri.data.org\">",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>");
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create007() throws Exception {
+
+ String TestNumber = "007";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<Base64Content>"+
+ ""+Base64Utils.encode(("<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Document SYSTEM \"http://dtd.org/tollesDTD.dtd\"><Document attr=\"document\">Dies sind Testdaten</Document>").getBytes())+""+
+ "</Base64Content>"+
+ "</CreateSignatureEnvironment>");
+
+ req = replaceString(req,
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"+"\">"+
+ "<XMLContent xml:space=\"preserve\">Dies sind Testdaten</XMLContent>"+
+ "</DataObject>",
+ "<DataObject Reference=\"#document\">"+
+ "</DataObject>"
+ );
+
+ req = replaceString(req,"<!-- insert supp -->",
+ "<Supplement>"+
+ "<Content Reference=\"http://dtd.org/tollesDTD.dtd\">"+
+ "<Base64Content>"+
+ ""+Base64Utils.encode(("<?xml version=\"1.0\" encoding=\"UTF-8\"?><!ELEMENT Document (#PCDATA | ANY)*><!ATTLIST Document attr ID #REQUIRED>").getBytes())+""+
+ "</Base64Content>"+
+ "</Content>"+
+ "</Supplement>");
+
+ req = replaceString(req," xmlns:data=\"http://uri.data.org\"","");
+ req = replaceString(req,"//data:Document","//Document");
+
+
+ req = replaceString(req,"<FinalDataMetaInfo>",
+ "<dsig:Transforms><dsig:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/></dsig:Transforms>"+
+ "<FinalDataMetaInfo>");
+
+ //req = replaceString(req,"Index=\"0\">//data:Document","Index=\"0\">//Hugo");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ InputStream bis = new ByteArrayInputStream(("<!DOCTYPE Document SYSTEM \"http://dtd.org/tollesDTD.dtd\"><Document attr=\"document\">"+readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</Document>").getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ factory.setValidating(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ //Dokument Parsen
+ Map m = new HashMap();
+ m.put("http://dtd.org/tollesDTD.dtd",new ByteArrayInputStream((
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!ELEMENT Document (#PCDATA | ANY)*><!ATTLIST Document attr ID #REQUIRED>").getBytes()));
+
+ EntityResolverChain chain = new EntityResolverChain();
+ chain.addEntityResolver(new StreamEntityResolver(m));
+ chain.addEntityResolver(new MOAEntityResolver());
+ builder.setEntityResolver(chain);
+
+ Document reqDoc = DOMUtils.parseDocument(bis,true,Constants.ALL_SCHEMA_LOCATIONS, null,chain,new MOAErrorHandler());
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ String xPath_Pos = "/Document";
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc,pos,"signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt","reference-1-1");
+ Transform[] tr = new Transform[1];
+ TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();
+ tr[0] = trans;
+ //Enveloped Transformation
+ cpkcs.createReferenceWithTransforms(new URI("#document"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc,"<Document attr=\"document\" xmlns=\"\">",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</Document>");
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create008() throws Exception {
+
+ String TestNumber = "008";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://tollesSchema.org/test.xsd\">Dies sind Testdaten</data:Document>"+
+ "</XMLContent>"+
+ "</CreateSignatureEnvironment>");
+
+ req = replaceString(req,"<!-- insert supp -->",
+ "<Supplement>"+
+ "<Content Reference=\"http://tollesSchema.org/test.xsd\">"+
+ "<Base64Content>"+
+
+ Base64Utils.encode(("<xsd:schema targetNamespace=\"http://uri.data.org\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://uri.data.org\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" id=\"tollesSchema\">"+
+ "<xsd:element name=\"Document\">"+
+ "<xsd:complexType mixed=\"true\">"+
+ "<xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">"+
+ "<xsd:any namespace=\"##any\" processContents=\"lax\"/>"+
+ "</xsd:sequence>"+
+ "<xsd:attribute name=\"attr\" type=\"xsd:ID\" use=\"required\"/>"+
+ "</xsd:complexType>"+
+ "</xsd:element>"+
+ "</xsd:schema>").getBytes())+
+
+ "</Base64Content>"+
+ "</Content>"+
+ "</Supplement>");
+
+ req = replaceString(req,"<FinalDataMetaInfo>",
+ "<dsig:Transforms><dsig:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/></dsig:Transforms>"+
+ "<FinalDataMetaInfo>");
+
+
+ //req = replaceString(req,"Index=\"0\">//data:Document","Index=\"0\">//data:Document");
+ System.out.println("!!!");
+ System.out.println(req);
+
+ req = replaceString(req,
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"+"\">"+
+ "<XMLContent xml:space=\"preserve\">Dies sind Testdaten</XMLContent>"+
+ "</DataObject>",
+ "<DataObject Reference=\"#document\">"+
+ "</DataObject>"
+ );
+
+ System.out.println(req);
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ InputStream bis = new ByteArrayInputStream(("<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://tollesSchema.org/test.xsd\">Dies sind Testdaten</data:Document>").getBytes());
+ //Document-Builder holen
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ factory.setValidating(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+
+ Map m = new HashMap();
+ m.put("http://tollesSchema.org/test.xsd",new ByteArrayInputStream((
+ "<xsd:schema targetNamespace=\"http://uri.data.org\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://uri.data.org\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" id=\"tollesSchema\">"+
+ "<xsd:element name=\"Document\">"+
+ "<xsd:complexType mixed=\"true\">"+
+ "<xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">"+
+ "<xsd:any namespace=\"##any\" processContents=\"lax\"/>"+
+ "</xsd:sequence>"+
+ "<xsd:attribute name=\"attr\" type=\"xsd:ID\" use=\"required\"/>"+
+ "</xsd:complexType>"+
+ "</xsd:element>"+
+ "</xsd:schema>").getBytes()));
+
+ EntityResolverChain chain = new EntityResolverChain();
+ chain.addEntityResolver(new StreamEntityResolver(m));
+ chain.addEntityResolver(new MOAEntityResolver());
+ builder.setEntityResolver(chain);
+
+ //Dokument Parsen
+ Document reqDoc = DOMUtils.parseDocument(bis,true,Constants.ALL_SCHEMA_LOCATIONS, null,chain,new MOAErrorHandler());
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ String xPath_Pos = "//data:Document";
+ //XPAth-Prefixe deklarieren
+ //String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\"";
+ String xPath_Prefix = "data http://uri.data.org";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc,pos,"signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt","reference-1-1");
+ Transform[] tr = new Transform[1];
+ TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();
+ tr[0] = trans;
+ //Enveloped Transformation
+ cpkcs.createReferenceWithTransforms(new URI("#document"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc,"<data:Document attr=\"document\" xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://uri.data.org http://tollesSchema.org/test.xsd\">",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>");
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create009() throws Exception {
+
+ String TestNumber = "009";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://tollesSchema.org/test.xsd\">Dies sind Testdaten</data:Document>"+
+ "</XMLContent>"+
+ "</CreateSignatureEnvironment>");
+
+ req = replaceString(req,"<!-- insert supp -->",
+ "<Supplement>"+
+ "<Content Reference=\"http://tollesSchema.org/test.xsd\">"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<xsd:schema targetNamespace=\"http://uri.data.org\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://uri.data.org\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" id=\"tollesSchema\">"+
+ "<xsd:element name=\"Document\">"+
+ "<xsd:complexType mixed=\"true\">"+
+ "<xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">"+
+ "<xsd:any namespace=\"##any\" processContents=\"lax\"/>"+
+ "</xsd:sequence>"+
+ "<xsd:attribute name=\"attr\" type=\"xsd:ID\" use=\"required\"/>"+
+ "</xsd:complexType>"+
+ "</xsd:element>"+
+ "</xsd:schema>"+
+ "</XMLContent>"+
+ "</Content>"+
+ "</Supplement>");
+
+ req = replaceString(req,"<FinalDataMetaInfo>",
+ "<dsig:Transforms><dsig:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/></dsig:Transforms>"+
+ "<FinalDataMetaInfo>");
+
+
+
+ //req = replaceString(req,"Index=\"0\">//data:Document","Index=\"0\">//data:Document");
+ System.out.println("!!!");
+ System.out.println(req);
+
+ req = replaceString(req,
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"+"\">"+
+ "<XMLContent xml:space=\"preserve\">Dies sind Testdaten</XMLContent>"+
+ "</DataObject>",
+ "<DataObject Reference=\"#xpointer(id(document))\">"+
+ "</DataObject>"
+ );
+
+ System.out.println(req);
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ //InputStream bis = new ByteArrayInputStream(("<data:Document attr=\"document\" xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://uri.data.org http://tollesSchema.org\">Dies sind Testdaten</data:Document>").getBytes());
+ InputStream bis = new ByteArrayInputStream(("<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://tollesSchema.org/test.xsd\">Dies sind Testdaten</data:Document>").getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ factory.setValidating(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+
+ Map m = new HashMap();
+ m.put("http://tollesSchema.org/test.xsd",new ByteArrayInputStream((
+ "<xsd:schema targetNamespace=\"http://uri.data.org\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://uri.data.org\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" id=\"tollesSchema\">"+
+ "<xsd:element name=\"Document\">"+
+ "<xsd:complexType mixed=\"true\">"+
+ "<xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">"+
+ "<xsd:any namespace=\"##any\" processContents=\"lax\"/>"+
+ "</xsd:sequence>"+
+ "<xsd:attribute name=\"attr\" type=\"xsd:ID\" use=\"required\"/>"+
+ "</xsd:complexType>"+
+ "</xsd:element></xsd:schema>").getBytes()));
+
+ EntityResolverChain chain = new EntityResolverChain();
+ chain.addEntityResolver(new StreamEntityResolver(m));
+ chain.addEntityResolver(new MOAEntityResolver());
+ builder.setEntityResolver(chain);
+
+ //Dokument Parsen
+ Document reqDoc = DOMUtils.parseDocument(bis,true,Constants.ALL_SCHEMA_LOCATIONS, null,chain,new MOAErrorHandler());
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ //String xPath_Pos = "/node()";
+ String xPath_Pos = "//data:Document";
+ //XPAth-Prefixe deklarieren
+ //String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\"";
+ String xPath_Prefix = "data http://uri.data.org";
+
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc,pos,"signature-1-1");
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt","reference-1-1");
+ Transform[] tr = new Transform[1];
+ TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();
+ tr[0] = trans;
+ //Enveloped Transformation
+ cpkcs.createReferenceWithTransforms(new URI("#xpointer(id(document))"),tr,"reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc,"<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://tollesSchema.org/test.xsd\">",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</data:Document>");
+
+ writeFile(resFile, output);
+
+ }
+
+ public void create051() throws Exception {
+
+ String TestNumber = "051";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<CreateSignatureInfo xmlns:data=\"http://uri.data.org\">","<CreateSignatureInfo>");
+
+ req = replaceString(req,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:Document xmlns:data=\"http://uri.data.org\">daten</data:Document><Text>toller Text</Text>"+
+ "</XMLContent>"+
+ "</CreateSignatureEnvironment>");
+
+ req = replaceString(req,"<CreateSignatureLocation Index=\"0\">","<CreateSignatureLocation Index=\"0\" xmlns:data=\"http://uri.data.org\">");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"1109");
+
+ }
+
+ public void create052() throws Exception {
+
+ String TestNumber = "052";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<Base64Content>PFRhZzE+PC9UYWcxPjxUYWcyPjwvVGFnMj4NCg0K</Base64Content><!-- Inhalt: <Tag1></Tag1><Tag2></Tag2> -->"+
+ "</CreateSignatureEnvironment>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2218");
+
+ }
+
+ public void create053() throws Exception {
+
+ String TestNumber = "053";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment/>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"1110");
+
+ }
+
+ public void create054() throws Exception {
+
+ String TestNumber = "054";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<XMLContent xml:space=\"preserve\"><data:Document xmlns:data=\"http://uri.data.org\">Dies sind Testdaten</data:Document></XMLContent>"+
+ "</CreateSignatureEnvironment>");
+
+ req = replaceString(req,
+ "<CreateTransformsInfo>"+
+ "<FinalDataMetaInfo>"+
+ "<MimeType>text/plain</MimeType>"+
+ "</FinalDataMetaInfo>"+
+ "</CreateTransformsInfo>",
+ "<CreateTransformsInfo>"+
+ "<dsig:Transforms>"+
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xpath-19991116\">"+
+ "<dsig:XPath>/data:book/data:first-name/node()</dsig:XPath>"+
+ "</dsig:Transform>"+
+ "</dsig:Transforms>"+
+ "<FinalDataMetaInfo>"+
+ "<MimeType>text/xml</MimeType>"+
+ "</FinalDataMetaInfo>"+
+ "</CreateTransformsInfo>");
+
+ req = replaceString(req,
+ "<CreateSignatureLocation Index=\"0\">//data:Document</CreateSignatureLocation>",
+ "<CreateSignatureLocation Index=\"0\">//data:Document1</CreateSignatureLocation>");
+
+ req = replaceString(req,
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"+"\">"+
+ "<XMLContent xml:space=\"preserve\">"+readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</XMLContent>"+
+ "</DataObject>",
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/BookData.xml"+"\"/>");
+
+ //req = replaceString(req,"/data:Document","/data:nonExistingElement");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2212");
+
+ }
+
+ public void create056() throws Exception {
+
+ String TestNumber = "056";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:Document>andereDaten als in "+configuration_.getProperty("webbaseDir")+"resources/CSEP.xml</data:Document>"+
+ "</XMLContent>"+
+ "</CreateSignatureEnvironment>");
+
+ req = replaceString(req,
+ "<CreateSignatureEnvironmentProfile>"+
+ "<CreateSignatureLocation Index=\"0\">//data:Document</CreateSignatureLocation>"+
+ "<!-- insert supp -->"+
+ "</CreateSignatureEnvironmentProfile>",
+ "<CreateSignatureEnvironmentProfileID>wrongCreateSignatureEnvironmentProfile</CreateSignatureEnvironmentProfileID>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2236");
+
+ }
+
+ public void create057() throws Exception {
+
+ String TestNumber = "057";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment>"+
+ "<XMLContent xml:space=\"preserve\"><data:Document xmlns:data=\"http://uri.data.org\">Dies sind Testdaten</data:Document></XMLContent>"+
+ "</CreateSignatureEnvironment>");
+
+ req = replaceString(req,
+ "<CreateTransformsInfo>"+
+ "<FinalDataMetaInfo>"+
+ "<MimeType>text/plain</MimeType>"+
+ "</FinalDataMetaInfo>"+
+ "</CreateTransformsInfo>",
+ "<CreateTransformsInfo>"+
+ "<dsig:Transforms>"+
+ "<dsig:Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xpath-19991116\">"+
+ "<dsig:XPath>/data:book/data:first-name/node()</dsig:XPath>"+
+ "</dsig:Transform>"+
+ "</dsig:Transforms>"+
+ "<FinalDataMetaInfo>"+
+ "<MimeType>text/xml</MimeType>"+
+ "</FinalDataMetaInfo>"+
+ "</CreateTransformsInfo>");
+
+ req = replaceString(req,
+ "<CreateSignatureLocation Index=\"0\">//data:Document</CreateSignatureLocation>",
+ "<CreateSignatureLocation Index=\"0\">]]'_'[[//data:Document</CreateSignatureLocation>");
+
+ req = replaceString(req,
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"+"\">"+
+ "<XMLContent xml:space=\"preserve\">"+readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")+"</XMLContent>"+
+ "</DataObject>",
+ "<DataObject Reference=\""+configuration_.getProperty("webbaseDir")+"resources/BookData.xml"+"\"/>");
+
+ //req = replaceString(req,"/data:Document","/data:nonExistingElement");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2212");
+
+ }
+
+ public void create055() throws Exception {
+
+ String TestNumber = "055";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert create -->",
+ "<CreateSignatureEnvironment Reference=\""+configuration_.getProperty("webbaseDir")+"resources/CSEP.xml\">"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<data:Document>andereDaten als in "+configuration_.getProperty("webbaseDir")+"resources/CSEP.xml</data:Document>"+
+ "</XMLContent>"+
+ "</CreateSignatureEnvironment>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"1110");
+
+ }
+
+
+ public void writeFile(String filename,String data) throws Exception
+ {
+ BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
+ bw.write(data);
+ bw.close();
+ }
+
+ public String makeOutputFile(Document signatureDoc,String prefix,String suffix) throws Exception
+ {
+ ArrayList foundNodes = new ArrayList();
+ findNode(signatureDoc.getDocumentElement(),"dsig:Signature",foundNodes);
+
+ Node outputNode = null;
+
+ if(foundNodes.size()>0)
+ {
+ outputNode = (Node)foundNodes.get(0);
+ }
+
+ String erg = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ int pos = erg.indexOf("<dsig");
+ erg = erg.substring(pos);
+
+ // insert the dsig:signature element in a MOA Response Message
+ erg = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
+ "<CreateXMLSignatureResponse" +
+ " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\""+
+ " >"+
+ //" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\">"+
+ "<SignatureEnvironment>" +prefix+
+ erg +suffix+ "</SignatureEnvironment> </CreateXMLSignatureResponse>";
+
+ return erg;
+ }
+
+ public String makeOutputFile(Document signatureDoc) throws Exception
+ {
+ return this.makeOutputFile(signatureDoc,"","");
+ }
+}
diff --git a/spss.test/src/testgenerator/TestGeneratorFeature41.java b/spss.test/src/testgenerator/TestGeneratorFeature41.java
new file mode 100644
index 000000000..7ecb28449
--- /dev/null
+++ b/spss.test/src/testgenerator/TestGeneratorFeature41.java
@@ -0,0 +1,1167 @@
+package testgenerator;
+
+import iaik.ixsil.algorithms.CanonicalizationAlgorithmImplCanonicalXML;
+import iaik.ixsil.algorithms.DigestAlgorithmImplSHA1;
+import iaik.ixsil.algorithms.SignatureAlgorithmImplRSA;
+import iaik.ixsil.algorithms.Transform;
+import iaik.ixsil.algorithms.TransformImplBase64Decode;
+import iaik.ixsil.algorithms.TransformImplEnvelopedSignature;
+import iaik.ixsil.algorithms.TransformImplXSLT;
+import iaik.ixsil.core.Position;
+import iaik.ixsil.core.Signer;
+import iaik.ixsil.core.SignerManifest;
+import iaik.ixsil.core.SignerReference;
+import iaik.ixsil.core.SignerSignature;
+import iaik.ixsil.core.SignerSignedInfo;
+import iaik.ixsil.init.IXSILConstants;
+import iaik.ixsil.keyinfo.KeyManagerImpl;
+import iaik.ixsil.keyinfo.x509.KeyProviderImplX509Data;
+import iaik.ixsil.keyinfo.x509.X509Data;
+import iaik.ixsil.util.URI;
+
+import iaik.pkcs.pkcs12.PKCS12;
+import iaik.utils.Base64OutputStream;
+
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.cert.X509Certificate;
+import java.security.interfaces.RSAPrivateKey;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+
+import at.gv.egovernment.moa.util.Base64Utils;
+import at.gv.egovernment.moa.util.Constants;
+import at.gv.egovernment.moa.util.DOMUtils;
+import at.gv.egovernment.moa.util.EntityResolverChain;
+import at.gv.egovernment.moa.util.MOAEntityResolver;
+import at.gv.egovernment.moa.util.MOAErrorHandler;
+import at.gv.egovernment.moa.util.StreamEntityResolver;
+
+/**
+ * @author Gregor Karlinger
+ */
+public class TestGeneratorFeature41 extends TestCases
+{
+
+ String datadirectory = "data/feature41/";
+
+ public static void main(String[] args) throws Exception
+ {
+ TestGeneratorFeature41 testcase = new TestGeneratorFeature41();
+
+ testcase.create001();
+ testcase.create002();
+ testcase.create003();
+ testcase.create004();
+ testcase.create005();
+ }
+
+ /* ==================================================================================================== */
+
+ public TestGeneratorFeature41() throws Exception
+ {
+
+ super();
+
+ // Set config properties
+ configuration_.setProperty("TestClass", "TestGeneratorFeature41");
+
+ iaik.security.provider.IAIK.addAsJDK14Provider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public Document createPKCS12Sig(
+ String TestNumber,
+ String data,
+ boolean env,
+ boolean mani,
+ String data2,
+ boolean env2)
+ throws Exception
+ {
+ String resFile =
+ configuration_.getProperty("baseDir")
+ + datadirectory
+ + configuration_.getProperty("TestClass")
+ + "."
+ + TestNumber
+ + ".Res.xml";
+
+ PKCS12 pkcs12 =
+ decryptPKCS12(configuration_.getProperty("PKCS12file"), configuration_.getProperty("PKCS12password"));
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ Signer signer = new Signer(baseURI);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ SignerSignature signature = signer.getSignature();
+ SignerSignedInfo signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set canonicalization algorithm
+ CanonicalizationAlgorithmImplCanonicalXML c14nAlg = new CanonicalizationAlgorithmImplCanonicalXML();
+ signedInfo.setCanonicalizationAlgorithm(c14nAlg);
+
+ // Set signature algorithm
+ SignatureAlgorithmImplRSA signatureAlg = new SignatureAlgorithmImplRSA();
+ RSAPrivateKey privateKey = getPrivateKey(pkcs12);
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+
+ if (!mani)
+ {
+ SignerReference reference = signedInfo.createReference();
+ if (env)
+ {
+ iaik.ixsil.core.Object object = null;
+ //object = signature.createObject(data);
+ if (data.startsWith("<xml"))
+ {
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(data.getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if (data.startsWith("<Testdaten"))
+ {
+
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc =
+ db.parse(
+ new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + data).getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if (data.startsWith("b64:"))
+ {
+ data = data.substring(4);
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.newDocument();
+ Element root = doc.createElement("root");
+ doc.appendChild(root);
+ //String encoded = Base64Utils.encode(data.getBytes());
+ String encoded = Base64Utils.encode(data.getBytes());
+ /*encoded = replaceStringAll(encoded,"\n","");
+ encoded = replaceStringAll(encoded,"\r","");*/
+ Text textnode = doc.createTextNode(encoded);
+
+ System.out.println("Encoded:" + encoded);
+ //root.appendChild(textnode);
+
+ DocumentFragment df = doc.createDocumentFragment();
+
+ df.appendChild(textnode);
+
+ object = signature.createObject(df);
+
+ TransformImplBase64Decode trans = new TransformImplBase64Decode();
+ InputStream s = new ByteArrayInputStream(encoded.getBytes());
+ trans.setInput(s, null);
+
+ reference.insertTransformAt(trans, 0);
+ }
+ else
+ {
+ object = signature.createObject(data);
+ }
+
+ object.setId("signed-data-1-1-1");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ reference.setURI(new URI("#xpointer(id('signed-data-1-1-1')/node())"));
+
+ }
+ else
+ {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data);
+
+ reference.setURI(refURI);
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+ reference.setId("reference-1-1");
+ signedInfo.addReference(reference);
+ }
+
+ if (data2 != null)
+ {
+ SignerReference reference = signedInfo.createReference();
+ reference = signedInfo.createReference();
+ if (env2)
+ {
+ iaik.ixsil.core.Object object = null;
+ if (data2.startsWith("<xml"))
+ {
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(data.getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if (data2.startsWith("<Testdaten"))
+ {
+
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc =
+ db.parse(
+ new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + data).getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else
+ object = signature.createObject(data2);
+
+ if (!env)
+ object.setId("signed-data-1-2-1");
+ else
+ object.setId("signed-data-1-2-1");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ if (!env)
+ reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())"));
+ else
+ reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())"));
+ }
+ else
+ {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data2);
+
+ reference.setURI(refURI);
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+ reference.setId("reference-1-2");
+ signedInfo.addReference(reference);
+ }
+
+ // Add reference to signature
+
+ if (mani)
+ {
+
+ /*iaik.ixsil.core.Object object = null;
+ if(env)
+ object = signature.createObject(readFile(data));
+ else
+ object = signature.createObject(data);
+
+ object.setId("envelopedData");
+ signature.addObject(object);*/
+ SignerReference reference = signedInfo.createReference();
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ manifestRef.setDigestAlgorithm(digestAlg);
+
+ manifestRef.setURI(new URI(data));
+ manifestRef.setId("reference-1-1");
+
+ manifest.addReference(manifestRef);
+ manifest.setId("dsig-manifest-1-1");
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ reference = signedInfo.createReference();
+ reference.setURI(new URI("#dsig-manifest-1-1"));
+ reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);
+
+ /*Element envelopedDataElem =
+ signer.toDocument().createElement("EnvelopedDataElement");
+
+ if(env)
+ {
+ envelopedDataElem.appendChild(
+ signer.toDocument().createTextNode(readFile(data)));
+ }
+ else
+ {
+ envelopedDataElem.appendChild(
+ signer.toDocument().createTextNode(data));
+ }
+
+ iaik.ixsil.core.Object object = signature.createObject(envelopedDataElem);
+ signature.addObject(object);
+
+ // Create Manifest with a single reference pointing to the enveloped data
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+ manifestRef.setURI(
+ new URI(
+ null,
+ null,
+ null,
+ null,
+ "xmlns(dsig="
+ + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_
+ + ") "
+ + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[1]/descendant::node())"));
+ manifestRef.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+ manifest.addReference(manifestRef);
+
+ // Add Manifest to signature structure (use an Object) and compute digest values for manifest reference
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ // Create and configure reference to manifest
+ reference = signedInfo.createReference();
+ reference.setURI(
+ new URI(
+ null,
+ null,
+ null,
+ null,
+ "xmlns(dsig="
+ + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_
+ + ") "
+ + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[2]/dsig:Manifest)"));
+ reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);*/
+ }
+
+ // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+ X509Certificate[] certs = getCertificates(pkcs12);
+ X509Data x509Data = new X509Data();
+ x509Data.insertHintAt(certs[1], 0);
+ /*for (int i = 0; i < certs.length; i++)
+ {
+
+ }*/
+
+ KeyProviderImplX509Data x509DataKeyProvider = new KeyProviderImplX509Data(signer.toDocument());
+ x509DataKeyProvider.insertX509DataAt(x509Data, 0);
+
+ // X509Data key information (certificate chain)
+ keyManager.addKeyProvider(x509DataKeyProvider);
+
+ signer.getSignature().setKeyManager(keyManager);
+ signer.getSignature().setId("signature-1-1");
+ // Compute signature value
+ signer.getSignature().sign();
+
+ return signer.toDocument();
+ }
+
+ public Document createPKCS12Sig(
+ String TestNumber,
+ String data,
+ boolean env,
+ boolean mani,
+ String data2,
+ boolean env2,
+ String id1,
+ String id2)
+ throws Exception
+ {
+ String resFile =
+ configuration_.getProperty("baseDir")
+ + datadirectory
+ + configuration_.getProperty("TestClass")
+ + "."
+ + TestNumber
+ + ".Res.xml";
+
+ PKCS12 pkcs12 =
+ decryptPKCS12(configuration_.getProperty("PKCS12file"), configuration_.getProperty("PKCS12password"));
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ Signer signer = new Signer(baseURI);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ SignerSignature signature = signer.getSignature();
+ SignerSignedInfo signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set canonicalization algorithm
+ CanonicalizationAlgorithmImplCanonicalXML c14nAlg = new CanonicalizationAlgorithmImplCanonicalXML();
+ signedInfo.setCanonicalizationAlgorithm(c14nAlg);
+
+ // Set signature algorithm
+ SignatureAlgorithmImplRSA signatureAlg = new SignatureAlgorithmImplRSA();
+ RSAPrivateKey privateKey = getPrivateKey(pkcs12);
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+
+ if (!mani)
+ {
+ SignerReference reference = signedInfo.createReference();
+ if (env)
+ {
+ iaik.ixsil.core.Object object = null;
+ //object = signature.createObject(data);
+ if (data.startsWith("<xml"))
+ {
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(data.getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if (data.startsWith("<Testdaten"))
+ {
+
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc =
+ db.parse(
+ new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + data).getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if (data.startsWith("b64:"))
+ {
+ data = data.substring(4);
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.newDocument();
+ Element root = doc.createElement("root");
+ doc.appendChild(root);
+ //String encoded = Base64Utils.encode(data.getBytes());
+ String encoded = Base64Utils.encode(data.getBytes());
+ /*encoded = replaceStringAll(encoded,"\n","");
+ encoded = replaceStringAll(encoded,"\r","");*/
+ Text textnode = doc.createTextNode(encoded);
+
+ System.out.println("Encoded:" + encoded);
+ //root.appendChild(textnode);
+
+ DocumentFragment df = doc.createDocumentFragment();
+
+ df.appendChild(textnode);
+
+ object = signature.createObject(df);
+
+ TransformImplBase64Decode trans = new TransformImplBase64Decode();
+ InputStream s = new ByteArrayInputStream(encoded.getBytes());
+ trans.setInput(s, null);
+
+ reference.insertTransformAt(trans, 0);
+ }
+ else
+ {
+ object = signature.createObject(data);
+ }
+
+ object.setId("signed-data-1-1-1");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ reference.setURI(new URI("#xpointer(id('signed-data-1-1-1')/node())"));
+
+ }
+ else
+ {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data);
+
+ reference.setURI(refURI);
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+ reference.setId("reference-2-1");
+ signedInfo.addReference(reference);
+ }
+
+ if (data2 != null)
+ {
+ SignerReference reference = signedInfo.createReference();
+ reference = signedInfo.createReference();
+ if (env2)
+ {
+ iaik.ixsil.core.Object object = null;
+ if (data2.startsWith("<xml"))
+ {
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = db.parse(new ByteArrayInputStream(data.getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else if (data2.startsWith("<Testdaten"))
+ {
+
+ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc =
+ db.parse(
+ new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + data).getBytes()));
+
+ object = signature.createObject(doc.getDocumentElement());
+ }
+ else
+ object = signature.createObject(data2);
+
+ if (!env)
+ object.setId("signed-data-1-2-1");
+ else
+ object.setId("signed-data-1-2-1");
+ signature.addObject(object);
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+
+ if (!env)
+ reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())"));
+ else
+ reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())"));
+ }
+ else
+ {
+ // Create and configure reference
+ URI refURI = null;
+ String baseDir = configuration_.getProperty("baseDir");
+ refURI = new URI(data2);
+
+ reference.setURI(refURI);
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ }
+ reference.setId("reference-1-2");
+ signedInfo.addReference(reference);
+ }
+
+ // Add reference to signature
+
+ if (mani)
+ {
+
+ /*iaik.ixsil.core.Object object = null;
+ if(env)
+ object = signature.createObject(readFile(data));
+ else
+ object = signature.createObject(data);
+
+ object.setId("envelopedData");
+ signature.addObject(object);*/
+ SignerReference reference = signedInfo.createReference();
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ manifestRef.setDigestAlgorithm(digestAlg);
+
+ manifestRef.setURI(new URI(data));
+ manifestRef.setId("reference-1-1");
+
+ manifest.addReference(manifestRef);
+ manifest.setId("dsig-manifest-1-1");
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ reference = signedInfo.createReference();
+ reference.setURI(new URI("#dsig-manifest-1-1"));
+ reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);
+
+ /*Element envelopedDataElem =
+ signer.toDocument().createElement("EnvelopedDataElement");
+
+ if(env)
+ {
+ envelopedDataElem.appendChild(
+ signer.toDocument().createTextNode(readFile(data)));
+ }
+ else
+ {
+ envelopedDataElem.appendChild(
+ signer.toDocument().createTextNode(data));
+ }
+
+ iaik.ixsil.core.Object object = signature.createObject(envelopedDataElem);
+ signature.addObject(object);
+
+ // Create Manifest with a single reference pointing to the enveloped data
+ SignerManifest manifest = signer.createManifest();
+ SignerReference manifestRef = manifest.createReference();
+ manifestRef.setURI(
+ new URI(
+ null,
+ null,
+ null,
+ null,
+ "xmlns(dsig="
+ + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_
+ + ") "
+ + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[1]/descendant::node())"));
+ manifestRef.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+ manifest.addReference(manifestRef);
+
+ // Add Manifest to signature structure (use an Object) and compute digest values for manifest reference
+ iaik.ixsil.core.Object manifestObject = signature.createObject(manifest);
+ signature.addObject(manifestObject);
+ manifest.computeDigestValues();
+
+ // Create and configure reference to manifest
+ reference = signedInfo.createReference();
+ reference.setURI(
+ new URI(
+ null,
+ null,
+ null,
+ null,
+ "xmlns(dsig="
+ + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_
+ + ") "
+ + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[2]/dsig:Manifest)"));
+ reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_));
+ reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1());
+
+ // Add reference to signature
+ signedInfo.addReference(reference);*/
+ }
+
+ // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+ X509Certificate[] certs = getCertificates(pkcs12);
+ X509Data x509Data = new X509Data();
+ x509Data.insertHintAt(certs[1], 0);
+ /*for (int i = 0; i < certs.length; i++)
+ {
+
+ }*/
+
+ KeyProviderImplX509Data x509DataKeyProvider = new KeyProviderImplX509Data(signer.toDocument());
+ x509DataKeyProvider.insertX509DataAt(x509Data, 0);
+
+ // X509Data key information (certificate chain)
+ keyManager.addKeyProvider(x509DataKeyProvider);
+
+ signer.getSignature().setKeyManager(keyManager);
+ signer.getSignature().setId("signature-2-1");
+ // Compute signature value
+ signer.getSignature().sign();
+
+ return signer.toDocument();
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public Element getElement(String data) throws Exception
+ {
+ String etsinamespace = "http://uri.etsi.org/01903/v1.1.1#";
+
+ getX509Content();
+
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ //dbf.setNamespaceAware(true);
+ //dbf.setValidating(true);
+
+ Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+
+ Element qualprop = doc.createElementNS(etsinamespace, "etsi:QualifyingProperties");
+ qualprop.setAttributeNS(null, "Target", "#signature-1-1");
+ qualprop.setAttributeNS(IXSILConstants.NAMESPACE_URI_NAMESPACES_, "xmlns:etsi", etsinamespace);
+ //qualprop.setPrefix("etsi");*/
+ //qualprop.setAttributeNodeNS(doc.createAttributeNS(etsinamespace,"etsi"));
+ Element signprop = doc.createElementNS(etsinamespace, "etsi:SignedProperties");
+ Element signsigprop = doc.createElementNS(etsinamespace, "etsi:SignedSignatureProperties");
+ Element signdataobjectprop = doc.createElementNS(etsinamespace, "etsi:SignedDataObjectProperties");
+ Element signdate = doc.createElementNS(etsinamespace, "etsi:SigningTime");
+ Text datevalue = doc.createTextNode("2003-05-10T00:01:01");
+ Element signcert = doc.createElementNS(etsinamespace, "etsi:SigningCertificate");
+ Element cert = doc.createElementNS(etsinamespace, "etsi:Cert");
+ Element signpolyident = doc.createElementNS(etsinamespace, "etsi:SignaturePolicyIdentifier");
+ Element signpolyimp = doc.createElementNS(etsinamespace, "etsi:SignaturePolicyImplied");
+ Element certdig = doc.createElementNS(etsinamespace, "etsi:CertDigest");
+ Element digmeth = doc.createElementNS(etsinamespace, "etsi:DigestMethod");
+ digmeth.setAttribute("Algorithm", "http://www.w3.org/2000/09/xmldsig#sha1");
+ Element digvalue = doc.createElementNS(etsinamespace, "etsi:DigestValue");
+
+ ByteArrayOutputStream fos = new ByteArrayOutputStream();
+ Base64OutputStream base64os = new Base64OutputStream(fos);
+ base64os.write(this.X509hash.getBytes());
+ base64os.flush();
+
+ Text dig_value = doc.createTextNode(fos.toString());
+ Element is = doc.createElementNS(etsinamespace, "etsi:IssuerSerial");
+ Element i = doc.createElement("dsig:X509IssuerName");
+ Text i_value = doc.createTextNode(this.X509name);
+ Element s = doc.createElement("dsig:X509SerialNumber");
+ Text s_value = doc.createTextNode(this.X509number.toString());
+ Element dataobjformat = doc.createElementNS(etsinamespace, "etsi:DataObjectFormat");
+ dataobjformat.setAttribute("ObjectReference", "#reference-1-1");
+ Element mimetype = doc.createElementNS(etsinamespace, "etsi:MimeType");
+ //mimetype.setNodeValue("text/plain");
+ Text mimevalue = doc.createTextNode("text/plain");
+
+ qualprop.appendChild(signprop);
+ signprop.appendChild(signsigprop);
+ signsigprop.appendChild(signdate);
+ signdate.appendChild(datevalue);
+ signsigprop.appendChild(signcert);
+ signcert.appendChild(cert);
+ cert.appendChild(certdig);
+ certdig.appendChild(digmeth);
+ certdig.appendChild(digvalue);
+ digvalue.appendChild(dig_value);
+ cert.appendChild(is);
+ is.appendChild(i);
+ i.appendChild(i_value);
+ is.appendChild(s);
+ s.appendChild(s_value);
+ signsigprop.appendChild(signpolyident);
+ signpolyident.appendChild(signpolyimp);
+ signprop.appendChild(signdataobjectprop);
+ signdataobjectprop.appendChild(dataobjformat);
+ dataobjformat.appendChild(mimetype);
+ mimetype.appendChild(mimevalue);
+
+ return qualprop;
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public void create001() throws Exception
+ {
+
+ String testNumber = "001";
+
+ String resFile =
+ configuration_.getProperty("baseDir")
+ + datadirectory
+ + configuration_.getProperty("TestClass")
+ + "."
+ + testNumber
+ + ".Res.xml";
+
+ PKCS12 pkcs12 =
+ decryptPKCS12(configuration_.getProperty("PKCS12file"), configuration_.getProperty("PKCS12password"));
+
+ // Create signature generator
+ URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_);
+ Signer signer = new Signer(baseURI);
+
+ // Configure signed information
+
+ // Get interface for signed information
+ SignerSignature signature = signer.getSignature();
+ SignerSignedInfo signedInfo = signer.getSignature().getSignerSignedInfo();
+
+ // Set canonicalization algorithm
+ CanonicalizationAlgorithmImplCanonicalXML c14nAlg = new CanonicalizationAlgorithmImplCanonicalXML();
+ signedInfo.setCanonicalizationAlgorithm(c14nAlg);
+
+ // Set signature algorithm
+ SignatureAlgorithmImplRSA signatureAlg = new SignatureAlgorithmImplRSA();
+ RSAPrivateKey privateKey = getPrivateKey(pkcs12);
+ signatureAlg.setSignerKey(privateKey);
+ signedInfo.setSignatureAlgorithm(signatureAlg);
+
+ // Create and configure reference
+ String baseDir = configuration_.getProperty("baseDir");
+ InputStream dataIS = new FileInputStream(baseDir + "resources/documents/testDaten.txt");
+
+ SignerReference reference = signedInfo.createReference();
+ reference.setURI(new URI("testDaten.txt"));
+ reference.setExplicitData(dataIS, SignerReference.EXPLICITDATATYPE_RAW_);
+ DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1();
+ reference.setDigestAlgorithm(digestAlg);
+ reference.setId("reference-1-1");
+ signedInfo.addReference(reference);
+
+ // Create key information
+ KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument());
+
+ X509Certificate[] certs = getCertificates(pkcs12);
+ X509Data x509Data = new X509Data();
+ x509Data.insertHintAt(certs[1], 0);
+ KeyProviderImplX509Data x509DataKeyProvider = new KeyProviderImplX509Data(signer.toDocument());
+ x509DataKeyProvider.insertX509DataAt(x509Data, 0);
+
+ // X509Data key information (certificate chain)
+ keyManager.addKeyProvider(x509DataKeyProvider);
+
+ signer.getSignature().setKeyManager(keyManager);
+ signer.getSignature().setId("signature-1-1");
+ // Compute signature value
+ signer.getSignature().sign();
+
+ String erg = makeOutputFile(signer.toDocument());
+ writeFile(resFile, erg);
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public void create002() throws Exception
+ {
+
+ String testNumber = "002";
+
+ String resFile =
+ configuration_.getProperty("baseDir")
+ + datadirectory
+ + configuration_.getProperty("TestClass")
+ + "."
+ + testNumber
+ + ".Res.xml";
+
+ Document signatureDoc = createPKCS12Sig(testNumber, "b64:Dies sind Testdaten", true, false, null, false);
+ String erg = makeOutputFile(signatureDoc);
+ writeFile(resFile, erg);
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public void create003() throws Exception
+ {
+
+ String testNumber = "003";
+
+ String resFile =
+ configuration_.getProperty("baseDir")
+ + datadirectory
+ + configuration_.getProperty("TestClass")
+ + "."
+ + testNumber
+ + ".Res.xml";
+
+ InputStream bis =
+ new ByteArrayInputStream(
+ ("<data:Document xmlns:data=\"http://uri.data.org\">"
+ + readFile(configuration_.getProperty("baseDir") + "resources/documents/testSimple.txt")
+ + "</data:Document>")
+ .getBytes());
+
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ //Dokument Parsen
+ Document reqDoc = builder.parse(bis);
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ String xPath_Pos = "/node()";
+ //XPAth-Präfixe deklarieren
+ String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\"";
+ Position pos = new Position(xPath_Pos, xPath_Prefix, 0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc, pos, "signature-1-1");
+ cpkcs.setCanoncialization(1);
+ cpkcs.createReference(
+ false,
+ configuration_.getProperty("webbaseDir") + "resources/documents/testSimple.txt",
+ "reference-1-1");
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output =
+ makeOutputFile(
+ doc,
+ "<data:Document xmlns:data=\"http://uri.data.org\">",
+ cutXML(readFile(configuration_.getProperty("baseDir") + "resources/documents/testSimple.txt"))
+ + "</data:Document>");
+
+ writeFile(resFile, output);
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public void create004() throws Exception
+ {
+
+ String testNumber = "004";
+
+ String resFile =
+ configuration_.getProperty("baseDir")
+ + datadirectory
+ + configuration_.getProperty("TestClass")
+ + "."
+ + testNumber
+ + ".Res.xml";
+
+ InputStream bis =
+ new ByteArrayInputStream(
+ ("<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://anywhere.org/testDocument.schema.xsd\">Dies sind Testdaten</data:Document>")
+ .getBytes());
+
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ factory.setValidating(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+
+ Map m = new HashMap();
+ m.put(
+ "http://anywhere.org/testDocument.schema.xsd",
+ new ByteArrayInputStream(
+ ("<xsd:schema targetNamespace=\"http://uri.data.org\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://uri.data.org\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" id=\"tollesSchema\">"
+ + "<xsd:element name=\"Document\">"
+ + "<xsd:complexType mixed=\"true\">"
+ + "<xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">"
+ + "<xsd:any namespace=\"##any\" processContents=\"lax\"/>"
+ + "</xsd:sequence>"
+ + "<xsd:attribute name=\"attr\" type=\"xsd:ID\" use=\"required\"/>"
+ + "</xsd:complexType>"
+ + "</xsd:element></xsd:schema>")
+ .getBytes()));
+
+ EntityResolverChain chain = new EntityResolverChain();
+ chain.addEntityResolver(new StreamEntityResolver(m));
+ chain.addEntityResolver(new MOAEntityResolver());
+ builder.setEntityResolver(chain);
+
+ //Dokument Parsen
+ Document reqDoc =
+ DOMUtils.parseDocument(bis, true, Constants.ALL_SCHEMA_LOCATIONS, null, chain, new MOAErrorHandler());
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+
+ //Position für die Signatur angeben
+ String xPath_Pos = "//data:Document";
+
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "data http://uri.data.org";
+
+ Position pos = new Position(xPath_Pos, xPath_Prefix, 0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc, pos, "signature-1-1");
+ cpkcs.setCanoncialization(1);
+
+ //Enveloped Transformation
+ Transform[] tr = new Transform[1];
+ TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI("#document"), tr, "reference-1-1");
+
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+
+ String output =
+ makeOutputFile(
+ doc,
+ "<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://anywhere.org/testDocument.schema.xsd\">",
+ readFile(configuration_.getProperty("baseDir") + "resources/documents/testSimple.txt")
+ + "</data:Document>");
+
+ writeFile(resFile, output);
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public void create005() throws Exception
+ {
+
+ String testNumber = "005";
+ String resFile =
+ configuration_.getProperty("baseDir")
+ + datadirectory
+ + configuration_.getProperty("TestClass")
+ + "."
+ + testNumber
+ + ".Res.xml";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature-1-1");
+ cpkcs.setCanoncialization(1);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ URL u = new URL(configuration_.getProperty("webbaseDir") + "resources/stylesheets/ref.book.notavailable.xsl");
+ URLConnection hu = u.openConnection();
+
+ trans.setStyleSheet(
+ hu.getInputStream(),
+ new URI(configuration_.getProperty("webbaseDir") + "resources/stylesheets/ref.book.notavailable.xsl"));
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(
+ new URI(configuration_.getProperty("webbaseDir") + "resources/documents/bookData.xml"),
+ tr,
+ "reference-1-1");
+
+ cpkcs.setKeyInformation(1);
+
+ Document doc = cpkcs.returnSig();
+ String output = makeOutputFile(doc);
+ writeFile(resFile, output);
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public void writeFile(String filename, String data) throws Exception
+ {
+ BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
+ bw.write(data);
+ bw.close();
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ private String makeOutputFile(Document signatureDoc) throws Exception
+ {
+ ArrayList foundNodes = new ArrayList();
+ findNode(signatureDoc.getDocumentElement(), "dsig:Signature", foundNodes);
+
+ Node outputNode = null;
+
+ if (foundNodes.size() > 0)
+ {
+ outputNode = (Node) foundNodes.get(0);
+ }
+
+ String erg = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ int pos = erg.indexOf("<dsig");
+ erg = erg.substring(pos);
+
+ // insert the dsig:signature element in a MOA Response Message
+ erg =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<CreateXMLSignatureResponse\n"
+ + " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"
+ + " >"
+ +
+ //" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\">\n"+
+ "<SignatureEnvironment>" + erg + "</SignatureEnvironment></CreateXMLSignatureResponse>";
+
+ return erg;
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ private String makeOutputFile(Document signatureDoc, Document signatureDoc2) throws Exception
+ {
+ ArrayList foundNodes = new ArrayList();
+ findNode(signatureDoc.getDocumentElement(), "dsig:Signature", foundNodes);
+
+ Node outputNode = null;
+
+ if (foundNodes.size() > 0)
+ {
+ outputNode = (Node) foundNodes.get(0);
+ }
+
+ String erg = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ int pos = erg.indexOf("<dsig");
+ erg = erg.substring(pos);
+
+ foundNodes.clear();
+ findNode(signatureDoc2.getDocumentElement(), "dsig:Signature", foundNodes);
+
+ outputNode = null;
+
+ if (foundNodes.size() > 0)
+ {
+ outputNode = (Node) foundNodes.get(0);
+ }
+
+ String erg2 = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ pos = erg2.indexOf("<dsig");
+ erg2 = erg2.substring(pos);
+
+ // insert the dsig:signature element in a MOA Response Message
+ erg =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<CreateXMLSignatureResponse\n"
+ + " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"
+ + " >"
+ + "<SignatureEnvironment>"
+ + erg
+ + "</SignatureEnvironment><SignatureEnvironment>"
+ + erg2
+ + "</SignatureEnvironment> </CreateXMLSignatureResponse>";
+
+ //erg = replaceString(erg,"Id=\"signature-1-1\"","Id=\"signature-2-1\"");
+ //erg = replaceString(erg,"Id=\"reference-1-1\"","Id=\"reference-2-1\"");
+
+ return erg;
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public String makeOutputFile(Document signatureDoc, String prefix, String suffix) throws Exception
+ {
+ ArrayList foundNodes = new ArrayList();
+ findNode(signatureDoc.getDocumentElement(), "dsig:Signature", foundNodes);
+
+ Node outputNode = null;
+
+ if (foundNodes.size() > 0)
+ {
+ outputNode = (Node) foundNodes.get(0);
+ }
+
+ String erg = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ int pos = erg.indexOf("<dsig");
+ erg = erg.substring(pos);
+
+ // insert the dsig:signature element in a MOA Response Message
+ erg =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<CreateXMLSignatureResponse"
+ + " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\""
+ + " >"
+ +
+ //" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\">"+
+ "<SignatureEnvironment>"
+ + prefix
+ + erg
+ + suffix
+ + "</SignatureEnvironment> </CreateXMLSignatureResponse>";
+
+ return erg;
+ }
+
+}
diff --git a/spss.test/src/testgenerator/TestGeneratorVC0.java b/spss.test/src/testgenerator/TestGeneratorVC0.java
new file mode 100644
index 000000000..f54689875
--- /dev/null
+++ b/spss.test/src/testgenerator/TestGeneratorVC0.java
@@ -0,0 +1,1057 @@
+package testgenerator;
+
+import iaik.asn1.ASN1Object;
+import iaik.asn1.CodingException;
+import iaik.asn1.DerCoder;
+import iaik.asn1.ObjectID;
+import iaik.asn1.structures.AlgorithmID;
+import iaik.asn1.structures.Attribute;
+import iaik.asn1.structures.ChoiceOfTime;
+import iaik.asn1.structures.Name;
+import iaik.cms.CMSException;
+import iaik.cms.ContentInfoStream;
+import iaik.cms.SignedDataStream;
+import iaik.cms.SignerInfo;
+import iaik.security.random.SecRandom;
+import iaik.utils.StreamCopier;
+import iaik.x509.X509Certificate;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.SecureRandom;
+import java.security.Security;
+import java.security.SignatureException;
+
+import sun.misc.BASE64Encoder;
+
+
+/**
+ * @author Administrator
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class TestGeneratorVC0 extends TestCases {
+
+ String datadirectory = "data/VC0/";
+ String datadirectory_l = "data/LVC";
+
+ public String defaultblock =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
+ "<VerifyCMSSignatureRequest xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" Signatories=\"1\">"+
+ "<DateTime>2003-04-04T09:30:47-05:00</DateTime>"+
+ "<CMSSignature><!-- insert data --></CMSSignature>"+
+ "<DataObject>"+
+ "<MetaInfo>"+
+ "<MimeType>text/plain</MimeType>"+
+ "<Description>anyURI</Description>"+
+ "</MetaInfo>"+
+ "<Content>"+
+ "<Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg0KMi4gWmVpbGUNCjMuIFplaWxlDQphdXM=</Base64Content>"+
+ "</Content>"+
+ "</DataObject>"+
+ "<TrustProfileID>TrustProfile1</TrustProfileID>"+
+ "</VerifyCMSSignatureRequest>";
+
+ public String defaultresponse =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
+ "<VerifyCMSSignatureResponse xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" >"+
+ "<SignerInfo>"+
+ "<dsig:X509Data xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+
+ "<dsig:X509SubjectName><!-- subn --></dsig:X509SubjectName>"+
+ "<dsig:X509IssuerSerial>"+
+ "<dsig:X509IssuerName><!-- in --></dsig:X509IssuerName>"+
+ "<dsig:X509SerialNumber><!-- sn --></dsig:X509SerialNumber>"+
+ "</dsig:X509IssuerSerial>"+
+ "<dsig:X509Certificate><!-- cert --></dsig:X509Certificate>"+
+ "<!-- cert2 -->"+
+ "</dsig:X509Data>"+
+ "</SignerInfo>"+
+ "<SignatureCheck>"+
+ "<Code><!-- sc_code --></Code>"+
+ "</SignatureCheck>"+
+ "<CertificateCheck>"+
+ "<Code><!-- cc_code --></Code>"+
+ "</CertificateCheck>"+
+ "</VerifyCMSSignatureResponse>";
+
+ public String defaultresponse2 =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
+ "<VerifyCMSSignatureResponse xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" >"+
+ "<SignerInfo>"+
+ "<dsig:X509Data xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+
+ "<dsig:X509SubjectName><!-- subn --></dsig:X509SubjectName>"+
+ "<dsig:X509IssuerSerial>"+
+ "<dsig:X509IssuerName><!-- in --></dsig:X509IssuerName>"+
+ "<dsig:X509SerialNumber><!-- sn --></dsig:X509SerialNumber>"+
+ "</dsig:X509IssuerSerial>"+
+ "<dsig:X509Certificate><!-- cert --></dsig:X509Certificate>"+
+ "</dsig:X509Data>"+
+ "</SignerInfo>"+
+ "<SignatureCheck>"+
+ "<Code><!-- sc_code --></Code>"+
+ "</SignatureCheck>"+
+ "<CertificateCheck>"+
+ "<Code><!-- cc_code --></Code>"+
+ "</CertificateCheck>"+
+ "<SignerInfo>"+
+ "<dsig:X509Data xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+
+ "<dsig:X509SubjectName><!-- subn --></dsig:X509SubjectName>"+
+ "<dsig:X509IssuerSerial>"+
+ "<dsig:X509IssuerName><!-- in --></dsig:X509IssuerName>"+
+ "<dsig:X509SerialNumber><!-- sn --></dsig:X509SerialNumber>"+
+ "</dsig:X509IssuerSerial>"+
+ "<dsig:X509Certificate><!-- cert --></dsig:X509Certificate>"+
+ "</dsig:X509Data>"+
+ "</SignerInfo>"+
+ "<SignatureCheck>"+
+ "<Code><!-- sc_code --></Code>"+
+ "</SignatureCheck>"+
+ "<CertificateCheck>"+
+ "<Code><!-- cc_code --></Code>"+
+ "</CertificateCheck>"+
+ "</VerifyCMSSignatureResponse>";
+
+ /*
+ <!-- in -->
+ <!-- sn -->
+ <!-- subn -->
+ <!-- sc_code -->
+ <!-- cc_code -->
+ */
+
+ public String b64_der_data = null;
+ public String b64_der_data_two = null;
+ public String b64_der_data_exp = null;
+ public String b64_der_data_exp_two = null;
+ public String b64_der_data_max = null;
+
+ public String b64_der_data_1kb = null;
+ public String b64_der_data_10kb = null;
+ public String b64_der_data_100kb = null;
+ public String b64_der_data_1mb = null;
+ public String b64_der_data_10mb = null;
+
+ public String cert_file_data = null;
+ public String cert_max_file_data = null;
+ public String cert_root_file_data = null;
+
+
+ public String fileprefix = null;
+ public String filesuffix = null;
+
+ // signing certificate of user 2
+ X509Certificate user2_sign;
+ // signing private key of user 2
+ PrivateKey user2_sign_pk;
+
+ // encryption certificate of user 2
+ X509Certificate user2_crypt;
+ // encryption private key of user 2
+ PrivateKey user2_crypt_pk;
+ // a certificate chain containing the user certs + CA
+
+ X509Certificate[] certificates;
+ // secure random number generator
+ SecureRandom random;
+
+ public TestGeneratorVC0() throws Exception
+ {
+ super();
+ // Set config properties
+ configuration_.setProperty("TestClass", "TestGeneratorVC0");
+
+
+ configuration_.setProperty(
+ "PKCS12file_maxmustermann",
+ (configuration_.getProperty("baseDir") + "/resources/Max_Mustermann (max).p12"));
+
+ configuration_.setProperty("PKCS12password_maxmustermann", "max");
+
+ configuration_.setProperty(
+ "CERT_maxmustermann",
+ (configuration_.getProperty("baseDir") + "resources/Max_Mustermann.cer"));
+
+ configuration_.setProperty(
+ "CERT_ROOT",
+ (configuration_.getProperty("baseDir") + "resources/IAIKRootMusterbehoerde.cer"));
+
+ Provider [] list = Security.getProviders();
+ for(int counter=0;counter<list.length;counter++)
+ {
+ System.out.println(list[counter].getName());
+ }
+
+ iaik.security.provider.IAIK.addAsProvider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+
+ X509Certificate[] certs = CMSKeyStore.getCertificateChain(CMSKeyStore.RSA, CMSKeyStore.SZ_1024_SIGN);
+ user2_sign = CMSKeyStore.getCertificateChain(CMSKeyStore.RSA, CMSKeyStore.SZ_2048_SIGN)[0];
+ user2_sign_pk = CMSKeyStore.getPrivateKey(CMSKeyStore.RSA, CMSKeyStore.SZ_2048_SIGN);
+ certificates = new X509Certificate[certs.length+1];
+ System.arraycopy(certs, 0, certificates, 0, certs.length);
+ certificates[certs.length] = user2_sign;
+
+ // encryption certs
+ user2_crypt = CMSKeyStore.getCertificateChain(CMSKeyStore.RSA, CMSKeyStore.SZ_2048_CRYPT)[0];
+ user2_crypt_pk = CMSKeyStore.getPrivateKey(CMSKeyStore.RSA, CMSKeyStore.SZ_2048_CRYPT);
+
+ random = SecRandom.getDefault();
+
+ byte[] received_message = null;
+ ASN1Object obj = null;
+
+ String m = readFile(configuration_.getProperty("baseDir")+"resources/testDaten.txt");
+ //String m = "This is a message";
+ System.out.println("*"+m+"*");
+ byte[] message = m.getBytes();
+
+ System.out.println("Implicit SignedData demo [create]:");
+ obj = createSignedCMSData(message, SignedDataStream.IMPLICIT,false);
+ byte[] sig = DerCoder.encode(obj);
+ writeFileBinary("testimpl.ber",sig);
+ b64_der_data = (new BASE64Encoder()).encode(sig);
+
+ obj = createSignedCMSData(message, SignedDataStream.IMPLICIT,true);
+ sig = DerCoder.encode(obj);
+ writeFileBinary("testimpl2.ber",sig);
+ b64_der_data_two = (new BASE64Encoder()).encode(sig);
+
+ obj = createSignedCMSData(message, SignedDataStream.EXPLICIT,false);
+ sig = DerCoder.encode(obj);
+ writeFileBinary("testexp.ber",sig);
+ b64_der_data_exp = (new BASE64Encoder()).encode(sig);
+
+ String output = getSignedDataStream(sig,message,false);
+ System.out.println("Output:"+output);
+
+ obj = createSignedCMSData(message, SignedDataStream.EXPLICIT,true);
+ sig = DerCoder.encode(obj);
+ writeFileBinary("testexp2.ber",sig);
+ b64_der_data_exp_two = (new BASE64Encoder()).encode(sig);
+
+ cert_file_data = readBinaryFileAsBase64_new(configuration_.getProperty("CERT"));
+ cert_max_file_data = readBinaryFileAsBase64_new(configuration_.getProperty("CERT_maxmustermann"));
+ cert_root_file_data = readBinaryFileAsBase64_new(configuration_.getProperty("CERT_ROOT"));
+
+ // transmit data
+ /*System.out.println("Implicit SignedData demo [parse]:");
+ received_message = getSignedData(obj, null,true);
+ System.out.print("Signed content: ");
+ System.out.println(new String(received_message));*/
+
+ //readBinaryFileAsBase64(configuration_.getProperty("baseDir")+"resources/testDaten.txt");
+ }
+
+ public String getCMSData(String filename) throws Exception
+ {
+ ASN1Object obj = null;
+ obj = createSignedCMSData(readFile(configuration_.getProperty("baseDir") + "resources/"+filename+".txt").getBytes(), SignedDataStream.EXPLICIT,true);
+ byte[] sig = DerCoder.encode(obj);
+ //writeFileBinary("testexp2.ber",sig);
+ return (new BASE64Encoder()).encode(sig);
+ }
+
+ public String getSignedDataStream(byte[] signedData, byte[] message,boolean two_users) throws CMSException, IOException {
+
+ // we are testing the stream interface
+ ByteArrayInputStream is = new ByteArrayInputStream(signedData);
+ // create the ContentInfo object
+ ContentInfoStream cis = new ContentInfoStream(is);
+ System.out.println("This ContentInfo holds content of type " + cis.getContentType().getName());
+ SignedDataStream signed_data = null;
+
+ if (message == null) {
+ // implicitly signed; get the content
+ signed_data = (SignedDataStream)cis.getContent();
+ }
+ else {
+ // explicitly signed; set the data stream for digesting the message
+ AlgorithmID[] algIDs = { AlgorithmID.sha1, AlgorithmID.md5 };
+ signed_data = new SignedDataStream(new ByteArrayInputStream(message), algIDs);
+
+ }
+
+ // get an InputStream for reading the signed content
+ InputStream data = signed_data.getInputStream();
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ StreamCopier sc = new StreamCopier(data, os);
+ sc.copyStream();
+
+
+ if (message != null) {
+ // if explicitly signed read now the DER encoded object
+ // an explicit S/MIME signed message also consits of message|signature
+ signed_data.decode(cis.getContentInputStream());
+ }
+
+ System.out.println("SignedData contains the following signer information:");
+ SignerInfo[] signer_infos = signed_data.getSignerInfos();
+
+ for (int i=0; i<signer_infos.length; i++) {
+ try {
+ // verify the signed data using the SignerInfo at index i
+ X509Certificate signer_cert = signed_data.verify(i);
+ // if the signature is OK the certificate of the signer is returned
+ System.out.println("Signature OK from signer: "+signer_cert.getSubjectDN());
+ Attribute signingTime = signer_infos[i].getSignedAttribute(ObjectID.signingTime);
+ if (signingTime != null) {
+ ChoiceOfTime cot = new ChoiceOfTime(signingTime.getValue()[0]);
+ System.out.println("This message has been signed at " + cot.getDate());
+ }
+ Attribute contentType = signer_infos[i].getSignedAttribute(ObjectID.contentType);
+ if (contentType != null) {
+ System.out.println("The content has CMS content type " + contentType.getValue()[0]);
+ }
+
+ } catch (SignatureException ex) {
+ // if the signature is not OK a SignatureException is thrown
+ System.out.println("Signature ERROR from signer: "+signed_data.getCertificate((signer_infos[i].getSignerIdentifier())).getSubjectDN());
+ } catch (CodingException ex) {
+ System.out.println("Attribute decoding error: " + ex.getMessage());
+ }
+ }
+ // now check alternative signature verification
+ System.out.println("Now check the signature assuming that no certs have been included:");
+ try {
+ SignerInfo signer_info = signed_data.verify(user1_sign);
+ // if the signature is OK the certificate of the signer is returned
+ System.out.println("Signature OK from signer: "+signed_data.getCertificate(signer_info.getSignerIdentifier()).getSubjectDN());
+
+ } catch (SignatureException ex) {
+ // if the signature is not OK a SignatureException is thrown
+ System.out.println("Signature ERROR from signer: "+user1_sign.getSubjectDN());
+ }
+
+ if(two_users)
+ try {
+ SignerInfo signer_info = signed_data.verify(user2_sign);
+ // if the signature is OK the certificate of the signer is returned
+ System.out.println("Signature OK from signer: "+signed_data.getCertificate(signer_info.getSignerIdentifier()).getSubjectDN());
+
+ } catch (SignatureException ex) {
+ // if the signature is not OK a SignatureException is thrown
+ System.out.println("Signature ERROR from signer: "+user2_sign.getSubjectDN());
+ }
+
+
+ return os.toString();
+ }
+
+ public void createConfig() throws Exception {
+
+ String file = configuration_.getProperty("baseDir") + datadirectory +
+ configuration_.getProperty("TestClass") +
+ ".Config.xml";
+ String config =
+
+ "<MOAConfiguration xmlns=\"http://reference.e-government.gv.at/namespace/moaconfig/20021122#\">"+
+ " <KeyGroup id=\"PKCS12RSAKey1\"> <Key id=\"resources/test-ee2003_normal(buergerkarte).p12\"/> </KeyGroup>"+
+ " <KeyGroup id=\"PKCS12RSAKeyExpired\"> <Key id=\"sicher-demo(buergerkarte).p12\"/> </KeyGroup>"+
+ " <KeyGroup id=\"PKCS12ECDSAKey1\"> <Key id=\"ecc.p12\"/> </KeyGroup> "+
+ " <KeyGroup id=\"HSMRSAKey1\"> <Key id=\"???\"/> </KeyGroup>"+
+ " <KeyGroup id=\"HSMECDSAKey1\"> <Key id=\"???\"/> </KeyGroup>"+
+ " <DigestMethodAlgorithm name=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+
+ " <SignatureAlgorithm name=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>"+
+ " <CanonicalizationAlgorithm name=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>"+
+ " <CreateSignatureEnvironmentProfile id=\"CreateSignatureEnvironmentProfile1\" filename=\""+"file:/"+configuration_.getProperty("baseDir")+"resources/csep.xml\"/>"+
+ " <TrustProfile id=\"validTrustProfileID1\" uri=\""+"file:/"+configuration_.getProperty("baseDir")+"TrustProfile1/\"/>"+
+ "</MOAConfiguration>";
+
+ FileOutputStream fos = new FileOutputStream(file);
+ fos.write(config.getBytes());
+ fos.flush();
+ fos.close();
+
+ fileprefix = configuration_.getProperty("baseDir")+ datadirectory + configuration_.getProperty("TestClass") + ".";
+ filesuffix = ".xml";
+
+ }
+
+ public static void main(String[] args) throws Exception {
+ TestGeneratorVC0 testcase = new TestGeneratorVC0();
+
+ testcase.createConfig();
+ testcase.create001();
+ testcase.create002();
+ testcase.create003();
+ testcase.create004();
+ testcase.create005();
+ testcase.create006();
+ testcase.create007();
+ testcase.create008();
+ testcase.create009();
+ testcase.create010();
+ //testcase.create011();
+ testcase.create012();
+
+ testcase.create051();
+ testcase.create052();
+ //testcase.create053();
+ testcase.create054();
+ testcase.create055();
+ testcase.create056();
+ testcase.create057();
+ testcase.create058();
+
+ //testcase.createL00();
+
+ }
+
+ public void createL00() throws Exception {
+ createL001("1kb");
+ createL001("10kb");
+ createL001("20kb");
+ createL001("50kb");
+ createL001("100kb");
+ createL001("500kb");
+ createL001("1mb");
+ createL001("10mb");
+ }
+
+ public void createL001(String filename) throws Exception
+ {
+ String TestNumber = "001";
+
+ String reqFile = configuration_.getProperty("baseDir")+ datadirectory_l+filename+"/" + configuration_.getProperty("TestClass") + "." + TestNumber + ".Req.xml";
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",getCMSData(filename));
+ req = replaceString(req,"<Content>","<Content Reference=\"anyURI\">");
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/"+filename+".txt");
+ req = replaceString(req,
+ "<Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg0KMi4gWmVpbGUNCjMuIFplaWxlDQphdXM=</Base64Content>",
+ "");
+
+ writeFile(reqFile,req);
+
+ String resFile = configuration_.getProperty("baseDir")+ datadirectory_l+filename+"/" + configuration_.getProperty("TestClass") + "." + TestNumber + ".Res.xml";
+
+ String res = replaceString(defaultresponse,"<!-- in -->",this.X509name);
+ res = replaceString(res,"<!-- sn -->",this.X509number.toString());
+ res = replaceString(res,"<!-- subn -->",this.X509sub);
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+ //res = replaceString(res,"<dsig:X509Certificate><!-- cert --></dsig:X509Certificate>","");
+
+
+ writeFile(resFile,res);
+
+
+ }
+
+ public void create001() throws Exception
+ {
+ String TestNumber = "001";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ /*CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,"file:/"+configuration_.getProperty("baseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc,"<data:Document xmlns:data=\"uri.data.org\">",readFile(configuration_.getProperty("baseDir")+"resources/testDaten.txt")+"</data:Document>");
+
+ writeFile(resFile, output);*/
+
+ String res = replaceString(defaultresponse,"<!-- in -->",this.X509name);
+ res = replaceString(res,"<!-- sn -->",this.X509number.toString());
+ res = replaceString(res,"<!-- subn -->",this.X509sub);
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+ //res = replaceString(res,"<dsig:X509Certificate><!-- cert --></dsig:X509Certificate>","");
+
+
+ writeFile(resFile,res);
+
+
+ }
+
+ public void create002() throws Exception
+ {
+ String TestNumber = "002";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp_two);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "Signatories=\"1\"",
+ "Signatories=\"1 2\"");
+
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ String res = replaceStringAll(defaultresponse2,"<!-- in -->",this.X509name);
+ res = replaceStringAll(res,"<!-- sn -->",this.X509number.toString());
+ res = replaceStringAll(res,"<!-- subn -->",this.X509sub);
+ res = replaceStringAll(res,"<!-- sc_code -->","0");
+ res = replaceStringAll(res,"<!-- cc_code -->","0");
+ res = replaceStringAll(res,"<!-- cert -->",cert_file_data);
+ //res = replaceString(res,"<!-- cert2 -->","");
+ writeFile(resFile,res);
+ }
+
+ public void create003() throws Exception
+ {
+ String TestNumber = "003";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "Signatories=\"1\"",
+ "Signatories=\"all\"");
+
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ String res = replaceString(defaultresponse,"<!-- in -->",this.X509name);
+ res = replaceString(res,"<!-- sn -->",this.X509number.toString());
+ res = replaceString(res,"<!-- subn -->",this.X509sub);
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+ writeFile(resFile,res);
+ }
+
+ public void create004() throws Exception
+ {
+ String TestNumber = "004";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "<DateTime>2003-04-04T09:30:47-05:00</DateTime>",
+ "");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ String res = replaceString(defaultresponse,"<!-- in -->",this.X509name);
+ res = replaceString(res,"<!-- sn -->",this.X509number.toString());
+ res = replaceString(res,"<!-- subn -->",this.X509sub);
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+ writeFile(resFile,res);
+ }
+
+ public void create005() throws Exception
+ {
+ String TestNumber = "005";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "<DateTime>2003-04-04T09:30:47-05:00</DateTime>",
+ "<DateTime>2003-04-04T09:30:47-05:00</DateTime>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ String res = replaceString(defaultresponse,"<!-- in -->",this.X509name);
+ res = replaceString(res,"<!-- sn -->",this.X509number.toString());
+ res = replaceString(res,"<!-- subn -->",this.X509sub);
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+ writeFile(resFile,res);
+ }
+
+ public void create006() throws Exception
+ {
+ String TestNumber = "006";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "<DataObject>"+
+ "<MetaInfo>"+
+ "<MimeType>text/plain</MimeType>"+
+ "<Description>"+configuration_.getProperty("webbaseDir") + "resources/testDaten.txt</Description>"+
+ "</MetaInfo>"+
+ "<Content>"+
+ "<Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg0KMi4gWmVpbGUNCjMuIFplaWxlDQphdXM=</Base64Content>"+
+ "</Content>"+
+ "</DataObject>",
+ "");
+
+ //req = replaceString(defaultblock,
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ String res = replaceString(defaultresponse,"<!-- in -->",this.X509name);
+ res = replaceString(res,"<!-- sn -->",this.X509number.toString());
+ res = replaceString(res,"<!-- subn -->",this.X509sub);
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+ writeFile(resFile,res);
+ }
+
+ public void create007() throws Exception
+ {
+ String TestNumber = "007";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "<MetaInfo>"+
+ "<MimeType>text/plain</MimeType>"+
+ "<Description>"+configuration_.getProperty("webbaseDir") + "resources/testDaten.txt</Description>"+
+ "</MetaInfo>",
+ "");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ String res = replaceString(defaultresponse,"<!-- in -->",this.X509name);
+ res = replaceString(res,"<!-- sn -->",this.X509number.toString());
+ res = replaceString(res,"<!-- subn -->",this.X509sub);
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+ writeFile(resFile,res);
+ }
+
+ public void create008() throws Exception
+ {
+ String TestNumber = "008";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ String res = replaceString(defaultresponse,"<!-- in -->",this.X509name);
+ res = replaceString(res,"<!-- sn -->",this.X509number.toString());
+ res = replaceString(res,"<!-- subn -->",this.X509sub);
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+ writeFile(resFile,res);
+ }
+
+ public void create009() throws Exception
+ {
+ String TestNumber = "009";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceString(req,"<Content>","<Content Reference=\"anyURI\">");
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "<Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg0KMi4gWmVpbGUNCjMuIFplaWxlDQphdXM=</Base64Content>",
+ "");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ String res = replaceString(defaultresponse,"<!-- in -->",this.X509name);
+ res = replaceString(res,"<!-- sn -->",this.X509number.toString());
+ res = replaceString(res,"<!-- subn -->",this.X509sub);
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+ writeFile(resFile,res);
+ }
+
+ public void create011() throws Exception
+ {
+ String TestNumber = "011";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",readFile(configuration_.getProperty("baseDir") + "resources/VC0.011.cms.ber.b64.txt"));
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "<DataObject>"+
+ "<MetaInfo>"+
+ "<MimeType>text/plain</MimeType>"+
+ "<Description>"+configuration_.getProperty("webbaseDir") + "resources/testDaten.txt</Description>"+
+ "</MetaInfo>"+
+ "<Content>"+
+ "<Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg0KMi4gWmVpbGUNCjMuIFplaWxlDQphdXM=</Base64Content>"+
+ "</Content>"+
+ "</DataObject>",
+ "");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ String res = replaceString(defaultresponse,"<!-- in -->","CN=a-sign-TEST-Premium-Enc-01,OU=a-sign-TEST-Premium-Enc-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT");
+ res = replaceString(res,"<!-- sn -->","6455");
+ res = replaceString(res,"<!-- subn -->","Seriennummer=790187461633,G=Testperson MOA4,SN=BRZ,CN=Testperson MOA4 BRZ,C=AT");
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+ res = replaceString(res,
+ "</dsig:X509Data>",
+ "<sl11:QualifiedCertificate xmlns:sl11=\"http://www.buergerkarte.at/namespaces/securitylayer/20020831#\"/>"+
+ "</dsig:X509Data>");
+
+
+ writeFile(resFile,res);
+ }
+
+ public void create012() throws Exception
+ {
+ String TestNumber = "012";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ BufferedInputStream bis = new BufferedInputStream(new FileInputStream(configuration_.getProperty("CERT_maxmustermann")));
+ iaik.x509.X509Certificate cert = new iaik.x509.X509Certificate(bis);
+ X509name = ((Name)(cert.getIssuerDN())).getRFC2253String();
+ X509number = cert.getSerialNumber();
+ X509hash = new String(cert.getFingerprintSHA());
+ X509sub = ((Name)(cert.getSubjectDN())).getRFC2253String();
+
+ String m = "This is a message";
+ System.out.println("*"+m+"*");
+ byte[] message = m.getBytes();
+
+ ASN1Object obj = null;
+ obj = createSignedCMSData(message, SignedDataStream.IMPLICIT,false,"PKCS12file_maxmustermann","PKCS12password_maxmustermann","CERT_maxmustermann");
+ byte[] sig = DerCoder.encode(obj);
+ writeFileBinary("testimplmax.ber",sig);
+ b64_der_data_max = (new BASE64Encoder()).encode(sig);
+
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_max);
+
+ req = replaceString(req,
+ "<DataObject>"+
+ "<MetaInfo>"+
+ "<MimeType>text/plain</MimeType>"+
+ "<Description>anyURI</Description>"+
+ "</MetaInfo>"+
+ "<Content>"+
+ "<Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg0KMi4gWmVpbGUNCjMuIFplaWxlDQphdXM=</Base64Content>"+
+ "</Content>"+
+ "</DataObject>",
+ "");
+
+ //req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ /*CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,"file:/"+configuration_.getProperty("baseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+ Document doc = cpkcs.returnSig();
+
+ String output = makeOutputFile(doc,"<data:Document xmlns:data=\"uri.data.org\">",readFile(configuration_.getProperty("baseDir")+"resources/testDaten.txt")+"</data:Document>");
+
+ writeFile(resFile, output);*/
+
+
+ String res = replaceString(defaultresponse,"<!-- in -->",X509name);
+ res = replaceString(res,"<!-- sn -->",X509number.toString());
+ res = replaceString(res,"<!-- subn -->",X509sub);
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_max_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+ res = replaceString(res,
+ "</dsig:X509Data>",
+ "<PublicAuthority>"+
+ "<Code>Musterbehörde</Code>"+
+ //"<Code>Musterbehörde</Code>"+
+ "</PublicAuthority>"+
+ "</dsig:X509Data>");
+
+
+ writeFile(resFile,res);
+
+
+ }
+
+ public void create051() throws Exception
+ {
+ String TestNumber = "051";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "Signatories=\"1\"",
+ "Signatories=\"0\"");
+
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"1100");
+ }
+
+ public void create052() throws Exception
+ {
+ String TestNumber = "052";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "Signatories=\"1\"",
+ "Signatories=\"10\"");
+
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2249");
+ }
+
+ public void create053() throws Exception
+ {
+ String TestNumber = "053";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "<DateTime>2003-04-04T09:30:47-05:00</DateTime>",
+ "<DateTime>"+getDate(1*34*24)+"</DateTime>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"0000");
+ }
+
+ public void create054() throws Exception
+ {
+ String TestNumber = "054";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,
+ "<CMSSignature><!-- insert data --></CMSSignature>",
+ "<CMSSignature>this is no Base64 Data</CMSSignature>");
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"1100");
+
+ }
+
+ public void create055() throws Exception
+ {
+ String TestNumber = "055";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "<DataObject>"+
+ "<MetaInfo>"+
+ "<MimeType>text/plain</MimeType>"+
+ "<Description>"+configuration_.getProperty("webbaseDir") + "resources/testDaten.txt</Description>"+
+ "</MetaInfo>"+
+ "<Content>"+
+ "<Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg0KMi4gWmVpbGUNCjMuIFplaWxlDQphdXM=</Base64Content>"+
+ "</Content>"+
+ "</DataObject>",
+ "");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2248");
+
+ }
+
+
+
+ public void create010() throws Exception
+ {
+ String TestNumber = "010";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceString(req,"<Content>","<Content Reference=\"anyURI\">");
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "<Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg0KMi4gWmVpbGUNCjMuIFplaWxlDQphdXM=</Base64Content>",
+ "");
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".Res"+filesuffix;
+
+ String res = replaceString(defaultresponse,"<!-- in -->",this.X509name);
+ res = replaceString(res,"<!-- sn -->",this.X509number.toString());
+ res = replaceString(res,"<!-- subn -->",this.X509sub);
+ res = replaceString(res,"<!-- sc_code -->","0");
+ res = replaceString(res,"<!-- cc_code -->","0");
+ res = replaceString(res,"<!-- cert -->",cert_file_data);
+ res = replaceString(res,"<!-- cert2 -->","");
+
+ writeFile(resFile,res);
+
+ }
+
+ public void create056() throws Exception
+ {
+ String TestNumber = "056";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+ req = replaceString(req,
+ "<TrustProfileID>TrustProfile1</TrustProfileID>",
+ "<TrustProfileID>notvalidTrustProfileID</TrustProfileID>");
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2203");
+
+ }
+
+
+ public void create057() throws Exception
+ {
+ String TestNumber = "057";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+
+ configuration_.setProperty(
+ "PKCS12file_maxmustermann",
+ (configuration_.getProperty("baseDir") + "/resources/Max_Mustermann (max).p12"));
+
+ configuration_.setProperty("PKCS12password_maxmustermann", "max");
+
+ configuration_.setProperty(
+ "CERT_maxmustermann",
+ (configuration_.getProperty("baseDir") + "resources/Max_Mustermann.cer"));
+
+ BufferedInputStream bis = new BufferedInputStream(new FileInputStream(configuration_.getProperty("CERT_maxmustermann")));
+ iaik.x509.X509Certificate cert = new iaik.x509.X509Certificate(bis);
+ X509name = ((Name)(cert.getIssuerDN())).getRFC2253String();
+ X509number = cert.getSerialNumber();
+ X509hash = new String(cert.getFingerprintSHA());
+ X509sub = ((Name)(cert.getSubjectDN())).getRFC2253String();
+
+ String m = "This is a message";
+ System.out.println("*"+m+"*");
+ byte[] message = m.getBytes();
+
+ ASN1Object obj = null;
+ obj = createSignedCMSData(message, SignedDataStream.IMPLICIT,false,"PKCS12file_maxmustermann","PKCS12password_maxmustermann","CERT_maxmustermann");
+ byte[] sig = DerCoder.encode(obj);
+ writeFileBinary("testimplmax.ber",sig);
+ b64_der_data_max = (new BASE64Encoder()).encode(sig);
+
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_max);
+
+ /*req = replaceString(req,
+ " <DataObject>"+
+ " <MetaInfo>"+
+ " <MimeType>text/plain</MimeType>"+
+ " <Description>anyURI</Description>"+
+ " </MetaInfo>"+
+ " <Content Reference=\"anyURI\">"+
+ " <Base64Content>RGllcyBzaW5kIFRlc3RkYXRlbg0KMi4gWmVpbGUNCjMuIFplaWxlDQphdXM=</Base64Content>"+
+ " </Content>"+
+ " </DataObject>",
+ "");*/
+
+ //req = replaceString(req,"Reference=\"anyURI\"","");
+
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+
+
+
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"2248");
+
+
+ }
+
+ public void create058() throws Exception
+ {
+ String TestNumber = "058";
+ String reqFile = fileprefix + TestNumber + ".Req"+filesuffix;
+
+ String req = replaceString(defaultblock,"<!-- insert data -->",b64_der_data_exp);
+ req = replaceStringAll(req,"anyURI",configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+
+ req = replaceString(req,"RGllcyBzaW5kIFRlc3RkYXRlbg0KMi4gWmVpbGUNCjMuIFplaWxlDQphdXM=","RGllcyBzaW5kIFRlc3RkYXRlbg0KMi4gWmVpbGUNCjMuIFplaWxlDQphdXM=()");
+ writeFile(reqFile,req);
+
+ String resFile = fileprefix + TestNumber + ".ErrRes"+filesuffix;
+
+ writeFile(resFile,"1100");
+
+ }
+
+
+
+
+
+
+
+}
diff --git a/spss.test/src/testgenerator/TestGeneratorVX.java b/spss.test/src/testgenerator/TestGeneratorVX.java
new file mode 100644
index 000000000..20ff44a22
--- /dev/null
+++ b/spss.test/src/testgenerator/TestGeneratorVX.java
@@ -0,0 +1,2793 @@
+package testgenerator;
+import iaik.ixsil.algorithms.Transform;
+import iaik.ixsil.algorithms.TransformImplBase64Decode;
+import iaik.ixsil.algorithms.TransformImplCanonicalXML;
+import iaik.ixsil.algorithms.TransformImplCanonicalXMLWithComments;
+import iaik.ixsil.algorithms.TransformImplEnvelopedSignature;
+import iaik.ixsil.algorithms.TransformImplExclusiveCanonicalXML;
+import iaik.ixsil.algorithms.TransformImplExclusiveCanonicalXMLWithComments;
+import iaik.ixsil.algorithms.TransformImplXPath;
+import iaik.ixsil.algorithms.TransformImplXPath2;
+import iaik.ixsil.algorithms.TransformImplXSLT;
+import iaik.ixsil.core.Position;
+import iaik.ixsil.util.URI;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.RandomAccessFile;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.xml.serialize.DOMWriterImpl;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import at.gv.egovernment.moa.util.Base64Utils;
+import at.gv.egovernment.moa.util.Constants;
+import at.gv.egovernment.moa.util.DOMUtils;
+import at.gv.egovernment.moa.util.EntityResolverChain;
+import at.gv.egovernment.moa.util.MOAEntityResolver;
+import at.gv.egovernment.moa.util.MOAErrorHandler;
+import at.gv.egovernment.moa.util.StreamEntityResolver;
+
+/**
+ * @author stephan
+ */
+public class TestGeneratorVX extends TestCases {
+
+ private static final int canAlgCanXML = 1;
+ private static final int canAlgCanXMLwithCom = 2;
+ private static final int canAlgExcXML = 3;
+ private static final int canAlgExcXMLwithCom = 4;
+ private static VXResponseBean vxBean = null;
+
+ public static void main(String[] args) throws Exception {
+
+ vxBean = new VXResponseBean();
+
+ TestGeneratorVX testcase = new TestGeneratorVX();
+ testcase.createVXConfig();
+
+ testcase.create001();
+ testcase.create002();
+ testcase.create003();
+ testcase.create004();
+ testcase.create005();
+ testcase.create006();
+ testcase.create007();
+ testcase.create009();
+ testcase.create008();
+
+ testcase.create101();
+ testcase.create102();
+ testcase.create103();
+ testcase.create104();
+ testcase.create105();
+ testcase.create106();
+
+ testcase.create301();
+ testcase.create302();
+ testcase.create303();
+ testcase.create304();
+ testcase.create305();
+
+ testcase.create307();
+ testcase.create308();
+
+ testcase.create310();
+ testcase.create311();
+ testcase.create312();
+ testcase.create313();
+ testcase.create314();
+ testcase.create314_2();
+ testcase.create315();
+ testcase.create316();
+ testcase.create317();
+ testcase.create318();
+ testcase.create318_2();
+ testcase.create319();
+ testcase.create320();
+ testcase.create320_2();
+ testcase.create321();
+ testcase.create322();
+ testcase.create323();
+ testcase.create324();
+ testcase.create325();
+ testcase.create326();
+ testcase.create327();
+
+ //testcase.createL00();
+
+ }
+
+ /* ==================================================================================================== */
+
+ public TestGeneratorVX() throws Exception {
+
+ super();
+
+ // Set config properties
+ configuration_.setProperty("TestClass", "TestGeneratorVX");
+
+ // configuration_.setProperty("privateKeyFile", baseDir + "additionalFiles/keys/RSAPrivateKey.der");
+ // configuration_.setProperty("publicKeyFile", baseDir + "additionalFiles/keys/RSAPublicKey.der");
+ // configuration_.setProperty("signatureFile", baseDir + "additionalFiles/signatures/Signature.unit1.xml");
+
+ iaik.security.provider.IAIK.addAsProvider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+ }
+
+ /* ==================================================================================================== */
+
+ public void testEcc() throws Exception
+ {
+ Date d = new Date();
+ long start = d.getTime();
+ long initEcc = 0;
+ long timeEcc = 0;
+ long initRSA = 0;
+ long timeRSA = 0;
+
+
+ TestGeneratorVX testcase = new TestGeneratorVX();
+ testcase.ecccreate319();
+ initEcc = (new Date()).getTime() - start;
+ testcase.ecccreate320();
+ testcase.ecccreate321();
+ testcase.ecccreate322();
+ testcase.ecccreate323();
+ testcase.ecccreate324();
+
+ timeEcc = (new Date()).getTime() - start;
+
+ start = (new Date()).getTime();
+
+ testcase = new TestGeneratorVX();
+ testcase.create319();
+ initRSA = (new Date()).getTime() - start;
+ testcase.create320();
+ testcase.create321();
+ testcase.create322();
+ testcase.create323();
+ testcase.create324();
+ timeRSA =(new Date()).getTime() - start;
+
+ System.out.println("=========================================================");
+ System.out.println("=========================================================");
+
+ System.out.println("Init ECC (inkl. 1st Test): "+ (initEcc)+ "ms" );
+ System.out.println("ECC-Tests gesamt: "+ (timeEcc)+ "ms" );
+ System.out.println("ECC-Tests 2-5: "+ (timeEcc-initEcc)+ "ms" );
+ System.out.println("=========================================================");
+ System.out.println("Init RSA (inkl. 1st Test): "+ (initRSA)+ "ms" );
+ System.out.println("RSA-Tests gesamt: "+ (timeRSA)+ "ms" );
+ System.out.println("RSA-Tests 2-5: "+ (timeRSA-initRSA)+ "ms" );
+ System.out.println("=========================================================");
+ }
+
+public void ecccreate319() throws Exception {
+ String testNumber = "ecc319";
+
+
+ // Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); // Create from whole cloth
+//
+ // Element root = (Element) document.createElement("Data");
+ // root.appendChild(document.createTextNode(readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")) );
+// Element root2 = (Element) document.createElement("Element2");
+ // root2.appendChild(document.createTextNode("Some other text") );
+
+ // root.appendChild(root2);
+
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //cpkcs.init();
+ long start = (new Date()).getTime();
+ cpkcs.initECDSA();
+ System.out.println("Init-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start));
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(true,"Dies sind Testdaten");
+ //cpkcs.createReferenceEnvElement(root);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ start = (new Date()).getTime();
+ Document sign = cpkcs.returnSig();
+ System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start));
+
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+
+ /**
+ * Method create320:
+ * The element KeyInfo does NOT contain the X509-certificate but
+ * an URI pointing to an external xml-encoded X509-file
+ * @throws Exception
+ */
+ public void ecccreate320() throws Exception {
+ String testNumber = "ecc320";
+
+ //RetrievalMethdos instead of the integratede Keys
+
+ //URI fileURI = new URI(configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der");
+ URI fileURI = new URI("file:/"+configuration_.getProperty("baseDir") + "resources/X509Data.xml");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
+ //URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+// cpkcs.init();
+
+ cpkcs.initECDSA();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+ long start = (new Date()).getTime();
+ Document sign = cpkcs.returnSig();
+ System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start));
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+
+
+ public void ecccreate321() throws Exception {
+ String testNumber = "ecc321";
+
+ //RetrievalMethdos instead of the integratede Keys
+
+ URI fileURI = new URI("file:/"+configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ // cpkcs.init();
+ cpkcs.initECDSA();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+ long start = (new Date()).getTime();
+ Document sign = cpkcs.returnSig();
+ System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start));
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+
+
+ /**
+ * Method create322.
+ * The reference in the signature points with an xpointer
+ * to the ID of an embedded valid manifest dsig:object
+ * @throws Exception
+ */
+ public void ecccreate322() throws Exception {
+ String testNumber = "ecc322";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ // cpkcs.init();
+ cpkcs.initECDSA();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.createReferenceWithManifest(fileURI1,"manifestObject");
+
+ cpkcs.setKeyInformation();
+ long start = (new Date()).getTime();
+ Document sign = cpkcs.returnSig();
+ System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start));
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+
+ }
+ /**
+ * Method create323:
+ * There are two references in the signature pointing
+ * with xpointer to two embedded valid manifest dsig:objects
+ * @throws Exception
+ */
+ public void ecccreate323() throws Exception {
+ String testNumber = "ecc323";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ // cpkcs.init();
+ cpkcs.initECDSA();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt");
+ cpkcs.createReferenceWithManifest(fileURI1,"manifestObject");
+
+ //HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...???
+
+ cpkcs.createReferenceWithManifest(fileURI2,"manifestObject2");
+ cpkcs.setKeyInformation();
+ long start = (new Date()).getTime();
+ Document sign = cpkcs.returnSig();
+ System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start));
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+
+ }
+ public void ecccreate324() throws Exception {
+ String testNumber = "ecc324";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ // cpkcs.init();
+ cpkcs.initECDSA();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt");
+ cpkcs.createReferencesWithManifest(fileURI1,"manifestObject",fileURI2);
+
+ //HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...???
+ cpkcs.setKeyInformation();
+ long start = (new Date()).getTime();
+ Document sign = cpkcs.returnSig();
+ System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start));
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+
+ }
+
+ public void createL00() throws Exception {
+ createL001("1kb");
+ createL001("10kb");
+ createL001("20kb");
+ createL001("50kb");
+ createL001("100kb");
+ createL001("500kb");
+ createL001("1mb");
+ createL001("10mb");
+ }
+
+ public void createL001(String filename) throws Exception {
+
+ String testNumber = "001";
+
+ //Create a Request with number 001, the current Time (+0 hours)
+ // and with the Date and ReturnHashInputDate Elements present
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/"+filename+".txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(false,false,null));
+
+ writeFile(vxReqFileL(testNumber,filename),request);
+
+
+
+ writeFile(vxResFileL(testNumber,filename), createResponseL(cpkcs.getX509CertString(), testNumber,"0",filename));
+ }
+
+ /**
+ * Method create001.
+ * @throws Exception
+ */
+ /* ===================================================================================================================== */
+ /* ===================================================================================================================== */
+ /* ===================================================================================================================== */
+
+ public void create001() throws Exception {
+
+ String testNumber = "001";
+
+ //Create a Request with number 001, the current Time (+0 hours)
+ // and with the Date and ReturnHashInputDate Elements present
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+
+ /**
+ * Method create002.
+ * @throws Exception
+ */
+ public void create002() throws Exception {
+ String testNumber = "002";
+ //Create a Request with number 002, the current Time (+0 hours)
+ // and without the Date and with ReturnHashInputDate Elements present
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,false,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+
+ /**
+ * Method create003.
+ * @throws Exception
+ */
+ public void create003() throws Exception {
+ String testNumber = "003";
+ //Create a Request with number 003, the Time one Day in the past (-24 hours)
+ // and with the Date and with ReturnHashInputDate Elements present
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,-24),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+
+ /**
+ * Method create004.
+ * @throws Exception
+ */
+ public void create004() throws Exception {
+ String testNumber = "004";
+ //Create a Request with number 004, the current Time (+0 hours)
+ // and with the Date and without ReturnHashInputDate Elements present
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(false,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+
+ writeFile(vxResFile(testNumber), createResponseWithoutHashInputData(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+ public void create005() throws Exception {
+ String testNumber = "005";
+
+ String request =
+ createRequestStart(testNumber,true,0, "Reference=\"" + configuration_.getProperty("webbaseDir") + "resources/SignatureVX005.xml\" ")+
+ createRequestEnd(false,false,null);
+
+ request = replaceString(request,"<XMLContent xml:space=\"preserve\">","");
+ request = replaceString(request,"</XMLContent>","");
+ writeFile(vxReqFile(testNumber),request);
+
+ String response = createResponsePart(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml")) +
+ vxBean.createSignatureCheck("0")+
+ vxBean.createXMLDSIGManifestCheck("1","1","1")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+ /**
+ * Method create051.
+ * @throws Exception
+ */
+
+public void create006() throws Exception {
+
+ String testNumber = "006";
+ // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN
+ Supplement supp = new Supplement();
+ supp.addXMLContent("http://MyServer.com/resources/something.xsd",
+ "<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>");
+ supp.closeSupplement();
+
+ String requestEnd = createSignatureInfoEnd()+
+ supp.getSupplement() + createRequestShortEnd(false);
+
+ String requestStart = createRequestStart(testNumber,true,0);
+
+
+ String reqDocString =
+ "<daten:Document Id=\"myDocument\" " +
+ "xmlns:daten=\"http://uri2.data.org\" "+
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+
+ "xsi:schemaLocation=\"http://uri2.data.org http://MyServer.com/resources/something.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >"
+ + "daten</daten:Document>" ;
+
+ InputStream bis = new ByteArrayInputStream(reqDocString.getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ factory.setValidating(true);
+ //factory.setValidating(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+
+ Map m = new HashMap();
+ m.put("http://MyServer.com/resources/something.xsd",new ByteArrayInputStream(("<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>").getBytes()));
+
+ EntityResolverChain chain = new EntityResolverChain();
+ chain.addEntityResolver(new StreamEntityResolver(m));
+ chain.addEntityResolver(new MOAEntityResolver());
+ builder.setEntityResolver(chain);
+
+
+ //Dokument Parsen
+ System.out.println(reqDocString);
+ //Document reqDoc = builder.parse(bis);
+ Document reqDoc = DOMUtils.parseDocument(bis,true,Constants.ALL_SCHEMA_LOCATIONS, null,chain,new MOAErrorHandler());
+ //Position für die Signatur angeben
+ //String xPath_Pos = "/moa:VerifyXMLSignatureRequest/moa:VerifySignatureInfo/moa:VerifySignatureEnvironment/moa:XMLContent
+ String xPath_Pos = "//daten:Document";
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "daten http://uri2.data.org";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ System.out.println("REQDOC:"+DOMUtils.serializeNode(reqDoc));
+ cpkcs.init(reqDoc,pos);
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ cpkcs.setKeyInformation();
+ /*cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"));
+ cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");*/
+
+ Transform[] tr = new Transform[1];
+ TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();
+ tr[0] = trans;
+ //Enveloped Transformation
+ cpkcs.createReferenceWithTransforms(new URI("#myDocument"),tr);
+//Signieren
+
+ cpkcs.returnSig();
+ //Serialisieren
+ String request = requestStart + replaceString(Node2String(reqDoc.getDocumentElement()),"<?xml version=\"1.0\" encoding=\"utf-8\"?>","") + requestEnd;
+
+ writeFile(vxReqFile(testNumber),request);
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ vxBean.createSignatureCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+ public void create007() throws Exception {
+
+ String testNumber = "007";
+
+ String dtdLocation = configuration_.getProperty("webbaseDir") + "resources/VX.007DTD.dtd";
+
+ // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN
+ Supplement supp = new Supplement();
+ supp.addBase64Content(dtdLocation,
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/VX.007DTD.dtd"));
+ supp.closeSupplement();
+
+ String requestEnd = createSignatureInfoEnd()+
+ createRequestShortEnd(false);
+
+ //String reqDocString = createRequestStart(testNumber,true,0,"","<!DOCTYPE data:Document SYSTEM \"http://MyServer.com/resources/VX.006DTD.dtd\">") +
+ String reqDocString = /*createRequestStart(testNumber,true,0) +*/
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Document SYSTEM \"" + dtdLocation + "\"><Document Id=\"myDocument\" " +
+
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+
+ "xsi:schemaLocation=\"http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >"
+ + "\ndaten\n</Document>" /*+ requestEnd*/;
+
+ InputStream bis = new ByteArrayInputStream(reqDocString.getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ factory.setValidating(false);
+
+ System.out.println(reqDocString);
+
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ //Dokument Parsen
+ Document reqDoc = builder.parse(bis);
+ //Position für die Signatur angeben
+ String xPath_Pos = "/Document";
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "";//"data http://uri2.data.org";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc,pos);
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ cpkcs.setKeyInformation();
+ /*cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"));
+ cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");*/
+
+ Transform[] tr = new Transform[1];
+ TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();
+ tr[0] = trans;
+ //Enveloped Transformation
+ cpkcs.createReferenceWithTransforms(new URI("#myDocument"),tr);
+//Signieren
+ cpkcs.returnSig();
+ //Serialisieren
+ String request = Node2String(reqDoc.getDocumentElement());
+
+ int i_pos = request.indexOf("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ request = request.substring("<?xml version=\"1.0\" encoding=\"utf-8\"?>".length());
+
+ request = "<!DOCTYPE Document SYSTEM \"" + dtdLocation + "\">"+request;
+
+ System.out.println("DOC:"+request);
+
+ request ="<?xml version=\"1.0\" encoding=\"utf-8\"?><VerifyXMLSignatureRequest xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xml=\"http://www.w3.org/XML/1998/namespace\"><VerifySignatureInfo><VerifySignatureEnvironment><Base64Content>"+Base64Utils.encode(request.getBytes())+"</Base64Content></VerifySignatureEnvironment><VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation></VerifySignatureInfo>"+supp.getSupplement()+"<TrustProfileID>TrustProfile1</TrustProfileID></VerifyXMLSignatureRequest>";
+
+
+
+
+ /*int i_pos = request.indexOf("<VerifyXMLSignatureRequest");
+ request = request.substring(0,i_pos)+"<!DOCTYPE data:Document SYSTEM \"http://MyServer.com/resources/VX.006DTD.dtd\">\n" +request.substring(i_pos);*/
+
+ /*i_pos = request.indexOf("<TrustProfile");
+ request = request.substring(0,i_pos)+supp.getSupplement() +request.substring(i_pos);*/
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponseWithoutHashInputData(cpkcs.getX509CertString(), testNumber,"0",false));
+ }
+
+
+ public void create008() throws Exception {
+
+ String testNumber = "008";
+
+ String request =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
+ "<VerifyXMLSignatureRequest xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" xmlns:xml=\"http://www.w3.org/XML/1998/namespace\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+
+ "<VerifySignatureInfo>"+
+ "<VerifySignatureEnvironment>"+
+ "<XMLContent xml:space=\"preserve\">"+
+ "<dsig:Signature Id=\"HS_signature\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+
+ "<dsig:SignedInfo>"+
+ "<dsig:CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>"+
+ "<dsig:SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>"+
+ "<dsig:Reference Id=\"reference-data-1\" URI=\"#signed-data\">"+
+ "<dsig:Transforms>"+
+ "<dsig:Transform Algorithm=\"http://www.w3.org/2002/06/xmldsig-filter2\">"+
+ "<xf2:XPath Filter=\"intersect\" xmlns:xf2=\"http://www.w3.org/2002/06/xmldsig-filter2\">id(&apos;signed-data&apos;)/node()</xf2:XPath>"+
+ "</dsig:Transform>"+
+ "</dsig:Transforms>"+
+ "<dsig:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+
+ "<dsig:DigestValue>4lngV1x/OvR8iFWEBenH4fDihwA=</dsig:DigestValue>"+
+ "</dsig:Reference>"+
+ "<dsig:Reference Type=\"http://uri.etsi.org/01903/v1.1.1#SignedProperties\" URI=\"#refetsi\">"+
+ "<dsig:Transforms>"+
+ "<dsig:Transform Algorithm=\"http://www.w3.org/2002/06/xmldsig-filter2\">"+
+ "<xf2:XPath Filter=\"intersect\" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\" xmlns:xf2=\"http://www.w3.org/2002/06/xmldsig-filter2\">id(&apos;refetsi&apos;)/etsi:QualifyingProperties/etsi:SignedProperties</xf2:XPath>"+
+ "</dsig:Transform>"+
+ "</dsig:Transforms>"+
+ "<dsig:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+
+ "<dsig:DigestValue>1j0DWguieuw2cGA06gFjoSNXr+w=</dsig:DigestValue>"+
+ "</dsig:Reference>"+
+ "</dsig:SignedInfo>"+
+ "<dsig:SignatureValue>Yb6fsPNbKyYW+u7cU1EqF9n5QrwLXHqdGD4tJNT5+sA7kQR3Ztqz965vlBH+1pJE"+
+ "nGxehxXsesZboVvkJa/jhuI0goCTW9KkdGOP71B7o7/vlyBbxaYKpnVNtBU4/qtT"+
+ "xba7M0E32X+tm/x9O6foXIM0AoP3oQBZmjo9rEJ9kfk=</dsig:SignatureValue>"+
+ "<dsig:KeyInfo>"+
+ "<dsig:X509Data>"+
+ "<dsig:X509Certificate>MIIFJTCCBA2gAwIBAgICGTcwDQYJKoZIhvcNAQEFBQAwgaExCzAJBgNVBAYTAkFU"+
+ "MUgwRgYDVQQKEz9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGlt"+
+ "IGVsZWt0ci4gRGF0ZW52ZXJrZWhyIEdtYkgxIzAhBgNVBAsTGmEtc2lnbi1URVNU"+
+ "LVByZW1pdW0tRW5jLTAxMSMwIQYDVQQDExphLXNpZ24tVEVTVC1QcmVtaXVtLUVu"+
+ "Yy0wMTAeFw0wMzAyMTAxMzIwNThaFw0wNjAyMTAxMzIwNThaMGoxCzAJBgNVBAYT"+
+ "AkFUMRwwGgYDVQQDExNUZXN0cGVyc29uIE1PQTQgQlJaMQwwCgYDVQQEEwNCUlox"+
+ "GDAWBgNVBCoTD1Rlc3RwZXJzb24gTU9BNDEVMBMGA1UEBRMMNzkwMTg3NDYxNjMz"+
+ "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDS/UW1/tZeCh7HHQmj8auUTEc4"+
+ "edAgRDkUVKOm0tF3kE3WZlhGDZL0p84xsdIKyI+bwDCMATATkQwDo/Xxn9jJMi4/"+
+ "t80bNyRsHk9giA0wcvz9NgmEcDwKNqawGsR9gNeK8TyIC8AuDkj1EwtkAObMvtp/"+
+ "Z1phi47x3JxDDfGDpQIDAQABo4ICHzCCAhswEwYDVR0jBAwwCoAIS7OAw3GTPNgw"+
+ "JwYIKwYBBQUHAQMBAf8EGDAWMAgGBgQAjkYBATAKBggrBgEFBQcLATCBggYIKwYB"+
+ "BQUHAQEEdjB0MCkGCCsGAQUFBzABhh1odHRwOi8vd3d3LmEtdHJ1c3QuYXQ6ODIv"+
+ "b2NzcDBHBggrBgEFBQcwAoY7aHR0cDovL3d3dy5hLXRydXN0LmF0L2NlcnRzL2Et"+
+ "c2lnbi1URVNULVByZW1pdW0tU2lnLTAxYS5jcnQwgZQGA1UdIASBjDCBiTB9BgYq"+
+ "KAARAQQwczA1BggrBgEFBQcCARYpaHR0cDovL3d3dy5hLXRydXN0LmF0L2RvY3Mv"+
+ "Y3AvYS1zaWduLVRFU1QwOgYIKwYBBQUHAgIwLhosRGllc2VzIFplcnRpZmlrYXQg"+
+ "ZGllbnQgbnVyIHp1IFRlc3R6d2Vja2VuICEwCAYGBACLMAEBMG8GA1UdHwRoMGYw"+
+ "ZKBioGCGXmxkYXA6Ly9sZGFwLmEtdHJ1c3QuYXQvb3U9YS1zaWduLVRFU1QtUHJl"+
+ "bWl1bS1FbmMtMDEsbz1BLVRydXN0LGM9QVQ/Y2VydGlmaWNhdGVyZXZvY2F0aW9u"+
+ "bGlzdD8wEQYDVR0OBAoECE4DxL9ky4M+MA4GA1UdDwEB/wQEAwIGwDAgBgNVHREE"+
+ "GTAXgRV0ZXN0cGVyc29uNEBicnouZ3YuYXQwCQYDVR0TBAIwADANBgkqhkiG9w0B"+
+ "AQUFAAOCAQEAioVvsZN+NnQxXMTGdjKveTBMRTYzHflkSC8lI9XXltP5+mjIuoB2"+
+ "Tn6voovA8dXz9jTsnQt8f8ye0CL2bSS9UVD1jv8So3bavquW+HlkZBAZvL39APNL"+
+ "PjUUnWn0QOnrQAJ6W47UwGAUgEw3KcBcJaEa4Xb/8kUj618xGzWl6X0mKsVpxkrf"+
+ "+5Cj+nmwDqChll08/90MmhSY4M5FrvmQ9GjAN5FHVsk0FPp02tKCRzoBJtzpB1DW"+
+ "KHlgiDHUAXy5eD0XI7PXebPNZ4InvY/jC/IH8PRLdJT249YQmUxZ4neTtFDvb8C1"+
+ "Qh6k725fh3hVxqX8ZwwWj9+iGQVk53K3CA==</dsig:X509Certificate>"+
+ /*"<dsig:X509Certificate>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/IAIKRootMusterbehoerde.cer")+
+ "</dsig:X509Certificate>"+*/
+ "</dsig:X509Data>"+
+ "</dsig:KeyInfo>"+
+ "<dsig:Object Id=\"signed-data\">"+
+ "<sl10:InfoboxReadRequest xmlns:sl10=\"http://www.buergerkarte.at/namespaces/securitylayer/20020225#\">"+
+ "<sl10:InfoboxIdentifier>IdentityLink</sl10:InfoboxIdentifier>"+
+ "<sl10:BinaryFileParameters ContentIsXMLEntity=\"true\"/>"+
+ "</sl10:InfoboxReadRequest>"+
+ "</dsig:Object>"+
+ "<dsig:Object Id=\"refetsi\">"+
+ "<etsi:QualifyingProperties Target=\"#HS_signature\" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\">"+
+ "<etsi:SignedProperties>"+
+ "<etsi:SignedSignatureProperties>"+
+ "<etsi:SigningTime>2003-03-04T12:32:54Z</etsi:SigningTime>"+
+ "<etsi:SigningCertificate>"+
+ "<etsi:Cert>"+
+ "<etsi:CertDigest>"+
+ "<etsi:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+
+ "<etsi:DigestValue>Frhu1o4mL4gQHdJcU0xSA/h4COE=</etsi:DigestValue>"+
+ "</etsi:CertDigest>"+
+ "<etsi:IssuerSerial>"+
+ "<dsig:X509IssuerName>CN=a-sign-TEST-Premium-Enc-01,OU=a-sign-TEST-Premium-Enc-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT</dsig:X509IssuerName>"+
+ "<dsig:X509SerialNumber>6455</dsig:X509SerialNumber>"+
+ "</etsi:IssuerSerial>"+
+ "</etsi:Cert>"+
+ "</etsi:SigningCertificate>"+
+ "<etsi:SignaturePolicyIdentifier>"+
+ "<etsi:SignaturePolicyImplied/>"+
+ "</etsi:SignaturePolicyIdentifier>"+
+ "</etsi:SignedSignatureProperties>"+
+ "<etsi:SignedDataObjectProperties>"+
+ "<etsi:DataObjectFormat ObjectReference=\"#reference-data-1\">"+
+ "<etsi:MimeType>text/xml</etsi:MimeType>"+
+ "</etsi:DataObjectFormat>"+
+ "</etsi:SignedDataObjectProperties>"+
+ "</etsi:SignedProperties>"+
+ "</etsi:QualifyingProperties>"+
+ "</dsig:Object>"+
+ "</dsig:Signature>"+
+ "</XMLContent>"+
+ "</VerifySignatureEnvironment>"+
+ "<VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>"+
+ "</VerifySignatureInfo>"+
+ "<TrustProfileID>TrustProfile1</TrustProfileID>"+
+ "</VerifyXMLSignatureRequest>";
+
+ String response =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
+ "<VerifyXMLSignatureResponse xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" >"+
+ " <SignerInfo>"+
+ " <dsig:X509Data xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+
+ " <dsig:X509SubjectName>serialNumber=790187461633,givenName=Testperson MOA4,SN=BRZ,CN=Testperson MOA4 BRZ,C=AT</dsig:X509SubjectName>"+
+ " <dsig:X509IssuerSerial>"+
+ " <dsig:X509IssuerName>CN=a-sign-TEST-Premium-Enc-01,OU=a-sign-TEST-Premium-Enc-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT</dsig:X509IssuerName>"+
+ " <dsig:X509SerialNumber>6455</dsig:X509SerialNumber>"+
+ " </dsig:X509IssuerSerial>"+
+ "<dsig:X509Certificate>MIIFJTCCBA2gAwIBAgICGTcwDQYJKoZIhvcNAQEFBQAwgaExCzAJBgNVBAYTAkFU"+
+ "MUgwRgYDVQQKEz9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGlt"+
+ "IGVsZWt0ci4gRGF0ZW52ZXJrZWhyIEdtYkgxIzAhBgNVBAsTGmEtc2lnbi1URVNU"+
+ "LVByZW1pdW0tRW5jLTAxMSMwIQYDVQQDExphLXNpZ24tVEVTVC1QcmVtaXVtLUVu"+
+ "Yy0wMTAeFw0wMzAyMTAxMzIwNThaFw0wNjAyMTAxMzIwNThaMGoxCzAJBgNVBAYT"+
+ "AkFUMRwwGgYDVQQDExNUZXN0cGVyc29uIE1PQTQgQlJaMQwwCgYDVQQEEwNCUlox"+
+ "GDAWBgNVBCoTD1Rlc3RwZXJzb24gTU9BNDEVMBMGA1UEBRMMNzkwMTg3NDYxNjMz"+
+ "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDS/UW1/tZeCh7HHQmj8auUTEc4"+
+ "edAgRDkUVKOm0tF3kE3WZlhGDZL0p84xsdIKyI+bwDCMATATkQwDo/Xxn9jJMi4/"+
+ "t80bNyRsHk9giA0wcvz9NgmEcDwKNqawGsR9gNeK8TyIC8AuDkj1EwtkAObMvtp/"+
+ "Z1phi47x3JxDDfGDpQIDAQABo4ICHzCCAhswEwYDVR0jBAwwCoAIS7OAw3GTPNgw"+
+ "JwYIKwYBBQUHAQMBAf8EGDAWMAgGBgQAjkYBATAKBggrBgEFBQcLATCBggYIKwYB"+
+ "BQUHAQEEdjB0MCkGCCsGAQUFBzABhh1odHRwOi8vd3d3LmEtdHJ1c3QuYXQ6ODIv"+
+ "b2NzcDBHBggrBgEFBQcwAoY7aHR0cDovL3d3dy5hLXRydXN0LmF0L2NlcnRzL2Et"+
+ "c2lnbi1URVNULVByZW1pdW0tU2lnLTAxYS5jcnQwgZQGA1UdIASBjDCBiTB9BgYq"+
+ "KAARAQQwczA1BggrBgEFBQcCARYpaHR0cDovL3d3dy5hLXRydXN0LmF0L2RvY3Mv"+
+ "Y3AvYS1zaWduLVRFU1QwOgYIKwYBBQUHAgIwLhosRGllc2VzIFplcnRpZmlrYXQg"+
+ "ZGllbnQgbnVyIHp1IFRlc3R6d2Vja2VuICEwCAYGBACLMAEBMG8GA1UdHwRoMGYw"+
+ "ZKBioGCGXmxkYXA6Ly9sZGFwLmEtdHJ1c3QuYXQvb3U9YS1zaWduLVRFU1QtUHJl"+
+ "bWl1bS1FbmMtMDEsbz1BLVRydXN0LGM9QVQ/Y2VydGlmaWNhdGVyZXZvY2F0aW9u"+
+ "bGlzdD8wEQYDVR0OBAoECE4DxL9ky4M+MA4GA1UdDwEB/wQEAwIGwDAgBgNVHREE"+
+ "GTAXgRV0ZXN0cGVyc29uNEBicnouZ3YuYXQwCQYDVR0TBAIwADANBgkqhkiG9w0B"+
+ "AQUFAAOCAQEAioVvsZN+NnQxXMTGdjKveTBMRTYzHflkSC8lI9XXltP5+mjIuoB2"+
+ "Tn6voovA8dXz9jTsnQt8f8ye0CL2bSS9UVD1jv8So3bavquW+HlkZBAZvL39APNL"+
+ "PjUUnWn0QOnrQAJ6W47UwGAUgEw3KcBcJaEa4Xb/8kUj618xGzWl6X0mKsVpxkrf"+
+ "+5Cj+nmwDqChll08/90MmhSY4M5FrvmQ9GjAN5FHVsk0FPp02tKCRzoBJtzpB1DW"+
+ "KHlgiDHUAXy5eD0XI7PXebPNZ4InvY/jC/IH8PRLdJT249YQmUxZ4neTtFDvb8C1"+
+ "Qh6k725fh3hVxqX8ZwwWj9+iGQVk53K3CA==</dsig:X509Certificate>"+
+ " <sl11:QualifiedCertificate xmlns:sl11=\"http://www.buergerkarte.at/namespaces/securitylayer/20020831#\"/>"+
+ " </dsig:X509Data>"+
+ " </SignerInfo>"+
+ " <SignatureCheck>"+
+ " <Code>0</Code>"+
+ " </SignatureCheck>"+
+ " <CertificateCheck>"+
+ " <Code>0</Code>"+
+ " </CertificateCheck>"+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber),response);
+ }
+
+ public void create009() throws Exception {
+
+ String testNumber = "009";
+ // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN
+ Supplement supp = new Supplement();
+ supp.addXMLContent("http://MyServer.com/resources/something.xsd",
+ "<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>");
+ supp.closeSupplement();
+
+ String requestEnd = createSignatureInfoEnd()+
+ supp.getSupplement() + createRequestShortEnd(false);
+
+ String requestStart = createRequestStart(testNumber,true,0);
+
+
+ String reqDocString =
+ "<daten:Document Id=\"myDocument\" " +
+ "xmlns:daten=\"http://uri2.data.org\" "+
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+
+ "xsi:schemaLocation=\"http://uri2.data.org http://MyServer.com/resources/something.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >"
+ + "daten</daten:Document>" ;
+
+ InputStream bis = new ByteArrayInputStream(reqDocString.getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ factory.setValidating(true);
+ //factory.setValidating(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+
+ Map m = new HashMap();
+ m.put("http://MyServer.com/resources/something.xsd",new ByteArrayInputStream(("<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>").getBytes()));
+
+ EntityResolverChain chain = new EntityResolverChain();
+ chain.addEntityResolver(new StreamEntityResolver(m));
+ chain.addEntityResolver(new MOAEntityResolver());
+ builder.setEntityResolver(chain);
+
+
+ //Dokument Parsen
+ System.out.println(reqDocString);
+ //Document reqDoc = builder.parse(bis);
+ Document reqDoc = DOMUtils.parseDocument(bis,true,Constants.ALL_SCHEMA_LOCATIONS, null,chain,new MOAErrorHandler());
+ //Position für die Signatur angeben
+ //String xPath_Pos = "/moa:VerifyXMLSignatureRequest/moa:VerifySignatureInfo/moa:VerifySignatureEnvironment/moa:XMLContent
+ String xPath_Pos = "//daten:Document";
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "daten http://uri2.data.org";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ System.out.println("REQDOC:"+DOMUtils.serializeNode(reqDoc));
+ cpkcs.init(reqDoc,pos);
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ cpkcs.setKeyInformation();
+ /*cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"));
+ cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");*/
+
+ Transform[] tr = new Transform[1];
+ TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();
+ tr[0] = trans;
+ //Enveloped Transformation
+ cpkcs.createReferenceWithTransforms(new URI("#xpointer(id(myDocument))"),tr);
+//Signieren
+
+ cpkcs.returnSig();
+ //Serialisieren
+ String request = requestStart + replaceString(Node2String(reqDoc.getDocumentElement()),"<?xml version=\"1.0\" encoding=\"utf-8\"?>","") + requestEnd;
+
+ writeFile(vxReqFile(testNumber),request);
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ vxBean.createSignatureCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+ public void create101() throws Exception {
+
+ String testNumber = "101";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ Supplement supp = new Supplement();
+ supp.addMetaInfo("text/plain","http://www.buergerkarte.at");
+ supp.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt",
+ readBinaryFileAsBase64(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
+ supp.closeSupplement();
+ //supp.addProfileID("Some ID");
+
+ String requestEnd = createSignatureInfoEnd()+
+ supp.getSupplement() + createRequestShortEnd(false);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+
+ writeFile(vxReqFile(testNumber),request);
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ vxBean.createSignatureCheck("0")+
+ /*vxBean.createXMLDSIGManifestCheck("0","","1")+ */
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+ public void create102() throws Exception {
+
+ String testNumber = "102";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ Supplement supp = new Supplement();
+ supp.addMetaInfo("text/plain",null);
+ supp.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt",
+ readBinaryFileAsBase64(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
+ supp.closeSupplement();
+ //supp.addProfileID("Some ID");
+
+ String requestEnd = createSignatureInfoEnd()+
+ supp.getSupplement() + "<ReturnHashInputData/>"+createRequestShortEnd(false);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+
+ writeFile(vxReqFile(testNumber),request);
+
+
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+
+ public void create103() throws Exception {
+
+ String testNumber = "103";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ Supplement supp = new Supplement();
+ //supp.addMetaInfo("text/plain",null);
+ supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
+ //supp.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt",
+ // readBinaryFileAsBase64(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"));
+ supp.closeSupplement();
+ //supp.addProfileID("Some ID");
+
+ String requestEnd = createSignatureInfoEnd()+
+ supp.getSupplement() + "<ReturnHashInputData/>"+createRequestShortEnd(false);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+
+ writeFile(vxReqFile(testNumber),request);
+
+
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+public void create104() throws Exception {
+
+ String testNumber = "104";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ Supplement supp = new Supplement();
+ supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
+ supp.closeSupplement();
+
+ String requestEnd =
+ createSignatureInfoEnd()+
+ supp.getSupplement()+"<ReturnHashInputData/>"+
+ createRequestShortEnd(false);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber+" - Supplement/Content/XMLContent instead of Supplement/Content/Base64Content",true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+
+ public void create105() throws Exception {
+
+ String testNumber = "105";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testXML.txt");
+ cpkcs.setKeyInformation();
+
+ Supplement supp = new Supplement();
+ supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
+ supp.closeSupplement();
+
+ Supplement supp2 = new Supplement();
+ supp2.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testXML.txt", readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testXML.txt"));
+ supp2.closeSupplement();
+
+ String requestEnd =
+ createSignatureInfoEnd()+
+ supp.getSupplement()+
+ supp2.getSupplement() +
+ createRequestShortEnd(true);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber + " - 2 Supplement elements",true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<HashInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testSimple.txt") +
+ "</Base64Content></HashInputData>"+
+ "<HashInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testXML.txt") +
+ "</Base64Content></HashInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResFile(testNumber), response);
+ }
+
+public void create106() throws Exception {
+
+ String testNumber = "106";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ String requestEnd =
+ createSignatureInfoEnd()+
+ "<SupplementProfileID>SupplementProfile2</SupplementProfileID>" +
+ "<!-- Supplement Profile 2 enthaelt nicht die referenzierte URI -->" +
+ "<SupplementProfileID>SupplementProfile1</SupplementProfileID><ReturnHashInputData/>" +
+ createRequestShortEnd(false);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber +" - 2 SupplementProfileID elements" ,true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+
+
+ public void create301() throws Exception {
+
+ String testNumber = "301";
+
+ //Testcast with another canoicalization algorithm
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXMLwithCom);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+ /**
+ * Method create302.
+ * @throws Exception
+ */
+ public void create302() throws Exception {
+
+ String testNumber = "302";
+
+ //Testcast with another canoicalization algorithm
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgExcXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0"));
+ }
+ /**
+ * Method create303.
+ * @throws Exception
+ */
+ public void create303() throws Exception {
+
+ String testNumber = "303";
+
+ //Testcast with another canoicalization algorithm
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgExcXMLwithCom);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0"));
+ }
+
+ public void create304() throws Exception {
+
+ String testNumber = "304";
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.initECDSA();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ //cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ //cpkcs.createEnvelopedDataObject("envelopedData",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
+
+ cpkcs.createReference(true,readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"),"envelopedData");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0","<dsig:X509IssuerName>CN=IAIK ECDSA Test,OU=JavaSecurity,O=IAIK,C=AT</dsig:X509IssuerName>","<dsig:X509SubjectName>CN=IAIK ECDSA Test,OU=JavaSecurity,O=IAIK,C=AT</dsig:X509SubjectName>","<dsig:X509SerialNumber>68172</dsig:X509SerialNumber>"));
+ }
+ /**
+ * Method create305.
+ * @throws Exception
+ */
+ public void create305() throws Exception {
+
+ String testNumber = "305";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ String refData = "Dies sind Testdaten";
+
+ cpkcs.createReference(true,refData);
+
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",refData));
+ }
+
+ /**
+ * Method create307.
+ * @throws Exception
+ */
+ public void create307() throws Exception {
+
+ String testNumber = "307";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ Supplement supp = new Supplement();
+ supp.addXMLContent(configuration_.getProperty("baseDir")+"resources/testSimple.txt", readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
+ supp.closeSupplement();
+
+ String requestEnd = createSignatureInfoEnd()+
+ supp.getSupplement() +
+ createRequestShortEnd(true);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0"));
+ }
+
+ /**
+ * Method create308.
+ * @throws Exception
+ */
+ public void create308() throws Exception {
+
+ String testNumber = "308";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ Supplement supp = new Supplement();
+ supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
+ supp.closeSupplement();
+
+
+ String requestEnd = createSignatureInfoEnd()+ supp.getSupplement() +
+ createRequestShortEnd(false);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+
+ //request = replaceString(request,"<XMLContent xml:space=\"preserve\">","<XMLContent xml:space=\"preserve\">VERAENDERTE DATEN und die Ursprungsdaten: ");
+ request = replaceString(request,"Dies sind Testdaten","VERAENDERTE DATEN und die Ursprungsdaten: Dies sind Testdaten");
+ //request = replaceString(request,Base64Utils.encode("Dies sind Testdaten".getBytes()),Base64Utils.encode("VERAENDERTE DATEN und die Ursprungsdaten: Dies sind Testdaten".getBytes()));
+ //request = replaceString(request,"<ReturnHashInputData/>","");
+ /*request = replaceString(request,"Reference=\""+configuration_.getProperty("baseDir")+"resources/testSimple.txt\"","Reference=\"\"");
+ request = replaceString(request,"URI=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt\"","URI=\"\"");*/
+ writeFile(vxReqFile(testNumber),request);
+
+ String response = createResponse(cpkcs.getX509CertString(),testNumber,"1",1);
+
+ writeFile(vxResFile(testNumber), response);
+ }
+ public void create310() throws Exception {
+
+ String testNumber = "310";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ //Erzeugen der Base64-Daten
+ //String tmp = readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testSimple.txt");
+
+ URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txtbase64.enc");
+
+ Transform[] tr = new Transform[1];
+ tr[0] = new TransformImplBase64Decode();
+ InputStream s = getHttpInputStream(target.toString());
+ tr[0].setInput(s,null);
+
+ cpkcs.createReferenceWithTransforms(target,tr);
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0"));
+ }
+//-------------------------------------------------------------------------
+//-------------------------------------------------------------------------
+//-------------------------------------------------------------------------
+//-------------------------------------------------------------------------
+//-------311 scheint die XPAth - Transformation nicht richtig auszuführen-
+// (Siehe Output in der Konsole.....)
+
+ public void create311() throws Exception {
+
+ String testNumber = "311";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ Transform[] tr = new Transform[1];
+ TransformImplXPath trans = new TransformImplXPath();
+// TransformImplXSLT trans = new TransformImplXSLT();
+
+
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/BookData.xml");
+// InputStream s2 = new FileInputStream(configuration_.getProperty("baseDir")+"resources/transform.xsl");
+ trans.setInput(s,null);
+// trans.setStyleSheet(s2,null);
+
+ trans.addNSDeclaration("data",new URI("http://uri.data.org")); //new URI("file:/"+configuration_.getProperty("baseDir")+"resources/BookData.xml"));
+ // trans.setXPath("ancestor-or-self::data:first-name");
+ trans.setXPath("ancestor-or-self::text()/ancestor-or-self::data:first-name");
+
+ tr[0] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr);
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",1,"text:Ellipse"));
+ }
+
+public void create312() throws Exception
+ { String testNumber = "312";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXPath2 trans = new TransformImplXPath2();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_book.xsl");
+ trans.setInput(s,null);
+
+ HashMap temp = new HashMap();
+ temp.put("data",new URI("http://uri.data.org"));
+ trans.addXPathFilter("/data:book/data:first-name",TransformImplXPath2.FILTER_MODE_SUBTRACT_,temp);
+ tr[0] = trans;
+ //System.out.println(getTransformsResult(tr));
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr,"reference-1");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart("312",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ vxBean.createSignatureCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+public void create313() throws Exception
+ { String testNumber = "313";
+
+ // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN
+
+ String requestEnd = createRequestEnd(true,false,null);
+
+ String reqDocString = createRequestStart(testNumber,true,0) +
+ "<data:Document " +
+ "xmlns:data=\"http://uri.data.org\" "+
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Id=\"myDocument\" "+
+ "xsi:schemaLocation=\"http://uri.data.org http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX.006Schema.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >"
+ + "</data:Document>" + requestEnd;
+
+
+ InputStream bis = new ByteArrayInputStream(("<data:Document " +
+ "xmlns:data=\"http://uri.data.org\" "+
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Id=\"myDocument\" "+
+ "xsi:schemaLocation=\"http://uri.data.org http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX.006Schema.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >"
+ + "</data:Document>").getBytes());
+ //Document-Builder holen
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ //Dokument Parsen
+ Document reqDoc = builder.parse(bis);
+
+ System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
+ //Position für die Signatur angeben
+ //String xPath_Pos = "/moa:VerifyXMLSignatureRequest/moa:VerifySignatureInfo/moa:VerifySignatureEnvironment/moa:XMLContent/data:Document";
+ String xPath_Pos = "/node()";
+ //XPAth-Prefixe deklarieren
+ String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\"";
+ Position pos = new Position(xPath_Pos, xPath_Prefix,0);
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt
+ cpkcs.init(reqDoc,pos);
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ cpkcs.setKeyInformation(1);
+ //cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"));
+ //cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");
+
+ Transform[] tr = new Transform[1];
+ TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();
+ tr[0] = trans;
+ //Enveloped Transformation
+ cpkcs.createReferenceWithTransforms(new URI(""),tr);
+//Signieren
+ cpkcs.returnSig();
+ //Serialisieren
+ String request = Node2String(reqDoc.getDocumentElement());
+
+ writeFile(vxReqFile(testNumber),createRequestStart(testNumber,true,0).trim() +cutXML(request).trim()+requestEnd.trim());
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0",1,"text:"+"<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Id=\"myDocument\" xsi:schemaLocation=\"http://uri.data.org http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX.006Schema.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\"></data:Document>"));
+
+ }
+
+
+ public void create314() throws Exception
+ { String testNumber = "314";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr,"reference-1");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart("314",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ vxBean.createSignatureCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+public void create314_2() throws Exception
+ { String testNumber = "314_2";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr,"reference-1");
+ cpkcs.setKeyInformation();
+
+ Supplement supp = new Supplement();
+ String suppContent = readFileCR(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl");
+ suppContent = replaceString(suppContent, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>","");
+ supp.addXMLContent("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_book.xsl", suppContent );
+ supp.closeSupplement();
+
+ String request =
+ makeOutputFile(
+ createRequestStart("314_2",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() +
+ supp.getSupplement()
+ + createRequestShortEnd(false));
+
+/* request = replaceString(request, "http://moa-test.brz.intra.gv.at", "http://MyServer.com");
+ request = replaceString(request, "http://moa-test.brz.intra.gv.at", "http://MyServer.com");
+ request = replaceString(request, "http://moa-test.brz.intra.gv.at", "http://MyServer.com");
+ //Hinweis: ich nehmen an, die URI in DSIG:REFERENCE sollte schon stimmen....
+ request = replaceString(request, "http://MyServer.com", "http://moa-test.brz.intra.gv.at"); */
+ writeFile(vxReqFile(testNumber),request);
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ vxBean.createSignatureCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+ writeFile(vxResFile(testNumber), response);
+ }
+
+
+ public void create315() throws Exception {
+
+ String testNumber = "315";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML");
+
+ Transform[] tr = new Transform[1];
+ tr[0] = new TransformImplCanonicalXML();
+ InputStream s = getHttpInputStream(target.toString());
+ tr[0].setInput(s,null);
+
+ String erg = getTransformsResult(tr);
+
+ cpkcs.createReferenceWithTransforms(target,tr);
+ //cpkcs.createReference(false, "file:/"+ configuration_.getProperty("baseDir")+"resources/test_wo_canonicalisation.XML");
+ //cpkcs.createReference(false, "file:/"+ configuration_.getProperty("baseDir")+"resources/test_w_canonicalisation.XML");
+// cpkcs.createReferenceWithManifest(new URI("file:/"+ configuration_.getProperty("baseDir")+"resources/test_w_canonicalisation.XML"),"canonicalizedData");
+
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+
+
+ writeFile(vxReqFile(testNumber),request);
+
+
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg));
+ }
+
+ public void create316() throws Exception {
+
+ String testNumber = "316";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML");
+
+ Transform[] tr = new Transform[1];
+ tr[0] = new TransformImplCanonicalXMLWithComments();
+ InputStream s = getHttpInputStream(target.toString());
+ tr[0].setInput(s,null);
+
+ String erg = getTransformsResult(tr);
+
+ cpkcs.createReferenceWithTransforms(target,tr);
+
+ cpkcs.setKeyInformation();
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg));
+ }
+ public void create317() throws Exception {
+
+ String testNumber = "317";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML");
+
+ Transform[] tr = new Transform[1];
+ tr[0] = new TransformImplExclusiveCanonicalXML();
+ InputStream s = getHttpInputStream(target.toString());
+ tr[0].setInput(s,null);
+ String erg = getTransformsResult(tr);
+ cpkcs.createReferenceWithTransforms(target,tr);
+
+ cpkcs.setKeyInformation();
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg));
+ }
+ public void create318() throws Exception {
+
+ String testNumber = "318";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML");
+ Transform[] tr = new Transform[1];
+ tr[0] = new TransformImplExclusiveCanonicalXMLWithComments();
+ InputStream s = getHttpInputStream(target.toString());
+ tr[0].setInput(s,null);
+
+ String erg = getTransformsResult(tr);
+ cpkcs.createReferenceWithTransforms(target,tr);
+
+ cpkcs.setKeyInformation();
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg));
+ }
+
+ public void create318_2() throws Exception {
+
+ String testNumber = "318_2";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ //Create a base64-encoded version of the xml file
+
+ //String tmp = readBinaryFileAsBase64(configuration_.getProperty("baseDir")+"resources/test_wo_canonicalisation.XML");
+
+ URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XMLbase64.enc");
+
+ Transform[] tr = new Transform[3];
+ tr[0] = new TransformImplBase64Decode();
+ InputStream s = getHttpInputStream(target.toString());
+ tr[0].setInput(s,null);
+ tr[1] = new TransformImplCanonicalXMLWithComments();
+ tr[1].setInput(s,null);
+
+ tr[2] = new TransformImplExclusiveCanonicalXML();
+ tr[2].setInput(s,null);
+ String erg = getTransformsResult(tr);
+ cpkcs.createReferenceWithTransforms(target,tr);
+
+ cpkcs.setKeyInformation();
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg));
+ }
+
+ /**
+ * Method create319:
+ * SignedInfo/Reference appears two times:
+ * the first reference points to an enveloped dsig:Object,
+ * the seconde reference points to an external File
+ * @throws Exception
+ */
+ public void create319() throws Exception {
+ String testNumber = "319";
+
+
+ // Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); // Create from whole cloth
+
+// Element root = (Element) document.createElement("Data");
+ // root.appendChild(document.createTextNode(readFileCR(configuration_.getProperty("baseDir")+"resources/test-ee2003_normal.derbase64.enc.bak")) );
+ //root.appendChild(document.createTextNode("Hallo\nHallo\nHallo"));
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(true,"Dies sind Testdaten");
+ //cpkcs.createReferenceEnvElement(root);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation();
+
+ Document sign = cpkcs.returnSig();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ /*String erg = "Dies sind Testdaten" +
+ "</XMLContent>\n" +
+ " </HashInputData>\n" +
+ " <HashInputData>\n" +
+ "<XMLContent xml:space=\"preserve\">" +
+ readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt"); */
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0","Dies sind Testdaten",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")));
+ }
+
+ /**
+ * Method create320:
+ * The element KeyInfo does NOT contain the X509-certificate but
+ * an URI pointing to an external xml-encoded X509-file
+ * @throws Exception
+ */
+ public void create320() throws Exception {
+ String testNumber = "320";
+
+ //RetrievalMethdos instead of the integratede Keys
+
+ //URI fileURI = new URI(configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der");
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
+ //URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+ Document sign = cpkcs.returnSig();
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResFile(testNumber), createResponse(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml"),testNumber,"0"));
+ }
+
+public void create320_2() throws Exception {
+ String testNumber = "320_2";
+
+ //RetrievalMethdos instead of the integratede Keys
+
+ //URI fileURI = new URI(configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der");
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/TEMPX509Data.xml");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
+ //URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+// Supplement supp = new Supplement();
+
+// supp.addXMLContent(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml",readFileCR(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml"));
+// supp.closeSupplement();
+ Document sign = cpkcs.returnSig();
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,true,configuration_.getProperty("webbaseDir") + "resources/TEMPX509Data.xml"));
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResFile(testNumber), createResponse(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml"),testNumber,"0"));
+ }
+
+
+ /**
+ * Method create321.
+ * The element KeyInfo does NOT contain the X509-certificate but
+ * an URI pointing to an external raw X509-file
+ * @throws Exception
+ */
+ public void create321() throws Exception {
+ String testNumber = "321";
+
+ //RetrievalMethdos instead of the integratede Keys
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/test-ee2003_normal.der");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+ Document sign = cpkcs.returnSig(); String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResFile(testNumber), createResponse(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml"),testNumber,"0"));
+ }
+
+
+ /**
+ * Method create322.
+ * The reference in the signature points with an xpointer
+ * to the ID of an embedded valid manifest dsig:object
+ * @throws Exception
+ */
+public void create322() throws Exception {
+ String testNumber = "322";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ Element elem = cpkcs.createReferenceWithManifest(fileURI1,"manifestObject");
+
+ cpkcs.setKeyInformation();
+ Document sign = cpkcs.returnSig(); String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<HashInputData><Base64Content>"+
+ Base64Utils.encode(stripNLCR(convertManifestToString(elem)).getBytes()) +
+ "</Base64Content></HashInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createXMLDSIGManifestCheck("0","","1")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+ /**
+ * Method create323:
+ * There are two references in the signature pointing
+ * with xpointer to two embedded valid manifest dsig:objects
+ * @throws Exception
+ */
+ public void create323() throws Exception {
+ String testNumber = "323";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt");
+ Element man1 = cpkcs.createReferenceWithManifest(fileURI1,"manifestObject");
+
+ //HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...???
+
+ Element man2 = cpkcs.createReferenceWithManifest(fileURI2,"manifestObject2");
+ cpkcs.setKeyInformation();
+ Document sign = cpkcs.returnSig();
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<HashInputData><Base64Content>"+
+ Base64Utils.encode(stripNLCR(convertManifestToString(man1)).getBytes()) +
+ "</Base64Content></HashInputData>"+
+ "<HashInputData><Base64Content>"+
+ Base64Utils.encode(stripNLCR(convertManifestToString(man2)).getBytes()) +
+ "</Base64Content></HashInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createXMLDSIGManifestCheck("0","","1")+
+ vxBean.createXMLDSIGManifestCheck("0","","2")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+
+ }
+ public void create324() throws Exception {
+ String testNumber = "324";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+ URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt");
+ Element man = cpkcs.createReferencesWithManifest(fileURI1,"manifestObject",fileURI2);
+
+ //HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...???
+ cpkcs.setKeyInformation();
+ Document sign = cpkcs.returnSig();
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ sign,
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<HashInputData><Base64Content>"+
+ Base64Utils.encode(stripNLCR(convertManifestToString(man)).getBytes()) +
+ "</Base64Content></HashInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createXMLDSIGManifestCheck("0","","1")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+
+ }
+
+ /**
+ * Method create325.
+ * @throws Exception
+ */
+ public void create325() throws Exception {
+ String testNumber = "325";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Element mani = cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");
+ cpkcs.createEnvelopedDataObject("envelopedData",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
+
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<HashInputData><Base64Content>"+
+ Base64Utils.encode(stripNLCR(convertManifestToString(mani)).getBytes()) +
+ "</Base64Content></HashInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createXMLDSIGManifestCheck("1","1","1")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+ public void create326() throws Exception {
+ String testNumber = "326";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Element mani = cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");
+ cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
+
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(false,false,null));
+
+ request = replaceString(request,"<dsig:Object Id=\"envelopedData\">","<dsig:Object Id=\"envelopedData\">Dies sind veraenderte Daten und die Ursprungsdaten: \n");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ vxBean.createSignatureCheck("0")+
+ vxBean.createXMLDSIGManifestCheck("1","1","1")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+ /**
+ * Method create327: The certificate comes as raw data and is converted to a dsig:object with
+ * base64-data, the KeyInfo has a retrievalMethod pointing to that object and transforming the
+ * data back to raw-data for using that to create the signature
+ * @throws Exception
+ */
+ public void create327() throws Exception {
+
+ String testNumber = "327";
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/test-ee2003_normal.der");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
+
+ //DER-encoded RAW-Zertifikat zu Binary64 konvertieren
+
+ //String tmp = readBinaryFileAsBase64(fileURI.getPath()); : Funktioniert nicht mehr wegen http-addi
+
+ //dsig:Object mit den Binary64-Daten erzeugen (==> CRs weglassen!!!!!)
+ cpkcs.createEnvelopedDataObject("rawCertAsBase64",readFileCR(fileURI.toString()+"base64.enc"));
+
+ //Neue Transformation erzeugen, um die Base64-Daten zurückzuwandeln
+ Transform[] tr = new Transform[1];
+ tr[0] = new TransformImplBase64Decode();
+ InputStream s = getHttpInputStream(fileURI.toString() + "base64.enc");
+ tr[0].setInput(s,null);
+
+ //Neues KeyInfo-Objekt erzeugen, wobei nicht die Zertifikate sondern
+ //nur eine RetrievalMethod angegeben wird, die auf das oben erzeugte Base64-dsig:Object verweist
+ cpkcs.setKeyInformation(true, new URI("#xpointer(id('rawCertAsBase64')/node())") , typeURI, tr);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ cpkcs.setKeyInformation(1);
+
+ writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
+ }
+
+ /**
+ * Method makeOutputFile.
+ * @param start
+ * @param signatureDoc
+ * @param end
+ * @return String
+ * @throws Exception
+ */
+ public String makeOutputFile(
+ String start,
+ Document signatureDoc,
+ String end)
+ throws Exception {
+ ArrayList foundNodes = new ArrayList();
+ findNode(
+ signatureDoc.getDocumentElement(),
+ "dsig:Signature",
+ foundNodes);
+
+ Node outputNode = null;
+
+ if (foundNodes.size() > 0) {
+ outputNode = (Node) foundNodes.get(0);
+ }
+
+ String erg = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ int pos = erg.indexOf("<dsig");
+ erg = erg.substring(pos);
+
+ // insert the dsig:signature element in a MOA Response Message
+ erg = start + erg + end;
+
+ return erg;
+ }
+
+ /**
+ * Method createRequestStart.
+ * @param testNumber
+ * @param useDate
+ * @param changeHours
+ * @return String
+ */
+ private String createRequestStart(String testNumber, boolean useDate, int changeHours)
+{
+ return createRequestStart(testNumber, useDate,changeHours,"");
+
+}
+
+ private String createRequestStart(String testNumber, boolean useDate, int changeHours, String attribut)
+ {
+ return createRequestStart(testNumber, useDate,changeHours,attribut,"");
+ }
+ private String createRequestStart(String testNumber, boolean useDate, int changeHours, String attribut,String dtd)
+ {String reqStart = null;
+ System.out.println("======================================================");
+ System.out.println("================== TEST-NUMBER "+ testNumber + " ===================");
+ System.out.println("======================================================");
+
+ reqStart =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ + "<!-- Testnumber: "
+ + testNumber
+ + "-->\n";
+
+ if(dtd!=null && !dtd.trim().equals(""))
+ reqStart += dtd;
+
+ reqStart+= "<VerifyXMLSignatureRequest\n"
+ + " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"
+ + " xmlns:xml=\"http://www.w3.org/XML/1998/namespace\""
+ + " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">\n";
+
+ if (useDate) {
+ reqStart += " <DateTime>"
+ + getDate(changeHours)
+ + "</DateTime>\n";
+ }
+
+ reqStart += " <VerifySignatureInfo>\n"
+ + " <VerifySignatureEnvironment "+attribut+">\n"
+ + " <XMLContent xml:space=\"preserve\">" ;
+ return reqStart;
+ }
+
+ /**
+ * Method getTransformsResult:the input transforms array will
+ * be calculated to return a string-representation of the result
+ * @param tr
+ * @return String
+ * @throws Exception
+ */
+ private String getTransformsResult(Transform[] tr) throws Exception
+ {
+ Transform[] myTransforms = tr;
+ String result = "";
+ for (int t=0; t<tr.length-1; t++)
+ {
+ myTransforms[t+1].setInput((InputStream)myTransforms[t].transform(),null);
+ }
+ ByteArrayInputStream is = (ByteArrayInputStream)myTransforms[tr.length-1].transform();
+ byte[] b = new byte[1];
+ is.read(b);
+ while (is.available() > 0)
+ {
+ result += new String(b);
+ is.read(b);
+ }
+ result += new String(b);
+
+ return result;
+ }
+
+
+ /**
+ * Method createRequestEnd.
+ * @param useReturnHashInputData
+ * @param useSupplement
+ * @param supplementReference
+ * @return String
+ * @throws Exception
+ */
+ private String createRequestEnd(
+ boolean useReturnHashInputData,
+ boolean useSupplement,
+ String supplementReference)
+ throws Exception {
+
+ String reqEnd = null;
+
+/* reqEnd =
+ "</VerifySignatureEnvironment>\n"
+ + " <VerifySignatureLocation>#xpointer(/VerifyXMLSignatureRequest/VerifySignatureInfo/VerifySignatureEnvironment/dsig:Signature)</VerifySignatureLocation>\n"
+ + " </VerifySignatureInfo>\n";
+*/
+ reqEnd ="</XMLContent>"+
+ "</VerifySignatureEnvironment>\n"
+ + " <VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>\n"
+ + " </VerifySignatureInfo>\n";
+
+
+
+ if (useSupplement)
+ {
+ reqEnd += " <SupplementProfile>\n" +
+ " <Content Reference=\"" + supplementReference.toString() + "\">\n" +
+ " <XMLContent xml:space=\"preserve\">"+readFileCR(supplementReference.toString())+"</XMLContent>\n" +
+ " </Content>\n" +
+ " </SupplementProfile>\n";
+ }
+
+ if (useReturnHashInputData) {
+ reqEnd += " <ReturnHashInputData/>\n";
+ }
+ reqEnd += " <TrustProfileID>TrustProfile1</TrustProfileID>\n"
+ + "</VerifyXMLSignatureRequest>\n";
+ return reqEnd;
+
+ }
+
+ private String createSignatureInfoEnd()
+ throws Exception {
+
+ return "</XMLContent>"+"</VerifySignatureEnvironment>\n"
+ + " <VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>\n"
+ + " </VerifySignatureInfo>\n";
+
+ }
+
+ private String createRequestShortEnd(boolean useReturnHashInputData)
+ throws Exception {
+
+ String reqEnd = "";
+
+ if (useReturnHashInputData)
+ reqEnd = " <ReturnHashInputData/>\n";
+
+ reqEnd += " <TrustProfileID>TrustProfile1</TrustProfileID>\n"
+ + "</VerifyXMLSignatureRequest>\n";
+ return reqEnd;
+
+ }
+ /**
+ * Method createResponse.
+ * @param testNumber
+ * @param signatureCheckCode
+ * @return String
+ * @throws Exception
+ */
+ private String createResponse(String x509cert, String testNumber, String signatureCheckCode) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal_extract.cer");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + x509cert
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <HashInputData>\n" + " ";
+ /*res += "<XMLContent xml:space=\"preserve\">"+readFileCR(
+ configuration_.getProperty("baseDir")
+ + "resources/testSimple.txt")+
+ "</XMLContent>";*/
+ res += "<Base64Content>"+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ "resources/testSimple.txt"))+"</Base64Content>";
+
+ res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");
+
+ return res;
+ }
+
+ private String createResponseL(String x509cert, String testNumber, String signatureCheckCode,String filename) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal_extract.cer");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + x509cert
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+
+ res += replaceString(vxBean.getFooterSignatureCheck(signatureCheckCode, "0"),"</HashInputData>","");
+
+ return res;
+ }
+
+ private String createResponse(String x509cert, String testNumber, String signatureCheckCode,int code) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal_extract.cer");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + x509cert
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <SignatureCheck>\n" +
+ " <Code>1</Code><Info><FailedReference>1</FailedReference></Info>\n" +
+ " </SignatureCheck>\n" +
+ " <CertificateCheck>\n" +
+ " <Code>0</Code>\n" +
+ " </CertificateCheck>\n" +
+ "</VerifyXMLSignatureResponse>";;
+
+ return res;
+ }
+
+
+ /**
+ * Method createResponse.
+ * @param testNumber
+ * @param signatureCheckCode
+ * @return String
+ * @throws Exception
+ */
+ private String createResponse(String x509cert, String testNumber, String signatureCheckCode,int code,String filename) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal_extract.cer");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + x509cert
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <HashInputData>\n" + " ";
+ /*res += "<XMLContent xml:space=\"preserve\">"+readFileCR(
+ configuration_.getProperty("baseDir")
+ + "resources/testSimple.txt")+
+ "</XMLContent>";*/
+ if(filename.startsWith("text:"))
+ res += "<Base64Content>"+Base64Utils.encode(filename.substring(5).getBytes())+"</Base64Content>";
+ else
+ res += "<Base64Content>"+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ filename))+"</Base64Content>";
+
+ res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");
+
+ return res;
+ }
+
+/**
+ * Method createResponse.
+ * @param testNumber
+ * @param signatureCheckCode
+ * @return String
+ * @throws Exception
+ */
+ private String createResponse(String x509cert, String testNumber, String signatureCheckCode,String iss,String subject,String serial) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal_extract.cer");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += subject;
+ res += " <dsig:X509IssuerSerial>\n";
+ res += iss;
+ res += serial;
+ res += " </dsig:X509IssuerSerial>\n"
+ + x509cert
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <HashInputData>\n" + " ";
+ /*res += "<XMLContent xml:space=\"preserve\">"+readFileCR(
+ configuration_.getProperty("baseDir")
+ + "resources/testSimple.txt")+
+ "</XMLContent>";*/
+ res += "<Base64Content>"+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ "resources/testSimple.txt"))+"</Base64Content>";
+
+ res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");
+
+ return res;
+ }
+
+
+ private String createResponse(String x509cert, String testNumber, String signatureCheckCode, String hashData) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + x509cert
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <HashInputData>\n";
+ /* " <XMLContent xml:space=\"preserve\">"+
+ hashData +
+ "</XMLContent>\n";*/
+ res += "<Base64Content>"+Base64Utils.encode(hashData.getBytes())+"</Base64Content>";
+ System.out.println(res);
+ res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");
+ System.out.println(res);
+
+ return res;
+ }
+
+ private String createResponse(String x509cert, String testNumber, String signatureCheckCode, String hashData,String hashData2) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + x509cert
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <HashInputData>\n";
+ /* " <XMLContent xml:space=\"preserve\">"+
+ hashData +
+ "</XMLContent>\n";*/
+ res += "<Base64Content>"+Base64Utils.encode(hashData.getBytes())+"</Base64Content>";
+ res += "</HashInputData><HashInputData>";
+ res += "<Base64Content>"+Base64Utils.encode(hashData2.getBytes())+"</Base64Content>";
+ res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");
+
+ return res;
+ }
+
+ private String createResponseWithoutHashInputData(String x509cert, String testNumber, String signatureCheckCode,boolean dsig) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + x509cert
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n"
+ + " <SignatureCheck>\n" +
+ " <Code>" + signatureCheckCode + "</Code>\n" +
+ " </SignatureCheck>\n";
+
+ if(dsig) res+=vxBean.createXMLDSIGManifestCheck("0","","1");
+ res+= " <CertificateCheck>\n" +
+ " <Code>0</Code>\n" +
+ " </CertificateCheck>\n" +
+ "</VerifyXMLSignatureResponse>";
+
+ return res;
+ }
+
+ private String createResponseWithoutHashInputData(String x509cert, String testNumber, String signatureCheckCode) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + x509cert
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n"
+ + " <SignatureCheck>\n" +
+ " <Code>" + signatureCheckCode + "</Code>\n" +
+ " </SignatureCheck>\n" +
+ " <CertificateCheck>\n" +
+ " <Code>0</Code>\n" +
+ " </CertificateCheck>\n" +
+ "</VerifyXMLSignatureResponse>";
+
+ return res;
+ }
+
+ private String createResponsePart(String x509cert) throws Exception {
+
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n";
+
+ res +=x509cert;
+
+ res += " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ /*res += " <HashInputData>\n" + " <XMLContent>";
+ res += readFile(
+ configuration_.getProperty("baseDir")
+ + "resources/testSimple.txt");
+ */
+ //res += vxBean.getFooterXMLDSIGManifestCheck(xmlDSIGManifestCheckCode,"0");
+
+ return res;
+ }
+
+ public String readFileCR(String filename) throws Exception {
+
+ /*StringBuffer data = new StringBuffer();
+ String line = null;
+ BufferedReader br = new BufferedReader(new FileReader(filename));
+ while ((line = br.readLine()) != null) {
+ data.append(line);
+ data.append("\n");
+ }
+ */
+ String response="";
+ byte[] result;
+
+ if (filename.substring(0,4).toLowerCase().equals("http"))
+ {
+
+ URL targetUrl = new URL(filename);
+ HttpURLConnection h = (HttpURLConnection)targetUrl.openConnection();
+ InputStream is = h.getInputStream();
+
+ int size = 0;
+
+ result = new byte[h.getContentLength()];
+ for (int i = 0; i < result.length; i++) {
+ byte[] b = new byte[1];
+ is.read(b);
+ result[i]=b[0];
+ }
+ is.close();
+ }
+ else
+ {
+ RandomAccessFile raf = new RandomAccessFile(filename, "r");
+ if (raf.length() > Integer.MAX_VALUE)
+ throw new IOException("file too big to fit in byte array.");
+
+ result = new byte[(int) raf.length()];
+ raf.read(result);
+ raf.close();
+
+ }
+
+ byte[] temp = new byte[result.length];
+ int s = 0;
+ for (int t=0; t<result.length; t++)
+ {
+ temp[s] = result[t];
+ s++;
+ if (temp[s-1]==10)
+ {
+ if (temp[s-2]==13)
+ {
+ temp[s-2]=10;
+ s--;
+ }
+ }
+ }
+ byte[] res = new byte[s];
+ result = null;
+
+ System.arraycopy(temp,0,res,0,s);
+
+
+ response = new String(res);
+
+ try {
+ response = replaceString(response,"<?xml version=\"1.0\" encoding=\"utf-8\"?>","");
+ }
+ catch (Exception e) {}
+
+ return response;
+ }
+
+private InputStream getHttpInputStream(String url) throws Exception
+ {
+ URL targetUrl = new URL(url);
+ HttpURLConnection h = (HttpURLConnection)targetUrl.openConnection();
+ return h.getInputStream();
+ }
+
+private String convertManifestToString(Element e) throws Exception
+ {
+ String result =(new DOMWriterImpl(true)).writeToString(e);
+ result = replaceString(result,"<?xml version=\"1.0\"?>","");
+ result = replaceStringAll(result,"&apos;","'");
+ result = replaceStringAll(result,"#sha1\"/><dsig:","#sha1\"></dsig:DigestMethod><dsig:");
+
+ //result = replaceString(result," xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"","");
+ return result;
+ }
+
+ private String stripNLCR(String input)
+ {
+ String output = replaceStringAll(input,"\n","");
+ output = replaceStringAll(output,"\r","");
+ return output;
+ }
+
+ public static String replaceStringAll(
+ String input,
+ String oldPart,
+ String newPart)
+ {
+
+ String erg = null;
+
+ int pos = input.indexOf(oldPart);
+ if(pos==-1) return input;
+
+ while(true)
+ {
+
+ //First Part
+ pos = input.indexOf(oldPart);
+ if(pos==-1) break;
+ erg = input.substring(0, pos);
+
+ //Insert new Part
+ erg += newPart;
+
+ //insert REST
+ erg
+ += input.substring(
+ input.indexOf(oldPart) + oldPart.length(),
+ input.length());
+
+ input = erg;
+ }
+ return erg;
+ }
+
+
+}
+
diff --git a/spss.test/src/testgenerator/TestGeneratorVX2.java b/spss.test/src/testgenerator/TestGeneratorVX2.java
new file mode 100644
index 000000000..96612da9e
--- /dev/null
+++ b/spss.test/src/testgenerator/TestGeneratorVX2.java
@@ -0,0 +1,1600 @@
+package testgenerator;
+import iaik.ixsil.algorithms.DigestAlgorithmImplSHA1;
+import iaik.ixsil.algorithms.Transform;
+import iaik.ixsil.algorithms.TransformImplCanonicalXML;
+import iaik.ixsil.algorithms.TransformImplXSLT;
+import iaik.ixsil.util.URI;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.RandomAccessFile;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+import at.gv.egovernment.moa.util.Base64Utils;
+
+/**
+ * @author stephan
+ */
+public class TestGeneratorVX2 extends TestCases {
+
+ private static final int canAlgCanXML = 1;
+ private static final int canAlgCanXMLwithCom = 2;
+ private static final int canAlgExcXML = 3;
+ private static final int canAlgExcXMLwithCom = 4;
+ private static VXResponseBean vxBean = null;
+ private static String etsiPropertyName = "ETSIProperties";
+ private static URI etsiURI;
+
+ public static void main(String[] args) throws Exception {
+
+ vxBean = new VXResponseBean();
+
+ TestGeneratorVX2 testcase = new TestGeneratorVX2();
+
+ etsiURI = new URI("http://uri.etsi.org/01903/v1.1.1#SignedProperties");
+
+ testcase.create201();
+ testcase.create202();
+ testcase.create203();
+ testcase.create205();
+ testcase.create206();
+ testcase.create208();
+ testcase.create209();
+ testcase.create210();
+ testcase.create211();
+ testcase.create212();
+ testcase.create213();
+ testcase.create214();
+ testcase.create215();
+ testcase.create216();
+ testcase.create217();
+ }
+
+ /* ==================================================================================================== */
+
+ public TestGeneratorVX2() throws Exception {
+
+ super();
+
+ // Set config properties
+ configuration_.setProperty("TestClass", "TestGeneratorVX");
+
+ // configuration_.setProperty("privateKeyFile", baseDir + "additionalFiles/keys/RSAPrivateKey.der");
+ // configuration_.setProperty("publicKeyFile", baseDir + "additionalFiles/keys/RSAPublicKey.der");
+ // configuration_.setProperty("signatureFile", baseDir + "additionalFiles/signatures/Signature.unit1.xml");
+
+ iaik.security.provider.IAIK.addAsProvider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+ }
+
+ /* ==================================================================================================== */
+
+
+ /**
+ * Method create001.
+ * @throws Exception
+ */
+ /* ===================================================================================================================== */
+ /* ===================================================================================================================== */
+ /* ===================================================================================================================== */
+
+
+public void create201() throws Exception
+ { String testNumber = "201";
+
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(etsiPropertyName,
+ ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('ETSIProperties')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename + ""));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("201 a simple request w/ SignatureManifestCheckParams (but w/o Supplement)",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ //
+
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<etsi:SignedProperties");
+ pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+ public void create202() throws Exception
+ { String testNumber = "202";
+
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(
+ etsiPropertyName,ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('ETSIProperties')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams(null);
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("202 no SignatureManifestCheckParams/@ReturnReferenceInputData" ,true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<etsi:SignedProperties");
+ pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+public void create203() throws Exception
+ { String testNumber = "203";
+
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(
+ etsiPropertyName,ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('ETSIProperties')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("false");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("203 SignatureManifestCheckParams/@ReturnReferenceInputData = false",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+
+
+
+ public void create205() throws Exception
+ { String testNumber = "205";
+
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[2];
+ TransformImplCanonicalXML trans0 = new TransformImplCanonicalXML();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans0.setInput(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans0;
+
+ TransformImplXSLT trans = new TransformImplXSLT();
+ s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[1] = trans;
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(
+ etsiPropertyName,ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('ETSIProperties')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename ));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("206 - 2 dsig:Transform elements ==> Canonisierung + Stylesheet",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<etsi:SignedProperties");
+ pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+public void create206() throws Exception
+ { String testNumber = "206";
+
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(
+ etsiPropertyName,ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('ETSIProperties')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Hash",getBase64Hash(configuration_.getProperty("baseDir")+"resources/" + filename));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("206 TransformParameter/Hash statt TransformParameter/Base64Content (Der Hash wird von " + filename + " gebildet)",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<etsi:SignedProperties");
+ pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+public void create208() throws Exception
+ { String testNumber = "208";
+
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(
+ etsiPropertyName,ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('ETSIProperties')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_book.xsl");
+
+ String request =
+ makeOutputFile(
+ createRequestStart("208 - weder Base64Content noch Hash wird verwendet ",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<etsi:SignedProperties");
+ pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+
+public void create209() throws Exception
+ { String testNumber = "209";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_book.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_book.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+// cpkcs.createReferenceWithManifest(
+// new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+// "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(
+ etsiPropertyName,ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('ETSIProperties')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("209 0 TransformParameter ==> ganzes Element raus und direkt auf CX1_book.xsl verweisen (in der Transformations-Referenz)",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ /*int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");*/
+
+ int pos_1 = request.indexOf("<etsi:SignedProperties");
+ int pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("2")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+public void create210() throws Exception
+ { String testNumber = "210";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/VX2_bookref2includes.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX2_bookref2includes.xsl"));
+ trans.setInput(s,null);
+ tr[0] = trans;
+
+ //System.out.println(getTransformsResult(tr));
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferencesWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX2_book0.xsl"),
+ "Manifest",new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX2_book1.xsl"), "http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(etsiPropertyName,
+ ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('ETSIProperties')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX2_book0.xsl");
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/VX2_book0.xsl"));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX2_book1.xsl");
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/VX2_book1.xsl"));
+
+
+ String request =
+ makeOutputFile(
+ createRequestStart("210 2 includes",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<etsi:SignedProperties");
+ pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+public void create211() throws Exception
+ { String testNumber = "211";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(etsiPropertyName,
+ ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('ETSIProperties')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ /*for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_book.xsl");
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl"));*/
+
+ smcp.addTransformsProfileID("TransformsInfoProfile1");
+ smcp.addTransformsProfileID("TransformsInfoProfile2");
+
+ String request =
+ makeOutputFile(
+ createRequestStart("211 2 VerifyTransformsInfoID ==> Statt TransformsInfoProfile , in ein IntoProfileID auf Datei mit orig.Daten des TransInfoProfile verweisen, das andere auf ein Transforms, das nur Canonisiserung enthaelt",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<etsi:SignedProperties");
+ pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+ public void create212() throws Exception
+ { String testNumber = "212";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-2");
+
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ ets.addDataObjectFormat("#reference-2");
+ cpkcs.createEnvelopedDataObject(
+ etsiPropertyName,ets.getQualProp());
+ //2. DataObject Format
+ cpkcs.createReference(new URI("#xmlns(etsi=http://uri.etsi.org/01903/v1.1.1%23)%20xpointer(id('ETSIProperties')/child::etsi:QualifyingProperties/child::etsi:SignedProperties)"),etsiURI);
+ cpkcs.setKeyInformation();
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename ));
+
+ SignatureManifestCheckParams smcp2 = new SignatureManifestCheckParams(null);
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp2.addDisgTransform(tr[trNr].toElement(smcp2.getDoc()));
+ smcp2.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp2.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename ));
+
+ String signManiDoc = replaceString(smcp.returnDoc(),"</SignatureManifestCheckParams>","") +
+ replaceString(smcp2.returnDoc(),"<SignatureManifestCheckParams>","");
+
+ String request =
+ makeOutputFile(
+ createRequestStart("212 2 ReferenceInfo (for 2 dsig:Reference (pplus Manifest + SignedProperties) : etsi:DataObjectFormat 2mal, Reference 2mal, Manifest 1mal, ReferenceInfo 2mal)",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + signManiDoc
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<etsi:SignedProperties");
+ pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("0")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+
+ public void create213() throws Exception
+ {
+ String testNumber = "213";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(etsiPropertyName,
+ ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "'))/*/*"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("213 kein TransformParameter element obwohl in Transforms URIs referenziert werden",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ /*pos_1 = request.indexOf("<etsi:SignedProperties");
+ pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");*/
+
+ pos_1 = request.indexOf("<dsig:Object Id=\"ETSIProperties\">");
+ pos_2 = request.substring(pos_1).indexOf("</dsig:Object>");
+
+ String etsi = request.substring(pos_1,pos_1+pos_2+"</dsig:Object>".length());
+ etsi = replaceString(etsi,"<dsig:Object Id=\"ETSIProperties\">","<dsig:Object Id=\"ETSIProperties\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">");
+
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("1","<Info><FailedReference>1</FailedReference></Info>")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+ public void create214() throws Exception
+ {
+ String testNumber = "214";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(etsiPropertyName,
+ ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "'))/*/*"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+
+ smcp.addTransformsProfileID("TransformsInfoProfile2");
+
+ String request =
+ makeOutputFile(
+ createRequestStart("214 1 VerifyTransformsInfoID ==> Passt aber nicht zur Transformation (XSLT <==> Canonisiserung)",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<dsig:Object Id=\"ETSIProperties\">");
+ pos_2 = request.substring(pos_1).indexOf("</dsig:Object>");
+
+ String etsi = request.substring(pos_1,pos_1+pos_2+"</dsig:Object>".length());
+ etsi = replaceString(etsi,"<dsig:Object Id=\"ETSIProperties\">","<dsig:Object Id=\"ETSIProperties\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("1","<Info><FailedReference>1</FailedReference></Info>")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+ public void create215() throws Exception
+ { String testNumber = "215";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ //Reference 1
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ //ets.addDataObjectFormat("#reference-2");
+ cpkcs.createEnvelopedDataObject(
+ etsiPropertyName,ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "')/*/*)"),etsiURI);
+ cpkcs.setKeyInformation();
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename));
+
+ SignatureManifestCheckParams smcp2 = new SignatureManifestCheckParams(null);
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp2.addDisgTransform(tr[trNr].toElement(smcp2.getDoc()));
+ smcp2.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp2.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename));
+
+ String signManiDoc = replaceString(smcp.returnDoc(),"</SignatureManifestCheckParams>","") +
+ replaceString(smcp2.returnDoc(),"<SignatureManifestCheckParams>","");
+
+ String request =
+ makeOutputFile(
+ createRequestStart("215 number of ReferenceInfo is different from number of dsig:Reference in the signature",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + signManiDoc
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+ //writeFile(vxResErrFile(testNumber),"2271");
+
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<etsi:SignedProperties");
+ pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("1")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+ public void create216() throws Exception
+ {
+ String testNumber = "216";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ //Reference 1
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-2");
+
+
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ ets.addDataObjectFormat("#reference-2");
+ cpkcs.createEnvelopedDataObject(
+ etsiPropertyName,ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "')/*/*)"),etsiURI);
+ cpkcs.setKeyInformation();
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("216 number of References id bigger then number of ReferenceInfos",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+ //writeFile(vxResErrFile(testNumber),"2271");
+
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<etsi:SignedProperties");
+ pos_2 = request.indexOf("</etsi:SignedProperties>");
+
+ String etsi = request.substring(pos_1,pos_2+"</etsi:SignedProperties>".length());
+ //etsi = replaceStringAll(etsi,"etsi:","ns1:");
+ etsi = replaceString(etsi,"<etsi:SignedProperties","<etsi:SignedProperties xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\"");
+ etsi = replaceString(etsi,"<dsig:X509IssuerName","<dsig:X509IssuerName xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+ etsi = replaceString(etsi,"<dsig:X509SerialNumber","<dsig:X509SerialNumber xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("1")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+ public void create217() throws Exception
+ { String testNumber = "217";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(etsiPropertyName, ets.getQualProp());
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "'))/*/*"), etsiURI);
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Hash",getBase64Hash(configuration_.getProperty("baseDir")+"resources/" + filename));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("217 - TransformParameter/@URI resolves but Hash does not match - which hashing algorithm?",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ request = replaceString(request,"<Hash><dsig:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><dsig:DigestValue>",
+ "<Hash><dsig:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><dsig:DigestValue>abcd");
+
+ writeFile(vxReqFile(testNumber),request);
+ //writeFile(vxResErrFile(testNumber),"2205");
+
+ int pos_1 = request.indexOf("<dsig:Manifest");
+ int pos_2 = request.indexOf("</dsig:Manifest>");
+
+ String manifest = request.substring(pos_1,pos_2+"</dsig:Manifest>".length());
+ manifest = replaceString(manifest,"<dsig:Manifest Id=\"Manifest\"","<dsig:Manifest Id=\"Manifest\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"");
+
+ pos_1 = request.indexOf("<dsig:Object Id=\"ETSIProperties\">");
+ pos_2 = request.substring(pos_1).indexOf("</dsig:Object>");
+
+ String etsi = request.substring(pos_1,pos_1+pos_2+"</dsig:Object>".length());
+ etsi = replaceString(etsi,"<dsig:Object Id=\"ETSIProperties\">","<dsig:Object Id=\"ETSIProperties\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">");
+
+ String response = createResponsePart(cpkcs.getX509CertString()) +
+ "<ReferenceInputData><Base64Content>"+
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/BookData.xml")+
+ "</Base64Content></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+manifest+"</XMLContent></ReferenceInputData>"+
+ "<ReferenceInputData><XMLContent xml:space=\"preserve\">"+etsi+"</XMLContent></ReferenceInputData>"+
+ vxBean.createSignatureCheck("0")+
+ vxBean.createSignatureManifestCheck("1","<Info><FailedReference>1</FailedReference></Info>")+
+ vxBean.createCertificateCheck("0")+
+ "</VerifyXMLSignatureResponse>";
+
+ writeFile(vxResFile(testNumber), response);
+ }
+
+
+ /**
+ * Method makeOutputFile.
+ * @param start
+ * @param signatureDoc
+ * @param end
+ * @return String
+ * @throws Exception
+ */
+ public String makeOutputFile(
+ String start,
+ Document signatureDoc,
+ String end)
+ throws Exception {
+ ArrayList foundNodes = new ArrayList();
+ findNode(
+ signatureDoc.getDocumentElement(),
+ "dsig:Signature",
+ foundNodes);
+
+ Node outputNode = null;
+
+ if (foundNodes.size() > 0) {
+ outputNode = (Node) foundNodes.get(0);
+ }
+
+ String erg = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ int pos = erg.indexOf("<dsig");
+ erg = erg.substring(pos);
+
+ // insert the dsig:signature element in a MOA Response Message
+ erg = start + erg + end;
+
+ return erg;
+ }
+
+ /**
+ * Method createRequestStart.
+ * @param testNumber
+ * @param useDate
+ * @param changeHours
+ * @return String
+ */
+ private String createRequestStart(String testNumber, boolean useDate, int changeHours)
+ {String reqStart = null;
+ System.out.println("======================================================");
+ System.out.println("================== TEST-NUMBER "+ testNumber + " ===================");
+ System.out.println("======================================================");
+
+ reqStart =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ + "<!-- Testnumber: "
+ + testNumber
+ + "-->\n"
+ + "<VerifyXMLSignatureRequest\n"
+ + " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"
+ + " xmlns:xml=\"http://www.w3.org/XML/1998/namespace\""
+ + " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">\n";
+
+ if (useDate) {
+ reqStart += " <DateTime>"
+ + getDate(changeHours)
+ + "</DateTime>\n";
+ }
+
+ reqStart += " <VerifySignatureInfo>\n"
+ + " <VerifySignatureEnvironment>\n"
+ + " <XMLContent xml:space=\"preserve\">" ;
+ return reqStart;
+ }
+
+ /**
+ * Method getTransformsResult:the input transforms array will
+ * be calculated to return a string-representation of the result
+ * @param tr
+ * @return String
+ * @throws Exception
+ */
+ private String getTransformsResult(Transform[] tr) throws Exception
+ {
+ Transform[] myTransforms = tr;
+ String result = "";
+ for (int t=0; t<tr.length-1; t++)
+ {
+ myTransforms[t+1].setInput((InputStream)myTransforms[t].transform(),null);
+ }
+
+ ByteArrayInputStream is = (ByteArrayInputStream)myTransforms[tr.length-1].transform();
+
+
+ byte[] b = new byte[1];
+ is.read(b);
+ while (is.available() > 0)
+ {
+ result += new String(b);
+ is.read(b);
+ }
+ result += new String(b);
+
+ return result;
+ }
+
+ private String getBase64Hash(String filename) throws Exception
+ {
+ DigestAlgorithmImplSHA1 dig = new DigestAlgorithmImplSHA1();
+
+ dig.setInput(new FileInputStream(filename));
+
+ InputStream erg = dig.digest();
+ String result = "";
+
+ int size = erg.available();
+
+ byte[] b = new byte[size];
+ erg.read(b);
+
+ return Base64Utils.encode(b);
+ }
+
+ /**
+ * Method createRequestEnd.
+ * @param useReturnHashInputData
+ * @param useSupplement
+ * @param supplementReference
+ * @return String
+ * @throws Exception
+ */
+ private String createRequestEnd(
+ boolean useReturnHashInputData,
+ boolean useSupplement,
+ String supplementReference)
+ throws Exception {
+
+ String reqEnd = null;
+
+/* reqEnd =
+ "</VerifySignatureEnvironment>\n"
+ + " <VerifySignatureLocation>#xpointer(/VerifyXMLSignatureRequest/VerifySignatureInfo/VerifySignatureEnvironment/dsig:Signature)</VerifySignatureLocation>\n"
+ + " </VerifySignatureInfo>\n";
+*/
+ reqEnd ="</XMLContent>"+
+ "</VerifySignatureEnvironment>\n"
+ + " <VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>\n"
+ + " </VerifySignatureInfo>\n";
+
+
+
+ if (useSupplement)
+ {
+ reqEnd += " <Supplement>\n" +
+ " <Content Reference=\"file:/" + supplementReference.toString() + "\">\n" +
+ " <XMLContent>"+readFile(supplementReference.toString())+"</XMLContent>\n" +
+ " </Content>\n" +
+ " </Supplement>\n";
+ }
+
+ if (useReturnHashInputData) {
+ reqEnd += " <ReturnHashInputData/>\n";
+ }
+ reqEnd += " <TrustProfileID>TrustProfile1</TrustProfileID>\n"
+ + "</VerifyXMLSignatureRequest>\n";
+ return reqEnd;
+
+ }
+
+ private String createSignatureInfoEnd()
+ throws Exception {
+
+ return "</XMLContent>"+"</VerifySignatureEnvironment>\n"
+ + " <VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>\n"
+ + " </VerifySignatureInfo>\n";
+
+ }
+
+ private String createRequestShortEnd(boolean useReturnHashInputData)
+ throws Exception {
+
+ String reqEnd = "";
+
+ if (useReturnHashInputData)
+ reqEnd = " <ReturnHashInputData/>\n";
+
+ reqEnd += " <TrustProfileID>TrustProfile1</TrustProfileID>\n"
+ + "</VerifyXMLSignatureRequest>\n";
+ return reqEnd;
+
+ }
+ /**
+ * Method createResponse.
+ * @param testNumber
+ * @param signatureCheckCode
+ * @return String
+ * @throws Exception
+ */
+ private String createResponse(String testNumber, String signatureCheckCode) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <HashInputData>\n" + " <XMLContent xml:space=\"preserve\">";
+ res += readFile(
+ configuration_.getProperty("webbaseDir")
+ + "resources/testDaten.txt")+
+ "</XMLContent>";
+
+ res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");
+
+ return res;
+ }
+
+ private String createResponse(String testNumber, String signatureCheckCode, String hashData) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <HashInputData>\n" +
+ " <XMLContent xml:space=\"preserve\">"+
+ hashData +
+ "</XMLContent>\n";
+ res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");
+
+ return res;
+ }
+
+
+ private String createResponseWithoutHashInputData(String testNumber, String signatureCheckCode) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n"
+ + " <SignatureCheck>\n" +
+ " <Code>" + signatureCheckCode + "</Code>\n" +
+ " </SignatureCheck>\n" +
+ " <CertificateCheck>\n" +
+ " <Code>0</Code>\n" +
+ " </CertificateCheck>\n" +
+ "</VerifyXMLSignatureResponse>";
+
+ return res;
+ }
+/* private String createResponseXMLDsigCheck(String testNumber, String xmlDSIGManifestCheckCode) throws Exception {
+
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <HashInputData>\n" + " <XMLContent>";
+ res += readFile(
+ configuration_.getProperty("webbaseDir")
+ + "resources/testDaten.txt");
+
+ res += vxBean.getFooterXMLDSIGManifestCheck(xmlDSIGManifestCheckCode,"0");
+
+ return res;
+ }*/
+
+ private String createResponsePart(String x509cert) throws Exception {
+
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + x509cert
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ /*res += " <HashInputData>\n" + " <XMLContent>";
+ res += readFile(
+ configuration_.getProperty("webbaseDir")
+ + "resources/testDaten.txt");
+ */
+ //res += vxBean.getFooterXMLDSIGManifestCheck(xmlDSIGManifestCheckCode,"0");
+
+ return res;
+ }
+
+ public String readFileCR(String filename) throws Exception {
+
+ /*StringBuffer data = new StringBuffer();
+ String line = null;
+ BufferedReader br = new BufferedReader(new FileReader(filename));
+ while ((line = br.readLine()) != null) {
+ data.append(line);
+ data.append("\n");
+ }
+ */
+ String response="";
+ byte[] result;
+
+ if (filename.substring(0,4).toLowerCase().equals("http"))
+ {
+
+ URL targetUrl = new URL(filename);
+ HttpURLConnection h = (HttpURLConnection)targetUrl.openConnection();
+ InputStream is = h.getInputStream();
+
+ int size = 0;
+
+ result = new byte[h.getContentLength()];
+ for (int i = 0; i < result.length; i++) {
+ byte[] b = new byte[1];
+ is.read(b);
+ result[i]=b[0];
+ }
+ is.close();
+ }
+ else
+ {
+ RandomAccessFile raf = new RandomAccessFile(filename, "r");
+ if (raf.length() > Integer.MAX_VALUE)
+ throw new IOException("file too big to fit in byte array.");
+
+ result = new byte[(int) raf.length()];
+ raf.read(result);
+ raf.close();
+
+ }
+
+ byte[] temp = new byte[result.length];
+ int s = 0;
+ for (int t=0; t<result.length; t++)
+ {
+ temp[s] = result[t];
+ s++;
+ if (temp[s-1]==10)
+ {
+ if (temp[s-2]==13)
+ {
+ temp[s-2]=10;
+ s--;
+ }
+ }
+ }
+ byte[] res = new byte[s];
+ result = null;
+
+ System.arraycopy(temp,0,res,0,s);
+
+
+ response = new String(res);
+
+ try {
+ response = replaceString(response,"<?xml version=\"1.0\" encoding=\"utf-8\"?>","");
+ }
+ catch (Exception e) {}
+
+ return response;
+ }
+
+private InputStream getHttpInputStream(String url) throws Exception
+ {
+
+ return ((HttpURLConnection)new URL(url).openConnection()).getInputStream();
+ }
+
+
+
+}
diff --git a/spss.test/src/testgenerator/TestGeneratorVXErrors.java b/spss.test/src/testgenerator/TestGeneratorVXErrors.java
new file mode 100644
index 000000000..3c9db0dad
--- /dev/null
+++ b/spss.test/src/testgenerator/TestGeneratorVXErrors.java
@@ -0,0 +1,1775 @@
+package testgenerator;
+import iaik.ixsil.algorithms.DigestAlgorithmImplSHA1;
+import iaik.ixsil.algorithms.Transform;
+import iaik.ixsil.algorithms.TransformImplBase64Decode;
+import iaik.ixsil.algorithms.TransformImplXSLT;
+import iaik.ixsil.util.URI;
+import iaik.utils.Base64OutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.RandomAccessFile;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+/**
+ * @author stephan
+ */
+public class TestGeneratorVXErrors extends TestCases {
+
+ private static final int canAlgCanXML = 1;
+ private static final int canAlgCanXMLwithCom = 2;
+ private static final int canAlgExcXML = 3;
+ private static final int canAlgExcXMLwithCom = 4;
+ private static VXResponseBean vxBean = null;
+ private static String etsiPropertyName = "ETSIProperties";
+ private static URI etsiURI;
+
+
+ public static void main(String[] args) throws Exception {
+
+ etsiURI = new URI("http://uri.etsi.org/01903/v1.1.1#SignedProperties");
+
+ vxBean = new VXResponseBean();
+
+ TestGeneratorVXErrors testcase = new TestGeneratorVXErrors();
+ testcase.createVXConfig();
+
+
+ //testcase.create051();
+ testcase.create052();
+ testcase.create053();
+ testcase.create054();
+ testcase.create055();
+
+ testcase.create151();
+ //testcase.create152();
+ testcase.create153();
+ testcase.create154();
+//N.A.: testcase.create155();
+
+ testcase.create251();
+ //testcase.create252();
+ //testcase.create252_2();
+ testcase.create253();
+ //testcase.create254();
+ //testcase.create255();
+ //testcase.create256();
+
+ testcase.create351();
+ testcase.create352();
+ //testcase.create353();
+ testcase.create354();
+ //testcase.create355();
+ testcase.create356();
+ testcase.create357();
+ //testcase.create358();
+ testcase.create359();
+ testcase.create360();
+ testcase.create360_2();
+ //testcase.create361();
+ testcase.create362();
+ testcase.create363();
+ testcase.create364();
+ testcase.create365();
+ testcase.create366();
+ testcase.create367();
+ //testcase.create368();
+ testcase.create369();
+ testcase.create370();
+
+
+ }
+
+ /* ==================================================================================================== */
+
+ public TestGeneratorVXErrors() throws Exception {
+
+ super();
+
+ // Set config properties
+ configuration_.setProperty("TestClass", "TestGeneratorVX");
+
+ // configuration_.setProperty("privateKeyFile", baseDir + "additionalFiles/keys/RSAPrivateKey.der");
+ // configuration_.setProperty("publicKeyFile", baseDir + "additionalFiles/keys/RSAPublicKey.der");
+ // configuration_.setProperty("signatureFile", baseDir + "additionalFiles/signatures/Signature.unit1.xml");
+
+ iaik.security.provider.IAIK.addAsProvider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+ }
+
+ /* ==================================================================================================== */
+
+ public void create051() throws Exception {
+ String testNumber = "051";
+ //Create a Request with number 051, Time in the future (+24 hours)
+ // and with the Date and ReturnHashInputDate Elements present
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,24),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"0000");
+
+ }
+ /**
+ * Method create052.
+ * @throws Exception
+ */
+ public void create052() throws Exception {
+ String testNumber = "052";
+ //Create a Request with number 052, with current Time (+0 hours)
+ // and with the Date and ReturnHashInputDate Elements present
+
+ // BUT there is in invalid Element to crash validation against XMLDsig
+ // </dsig:SignedInfo> is replaces by </dsig:NoValidDSigSignedInfo>
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request =
+ replaceString(
+ request,
+ "<dsig:SignedInfo>",
+ "<dsig:NoValidDSigSignedInfo>");
+ request =
+ replaceString(
+ request,
+ "</dsig:SignedInfo>",
+ "</dsig:NoValidDSigSignedInfo>");
+
+ writeFile(vxReqFile(testNumber), request);
+ writeFile(vxResErrFile(testNumber),"1100");
+ }
+
+ /**
+ * Method create053.
+ * @throws Exception
+ */
+ public void create053() throws Exception {
+ String testNumber = "053";
+ //Create a Request with number 053, with current Time (+0 hours)
+ // and with the Date and ReturnHashInputDate Elements present
+
+ // BUT with an invalid XPath expression
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request =
+ replaceString(
+ request,
+ "<VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>",
+ "<VerifySignatureLocation>//invalid XPath Expression</VerifySignatureLocation>");
+
+ writeFile(vxReqFile(testNumber), request);
+ writeFile(vxResErrFile(testNumber),"2212");
+ }
+ /**
+ * Method create054.
+ * @throws Exception
+ */
+ public void create054() throws Exception {
+ String testNumber = "054";
+
+ //Create a Request with number 053, with current Time (+0 hours)
+ // and with the Date and ReturnHashInputDate Elements present
+
+ // BUT with an valid XPath expression not referencing a valid element
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request =
+ replaceString(request, "//dsig:Signature", "//dsig:NoValidElement");
+ writeFile(vxReqFile(testNumber), request);
+ writeFile(vxResErrFile(testNumber),"2212");
+ }
+ public void create055() throws Exception {
+
+ String testNumber = "055";
+
+ //Create a Request with number 001, the current Time (+0 hours)
+ // and with the Date and ReturnHashInputDate Elements present
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request =
+ replaceString(request,
+ "TrustProfile1", "InvalidProfile");
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2203");
+
+
+ // writeFile(vxResFile(testNumber), createResponse(testNumber,"0"));
+ }
+ public void create151() throws Exception {
+
+ String testNumber = "151";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+
+ String requestEnd = createSignatureInfoEnd()+
+ createRequestShortEnd(false);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber + " an URI referenced in dsig:Signature does not resolve and no SupplementProfile is available",true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+
+ request = replaceString(request, configuration_.getProperty("webbaseDir")+"resources/testDaten.txt","http://no.uritoresolve.com" );
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2264");
+
+ }
+ public void create152() throws Exception {
+
+ String testNumber = "152";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+ Supplement supp = new Supplement();
+ supp.addMetaInfo("text/plain","http://www.buergerkarte.at");
+ supp.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testDaten.txt",
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testDaten.txt"));
+ supp.closeSupplement();
+ //supp.addProfileID("Some ID");
+
+ String requestEnd = createSignatureInfoEnd()+
+ supp.getSupplement() + createRequestShortEnd(false);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber + "- MimeType",true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+
+ request = replaceString(request, "text/plain","no valid MIME-Type" );
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"1100");
+ }
+
+ public void create153() throws Exception {
+
+ String testNumber = "153";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+ String requestEnd =
+ createSignatureInfoEnd()+
+ "<SupplementProfileID>NO VALID SUPPLEMENT PROFILE ID</SupplementProfileID>" +
+ createRequestShortEnd(false);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber + " - invalid SupplementProfileID",true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2267");
+ }
+
+ public void create154() throws Exception {
+
+ String testNumber = "154";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+ Supplement supp = new Supplement();
+ supp.addMetaInfo("text/plain","http://www.buergerkarte.at");
+ supp.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testDaten.txt",
+ readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testDaten.txt"));
+ supp.closeSupplement();
+ //supp.addProfileID("Some ID");
+
+ String requestEnd = createSignatureInfoEnd()+
+ supp.getSupplement() + createRequestShortEnd(false);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+ request = replaceString(request,"<Base64Content>","<Base64Content>AAAAAAAAAAAAAAAAAA");
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"1100");
+ }
+
+public void create155() throws Exception {
+ String testNumber = "155";
+/* CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+
+ Supplement supp = new Supplement();
+ supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testDaten.txt", readFileCR(configuration_.getProperty("webbaseDir")+"resources/testDaten.txt"));
+ supp.closeSupplement();
+
+ String requestEnd =
+ createSignatureInfoEnd()+
+ supp.getSupplement()+
+ createRequestShortEnd(false);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber+" - Supplement/Content/XMLContent does not match to the signature",true,0),
+ cpkcs.returnSig(),
+ requestEnd);
+*/
+// request = replaceString(request,"<XMLContent>","<XMLContent><OPEN_ELEMENT>");
+
+ writeFile(vxReqFile(testNumber),"N.A.");
+ writeFile(vxResErrFile(testNumber),"0000");
+ }
+
+
+
+public void create251() throws Exception
+ { String testNumber = "251";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(etsiPropertyName,
+ ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "'))/*/*"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+
+ smcp.addTransformsProfileID("InvalidTransformsProfile");
+
+ String request =
+ makeOutputFile(
+ createRequestStart("251 - VerifyTransformsInfoID: invalidID",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2268");
+ }
+
+
+ public void create252() throws Exception
+ { String testNumber = "252";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ //Reference 1
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ //ets.addDataObjectFormat("#reference-2");
+ cpkcs.createEnvelopedDataObject(
+ etsiPropertyName,ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "')/*/*)"),etsiURI);
+ cpkcs.setKeyInformation();
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename));
+
+ SignatureManifestCheckParams smcp2 = new SignatureManifestCheckParams(null);
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp2.addDisgTransform(tr[trNr].toElement(smcp2.getDoc()));
+ smcp2.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp2.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename));
+
+ String signManiDoc = replaceString(smcp.returnDoc(),"</SignatureManifestCheckParams>","") +
+ replaceString(smcp2.returnDoc(),"<SignatureManifestCheckParams>","");
+
+ String request =
+ makeOutputFile(
+ createRequestStart("252 number of ReferenceInfo is different from number of dsig:Reference in the signature",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + signManiDoc
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2271");
+ }
+
+public void create252_2() throws Exception
+ { String testNumber = "252_2";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ //Reference 1
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-2");
+
+
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ ets.addDataObjectFormat("#reference-2");
+ cpkcs.createEnvelopedDataObject(
+ etsiPropertyName,ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "')/*/*)"),etsiURI);
+ cpkcs.setKeyInformation();
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("252_2 number of References id bigger then number of ReferenceInfos",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2271");
+ }
+
+public void create253() throws Exception
+ { String testNumber = "253";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(etsiPropertyName,
+ ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "'))/*/*"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Base64Content",readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/"+ filename));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("253 mismatching dsig:Transform/@Algorithm and dsig:Transform content",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ request = replaceString(request,
+ "http://www.w3.org/TR/1999/REC-xslt-19991116","MismatchingTransformAlgorithm");
+ request = replaceString(request,
+ "http://www.w3.org/TR/1999/REC-xslt-19991116","http://www.w3.org/TR/1999/REC-xpath-19991116");
+ request = replaceString(request,"MismatchingTransformAlgorithm",
+ "http://www.w3.org/TR/1999/REC-xslt-19991116");
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2202");
+ }
+public void create254() throws Exception
+ { String testNumber = "254";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(etsiPropertyName, ets.getQualProp());
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "'))/*/*"), etsiURI);
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+ smcp.addTransPara("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/"+ filename);
+ smcp.addTransParaElement("Hash",getBase64Hash(configuration_.getProperty("webbaseDir")+"resources/" + filename));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("254 - TransformParameter/@URI resolves but Hash does not match - which hashing algorithm?",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ request = replaceString(request,"<Hash><dsig:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><dsig:DigestValue>",
+ "<Hash><dsig:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><dsig:DigestValue>abcd");
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2205");
+ }
+
+public void create255() throws Exception
+ { String testNumber = "255";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(etsiPropertyName,
+ ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "'))/*/*"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+ for (int trNr=0; trNr < tr.length; trNr++)
+ smcp.addDisgTransform(tr[trNr].toElement(smcp.getDoc()));
+
+ String request =
+ makeOutputFile(
+ createRequestStart("255 kein TransformParameter element obwohl in Transforms URIs referenziert werden",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2204");
+ }
+
+public void create256() throws Exception
+ { String testNumber = "256";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+ cpkcs.createReferenceWithManifest(
+ new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/" + filename),
+ "Manifest","http://www.buergerkarte.at/specifications/Securitylayer/20020225#SignatureManifest");
+
+ EtsiProperties ets = new EtsiProperties();
+ ets.addDataObjectFormat("#reference-1");
+ cpkcs.createEnvelopedDataObject(etsiPropertyName,
+ ets.getQualProp());
+
+ cpkcs.createReference(new URI("#xpointer(id('" + etsiPropertyName + "'))/*/*"),
+ etsiURI);
+
+ cpkcs.setKeyInformation();
+
+ SignatureManifestCheckParams smcp = new SignatureManifestCheckParams("true");
+
+ smcp.addTransformsProfileID("TransformsInfoProfile2");
+
+ String request =
+ makeOutputFile(
+ createRequestStart("256 1 VerifyTransformsInfoID ==> Passt aber nicht zur Transformation (XSLT <==> Canonisiserung)",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd() + smcp.returnDoc()
+ + createRequestShortEnd(false));
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2204");
+ }
+
+public void create351() throws Exception {
+
+ String testNumber = "351";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+ String request =
+ makeOutputFile( createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+ request = replaceString( request,
+ "http://www.w3.org/TR/2001/REC-xml-c14n-20010315",
+ "http://www.w3.org/TR/2001/unknownCanonicalzationMethod");
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+
+
+public void create352() throws Exception {
+
+ String testNumber = "352";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+ String request =
+ makeOutputFile( createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+ request = replaceString( request,
+ "http://www.w3.org/2000/09/xmldsig#rsa-sha1",
+ "http://www.w3.org/TR/2001/unknownSignatureMethod");
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+public void create353()throws Exception {
+
+ String testNumber = "353";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,"#xpointer(id('envelopedData'))");
+ cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testDaten.txt"));
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request =
+ replaceString(
+ request,
+ "#xpointer(id('envelopedData'))",
+ "#xpointer(id('unknownURITarget'))");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2264");
+ }
+ public void create354() throws Exception {
+
+ String testNumber = "354";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.setKeyInformation();
+ String request =
+ makeOutputFile( createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+ request = replaceString( request,
+ "http://www.w3.org/2000/09/xmldsig#sha1",
+ "http://www.w3.org/TR/2001/unknownDigestMethod");
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+ public void create355() throws Exception {
+
+ String testNumber = "355";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(true,readFileCR(configuration_.getProperty("webbaseDir")+"resources/testDaten.txt"));
+ cpkcs.setKeyInformation();
+ String request =
+ makeOutputFile( createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+ request = replaceString( request,
+ "<dsig:DigestValue>",
+ "<dsig:DigestValue>WrongData and the original:");
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"0000");
+ }
+ public void create356() throws Exception {
+
+ String testNumber = "356";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ //Erzeugen der Base64-Daten
+// String tmp = readBinaryFileAsBase64(configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+
+ URI target = new URI(configuration_.getProperty("webbaseDir")+"resources/testDaten.txtbase64.enc");
+
+ Transform[] tr = new Transform[1];
+ tr[0] = new TransformImplBase64Decode();
+ InputStream s = getHttpInputStream(target.toString());
+ tr[0].setInput(s,null);
+
+ cpkcs.createReferenceWithTransforms(target,tr);
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+ request = replaceString( request,
+ "http://www.w3.org/2000/09/xmldsig#base64",
+ "http://www.w3.org/TR/2001/unknownTransformsMethod");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+ public void create357() throws Exception {
+
+ String testNumber = "357";
+
+ String filepath = configuration_.getProperty("webbaseDir")+"resources/";
+ String filename = "CX1_book.xsl";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init("signature");
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ Transform[] tr = new Transform[1];
+ TransformImplXSLT trans = new TransformImplXSLT();
+ InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
+ trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
+ tr[0] = trans;
+ cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"),tr,"reference-1");
+
+ cpkcs.setKeyInformation();
+
+
+ String request =
+ makeOutputFile(
+ createRequestStart("357 nicht zu Reference/Transforms/Transform/@Algorithm passender Inha",true,0),
+ cpkcs.returnSig(),
+ createSignatureInfoEnd()
+ + createRequestShortEnd(false));
+
+ request = replaceString(request, "http://www.w3.org/TR/1999/REC-xslt-19991116",
+ "http://www.w3.org/TR/1999/REC-xpath-19991116");
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+
+ public void create358() throws Exception {
+
+ String testNumber = "358";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ //cpkcs.createReference(true,"Dies sind testdaten");
+
+ URI target = new URI(configuration_.getProperty("webbaseDir")+"resources/testDaten.txtBase64.enc");
+
+ // cpkcs.createEnvelopedDataObject("envelopedData",readBinaryFileAsBase64(configuration_.getProperty("webbaseDir")+"resources/testDaten.txt"));
+
+ Transform[] tr = new Transform[1];
+ tr[0] = new TransformImplBase64Decode();
+ InputStream s = getHttpInputStream(target.toString());
+ tr[0].setInput(s,null);
+
+ cpkcs.createReferenceWithTransforms(target,tr);
+ //cpkcs.createReference(false, "file:/"+ configuration_.getProperty("webbaseDir")+"resources/test_wo_canonicalisation.XML");
+ //cpkcs.createReference(false, "file:/"+ configuration_.getProperty("webbaseDir")+"resources/test_w_canonicalisation.XML");
+// cpkcs.createReferenceWithManifest(new URI("file:/"+ configuration_.getProperty("webbaseDir")+"resources/test_w_canonicalisation.XML"),"canonicalizedData");
+
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request,
+ "<dsig:SignatureValue>","<dsig:SignatureValue>abcd");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+
+ public void create359() throws Exception {
+
+ String testNumber = "359";
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(true,readFileCR(configuration_.getProperty("webbaseDir") + "resources/testDaten.txt"));
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request,"<dsig:KeyInfo>","");
+ request = replaceString(request,"<dsig:RetrievalMethod Type=\"http://www.w3.org/2000/09/xmldsig#X509Data\" URI=\""+configuration_.getProperty("webbaseDir") + "resources/X509Data.xml\"/>","");
+ request = replaceString(request,"</dsig:KeyInfo>","");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2243");
+ }
+ public void create360() throws Exception {
+
+ String testNumber = "360";
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(true,readFileCR(configuration_.getProperty("webbaseDir") + "resources/testDaten.txt"));
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request,"<dsig:RetrievalMethod Type=\"http://www.w3.org/2000/09/xmldsig#X509Data\" URI=\""+configuration_.getProperty("webbaseDir") + "resources/X509Data.xml\"/>",
+ "<dsig:X509Data><dsig:X509SubjectName>Some kind of Subject</dsig:X509SubjectName></dsig:X509Data>");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+
+ public void create360_2() throws Exception {
+
+ String testNumber = "360_2";
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(true,readFileCR(configuration_.getProperty("webbaseDir") + "resources/testDaten.txt"));
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request,"<dsig:RetrievalMethod Type=\"http://www.w3.org/2000/09/xmldsig#X509Data\" URI=\""+configuration_.getProperty("webbaseDir") + "resources/X509Data.xml\"/>",
+ "<dsig:KeyName>Some kind of string as KeyName</dsig:KeyName>");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+
+ public void create361() throws Exception {
+
+ String testNumber = "361";
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(true,readFileCR(configuration_.getProperty("webbaseDir") + "resources/testDaten.txt"));
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request,"<dsig:RetrievalMethod Type=\"http://www.w3.org/2000/09/xmldsig#X509Data\" URI=\""+configuration_.getProperty("webbaseDir") + "resources/X509Data.xml\"/>",
+ " <dsig:X509Data>\n"+
+ " <dsig:X509Certificate>"+
+ readFileCR(configuration_.getProperty("webbaseDir") + "resources/tests.cer.b64") +
+ "</dsig:X509Certificate>\n"+
+ " </dsig:X509Data>\n");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2243");
+ }
+
+ public void create362() throws Exception {
+
+ String testNumber = "362";
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(true,readFileCR(configuration_.getProperty("webbaseDir") + "resources/testDaten.txt"));
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request,"<dsig:RetrievalMethod Type=\"http://www.w3.org/2000/09/xmldsig#X509Data\" URI=\""+configuration_.getProperty("webbaseDir") + "resources/X509Data.xml\"/>",
+ " <dsig:X509Data>\n"+
+ " <dsig:X509Certificate>"+
+ readFileCR(configuration_.getProperty("webbaseDir")+"resources/testDaten.txtbase64.enc") +
+ "</dsig:X509Certificate>\n"+
+ " </dsig:X509Data>\n");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+ public void create363() throws Exception {
+
+ String testNumber = "363";
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(true,readFileCR(configuration_.getProperty("webbaseDir") + "resources/testDaten.txt"));
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request,"<dsig:RetrievalMethod Type=\"http://www.w3.org/2000/09/xmldsig#X509Data\" URI=\""+configuration_.getProperty("webbaseDir") + "resources/X509Data.xml\"/>",
+ " <dsig:X509Data>\n"+
+ " <dsig:X509Certificate>"+
+ "( no BASE64 data )" +
+ "</dsig:X509Certificate>\n"+
+ " </dsig:X509Data>\n");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"1100");
+ }
+
+ public void create364() throws Exception {
+
+ String testNumber = "364";
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(true,readFileCR(configuration_.getProperty("webbaseDir") + "resources/testDaten.txt"));
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request,
+ "http://www.w3.org/2000/09/xmldsig#X509Data",
+ "http://www.w3.org/2000/09/noValidRetrievalMethodType");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+ public void create365() throws Exception {
+
+ String testNumber = "365";
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ cpkcs.createReference(true,readFileCR(configuration_.getProperty("webbaseDir") + "resources/testDaten.txt"));
+ cpkcs.setKeyInformation(false, fileURI, typeURI, null);
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request,
+ configuration_.getProperty("webbaseDir") + "resources/X509Data.xml",
+ configuration_.getProperty("webbaseDir") + "resources/test-ee2003_normal.der");
+
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+
+ public void create366() throws Exception {
+
+ String testNumber = "366";
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/test-ee2003_normal.der");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+
+ //DER-encoded RAW-Zertifikat zu Binary64 konvertieren
+ // String tmp = readBinaryFileAsBase64(fileURI.getPath());
+ //dsig:Object mit den Binary64-Daten erzeugen (==> CRs weglassen!!!!!)
+ cpkcs.createEnvelopedDataObject("rawCertAsBase64",readFileCR(fileURI.toString()+"base64.enc"));
+
+ //Neue Transformation erzeugen, um die Base64-Daten zurückzuwandeln
+ Transform[] tr = new Transform[1];
+ tr[0] = new TransformImplBase64Decode();
+ InputStream s = getHttpInputStream(fileURI.toString()+ "base64.enc");
+ tr[0].setInput(s,null);
+
+ //Neues KeyInfo-Objekt erzeugen, wobei nicht die Zertifikate sondern
+ //nur eine RetrievalMethod angegeben wird, die auf das oben erzeugte Base64-dsig:Object verweist
+ cpkcs.setKeyInformation(true, new URI("#xpointer(id('rawCertAsBase64')/node())") , typeURI, tr);
+
+ String request = makeOutputFile( createRequestStart(testNumber,true,0), cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request, "http://www.w3.org/2000/09/xmldsig#base64",
+ "http://Invalid.URI.com");
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+ public void create367() throws Exception {
+
+ String testNumber = "367";
+
+ URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/test-ee2003_normal.der");
+ URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
+
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+
+ cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testDaten.txt");
+
+ //DER-encoded RAW-Zertifikat zu Binary64 konvertieren
+ // String tmp = readBinaryFileAsBase64(fileURI.getPath());
+ //dsig:Object mit den Binary64-Daten erzeugen (==> CRs weglassen!!!!!)
+ cpkcs.createEnvelopedDataObject("rawCertAsBase64",readFileCR(fileURI.toString()+"base64.enc"));
+
+ //Neue Transformation erzeugen, um die Base64-Daten zurückzuwandeln
+ Transform[] tr = new Transform[1];
+ tr[0] = new TransformImplBase64Decode();
+ InputStream s = getHttpInputStream(fileURI.toString()+ "base64.enc");
+ tr[0].setInput(s,null);
+
+ //Neues KeyInfo-Objekt erzeugen, wobei nicht die Zertifikate sondern
+ //nur eine RetrievalMethod angegeben wird, die auf das oben erzeugte Base64-dsig:Object verweist
+ cpkcs.setKeyInformation(true, new URI("#xpointer(id('rawCertAsBase64')/node())") , typeURI, tr);
+
+ String request = makeOutputFile( createRequestStart(testNumber,true,0), cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request, "http://www.w3.org/2000/09/xmldsig#rawX509Certificate",
+ "http://www.w3.org/2000/09/xmldsig#X509Data");
+ writeFile(vxReqFile(testNumber),request);
+
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+
+ public void create368() throws Exception {
+ String testNumber = "368";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ URI fileURI1 = new URI(configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.createReferenceWithManifest(fileURI1,"manifestObject");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request, "http://www.w3.org/2000/09/xmldsig#Manifest",
+ "http://No.valid_manifest_URI.com");
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2240");
+ }
+
+ public void create369() throws Exception {
+ String testNumber = "369";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ URI fileURI1 = new URI(configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.createReferenceWithManifest(fileURI1,"manifestObject");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ request = replaceString(request, "#xpointer(id('manifestObject'))",
+ "#xpointer(id('NoValidManifestObject'))");
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2262");
+ }
+ public void create370() throws Exception {
+ String testNumber = "370";
+
+ CreatePKCSSignature cpkcs = new CreatePKCSSignature();
+ cpkcs.init();
+ cpkcs.setCanoncialization(canAlgCanXML);
+ URI fileURI1 = new URI(configuration_.getProperty("webbaseDir")+"resources/testDaten.txt");
+ cpkcs.createReferenceWithManifest(fileURI1,"manifestObject");
+ cpkcs.setKeyInformation();
+
+ String request =
+ makeOutputFile(
+ createRequestStart(testNumber,true,0),
+ cpkcs.returnSig(),
+ createRequestEnd(true,false,null));
+
+ //Hier wird der DigestAlg vom Reference-Objekt im SignedInfo verändert
+ request = replaceString(request,
+ "http://www.w3.org/2000/09/xmldsig#sha1",
+ "noValidDigestAlg");
+ //Hier wird der DigestAlg vom Reference-Objekt im Manifset verändert
+ request = replaceString(request,
+ "http://www.w3.org/2000/09/xmldsig#sha1",
+ "noValidDigestAlg");
+ //Hier wird der DigestAlg vom Reference-Objekt im SignedInfo zurück geändert
+ request = replaceString(request,
+ "noValidDigestAlg",
+ "http://www.w3.org/2000/09/xmldsig#sha1");
+
+
+ writeFile(vxReqFile(testNumber),request);
+ writeFile(vxResErrFile(testNumber),"2262"); }
+
+
+ /**
+ * Method makeOutputFile.
+ * @param start
+ * @param signatureDoc
+ * @param end
+ * @return String
+ * @throws Exception
+ */
+ public String makeOutputFile(
+ String start,
+ Document signatureDoc,
+ String end)
+ throws Exception {
+ ArrayList foundNodes = new ArrayList();
+ findNode(
+ signatureDoc.getDocumentElement(),
+ "dsig:Signature",
+ foundNodes);
+
+ Node outputNode = null;
+
+ if (foundNodes.size() > 0) {
+ outputNode = (Node) foundNodes.get(0);
+ }
+
+ String erg = Node2String(outputNode);
+
+ // remove the <?xml ?> Prologue
+ int pos = erg.indexOf("<dsig");
+ erg = erg.substring(pos);
+
+ // insert the dsig:signature element in a MOA Response Message
+ erg = start + erg + end;
+
+ return erg;
+ }
+
+ /**
+ * Method createRequestStart.
+ * @param testNumber
+ * @param useDate
+ * @param changeHours
+ * @return String
+ */
+ private String createRequestStart(String testNumber, boolean useDate, int changeHours)
+ {String reqStart = null;
+ System.out.println("======================================================");
+ System.out.println("================== TEST-NUMBER "+ testNumber + " ===================");
+ System.out.println("======================================================");
+
+ reqStart =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ + "<!-- Testnumber: "
+ + testNumber
+ + "-->\n"
+ + "<VerifyXMLSignatureRequest\n"
+ + " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"
+ + " xmlns:xml=\"http://www.w3.org/XML/1998/namespace\""
+ + " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">\n";
+
+ if (useDate) {
+ reqStart += " <DateTime>"
+ + getDate(changeHours)
+ + "</DateTime>\n";
+ }
+
+ reqStart += " <VerifySignatureInfo>\n"
+ + " <VerifySignatureEnvironment>\n"
+ + " <XMLContent xml:space=\"preserve\">" ;
+ return reqStart;
+ }
+
+ /**
+ * Method getTransformsResult:the input transforms array will
+ * be calculated to return a string-representation of the result
+ * @param tr
+ * @return String
+ * @throws Exception
+ */
+ private String getTransformsResult(Transform[] tr) throws Exception
+ {
+ Transform[] myTransforms = tr;
+ String result = "";
+ for (int t=0; t<tr.length-1; t++)
+ {
+ myTransforms[t+1].setInput((InputStream)myTransforms[t].transform(),null);
+ }
+
+ ByteArrayInputStream is = (ByteArrayInputStream)myTransforms[tr.length-1].transform();
+
+
+ byte[] b = new byte[1];
+ is.read(b);
+ while (is.available() > 0)
+ {
+ result += new String(b);
+ is.read(b);
+ }
+ result += new String(b);
+
+ return result;
+ }
+
+
+ /**
+ * Method createRequestEnd.
+ * @param useReturnHashInputData
+ * @param useSupplement
+ * @param supplementReference
+ * @return String
+ * @throws Exception
+ */
+ private String createRequestEnd(
+ boolean useReturnHashInputData,
+ boolean useSupplement,
+ String supplementReference)
+ throws Exception {
+
+ String reqEnd = null;
+
+/* reqEnd =
+ "</VerifySignatureEnvironment>\n"
+ + " <VerifySignatureLocation>#xpointer(/VerifyXMLSignatureRequest/VerifySignatureInfo/VerifySignatureEnvironment/dsig:Signature)</VerifySignatureLocation>\n"
+ + " </VerifySignatureInfo>\n";
+*/
+ reqEnd ="</XMLContent>"+
+ "</VerifySignatureEnvironment>\n"
+ + " <VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>\n"
+ + " </VerifySignatureInfo>\n";
+
+
+
+ if (useSupplement)
+ {
+ reqEnd += " <Supplement>\n" +
+ " <Content Reference=\"file:/" + supplementReference.toString() + "\">\n" +
+ " <XMLContent>"+readFileCR(supplementReference.toString())+"</XMLContent>\n" +
+ " </Content>\n" +
+ " </Supplement>\n";
+ }
+
+ if (useReturnHashInputData) {
+ reqEnd += " <ReturnHashInputData/>\n";
+ }
+ reqEnd += " <TrustProfileID>TrustProfile1</TrustProfileID>\n"
+ + "</VerifyXMLSignatureRequest>\n";
+ return reqEnd;
+
+ }
+
+ private String createSignatureInfoEnd()
+ throws Exception {
+
+ return "</XMLContent>"+"</VerifySignatureEnvironment>\n"
+ + " <VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>\n"
+ + " </VerifySignatureInfo>\n";
+
+ }
+
+ private String createRequestShortEnd(boolean useReturnHashInputData)
+ throws Exception {
+
+ String reqEnd = "";
+
+ if (useReturnHashInputData)
+ reqEnd = " <ReturnHashInputData/>\n";
+
+ reqEnd += " <TrustProfileID>TrustProfile1</TrustProfileID>\n"
+ + "</VerifyXMLSignatureRequest>\n";
+ return reqEnd;
+
+ }
+ /**
+ * Method createResponse.
+ * @param testNumber
+ * @param signatureCheckCode
+ * @return String
+ * @throws Exception
+ */
+ private String createResponse(String testNumber, String signatureCheckCode) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <HashInputData>\n" + " <XMLContent xml:space=\"preserve\">";
+ res += readFileCR(
+ configuration_.getProperty("webbaseDir")
+ + "resources/testDaten.txt")+
+ "</XMLContent>";
+
+ res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");
+
+ return res;
+ }
+
+ private String createResponse(String testNumber, String signatureCheckCode, String hashData) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <HashInputData>\n" +
+ " <XMLContent xml:space=\"preserve\">"+
+ hashData +
+ "</XMLContent>\n";
+ res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");
+
+ return res;
+ }
+
+
+ private String createResponseWithoutHashInputData(String testNumber, String signatureCheckCode) throws Exception {
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n"
+ + " <SignatureCheck>\n" +
+ " <Code>" + signatureCheckCode + "</Code>\n" +
+ " </SignatureCheck>\n" +
+ " <CertificateCheck>\n" +
+ " <Code>0</Code>\n" +
+ " </CertificateCheck>\n" +
+ "</VerifyXMLSignatureResponse>";
+
+ return res;
+ }
+/* private String createResponseXMLDsigCheck(String testNumber, String xmlDSIGManifestCheckCode) throws Exception {
+
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ res += " <HashInputData>\n" + " <XMLContent>";
+ res += readFile(
+ configuration_.getProperty("webbaseDir")
+ + "resources/testDaten.txt");
+
+ res += vxBean.getFooterXMLDSIGManifestCheck(xmlDSIGManifestCheckCode,"0");
+
+ return res;
+ }*/
+
+ private String createResponsePart() throws Exception {
+
+ //
+ vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der");
+
+ String res = null;
+
+ res = vxBean.getHeader();
+ res += vxBean.getSubjectDN();
+ res += " <dsig:X509IssuerSerial>\n";
+ res += vxBean.getIssuerDN();
+ res += vxBean.getSerialNumber();
+ res += " </dsig:X509IssuerSerial>\n"
+ + " </dsig:X509Data>\n"
+ + " </SignerInfo>\n";
+ return res;
+ }
+
+ public String readFileCR(String filename) throws Exception {
+
+ /*StringBuffer data = new StringBuffer();
+ String line = null;
+ BufferedReader br = new BufferedReader(new FileReader(filename));
+ while ((line = br.readLine()) != null) {
+ data.append(line);
+ data.append("\n");
+ }
+ */
+ String response="";
+ byte[] result;
+
+ if (filename.substring(0,4).toLowerCase().equals("http"))
+ {
+
+ URL targetUrl = new URL(filename);
+ HttpURLConnection h = (HttpURLConnection)targetUrl.openConnection();
+ InputStream is = h.getInputStream();
+
+ int size = 0;
+
+ result = new byte[h.getContentLength()];
+ for (int i = 0; i < result.length; i++) {
+ byte[] b = new byte[1];
+ is.read(b);
+ result[i]=b[0];
+ }
+ is.close();
+ }
+ else
+ {
+ RandomAccessFile raf = new RandomAccessFile(filename, "r");
+ if (raf.length() > Integer.MAX_VALUE)
+ throw new IOException("file too big to fit in byte array.");
+
+ result = new byte[(int) raf.length()];
+ raf.read(result);
+ raf.close();
+
+ }
+
+ byte[] temp = new byte[result.length];
+ int s = 0;
+ for (int t=0; t<result.length; t++)
+ {
+ temp[s] = result[t];
+ s++;
+ if (temp[s-1]==10)
+ {
+ if (temp[s-2]==13)
+ {
+ temp[s-2]=10;
+ s--;
+ }
+ }
+ }
+ byte[] res = new byte[s];
+ result = null;
+
+ System.arraycopy(temp,0,res,0,s);
+
+
+ response = new String(res);
+
+ try {
+ response = replaceString(response,"<?xml version=\"1.0\" encoding=\"utf-8\"?>","");
+ }
+ catch (Exception e) {}
+
+ return response;
+ }
+
+private InputStream getHttpInputStream(String url) throws Exception
+ {
+ URL targetUrl = new URL(url);
+ HttpURLConnection h = (HttpURLConnection)targetUrl.openConnection();
+ return h.getInputStream();
+ }
+
+public String vxResErrFile(String testNumber)
+ {
+ return configuration_.getProperty("baseDir") +
+ "/data/VX0/"+
+ configuration_.getProperty("TestClass") +
+ "." +
+ testNumber +
+ ".ErrRes.xml";
+ }
+private String getBase64Hash(String filename) throws Exception
+ {
+ DigestAlgorithmImplSHA1 dig = new DigestAlgorithmImplSHA1();
+ InputStream s = getHttpInputStream(filename);
+
+ dig.setInput(s);
+
+ InputStream erg = dig.digest();
+ String result = "";
+
+ byte[] b = new byte[1];
+ erg.read(b);
+ while (erg.available() > 0)
+ {
+ result += new String(b);
+ erg.read(b);
+ }
+ result += new String(b);
+
+ ByteArrayOutputStream fos = new ByteArrayOutputStream();
+ Base64OutputStream base64os = new Base64OutputStream(fos);
+ base64os.write(result.getBytes());
+ base64os.flush();
+
+ return fos.toString();
+ }
+}
diff --git a/spss.test/src/testgenerator/TestPKCS12.java b/spss.test/src/testgenerator/TestPKCS12.java
new file mode 100644
index 000000000..97aa8acd0
--- /dev/null
+++ b/spss.test/src/testgenerator/TestPKCS12.java
@@ -0,0 +1,107 @@
+
+package testgenerator;
+import iaik.pkcs.pkcs12.CertificateBag;
+import iaik.pkcs.pkcs12.KeyBag;
+import iaik.pkcs.pkcs12.PKCS12;
+import iaik.security.ecc.ecdsa.ECPrivateKey;
+import iaik.security.ecc.ecdsa.ECPublicKey;
+import iaik.security.ecc.math.ecgroup.ECPoint;
+
+import java.io.FileInputStream;
+
+
+/**
+ * @author stephan
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class TestPKCS12 {
+
+/*
+ public static void main(String[] args) throws Exception {
+
+// String file = "C:/Daten/MOAPhase2/additionalFiles/keys/TestUser.p12";
+// String password = "testuser";
+// String file = "C:\\Certs\\grill(1234).p12";
+// String password = "1234";
+
+ // SL eCard Demo P12 Files
+ String file = "C:\\Daten\\MOAPhase2\\Keys\\sl2002mmdd.ecard.sicher(ego).p12";
+ String password = "ego";
+// String file = "C:\\Daten\\MOAPhase2\\Keys\\sl2002mmdd.ecard.normal(ego).p12";
+// String password = "ego";
+
+ // SL Personalausweis Demo P12 Files
+// String file = "C:\\Daten\\MOAPhase2\\Keys\\sicher-demo(buergerkarte).p12";
+// String password = "buergerkarte";
+// String file = "C:\\Daten\\MOAPhase2\\Keys\\normal().p12";
+// String password = "";
+
+ IAIK.addAsJDK14Provider();
+
+ FileInputStream pkcs12FIS = new FileInputStream(file);
+ PKCS12 pkcs12 = new PKCS12(pkcs12FIS);
+ if (!pkcs12.verify(password.toCharArray()))
+ {
+ System.out.println("could not PKCS12.verify file " + file + " with password " + password);
+ } else
+ {
+ System.out.println("could PKCS12.verify file " + file + " with password " + password);
+ }
+
+ pkcs12.decrypt(password.toCharArray());
+ System.out.println("could PKCS12.decrypt file " + file + " with password " + password);
+
+ KeyBag[] keyBags = pkcs12.getKeyBags();
+ System.out.println("PKCS12.getKeyBags(): " + keyBags.length + " KeyBags found");
+
+ RSAPrivateKey privKey = (RSAPrivateKey) keyBags[0].getPrivateKey();
+ System.out.println("getFriendlyName(): " + keyBags[0].getFriendlyName() );
+
+ X509Certificate[] certBag = CertificateBag.getCertificates(pkcs12.getCertificateBags());
+ System.out.println("PKCS12.getCertificates(): " + certBag.length + " certificates found");
+
+ System.out.println("certBag[0]: " + certBag[0]);
+
+ }
+*/
+
+ public static void main(String[] args) throws Exception {
+ // von Wolfgang Bauer
+ iaik.security.provider.IAIK.addAsProvider();
+ iaik.security.ecc.provider.ECCProvider.addAsProvider();
+
+ final String FILENAME = "sl2002mmdd.ecard.sicher.p12";
+ final char[] PASSWORD = "ego".toCharArray();
+// public final static String FILENAME = "sl2002mmdd.ecard.sicher.p12";
+// public final static char[] PASSWORD = "ego".toCharArray();
+
+ System.out.println("Checking");
+ FileInputStream fis = new FileInputStream(FILENAME);
+ PKCS12 p12 = new PKCS12(fis);
+ p12.decrypt(PASSWORD);
+ CertificateBag[] cb = p12.getCertificateBags();
+
+ KeyBag kb = p12.getKeyBag();
+ ECPrivateKey pk = (ECPrivateKey) kb.getPrivateKey();
+
+ ECPoint p = pk.getParameter().getG();
+ p.multiply(pk.getS());
+
+ ECPoint p2 = ((ECPublicKey)cb[0].getCertificate().getPublicKey()).getW();
+ if (p.equals(p2) ) {
+ System.out.println("Check OK");
+ } else {
+ System.out.println("Nix wars");
+ }
+ cb[0].getCertificate().verify();
+
+ }
+
+
+
+}
+
diff --git a/spss.test/src/testgenerator/VXResponseBean.java b/spss.test/src/testgenerator/VXResponseBean.java
new file mode 100644
index 000000000..bbdf02bbc
--- /dev/null
+++ b/spss.test/src/testgenerator/VXResponseBean.java
@@ -0,0 +1,180 @@
+
+package testgenerator;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import iaik.asn1.structures.Name;
+import iaik.x509.X509Certificate;
+
+/**
+ * @author KNIRSCHS
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class VXResponseBean {
+
+ private X509Certificate cert = null;
+
+ /**
+ * Constructor for VXResponseBean.
+ */
+ public String getHeader() {
+
+ String result =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<VerifyXMLSignatureResponse xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" >\n" +
+ " <SignerInfo>\n" +
+ " <dsig:X509Data xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">\n";
+
+ return result;
+ }
+
+ public void init(String Filename) throws Exception {
+ if (cert == null) {
+ InputStream cfile = getHttpInputStream(Filename);
+ cert = new iaik.x509.X509Certificate(cfile);
+ }
+ }
+ public String getCert() throws Exception {
+ return " <dsig:X509Certificate>"
+ + (cert)
+ + "</dsig:X509Certificate>\n";
+
+ }
+
+
+ public String getSubjectDN() throws Exception {
+ return " <dsig:X509SubjectName>"
+ + ((Name) cert.getSubjectDN()).getRFC2253String()
+ + "</dsig:X509SubjectName>\n";
+ }
+ public String getIssuerDN() throws Exception {
+
+ return " <dsig:X509IssuerName>" +
+ ((Name)cert.getIssuerDN()).getRFC2253String() +
+ "</dsig:X509IssuerName>\n";
+ }
+
+ public String getSerialNumber() throws Exception {
+
+ return " <dsig:X509SerialNumber>" +
+ cert.getSerialNumber() +
+ "</dsig:X509SerialNumber>\n";
+ }
+
+ public String getFooterSignatureCheck(String signatureCheckCode, String certificateCheckCode)
+ {
+ String res = null;
+ res = " </HashInputData>\n" +
+ " <SignatureCheck>\n" +
+ " <Code>" + signatureCheckCode + "</Code>\n" +
+ " </SignatureCheck>\n" +
+ " <CertificateCheck>\n" +
+ " <Code>"+certificateCheckCode+"</Code>\n" +
+ " </CertificateCheck>\n" +
+ "</VerifyXMLSignatureResponse>";
+
+ return res;
+
+ }
+ public String getFooterXMLDSIGManifestCheck(String xmlDSIGManifestCheckCode , String certificateCheckCode)
+ {
+ String res = null;
+/* res = "</XMLContent>\n" +
+ " </HashInputData>\n" +
+ " <XMLDSIGManifestCheck>\n" +
+ " <Code>" + xmlDSIGManifestCheckCode + "</Code>\n" +
+ " </XMLDSIGManifestCheck>\n" +
+ " <CertificateCheck>\n" +
+ " <Code>"+certificateCheckCode+"</Code>\n" +
+ " </CertificateCheck>\n" +
+ "</VerifyXMLSignatureResponse>";
+*/
+ res = " <XMLDSIGManifestCheck>\n" +
+ " <Code>" + xmlDSIGManifestCheckCode + "</Code>\n" +
+ " </XMLDSIGManifestCheck>\n" +
+ " <CertificateCheck>\n" +
+ " <Code>"+certificateCheckCode+"</Code>\n" +
+ " </CertificateCheck>\n" +
+ "</VerifyXMLSignatureResponse>";
+
+ return res;
+
+ }
+public String createXMLDSIGManifestCheck(String xmlDSIGManifestCheckCode, String failedReference, String referringSigRefData)
+ {
+
+ if(failedReference != null && !failedReference.trim().equals(""))
+ {
+ String res = null;
+ res = " <XMLDSIGManifestCheck>\n" +
+ " <Code>" + xmlDSIGManifestCheckCode + "</Code>\n" +
+ " <Info><FailedReference>" + failedReference +
+ "</FailedReference><ReferringSigReference>" + referringSigRefData + "</ReferringSigReference>" +
+ " </Info>\n" +
+ " </XMLDSIGManifestCheck>\n";
+
+ return res;
+ }
+ else
+ {
+ String res = null;
+ res = " <XMLDSIGManifestCheck>\n" +
+ " <Code>" + xmlDSIGManifestCheckCode + "</Code>\n" +
+ " <Info>" + failedReference +
+ " <ReferringSigReference>" + referringSigRefData + "</ReferringSigReference>" +
+ " </Info>\n" +
+ " </XMLDSIGManifestCheck>\n";
+
+ return res;
+ }
+
+ }
+
+public String createSignatureCheck(String signatureCheckCode)
+ {
+ String res = null;
+ res = " <SignatureCheck>\n" +
+ " <Code>" + signatureCheckCode + "</Code>\n" +
+ " </SignatureCheck>\n";
+ return res;
+
+ }
+public String createSignatureManifestCheck(String signatureCheckCode)
+ {
+ String res = null;
+ res = " <SignatureManifestCheck>\n" +
+ " <Code>" + signatureCheckCode + "</Code>\n" +
+ " </SignatureManifestCheck>\n";
+ return res;
+
+ }
+
+public String createSignatureManifestCheck(String signatureCheckCode,String info)
+ {
+ String res = null;
+ res = " <SignatureManifestCheck>\n" +
+ " <Code>" + signatureCheckCode + "</Code>\n" + info +
+ " </SignatureManifestCheck>\n";
+ return res;
+
+ }
+public String createCertificateCheck(String certificateCheckCode)
+ {
+ String res = null;
+ res = " <CertificateCheck>\n" +
+ " <Code>"+certificateCheckCode+"</Code>\n" +
+ " </CertificateCheck>\n";
+ return res;
+ }
+private InputStream getHttpInputStream(String url) throws Exception
+ {
+
+ return ((HttpURLConnection)new URL(url).openConnection()).getInputStream();
+ }
+
+}