diff options
author | gregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d> | 2003-11-11 22:36:36 +0000 |
---|---|---|
committer | gregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d> | 2003-11-11 22:36:36 +0000 |
commit | 643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc (patch) | |
tree | 9e750c9103ad923b291820bc85fcbd669c2e7900 /spss.test/src | |
parent | bc620256eb9b4dc6a33244b1105e58773358dbe6 (diff) | |
download | moa-id-spss-643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc.tar.gz moa-id-spss-643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc.tar.bz2 moa-id-spss-643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc.zip |
Erstellt.tags/Build-1.2.0.D01-svn
git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@51 d688527b-c9ab-4aba-bd8d-4036d912da1d
Diffstat (limited to 'spss.test/src')
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('signed-data')/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('refetsi')/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,"'","'"); + 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(); + } + +} |