package testgenerator;
import iaik.ixsil.algorithms.Transform;
import iaik.ixsil.algorithms.TransformImplBase64Decode;
import iaik.ixsil.algorithms.TransformImplCanonicalXML;
import iaik.ixsil.algorithms.TransformImplCanonicalXMLWithComments;
import iaik.ixsil.algorithms.TransformImplEnvelopedSignature;
import iaik.ixsil.algorithms.TransformImplExclusiveCanonicalXML;
import iaik.ixsil.algorithms.TransformImplExclusiveCanonicalXMLWithComments;
import iaik.ixsil.algorithms.TransformImplXPath;
import iaik.ixsil.algorithms.TransformImplXPath2;
import iaik.ixsil.algorithms.TransformImplXSLT;
import iaik.ixsil.core.Position;
import iaik.ixsil.util.URI;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.xml.serialize.DOMWriterImpl;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import at.gv.egovernment.moa.util.Base64Utils;
import at.gv.egovernment.moa.util.Constants;
import at.gv.egovernment.moa.util.DOMUtils;
import at.gv.egovernment.moa.util.EntityResolverChain;
import at.gv.egovernment.moa.util.MOAEntityResolver;
import at.gv.egovernment.moa.util.MOAErrorHandler;
import at.gv.egovernment.moa.util.StreamEntityResolver;

/**
 * @author stephan
 */
public class TestGeneratorVX extends TestCases {
	
	private static final int canAlgCanXML = 1;
	private static final int canAlgCanXMLwithCom = 2;
	private static final int canAlgExcXML = 3;
	private static final int canAlgExcXMLwithCom = 4;
	private static VXResponseBean vxBean = null;

		public static void main(String[] args) throws Exception {

		vxBean = new VXResponseBean();

		TestGeneratorVX testcase = new TestGeneratorVX();
	 testcase.createVXConfig();    
  
    testcase.create001();
    testcase.create002();
		testcase.create003();
		testcase.create004();
    testcase.create005();
    testcase.create006();
    testcase.create007();
    testcase.create009();
    testcase.create008();
    		
		testcase.create101();
		testcase.create102();
		testcase.create103();
		testcase.create104();
		testcase.create105();
		testcase.create106();
					
		testcase.create301();
		testcase.create302();
		testcase.create303();
		testcase.create304();
		testcase.create305();
		
		testcase.create307();
		testcase.create308();
		
		testcase.create310();
		testcase.create311();
		testcase.create312();
		testcase.create313();
		testcase.create314();
		testcase.create314_2();
		testcase.create315();	
		testcase.create316();	
		testcase.create317();	
		testcase.create318();	
		testcase.create318_2();  
		testcase.create319();
		testcase.create320();
		testcase.create320_2();
		testcase.create321();
		testcase.create322();
		testcase.create323();
		testcase.create324(); 		
		testcase.create325();
		testcase.create326();
		testcase.create327();

		//testcase.createL00();
	
	} 

	/* ==================================================================================================== */

	public TestGeneratorVX() throws Exception {

		super();

		// Set config properties
		configuration_.setProperty("TestClass", "TestGeneratorVX");
		
		//		configuration_.setProperty("privateKeyFile", baseDir + "additionalFiles/keys/RSAPrivateKey.der");
		//		configuration_.setProperty("publicKeyFile",  baseDir + "additionalFiles/keys/RSAPublicKey.der");
		//		configuration_.setProperty("signatureFile",  baseDir + "additionalFiles/signatures/Signature.unit1.xml");

		iaik.security.provider.IAIK.addAsProvider();
		iaik.security.ecc.provider.ECCProvider.addAsProvider();
	}

	/* ==================================================================================================== */
	
	public void testEcc() throws Exception
	{
		Date d = new Date();		
		long start = d.getTime();
		long initEcc = 0;
		long timeEcc = 0;
		long initRSA = 0;
		long timeRSA = 0;
		
		
		TestGeneratorVX testcase = new TestGeneratorVX();
		testcase.ecccreate319();
		initEcc = (new Date()).getTime() - start;
		testcase.ecccreate320();
		testcase.ecccreate321();
		testcase.ecccreate322();
		testcase.ecccreate323();
		testcase.ecccreate324();
				 
		timeEcc = (new Date()).getTime() - start;
		
		start = (new Date()).getTime();
		
		testcase = new TestGeneratorVX();
		testcase.create319();
		initRSA = (new Date()).getTime() - start;
		testcase.create320();
		testcase.create321();
		testcase.create322();
		testcase.create323();
		testcase.create324(); 
		timeRSA =(new Date()).getTime() - start;
		
		System.out.println("=========================================================");
		System.out.println("=========================================================");
		
		System.out.println("Init ECC (inkl. 1st Test): "+ (initEcc)+ "ms" );	
		System.out.println("ECC-Tests gesamt: "+ (timeEcc)+ "ms" );	
		System.out.println("ECC-Tests 2-5: "+ (timeEcc-initEcc)+ "ms" );	
		System.out.println("=========================================================");
		System.out.println("Init RSA (inkl. 1st Test): "+ (initRSA)+ "ms" );	
		System.out.println("RSA-Tests gesamt: "+ (timeRSA)+ "ms" );	
		System.out.println("RSA-Tests 2-5: "+ (timeRSA-initRSA)+ "ms" );	
		System.out.println("=========================================================");
	}
	
public void ecccreate319() throws Exception {
		String testNumber = "ecc319";
		
		
    //     Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();  // Create from whole cloth
//
  //        Element root =  (Element) document.createElement("Data");
    //      root.appendChild(document.createTextNode(readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")) );
//          Element root2 =  (Element) document.createElement("Element2");
  //        root2.appendChild(document.createTextNode("Some other text") );
			
	//		root.appendChild(root2);
			
		  
         	
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		//cpkcs.init();
		long start = (new Date()).getTime();
		cpkcs.initECDSA();
		System.out.println("Init-Dauer f�r " +testNumber + ":" + ((new Date()).getTime()-start));
		cpkcs.setCanoncialization(canAlgCanXML);		
		cpkcs.createReference(true,"Dies sind Testdaten");		
		//cpkcs.createReferenceEnvElement(root);		
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt");
		cpkcs.setKeyInformation();
    	
		start = (new Date()).getTime();    	
    	Document sign = cpkcs.returnSig();
    	System.out.println("Sign-Dauer f�r " +testNumber + ":" + ((new Date()).getTime()-start));
    
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}
	
	/**
	 * Method create320:
	 * The element KeyInfo does NOT contain the X509-certificate but
	 *  an URI pointing to an external xml-encoded X509-file
	 * @throws Exception
	 */
	public void ecccreate320() throws Exception {
		String testNumber = "ecc320";
		
		//RetrievalMethdos instead of the integratede Keys
		
		//URI fileURI = new URI(configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der");
		URI fileURI = new URI("file:/"+configuration_.getProperty("baseDir") + "resources/X509Data.xml");
		URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
		//URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
		

		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
//		cpkcs.init();

		cpkcs.initECDSA();
		cpkcs.setCanoncialization(canAlgCanXML);
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation(false, fileURI, typeURI, null);
    	
		long start = (new Date()).getTime();
    	Document sign = cpkcs.returnSig();
    	System.out.println("Sign-Dauer f�r " +testNumber + ":" + ((new Date()).getTime()-start));
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}

		
		public void ecccreate321() throws Exception {
		String testNumber = "ecc321";
		
		//RetrievalMethdos instead of the integratede Keys
		
		URI fileURI = new URI("file:/"+configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der");
		URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
		

		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		//		cpkcs.init();
		cpkcs.initECDSA();
		cpkcs.setCanoncialization(canAlgCanXML);
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation(false, fileURI, typeURI, null);

    	long start = (new Date()).getTime();    	
    	Document sign = cpkcs.returnSig();
    	System.out.println("Sign-Dauer f�r " +testNumber + ":" + ((new Date()).getTime()-start));
    
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}


	/**
	 * Method create322.
	 * The reference in the signature points with an xpointer 
	 * to the ID of an embedded valid manifest dsig:object 
	 * @throws Exception
	 */
	public void ecccreate322() throws Exception {
		String testNumber = "ecc322";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		//		cpkcs.init();
		cpkcs.initECDSA();
		cpkcs.setCanoncialization(canAlgCanXML);
		URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
		cpkcs.createReferenceWithManifest(fileURI1,"manifestObject");
		
		cpkcs.setKeyInformation();
    	 	long start = (new Date()).getTime();    	
    	Document sign = cpkcs.returnSig();
    	System.out.println("Sign-Dauer f�r " +testNumber + ":" + ((new Date()).getTime()-start));
    
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		
		
	}
	/**
	 * Method create323: 
	 * There are two references in the signature pointing 
	 * with xpointer to two embedded valid manifest dsig:objects
	 * @throws Exception
	 */
	public void ecccreate323() throws Exception {
		String testNumber = "ecc323";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		//		cpkcs.init();
		cpkcs.initECDSA();
		cpkcs.setCanoncialization(canAlgCanXML);
		URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
		URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt");		
		cpkcs.createReferenceWithManifest(fileURI1,"manifestObject");
		
		//HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...???
		
		cpkcs.createReferenceWithManifest(fileURI2,"manifestObject2");
		cpkcs.setKeyInformation();
    	 	long start = (new Date()).getTime();    	
    	Document sign = cpkcs.returnSig();
    	System.out.println("Sign-Dauer f�r " +testNumber + ":" + ((new Date()).getTime()-start));
    
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		
		
	}
	public void ecccreate324() throws Exception {
		String testNumber = "ecc324";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
	//		cpkcs.init();
		cpkcs.initECDSA();
		cpkcs.setCanoncialization(canAlgCanXML);
		URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
		URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt");		
		cpkcs.createReferencesWithManifest(fileURI1,"manifestObject",fileURI2);
		
		//HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...???				
		cpkcs.setKeyInformation();
    		 	long start = (new Date()).getTime();    	
    	Document sign = cpkcs.returnSig();
    	System.out.println("Sign-Dauer f�r " +testNumber + ":" + ((new Date()).getTime()-start));
    
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		
		
	}
	
	public void createL00() throws Exception {
		createL001("1kb");
		createL001("10kb");
		createL001("20kb");
		createL001("50kb");
		createL001("100kb");
		createL001("500kb");
		createL001("1mb");
		createL001("10mb");
	}
	
	public void createL001(String filename) throws Exception {

		String testNumber = "001";

		//Create a Request with number 001, the current Time (+0 hours)
		// and with the Date and ReturnHashInputDate Elements present
				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/"+filename+".txt");		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(false,false,null));
		
		writeFile(vxReqFileL(testNumber,filename),request);
				
	

		writeFile(vxResFileL(testNumber,filename), createResponseL(cpkcs.getX509CertString(), testNumber,"0",filename));
	}

	/**
	 * Method create001.
	 * @throws Exception
	 */
	/* ===================================================================================================================== */
	/* ===================================================================================================================== */
	/* ===================================================================================================================== */
	
	public void create001() throws Exception {

		String testNumber = "001";

		//Create a Request with number 001, the current Time (+0 hours)
		// and with the Date and ReturnHashInputDate Elements present
				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
				
	

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}

	/**
	 * Method create002.
	 * @throws Exception
	 */
	public void create002() throws Exception {
		String testNumber = "002";
		//Create a Request with number 002, the current Time (+0 hours)
		// and without the Date and with ReturnHashInputDate Elements present
						
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,false,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}

	/**
	 * Method create003.
	 * @throws Exception
	 */
	public void create003() throws Exception {
		String testNumber = "003";
		//Create a Request with number 003, the Time one Day in the past (-24 hours)
		// and with the Date and with ReturnHashInputDate Elements present
				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,-24),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}

	/**
	 * Method create004.
	 * @throws Exception
	 */
	public void create004() throws Exception {
		String testNumber = "004";
		//Create a Request with number 004, the current Time (+0 hours)
		// and with the Date and without ReturnHashInputDate Elements present
						
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(false,false,null));
		
		writeFile(vxReqFile(testNumber),request);
				

		writeFile(vxResFile(testNumber), createResponseWithoutHashInputData(cpkcs.getX509CertString(), testNumber,"0"));
	}
	public void create005() throws Exception {
		String testNumber = "005";
		
		String request = 
				createRequestStart(testNumber,true,0, "Reference=\"" + configuration_.getProperty("webbaseDir") + "resources/SignatureVX005.xml\" ")+
				createRequestEnd(false,false,null);
		
		request = replaceString(request,"<XMLContent xml:space=\"preserve\">","");
		request = replaceString(request,"</XMLContent>","");				
		writeFile(vxReqFile(testNumber),request);
		
    String response = createResponsePart(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml")) +
				  		vxBean.createSignatureCheck("0")+
				  		vxBean.createXMLDSIGManifestCheck("1","1","1")+	
				  		vxBean.createCertificateCheck("0")+
				  		 "</VerifyXMLSignatureResponse>";
						
		writeFile(vxResFile(testNumber), response);
	}
	/**
	 * Method create051.
	 * @throws Exception
	 */

public void create006() throws Exception {

		String testNumber = "006";
  // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN
   Supplement supp = new Supplement();
      supp.addXMLContent("http://MyServer.com/resources/something.xsd", 
          "<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>");     
      supp.closeSupplement();
      
    String requestEnd = createSignatureInfoEnd()+
              supp.getSupplement() +  createRequestShortEnd(false);
 
 	String requestStart = createRequestStart(testNumber,true,0);

 
   String reqDocString =  
        "<daten:Document Id=\"myDocument\" " +
                       "xmlns:daten=\"http://uri2.data.org\" "+
                       "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+
                       "xsi:schemaLocation=\"http://uri2.data.org http://MyServer.com/resources/something.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >"
        +    "daten</daten:Document>" ;
    
    InputStream bis = new ByteArrayInputStream(reqDocString.getBytes());
    //Document-Builder holen
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    factory.setValidating(true);
    //factory.setValidating(true);
    DocumentBuilder builder = factory.newDocumentBuilder();
    
    Map m = new HashMap();
    m.put("http://MyServer.com/resources/something.xsd",new ByteArrayInputStream(("<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>").getBytes()));
    
	EntityResolverChain chain = new EntityResolverChain();
    chain.addEntityResolver(new StreamEntityResolver(m));
    chain.addEntityResolver(new MOAEntityResolver());
    builder.setEntityResolver(chain);
    
    
    //Dokument Parsen
    System.out.println(reqDocString);
    //Document reqDoc = builder.parse(bis);
    Document reqDoc = DOMUtils.parseDocument(bis,true,Constants.ALL_SCHEMA_LOCATIONS, null,chain,new MOAErrorHandler());
    //Position f�r die Signatur angeben
    //String xPath_Pos = "/moa:VerifyXMLSignatureRequest/moa:VerifySignatureInfo/moa:VerifySignatureEnvironment/moa:XMLContent
    String xPath_Pos = "//daten:Document";
    //XPAth-Prefixe deklarieren
    String xPath_Prefix = "daten http://uri2.data.org";
    Position pos = new Position(xPath_Pos, xPath_Prefix,0);   
    	
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
    //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einf�gt
    System.out.println("REQDOC:"+DOMUtils.serializeNode(reqDoc));
		cpkcs.init(reqDoc,pos);
		cpkcs.setCanoncialization(canAlgCanXML);
	   
    cpkcs.setKeyInformation();    
    /*cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"));
		cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");*/
	
    Transform[] tr = new Transform[1];
    TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();  
    tr[0] = trans;
    //Enveloped Transformation
    cpkcs.createReferenceWithTransforms(new URI("#myDocument"),tr);   
//Signieren

    cpkcs.returnSig();
    //Serialisieren
  	String request =  requestStart + replaceString(Node2String(reqDoc.getDocumentElement()),"<?xml version=\"1.0\" encoding=\"utf-8\"?>","") + requestEnd;
	
		writeFile(vxReqFile(testNumber),request);

    String response = createResponsePart(cpkcs.getX509CertString()) +
              vxBean.createSignatureCheck("0")+
              vxBean.createCertificateCheck("0")+
               "</VerifyXMLSignatureResponse>";
            
    writeFile(vxResFile(testNumber), response);
	}

	public void create007() throws Exception {

    String testNumber = "007";
   
    String dtdLocation = configuration_.getProperty("webbaseDir") + "resources/VX.007DTD.dtd";
    
   // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN
   Supplement supp = new Supplement();
      supp.addBase64Content(dtdLocation, 
          readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/VX.007DTD.dtd"));     
      supp.closeSupplement();
      
    String requestEnd = createSignatureInfoEnd()+
               createRequestShortEnd(false);
 
   //String reqDocString =  createRequestStart(testNumber,true,0,"","<!DOCTYPE data:Document SYSTEM \"http://MyServer.com/resources/VX.006DTD.dtd\">") + 
   String reqDocString =  /*createRequestStart(testNumber,true,0) +*/ 
        "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Document SYSTEM \"" + dtdLocation + "\"><Document Id=\"myDocument\" " +
                       
                       "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+
                       "xsi:schemaLocation=\"http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >"
        +    "\ndaten\n</Document>" /*+ requestEnd*/;
    
    InputStream bis = new ByteArrayInputStream(reqDocString.getBytes());
    //Document-Builder holen
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    factory.setValidating(false);
    
    System.out.println(reqDocString);

    DocumentBuilder builder = factory.newDocumentBuilder();      
    //Dokument Parsen
    Document reqDoc = builder.parse(bis);
    //Position f�r die Signatur angeben
    String xPath_Pos = "/Document";
    //XPAth-Prefixe deklarieren
    String xPath_Prefix = "";//"data http://uri2.data.org";
    Position pos = new Position(xPath_Pos, xPath_Prefix,0);   
      
    CreatePKCSSignature cpkcs = new CreatePKCSSignature();
    //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einf�gt
    cpkcs.init(reqDoc,pos);
    cpkcs.setCanoncialization(canAlgCanXML);
     
    cpkcs.setKeyInformation();    
    /*cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"));
    cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");*/
  
    Transform[] tr = new Transform[1];
    TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();  
    tr[0] = trans;
    //Enveloped Transformation
    cpkcs.createReferenceWithTransforms(new URI("#myDocument"),tr);   
//Signieren
    cpkcs.returnSig();
    //Serialisieren
    String request =  Node2String(reqDoc.getDocumentElement());
    
    int i_pos = request.indexOf("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
    request = request.substring("<?xml version=\"1.0\" encoding=\"utf-8\"?>".length());

	request = "<!DOCTYPE Document SYSTEM \"" + dtdLocation + "\">"+request;
    
    System.out.println("DOC:"+request);
    
    request ="<?xml version=\"1.0\" encoding=\"utf-8\"?><VerifyXMLSignatureRequest xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xml=\"http://www.w3.org/XML/1998/namespace\"><VerifySignatureInfo><VerifySignatureEnvironment><Base64Content>"+Base64Utils.encode(request.getBytes())+"</Base64Content></VerifySignatureEnvironment><VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation></VerifySignatureInfo>"+supp.getSupplement()+"<TrustProfileID>TrustProfile1</TrustProfileID></VerifyXMLSignatureRequest>";
    
    
    

    /*int i_pos = request.indexOf("<VerifyXMLSignatureRequest");
    request = request.substring(0,i_pos)+"<!DOCTYPE data:Document SYSTEM \"http://MyServer.com/resources/VX.006DTD.dtd\">\n" +request.substring(i_pos);*/
    
    /*i_pos = request.indexOf("<TrustProfile");
    request = request.substring(0,i_pos)+supp.getSupplement() +request.substring(i_pos);*/
  
    writeFile(vxReqFile(testNumber),request);
    
    writeFile(vxResFile(testNumber), createResponseWithoutHashInputData(cpkcs.getX509CertString(), testNumber,"0",false));
  }


	public void create008() throws Exception {

	    String testNumber = "008";
	    
	    String request = 
	    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
		"<VerifyXMLSignatureRequest xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" xmlns:xml=\"http://www.w3.org/XML/1998/namespace\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+
		"<VerifySignatureInfo>"+
		"<VerifySignatureEnvironment>"+
		"<XMLContent xml:space=\"preserve\">"+
		"<dsig:Signature Id=\"HS_signature\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+
		"<dsig:SignedInfo>"+
		"<dsig:CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>"+
		"<dsig:SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>"+
		"<dsig:Reference Id=\"reference-data-1\" URI=\"#signed-data\">"+
		"<dsig:Transforms>"+
		"<dsig:Transform Algorithm=\"http://www.w3.org/2002/06/xmldsig-filter2\">"+
		"<xf2:XPath Filter=\"intersect\" xmlns:xf2=\"http://www.w3.org/2002/06/xmldsig-filter2\">id(&apos;signed-data&apos;)/node()</xf2:XPath>"+
		"</dsig:Transform>"+
		"</dsig:Transforms>"+
		"<dsig:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+
		"<dsig:DigestValue>4lngV1x/OvR8iFWEBenH4fDihwA=</dsig:DigestValue>"+
		"</dsig:Reference>"+
		"<dsig:Reference Type=\"http://uri.etsi.org/01903/v1.1.1#SignedProperties\" URI=\"#refetsi\">"+
		"<dsig:Transforms>"+
		"<dsig:Transform Algorithm=\"http://www.w3.org/2002/06/xmldsig-filter2\">"+
		"<xf2:XPath Filter=\"intersect\" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\" xmlns:xf2=\"http://www.w3.org/2002/06/xmldsig-filter2\">id(&apos;refetsi&apos;)/etsi:QualifyingProperties/etsi:SignedProperties</xf2:XPath>"+
		"</dsig:Transform>"+
		"</dsig:Transforms>"+
		"<dsig:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+
		"<dsig:DigestValue>1j0DWguieuw2cGA06gFjoSNXr+w=</dsig:DigestValue>"+
		"</dsig:Reference>"+
		"</dsig:SignedInfo>"+
		"<dsig:SignatureValue>Yb6fsPNbKyYW+u7cU1EqF9n5QrwLXHqdGD4tJNT5+sA7kQR3Ztqz965vlBH+1pJE"+
		"nGxehxXsesZboVvkJa/jhuI0goCTW9KkdGOP71B7o7/vlyBbxaYKpnVNtBU4/qtT"+
		"xba7M0E32X+tm/x9O6foXIM0AoP3oQBZmjo9rEJ9kfk=</dsig:SignatureValue>"+
		"<dsig:KeyInfo>"+
		"<dsig:X509Data>"+
		"<dsig:X509Certificate>MIIFJTCCBA2gAwIBAgICGTcwDQYJKoZIhvcNAQEFBQAwgaExCzAJBgNVBAYTAkFU"+
		"MUgwRgYDVQQKEz9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGlt"+
		"IGVsZWt0ci4gRGF0ZW52ZXJrZWhyIEdtYkgxIzAhBgNVBAsTGmEtc2lnbi1URVNU"+
		"LVByZW1pdW0tRW5jLTAxMSMwIQYDVQQDExphLXNpZ24tVEVTVC1QcmVtaXVtLUVu"+
		"Yy0wMTAeFw0wMzAyMTAxMzIwNThaFw0wNjAyMTAxMzIwNThaMGoxCzAJBgNVBAYT"+
		"AkFUMRwwGgYDVQQDExNUZXN0cGVyc29uIE1PQTQgQlJaMQwwCgYDVQQEEwNCUlox"+
		"GDAWBgNVBCoTD1Rlc3RwZXJzb24gTU9BNDEVMBMGA1UEBRMMNzkwMTg3NDYxNjMz"+
		"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDS/UW1/tZeCh7HHQmj8auUTEc4"+
		"edAgRDkUVKOm0tF3kE3WZlhGDZL0p84xsdIKyI+bwDCMATATkQwDo/Xxn9jJMi4/"+
		"t80bNyRsHk9giA0wcvz9NgmEcDwKNqawGsR9gNeK8TyIC8AuDkj1EwtkAObMvtp/"+
		"Z1phi47x3JxDDfGDpQIDAQABo4ICHzCCAhswEwYDVR0jBAwwCoAIS7OAw3GTPNgw"+
		"JwYIKwYBBQUHAQMBAf8EGDAWMAgGBgQAjkYBATAKBggrBgEFBQcLATCBggYIKwYB"+
		"BQUHAQEEdjB0MCkGCCsGAQUFBzABhh1odHRwOi8vd3d3LmEtdHJ1c3QuYXQ6ODIv"+
		"b2NzcDBHBggrBgEFBQcwAoY7aHR0cDovL3d3dy5hLXRydXN0LmF0L2NlcnRzL2Et"+
		"c2lnbi1URVNULVByZW1pdW0tU2lnLTAxYS5jcnQwgZQGA1UdIASBjDCBiTB9BgYq"+
		"KAARAQQwczA1BggrBgEFBQcCARYpaHR0cDovL3d3dy5hLXRydXN0LmF0L2RvY3Mv"+
		"Y3AvYS1zaWduLVRFU1QwOgYIKwYBBQUHAgIwLhosRGllc2VzIFplcnRpZmlrYXQg"+
		"ZGllbnQgbnVyIHp1IFRlc3R6d2Vja2VuICEwCAYGBACLMAEBMG8GA1UdHwRoMGYw"+
		"ZKBioGCGXmxkYXA6Ly9sZGFwLmEtdHJ1c3QuYXQvb3U9YS1zaWduLVRFU1QtUHJl"+
		"bWl1bS1FbmMtMDEsbz1BLVRydXN0LGM9QVQ/Y2VydGlmaWNhdGVyZXZvY2F0aW9u"+
		"bGlzdD8wEQYDVR0OBAoECE4DxL9ky4M+MA4GA1UdDwEB/wQEAwIGwDAgBgNVHREE"+
		"GTAXgRV0ZXN0cGVyc29uNEBicnouZ3YuYXQwCQYDVR0TBAIwADANBgkqhkiG9w0B"+
		"AQUFAAOCAQEAioVvsZN+NnQxXMTGdjKveTBMRTYzHflkSC8lI9XXltP5+mjIuoB2"+
		"Tn6voovA8dXz9jTsnQt8f8ye0CL2bSS9UVD1jv8So3bavquW+HlkZBAZvL39APNL"+
		"PjUUnWn0QOnrQAJ6W47UwGAUgEw3KcBcJaEa4Xb/8kUj618xGzWl6X0mKsVpxkrf"+
		"+5Cj+nmwDqChll08/90MmhSY4M5FrvmQ9GjAN5FHVsk0FPp02tKCRzoBJtzpB1DW"+
		"KHlgiDHUAXy5eD0XI7PXebPNZ4InvY/jC/IH8PRLdJT249YQmUxZ4neTtFDvb8C1"+
		"Qh6k725fh3hVxqX8ZwwWj9+iGQVk53K3CA==</dsig:X509Certificate>"+
		/*"<dsig:X509Certificate>"+
		readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/IAIKRootMusterbehoerde.cer")+
		"</dsig:X509Certificate>"+*/
		"</dsig:X509Data>"+
		"</dsig:KeyInfo>"+
		"<dsig:Object Id=\"signed-data\">"+
		"<sl10:InfoboxReadRequest xmlns:sl10=\"http://www.buergerkarte.at/namespaces/securitylayer/20020225#\">"+
		"<sl10:InfoboxIdentifier>IdentityLink</sl10:InfoboxIdentifier>"+
		"<sl10:BinaryFileParameters ContentIsXMLEntity=\"true\"/>"+
		"</sl10:InfoboxReadRequest>"+
		"</dsig:Object>"+
		"<dsig:Object Id=\"refetsi\">"+
		"<etsi:QualifyingProperties Target=\"#HS_signature\" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\">"+
		"<etsi:SignedProperties>"+
		"<etsi:SignedSignatureProperties>"+
		"<etsi:SigningTime>2003-03-04T12:32:54Z</etsi:SigningTime>"+
		"<etsi:SigningCertificate>"+
		"<etsi:Cert>"+
		"<etsi:CertDigest>"+
		"<etsi:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+
		"<etsi:DigestValue>Frhu1o4mL4gQHdJcU0xSA/h4COE=</etsi:DigestValue>"+
		"</etsi:CertDigest>"+
		"<etsi:IssuerSerial>"+
		"<dsig:X509IssuerName>CN=a-sign-TEST-Premium-Enc-01,OU=a-sign-TEST-Premium-Enc-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT</dsig:X509IssuerName>"+
		"<dsig:X509SerialNumber>6455</dsig:X509SerialNumber>"+
		"</etsi:IssuerSerial>"+
		"</etsi:Cert>"+
		"</etsi:SigningCertificate>"+
		"<etsi:SignaturePolicyIdentifier>"+
		"<etsi:SignaturePolicyImplied/>"+
		"</etsi:SignaturePolicyIdentifier>"+
		"</etsi:SignedSignatureProperties>"+
		"<etsi:SignedDataObjectProperties>"+
		"<etsi:DataObjectFormat ObjectReference=\"#reference-data-1\">"+
		"<etsi:MimeType>text/xml</etsi:MimeType>"+
		"</etsi:DataObjectFormat>"+
		"</etsi:SignedDataObjectProperties>"+
		"</etsi:SignedProperties>"+
		"</etsi:QualifyingProperties>"+
		"</dsig:Object>"+
		"</dsig:Signature>"+
		"</XMLContent>"+
		"</VerifySignatureEnvironment>"+
		"<VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>"+
		"</VerifySignatureInfo>"+
		"<TrustProfileID>TrustProfile1</TrustProfileID>"+
		"</VerifyXMLSignatureRequest>";
		
	    String response = 
	    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
		"<VerifyXMLSignatureResponse xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" >"+
		"	<SignerInfo>"+
		"		<dsig:X509Data xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+
		"			<dsig:X509SubjectName>serialNumber=790187461633,givenName=Testperson MOA4,SN=BRZ,CN=Testperson MOA4 BRZ,C=AT</dsig:X509SubjectName>"+
		"			<dsig:X509IssuerSerial>"+
		"				<dsig:X509IssuerName>CN=a-sign-TEST-Premium-Enc-01,OU=a-sign-TEST-Premium-Enc-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT</dsig:X509IssuerName>"+
		"				<dsig:X509SerialNumber>6455</dsig:X509SerialNumber>"+
		"			</dsig:X509IssuerSerial>"+
		"<dsig:X509Certificate>MIIFJTCCBA2gAwIBAgICGTcwDQYJKoZIhvcNAQEFBQAwgaExCzAJBgNVBAYTAkFU"+
		"MUgwRgYDVQQKEz9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGlt"+
		"IGVsZWt0ci4gRGF0ZW52ZXJrZWhyIEdtYkgxIzAhBgNVBAsTGmEtc2lnbi1URVNU"+
		"LVByZW1pdW0tRW5jLTAxMSMwIQYDVQQDExphLXNpZ24tVEVTVC1QcmVtaXVtLUVu"+
		"Yy0wMTAeFw0wMzAyMTAxMzIwNThaFw0wNjAyMTAxMzIwNThaMGoxCzAJBgNVBAYT"+
		"AkFUMRwwGgYDVQQDExNUZXN0cGVyc29uIE1PQTQgQlJaMQwwCgYDVQQEEwNCUlox"+
		"GDAWBgNVBCoTD1Rlc3RwZXJzb24gTU9BNDEVMBMGA1UEBRMMNzkwMTg3NDYxNjMz"+
		"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDS/UW1/tZeCh7HHQmj8auUTEc4"+
		"edAgRDkUVKOm0tF3kE3WZlhGDZL0p84xsdIKyI+bwDCMATATkQwDo/Xxn9jJMi4/"+
		"t80bNyRsHk9giA0wcvz9NgmEcDwKNqawGsR9gNeK8TyIC8AuDkj1EwtkAObMvtp/"+
		"Z1phi47x3JxDDfGDpQIDAQABo4ICHzCCAhswEwYDVR0jBAwwCoAIS7OAw3GTPNgw"+
		"JwYIKwYBBQUHAQMBAf8EGDAWMAgGBgQAjkYBATAKBggrBgEFBQcLATCBggYIKwYB"+
		"BQUHAQEEdjB0MCkGCCsGAQUFBzABhh1odHRwOi8vd3d3LmEtdHJ1c3QuYXQ6ODIv"+
		"b2NzcDBHBggrBgEFBQcwAoY7aHR0cDovL3d3dy5hLXRydXN0LmF0L2NlcnRzL2Et"+
		"c2lnbi1URVNULVByZW1pdW0tU2lnLTAxYS5jcnQwgZQGA1UdIASBjDCBiTB9BgYq"+
		"KAARAQQwczA1BggrBgEFBQcCARYpaHR0cDovL3d3dy5hLXRydXN0LmF0L2RvY3Mv"+
		"Y3AvYS1zaWduLVRFU1QwOgYIKwYBBQUHAgIwLhosRGllc2VzIFplcnRpZmlrYXQg"+
		"ZGllbnQgbnVyIHp1IFRlc3R6d2Vja2VuICEwCAYGBACLMAEBMG8GA1UdHwRoMGYw"+
		"ZKBioGCGXmxkYXA6Ly9sZGFwLmEtdHJ1c3QuYXQvb3U9YS1zaWduLVRFU1QtUHJl"+
		"bWl1bS1FbmMtMDEsbz1BLVRydXN0LGM9QVQ/Y2VydGlmaWNhdGVyZXZvY2F0aW9u"+
		"bGlzdD8wEQYDVR0OBAoECE4DxL9ky4M+MA4GA1UdDwEB/wQEAwIGwDAgBgNVHREE"+
		"GTAXgRV0ZXN0cGVyc29uNEBicnouZ3YuYXQwCQYDVR0TBAIwADANBgkqhkiG9w0B"+
		"AQUFAAOCAQEAioVvsZN+NnQxXMTGdjKveTBMRTYzHflkSC8lI9XXltP5+mjIuoB2"+
		"Tn6voovA8dXz9jTsnQt8f8ye0CL2bSS9UVD1jv8So3bavquW+HlkZBAZvL39APNL"+
		"PjUUnWn0QOnrQAJ6W47UwGAUgEw3KcBcJaEa4Xb/8kUj618xGzWl6X0mKsVpxkrf"+
		"+5Cj+nmwDqChll08/90MmhSY4M5FrvmQ9GjAN5FHVsk0FPp02tKCRzoBJtzpB1DW"+
		"KHlgiDHUAXy5eD0XI7PXebPNZ4InvY/jC/IH8PRLdJT249YQmUxZ4neTtFDvb8C1"+
		"Qh6k725fh3hVxqX8ZwwWj9+iGQVk53K3CA==</dsig:X509Certificate>"+
		"			<sl11:QualifiedCertificate xmlns:sl11=\"http://www.buergerkarte.at/namespaces/securitylayer/20020831#\"/>"+
		"		</dsig:X509Data>"+
		"	</SignerInfo>"+
		"	<SignatureCheck>"+
		"		<Code>0</Code>"+
		"	</SignatureCheck>"+
		"	<CertificateCheck>"+
		"		<Code>0</Code>"+
		"	</CertificateCheck>"+
		"</VerifyXMLSignatureResponse>";
	  
	    writeFile(vxReqFile(testNumber),request);
	    
	    writeFile(vxResFile(testNumber),response);
  	}
  	
  	public void create009() throws Exception {

		String testNumber = "009";
  // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN
   Supplement supp = new Supplement();
      supp.addXMLContent("http://MyServer.com/resources/something.xsd", 
          "<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>");     
      supp.closeSupplement();
      
    String requestEnd = createSignatureInfoEnd()+
              supp.getSupplement() +  createRequestShortEnd(false);
 
 	String requestStart = createRequestStart(testNumber,true,0);

 
   String reqDocString =  
        "<daten:Document Id=\"myDocument\" " +
                       "xmlns:daten=\"http://uri2.data.org\" "+
                       "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+
                       "xsi:schemaLocation=\"http://uri2.data.org http://MyServer.com/resources/something.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >"
        +    "daten</daten:Document>" ;
    
    InputStream bis = new ByteArrayInputStream(reqDocString.getBytes());
    //Document-Builder holen
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    factory.setValidating(true);
    //factory.setValidating(true);
    DocumentBuilder builder = factory.newDocumentBuilder();
    
    Map m = new HashMap();
    m.put("http://MyServer.com/resources/something.xsd",new ByteArrayInputStream(("<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>").getBytes()));
    
	EntityResolverChain chain = new EntityResolverChain();
    chain.addEntityResolver(new StreamEntityResolver(m));
    chain.addEntityResolver(new MOAEntityResolver());
    builder.setEntityResolver(chain);
    
    
    //Dokument Parsen
    System.out.println(reqDocString);
    //Document reqDoc = builder.parse(bis);
    Document reqDoc = DOMUtils.parseDocument(bis,true,Constants.ALL_SCHEMA_LOCATIONS, null,chain,new MOAErrorHandler());
    //Position f�r die Signatur angeben
    //String xPath_Pos = "/moa:VerifyXMLSignatureRequest/moa:VerifySignatureInfo/moa:VerifySignatureEnvironment/moa:XMLContent
    String xPath_Pos = "//daten:Document";
    //XPAth-Prefixe deklarieren
    String xPath_Prefix = "daten http://uri2.data.org";
    Position pos = new Position(xPath_Pos, xPath_Prefix,0);   
    	
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
    //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einf�gt
    System.out.println("REQDOC:"+DOMUtils.serializeNode(reqDoc));
		cpkcs.init(reqDoc,pos);
		cpkcs.setCanoncialization(canAlgCanXML);
	   
    cpkcs.setKeyInformation();    
    /*cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"));
		cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");*/
	
    Transform[] tr = new Transform[1];
    TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();  
    tr[0] = trans;
    //Enveloped Transformation
    cpkcs.createReferenceWithTransforms(new URI("#xpointer(id(myDocument))"),tr);   
//Signieren

    cpkcs.returnSig();
    //Serialisieren
  	String request =  requestStart + replaceString(Node2String(reqDoc.getDocumentElement()),"<?xml version=\"1.0\" encoding=\"utf-8\"?>","") + requestEnd;
	
		writeFile(vxReqFile(testNumber),request);

    String response = createResponsePart(cpkcs.getX509CertString()) +
              vxBean.createSignatureCheck("0")+
              vxBean.createCertificateCheck("0")+
               "</VerifyXMLSignatureResponse>";
            
    writeFile(vxResFile(testNumber), response);
	}

	public void create101() throws Exception {

		String testNumber = "101";
				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
   
   		Supplement supp = new Supplement();
    	supp.addMetaInfo("text/plain","http://www.buergerkarte.at");
    	supp.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", 
    			readBinaryFileAsBase64(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));   	
    	supp.closeSupplement();
   		//supp.addProfileID("Some ID");
   		
		String requestEnd = createSignatureInfoEnd()+
							supp.getSupplement() +	createRequestShortEnd(false);
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				requestEnd);
		
		writeFile(vxReqFile(testNumber),request);
    
    String response = createResponsePart(cpkcs.getX509CertString()) +
              vxBean.createSignatureCheck("0")+
              /*vxBean.createXMLDSIGManifestCheck("0","","1")+  */
              vxBean.createCertificateCheck("0")+
               "</VerifyXMLSignatureResponse>";
            
    writeFile(vxResFile(testNumber), response);	
  }
	public void create102() throws Exception {

		String testNumber = "102";
				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
   
   		Supplement supp = new Supplement();
    	supp.addMetaInfo("text/plain",null);
    	supp.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", 
    			readBinaryFileAsBase64(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));   	
    	supp.closeSupplement();
   		//supp.addProfileID("Some ID");
   		
		String requestEnd = createSignatureInfoEnd()+
							supp.getSupplement() +	"<ReturnHashInputData/>"+createRequestShortEnd(false);
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				requestEnd);
		
		writeFile(vxReqFile(testNumber),request);
				
	

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}

		public void create103() throws Exception {

		String testNumber = "103";
				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
   
   		Supplement supp = new Supplement();
    	//supp.addMetaInfo("text/plain",null);
    	supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
    	//supp.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", 
    	//		readBinaryFileAsBase64(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"));   	
    	supp.closeSupplement();
   		//supp.addProfileID("Some ID");
   		
		String requestEnd = createSignatureInfoEnd()+
							supp.getSupplement() +	"<ReturnHashInputData/>"+createRequestShortEnd(false);
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				requestEnd);
		
		writeFile(vxReqFile(testNumber),request);
				
	

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}
public void create104() throws Exception {

		String testNumber = "104";
				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
    
		Supplement supp = new Supplement();
    	supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
    	supp.closeSupplement();
   		
		String requestEnd = 
				createSignatureInfoEnd()+ 
				supp.getSupplement()+"<ReturnHashInputData/>"+
				createRequestShortEnd(false);
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber+"	- Supplement/Content/XMLContent instead of Supplement/Content/Base64Content",true,0),
				cpkcs.returnSig(),
				requestEnd);
	
		writeFile(vxReqFile(testNumber),request);
		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}
	
		public void create105() throws Exception {

		String testNumber = "105";
				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testXML.txt");		
		cpkcs.setKeyInformation();
    
		Supplement supp = new Supplement();
    	supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
    	supp.closeSupplement();
   		
   		Supplement supp2 = new Supplement();
    	supp2.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testXML.txt", readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testXML.txt"));
    	supp2.closeSupplement();
   		
		String requestEnd = 
				createSignatureInfoEnd()+ 
				supp.getSupplement()+
				supp2.getSupplement() +
				createRequestShortEnd(true);
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber + " - 2 Supplement elements",true,0),
				cpkcs.returnSig(),
				requestEnd);

		String response = createResponsePart(cpkcs.getX509CertString()) +
						"<HashInputData><Base64Content>"+
						readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testSimple.txt") + 
						"</Base64Content></HashInputData>"+
						"<HashInputData><Base64Content>"+
						readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testXML.txt") + 
						"</Base64Content></HashInputData>"+
				  		vxBean.createSignatureCheck("0")+
				  		vxBean.createCertificateCheck("0")+
				  		 "</VerifyXMLSignatureResponse>";

	
		writeFile(vxReqFile(testNumber),request);
		writeFile(vxResFile(testNumber), response);
	}

public void create106() throws Exception {

		String testNumber = "106";
				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
    	   		
		String requestEnd = 
				createSignatureInfoEnd()+ 
				"<SupplementProfileID>SupplementProfile2</SupplementProfileID>" +
				"<!-- Supplement Profile 2 enthaelt nicht die referenzierte URI -->" +
        "<SupplementProfileID>SupplementProfile1</SupplementProfileID><ReturnHashInputData/>" +
				createRequestShortEnd(false);
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber +" - 2 SupplementProfileID elements" ,true,0),
				cpkcs.returnSig(),
				requestEnd);
	
		writeFile(vxReqFile(testNumber),request);
		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}

	
	public void create301() throws Exception {
		
		String testNumber = "301";
		
		//Testcast with another canoicalization algorithm				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXMLwithCom);
		//cpkcs.createReference(true,"Dies sind testdaten");
		
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}
	/**
	 * Method create302.
	 * @throws Exception
	 */
	public void create302() throws Exception {

		String testNumber = "302";
		
			//Testcast with another canoicalization algorithm				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();

		cpkcs.init();
		cpkcs.setCanoncialization(canAlgExcXML);
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0"));
	}
	/**
	 * Method create303.
	 * @throws Exception
	 */
	public void create303() throws Exception {

		String testNumber = "303";
		
		//Testcast with another canoicalization algorithm				
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();

		cpkcs.init();
		cpkcs.setCanoncialization(canAlgExcXMLwithCom);
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0"));
	}
	
	public void create304() throws Exception {
		
		String testNumber = "304";
		

		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.initECDSA();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		
		//cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		//cpkcs.createEnvelopedDataObject("envelopedData",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
		
		cpkcs.createReference(true,readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"),"envelopedData");
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0","<dsig:X509IssuerName>CN=IAIK ECDSA Test,OU=JavaSecurity,O=IAIK,C=AT</dsig:X509IssuerName>","<dsig:X509SubjectName>CN=IAIK ECDSA Test,OU=JavaSecurity,O=IAIK,C=AT</dsig:X509SubjectName>","<dsig:X509SerialNumber>68172</dsig:X509SerialNumber>"));
	}
	/**
	 * Method create305.
	 * @throws Exception
	 */
	public void create305() throws Exception {

		String testNumber = "305";

		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		
		String refData = "Dies sind Testdaten";
		
		cpkcs.createReference(true,refData);		
		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",refData));
	}
	
	/**
	 * Method create307.
	 * @throws Exception
	 */
	public void create307() throws Exception {

		String testNumber = "307";

	CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
		cpkcs.setKeyInformation();
    	
    	Supplement supp = new Supplement();
    	supp.addXMLContent(configuration_.getProperty("baseDir")+"resources/testSimple.txt", readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
    	supp.closeSupplement();
    
    	String requestEnd = createSignatureInfoEnd()+
							supp.getSupplement() +
							createRequestShortEnd(true);
        	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				requestEnd);
		
		writeFile(vxReqFile(testNumber),request);

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0"));
	}
		
	/**
	 * Method create308.
	 * @throws Exception
	 */
	public void create308() throws Exception {

		String testNumber = "308";

	CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
		cpkcs.setKeyInformation();
    	
   	Supplement supp = new Supplement();
    	supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
    	supp.closeSupplement();
   
    	
		String requestEnd = createSignatureInfoEnd()+ supp.getSupplement() + 
								createRequestShortEnd(false);
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				requestEnd);
		
		//request = replaceString(request,"<XMLContent xml:space=\"preserve\">","<XMLContent xml:space=\"preserve\">VERAENDERTE DATEN und die Ursprungsdaten: ");
		request = replaceString(request,"Dies sind Testdaten","VERAENDERTE DATEN und die Ursprungsdaten: Dies sind Testdaten");
		//request = replaceString(request,Base64Utils.encode("Dies sind Testdaten".getBytes()),Base64Utils.encode("VERAENDERTE DATEN und die Ursprungsdaten: Dies sind Testdaten".getBytes()));
		//request = replaceString(request,"<ReturnHashInputData/>","");
		/*request = replaceString(request,"Reference=\""+configuration_.getProperty("baseDir")+"resources/testSimple.txt\"","Reference=\"\"");
		request = replaceString(request,"URI=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt\"","URI=\"\"");*/
		writeFile(vxReqFile(testNumber),request);

		String response = createResponse(cpkcs.getX509CertString(),testNumber,"1",1);

		writeFile(vxResFile(testNumber), response);
	}
	public void create310() throws Exception {

		String testNumber = "310";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		
		//Erzeugen der Base64-Daten				
		//String tmp = readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testSimple.txt");
		
		URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txtbase64.enc");
		
		Transform[] tr = new Transform[1];
		tr[0] = new TransformImplBase64Decode();
		InputStream s = getHttpInputStream(target.toString());
		tr[0].setInput(s,null);			
		
		cpkcs.createReferenceWithTransforms(target,tr);		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
				
	

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0"));
	}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//-------311 scheint die XPAth - Transformation nicht richtig auszuf�hren-	
// (Siehe Output in der Konsole.....)

	public void create311() throws Exception {

		String testNumber = "311";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
		
		Transform[] tr = new Transform[1];
		TransformImplXPath trans = new TransformImplXPath();	
//		TransformImplXSLT trans = new TransformImplXSLT();
			
	
		InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/BookData.xml");
//		InputStream s2 = new FileInputStream(configuration_.getProperty("baseDir")+"resources/transform.xsl");
		trans.setInput(s,null);	
//		trans.setStyleSheet(s2,null);

		trans.addNSDeclaration("data",new URI("http://uri.data.org"));   //new URI("file:/"+configuration_.getProperty("baseDir")+"resources/BookData.xml"));
  //  trans.setXPath("ancestor-or-self::data:first-name");
	 trans.setXPath("ancestor-or-self::text()/ancestor-or-self::data:first-name");

		tr[0] = trans;

		cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr);		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
				
		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",1,"text:Ellipse"));
	}

public void create312() throws Exception 
	{	String testNumber = "312";
	
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init("signature");
		cpkcs.setCanoncialization(canAlgCanXML);						
		
		Transform[] tr = new Transform[1];
		TransformImplXPath2 trans = new TransformImplXPath2();	
		InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_book.xsl");
		trans.setInput(s,null);									

		HashMap temp = new HashMap();
		temp.put("data",new URI("http://uri.data.org"));
		trans.addXPathFilter("/data:book/data:first-name",TransformImplXPath2.FILTER_MODE_SUBTRACT_,temp);
		tr[0] = trans;
		//System.out.println(getTransformsResult(tr));
		cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr,"reference-1");		
		cpkcs.setKeyInformation();
		
		String request = 
		makeOutputFile(
				createRequestStart("312",true,0),
				cpkcs.returnSig(),
				createSignatureInfoEnd()
				+ createRequestShortEnd(false));
		
		writeFile(vxReqFile(testNumber),request);	
		
		String response = createResponsePart(cpkcs.getX509CertString()) +
				  		vxBean.createSignatureCheck("0")+
				  		vxBean.createCertificateCheck("0")+
				  		 "</VerifyXMLSignatureResponse>";
						
		writeFile(vxResFile(testNumber), response);
	}

public void create313() throws Exception 
	{	String testNumber = "313";

  // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN
      
    String requestEnd = createRequestEnd(true,false,null);
 
   String reqDocString =  createRequestStart(testNumber,true,0) + 
        "<data:Document " +
                       "xmlns:data=\"http://uri.data.org\" "+
                       "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Id=\"myDocument\" "+
                       "xsi:schemaLocation=\"http://uri.data.org http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX.006Schema.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >"
        +    "</data:Document>" + requestEnd;

    
    InputStream bis = new ByteArrayInputStream(("<data:Document " +
                       "xmlns:data=\"http://uri.data.org\" "+
                       "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Id=\"myDocument\" "+
                       "xsi:schemaLocation=\"http://uri.data.org http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX.006Schema.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >"
        +    "</data:Document>").getBytes());
    //Document-Builder holen
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    DocumentBuilder builder = factory.newDocumentBuilder();      
    //Dokument Parsen
   Document reqDoc = builder.parse(bis);
   
   System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement()));
    //Position f�r die Signatur angeben
    //String xPath_Pos = "/moa:VerifyXMLSignatureRequest/moa:VerifySignatureInfo/moa:VerifySignatureEnvironment/moa:XMLContent/data:Document";
    String xPath_Pos = "/node()";
    //XPAth-Prefixe deklarieren
    String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\"";
    Position pos = new Position(xPath_Pos, xPath_Prefix,0);   
        
    CreatePKCSSignature cpkcs = new CreatePKCSSignature();
    //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einf�gt
    cpkcs.init(reqDoc,pos);
    cpkcs.setCanoncialization(canAlgCanXML);
     
    cpkcs.setKeyInformation(1);    
    //cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"));
    //cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");
  
    Transform[] tr = new Transform[1];
    TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature();  
    tr[0] = trans;
    //Enveloped Transformation
    cpkcs.createReferenceWithTransforms(new URI(""),tr);   
//Signieren
    cpkcs.returnSig();
    //Serialisieren
    String request =  Node2String(reqDoc.getDocumentElement());
  
    writeFile(vxReqFile(testNumber),createRequestStart(testNumber,true,0).trim() +cutXML(request).trim()+requestEnd.trim());
    writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0",1,"text:"+"<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Id=\"myDocument\" xsi:schemaLocation=\"http://uri.data.org http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX.006Schema.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\"></data:Document>"));

	}

	
	public void create314() throws Exception 
	{	String testNumber = "314";

		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init("signature");
		cpkcs.setCanoncialization(canAlgCanXML);						
		
		Transform[] tr = new Transform[1];
		TransformImplXSLT trans = new TransformImplXSLT();	
		InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
		trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
		tr[0] = trans;	
		cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr,"reference-1");		
		cpkcs.setKeyInformation();
		
		String request = 
		makeOutputFile(
				createRequestStart("314",true,0),
				cpkcs.returnSig(),
				createSignatureInfoEnd()
				+ createRequestShortEnd(false));
		
		writeFile(vxReqFile(testNumber),request);	
		
		String response = createResponsePart(cpkcs.getX509CertString()) +
				  		vxBean.createSignatureCheck("0")+
				  		vxBean.createCertificateCheck("0")+
				  		 "</VerifyXMLSignatureResponse>";
						
		writeFile(vxResFile(testNumber), response);
	}
	
public void create314_2() throws Exception 
	{	String testNumber = "314_2";

		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init("signature");
		cpkcs.setCanoncialization(canAlgCanXML);						
		
		Transform[] tr = new Transform[1];
		TransformImplXSLT trans = new TransformImplXSLT();	
		InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl");
		trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl"));
		tr[0] = trans;	
		cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr,"reference-1");		
		cpkcs.setKeyInformation();
		
		Supplement supp = new Supplement();
		String suppContent = readFileCR(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl");
		suppContent = replaceString(suppContent, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>","");
    	supp.addXMLContent("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_book.xsl", suppContent );
    	supp.closeSupplement();
		
      	String request = 
		makeOutputFile(
				createRequestStart("314_2",true,0),
				cpkcs.returnSig(),
				createSignatureInfoEnd() +
				supp.getSupplement()  
				+ createRequestShortEnd(false));
		
/*		request = replaceString(request, "http://moa-test.brz.intra.gv.at", "http://MyServer.com");
    request = replaceString(request, "http://moa-test.brz.intra.gv.at", "http://MyServer.com");
    request = replaceString(request, "http://moa-test.brz.intra.gv.at", "http://MyServer.com");
    //Hinweis: ich nehmen an, die URI in DSIG:REFERENCE sollte schon stimmen.... 
    request = replaceString(request, "http://MyServer.com", "http://moa-test.brz.intra.gv.at");				*/
		writeFile(vxReqFile(testNumber),request);	
		
		String response = createResponsePart(cpkcs.getX509CertString()) +
				  		vxBean.createSignatureCheck("0")+
				  		vxBean.createCertificateCheck("0")+
				  		 "</VerifyXMLSignatureResponse>";						
		writeFile(vxResFile(testNumber), response);
	}
	
	
	public void create315() throws Exception {

		String testNumber = "315";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		//cpkcs.createReference(true,"Dies sind testdaten");
				URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML");
		
		Transform[] tr = new Transform[1];
		tr[0] = new TransformImplCanonicalXML();	
		InputStream s = getHttpInputStream(target.toString());
		tr[0].setInput(s,null);									
		
		String erg = getTransformsResult(tr);
		
		cpkcs.createReferenceWithTransforms(target,tr);				
		//cpkcs.createReference(false, "file:/"+ configuration_.getProperty("baseDir")+"resources/test_wo_canonicalisation.XML");
		//cpkcs.createReference(false, "file:/"+ configuration_.getProperty("baseDir")+"resources/test_w_canonicalisation.XML");
//		cpkcs.createReferenceWithManifest(new URI("file:/"+ configuration_.getProperty("baseDir")+"resources/test_w_canonicalisation.XML"),"canonicalizedData");
		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		
		
		writeFile(vxReqFile(testNumber),request);
				
	

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg));
	}
	
	public void create316() throws Exception {

		String testNumber = "316";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);

		URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML");
		
		Transform[] tr = new Transform[1];
		tr[0] = new TransformImplCanonicalXMLWithComments();	
		InputStream s = getHttpInputStream(target.toString());
		tr[0].setInput(s,null);									
		
		String erg = getTransformsResult(tr);
		
		cpkcs.createReferenceWithTransforms(target,tr);				
	
		cpkcs.setKeyInformation();  	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
	
		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg));
	}
		public void create317() throws Exception {

		String testNumber = "317";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);

		URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML");

		Transform[] tr = new Transform[1];
		tr[0] = new TransformImplExclusiveCanonicalXML();	
		InputStream s = getHttpInputStream(target.toString());
		tr[0].setInput(s,null);
		String erg = getTransformsResult(tr);
		cpkcs.createReferenceWithTransforms(target,tr);				
	
		cpkcs.setKeyInformation();  	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
	
		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg));
	}
	public void create318() throws Exception {

		String testNumber = "318";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
				URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML");
		Transform[] tr = new Transform[1];
		tr[0] = new TransformImplExclusiveCanonicalXMLWithComments();	
		InputStream s = getHttpInputStream(target.toString());
		tr[0].setInput(s,null);
											
		String erg = getTransformsResult(tr);				
		cpkcs.createReferenceWithTransforms(target,tr);				
	
		cpkcs.setKeyInformation();  	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
	
		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg));
	}
	
	public void create318_2() throws Exception {

		String testNumber = "318_2";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		
		//Create a base64-encoded version of the xml file
		
		//String tmp = readBinaryFileAsBase64(configuration_.getProperty("baseDir")+"resources/test_wo_canonicalisation.XML");
		
		URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XMLbase64.enc");
				
		Transform[] tr = new Transform[3];
		tr[0] = new TransformImplBase64Decode();
		InputStream s = getHttpInputStream(target.toString());
		tr[0].setInput(s,null);						
		tr[1] = new TransformImplCanonicalXMLWithComments();	
		tr[1].setInput(s,null);									

		tr[2] = new TransformImplExclusiveCanonicalXML();	
		tr[2].setInput(s,null);									
		String erg = getTransformsResult(tr);				
		cpkcs.createReferenceWithTransforms(target,tr);				
	
		cpkcs.setKeyInformation();  	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
	
		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg));
	}
	
	/**
	 * Method create319: 
	 * SignedInfo/Reference appears two times:
	 * the first reference points to an enveloped dsig:Object,
	 * the seconde reference points to an external File
	 * @throws Exception
	 */
	public void create319() throws Exception {
		String testNumber = "319";
		
		
       // Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();  // Create from whole cloth

//        Element root =  (Element) document.createElement("Data");
  //      root.appendChild(document.createTextNode(readFileCR(configuration_.getProperty("baseDir")+"resources/test-ee2003_normal.derbase64.enc.bak")) );    		
        //root.appendChild(document.createTextNode("Hallo\nHallo\nHallo"));    		
        
        
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);		
		cpkcs.createReference(true,"Dies sind Testdaten");		
		//cpkcs.createReferenceEnvElement(root);		
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
		cpkcs.setKeyInformation();
    	
    	Document sign = cpkcs.returnSig();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		/*String erg = "Dies sind Testdaten" +
					 "</XMLContent>\n" +
					 "		</HashInputData>\n" +
					 "		<HashInputData>\n" +
					 "<XMLContent xml:space=\"preserve\">" +
					 readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt");					*/
		
		writeFile(vxReqFile(testNumber),request);
		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0","Dies sind Testdaten",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")));
	}
	
	/**
	 * Method create320:
	 * The element KeyInfo does NOT contain the X509-certificate but
	 *  an URI pointing to an external xml-encoded X509-file
	 * @throws Exception
	 */
	public void create320() throws Exception {
		String testNumber = "320";
		
		//RetrievalMethdos instead of the integratede Keys
		
		//URI fileURI = new URI(configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der");
		URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml");
		URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
		//URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
		

		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation(false, fileURI, typeURI, null);

    	Document sign = cpkcs.returnSig();	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		writeFile(vxResFile(testNumber), createResponse(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml"),testNumber,"0"));
	}

public void create320_2() throws Exception {
		String testNumber = "320_2";
		
		//RetrievalMethdos instead of the integratede Keys
		
		//URI fileURI = new URI(configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der");
		URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/TEMPX509Data.xml");
		URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data");
		//URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
		

		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation(false, fileURI, typeURI, null);

//		Supplement supp = new Supplement();

//		supp.addXMLContent(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml",readFileCR(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml"));
//		supp.closeSupplement();
    	Document sign = cpkcs.returnSig();	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,true,configuration_.getProperty("webbaseDir") + "resources/TEMPX509Data.xml"));
	    
		writeFile(vxReqFile(testNumber),request);
		writeFile(vxResFile(testNumber), createResponse(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml"),testNumber,"0"));
	}


		/**
		 * Method create321.
		 * The element KeyInfo does NOT contain the X509-certificate but
		 * an URI pointing to an external raw X509-file
		 * @throws Exception
		 */
		public void create321() throws Exception {
		String testNumber = "321";
		
		//RetrievalMethdos instead of the integratede Keys
		
		URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/test-ee2003_normal.der");
		URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
		

		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
	cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");		
		cpkcs.setKeyInformation(false, fileURI, typeURI, null);
   	Document sign = cpkcs.returnSig();	String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		writeFile(vxResFile(testNumber), createResponse(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml"),testNumber,"0"));
	}


	/**
	 * Method create322.
	 * The reference in the signature points with an xpointer 
	 * to the ID of an embedded valid manifest dsig:object 
	 * @throws Exception
	 */
public void create322() throws Exception {
		String testNumber = "322";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
		Element elem = cpkcs.createReferenceWithManifest(fileURI1,"manifestObject");
		
		cpkcs.setKeyInformation();
    	Document sign = cpkcs.returnSig();	String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		
		
		String response = createResponsePart(cpkcs.getX509CertString()) +
						"<HashInputData><Base64Content>"+
						Base64Utils.encode(stripNLCR(convertManifestToString(elem)).getBytes()) + 
						"</Base64Content></HashInputData>"+
				  		vxBean.createSignatureCheck("0")+
				  		vxBean.createXMLDSIGManifestCheck("0","","1")+
				  		vxBean.createCertificateCheck("0")+
				  		 "</VerifyXMLSignatureResponse>";
						
		writeFile(vxResFile(testNumber), response);
	}
	/**
	 * Method create323: 
	 * There are two references in the signature pointing 
	 * with xpointer to two embedded valid manifest dsig:objects
	 * @throws Exception
	 */
	public void create323() throws Exception {
		String testNumber = "323";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
		URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt");		
		Element man1 = cpkcs.createReferenceWithManifest(fileURI1,"manifestObject");
		
		//HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...???
		
		Element man2 = cpkcs.createReferenceWithManifest(fileURI2,"manifestObject2");
		cpkcs.setKeyInformation();
	  	Document sign = cpkcs.returnSig();
  		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		
		String response = createResponsePart(cpkcs.getX509CertString()) +
						"<HashInputData><Base64Content>"+
						Base64Utils.encode(stripNLCR(convertManifestToString(man1)).getBytes()) + 
						"</Base64Content></HashInputData>"+
						"<HashInputData><Base64Content>"+
						Base64Utils.encode(stripNLCR(convertManifestToString(man2)).getBytes()) + 
						"</Base64Content></HashInputData>"+
				  		vxBean.createSignatureCheck("0")+
				  		vxBean.createXMLDSIGManifestCheck("0","","1")+
				  		vxBean.createXMLDSIGManifestCheck("0","","2")+
				  		vxBean.createCertificateCheck("0")+
				  		 "</VerifyXMLSignatureResponse>";
						
		writeFile(vxResFile(testNumber), response);
		
	}
	public void create324() throws Exception {
		String testNumber = "324";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
		URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt");		
		Element man = cpkcs.createReferencesWithManifest(fileURI1,"manifestObject",fileURI2);
		
		//HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...???				
		cpkcs.setKeyInformation();
    	Document sign = cpkcs.returnSig();
    	String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				sign,
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		
		String response = createResponsePart(cpkcs.getX509CertString()) +
						"<HashInputData><Base64Content>"+
						Base64Utils.encode(stripNLCR(convertManifestToString(man)).getBytes()) + 
						"</Base64Content></HashInputData>"+
				  		vxBean.createSignatureCheck("0")+
				  		vxBean.createXMLDSIGManifestCheck("0","","1")+
				  		vxBean.createCertificateCheck("0")+
				  		 "</VerifyXMLSignatureResponse>";
						
		writeFile(vxResFile(testNumber), response);
		
	}

	/**
	 * Method create325.
	 * @throws Exception
	 */
	public void create325() throws Exception {
		String testNumber = "325";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
				
		Element mani = cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");
		cpkcs.createEnvelopedDataObject("envelopedData",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
		
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		String response = createResponsePart(cpkcs.getX509CertString()) +
						"<HashInputData><Base64Content>"+
						Base64Utils.encode(stripNLCR(convertManifestToString(mani)).getBytes()) + 
						"</Base64Content></HashInputData>"+
				  		vxBean.createSignatureCheck("0")+
				  		vxBean.createXMLDSIGManifestCheck("1","1","1")+	
				  		vxBean.createCertificateCheck("0")+
				  		 "</VerifyXMLSignatureResponse>";
						
		writeFile(vxResFile(testNumber), response);
	}
	
	public void create326() throws Exception {
		String testNumber = "326";
		
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
				
		Element mani = cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");
		cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt"));
					
		cpkcs.setKeyInformation();
    	
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(false,false,null));
		
		request = replaceString(request,"<dsig:Object Id=\"envelopedData\">","<dsig:Object Id=\"envelopedData\">Dies sind veraenderte Daten und die Ursprungsdaten: \n");
		
		writeFile(vxReqFile(testNumber),request);

		String response = createResponsePart(cpkcs.getX509CertString()) +
						vxBean.createSignatureCheck("0")+
				  		vxBean.createXMLDSIGManifestCheck("1","1","1")+				  		
				  		vxBean.createCertificateCheck("0")+
				  		 "</VerifyXMLSignatureResponse>";

						
		writeFile(vxResFile(testNumber), response);
	}

	/**
		 * Method create327: The certificate comes as raw data and is converted to a dsig:object with
		 * base64-data, the KeyInfo has a retrievalMethod pointing to that object and transforming the
		 * data back to raw-data for using that to create the signature
		 * @throws Exception
		 */
		public void create327() throws Exception {

		String testNumber = "327";
		
		URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/test-ee2003_normal.der");
		URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate");
		
	
		CreatePKCSSignature cpkcs = new CreatePKCSSignature();
		cpkcs.init();
		cpkcs.setCanoncialization(canAlgCanXML);
		
		cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt");
	
		//DER-encoded RAW-Zertifikat zu Binary64 konvertieren
		
		//String tmp = readBinaryFileAsBase64(fileURI.getPath()); : Funktioniert nicht mehr wegen http-addi
		
		//dsig:Object mit den Binary64-Daten erzeugen (==> CRs weglassen!!!!!)
		cpkcs.createEnvelopedDataObject("rawCertAsBase64",readFileCR(fileURI.toString()+"base64.enc"));
		
		//Neue Transformation erzeugen, um die Base64-Daten zur�ckzuwandeln		
		Transform[] tr = new Transform[1];
		tr[0] = new TransformImplBase64Decode();
		InputStream s = getHttpInputStream(fileURI.toString() + "base64.enc");
		tr[0].setInput(s,null);			

		//Neues KeyInfo-Objekt erzeugen, wobei nicht die Zertifikate sondern 
		//nur eine RetrievalMethod angegeben wird, die auf das oben erzeugte Base64-dsig:Object verweist
		cpkcs.setKeyInformation(true, new URI("#xpointer(id('rawCertAsBase64')/node())") , typeURI, tr);
		
		String request = 
		makeOutputFile(
				createRequestStart(testNumber,true,0),
				cpkcs.returnSig(),
				createRequestEnd(true,false,null));
		
		writeFile(vxReqFile(testNumber),request);
		
		cpkcs.setKeyInformation(1);

		writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0"));
	}

	/**
	 * Method makeOutputFile.
	 * @param start
	 * @param signatureDoc
	 * @param end
	 * @return String
	 * @throws Exception
	 */
	public String makeOutputFile(
		String start,
		Document signatureDoc,
		String end)
		throws Exception {
		ArrayList foundNodes = new ArrayList();
		findNode(
			signatureDoc.getDocumentElement(),
			"dsig:Signature",
			foundNodes);

		Node outputNode = null;

		if (foundNodes.size() > 0) {
			outputNode = (Node) foundNodes.get(0);
		}

		String erg = Node2String(outputNode);

		// remove the <?xml	?> Prologue
		int pos = erg.indexOf("<dsig");
		erg = erg.substring(pos);

		// insert the dsig:signature element in a MOA Response Message
		erg = start + erg + end;

		return erg;
	}

	/**
	 * Method createRequestStart.
	 * @param testNumber
	 * @param useDate
	 * @param changeHours
	 * @return String
	 */
	private String createRequestStart(String testNumber, boolean useDate, int changeHours)
{
	return createRequestStart(testNumber, useDate,changeHours,"");
	
}

	private String createRequestStart(String testNumber, boolean useDate, int changeHours, String attribut)
	{
		return createRequestStart(testNumber, useDate,changeHours,attribut,"");
	}
	private String createRequestStart(String testNumber, boolean useDate, int changeHours, String attribut,String dtd)
	{String reqStart = null;
	System.out.println("======================================================");
	System.out.println("================== TEST-NUMBER "+ testNumber + " ===================");
	System.out.println("======================================================");

		reqStart =
			"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
				+ "<!-- Testnumber: "
				+ testNumber
				+ "-->\n";
				
		if(dtd!=null && !dtd.trim().equals(""))
			reqStart += dtd;
				
		reqStart+= "<VerifyXMLSignatureRequest\n"
				+ "   xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n"
        + "   xmlns:xml=\"http://www.w3.org/XML/1998/namespace\""
				+ "   xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">\n";

		if (useDate) {
			reqStart += "   <DateTime>"
				+ getDate(changeHours)
				+ "</DateTime>\n";
		}

			reqStart += "		<VerifySignatureInfo>\n"
			+ "		<VerifySignatureEnvironment "+attribut+">\n" 
			+ "		<XMLContent xml:space=\"preserve\">" ;
		return reqStart;
	}
	
	/**
	 * Method getTransformsResult:the input transforms array will 
	 * be calculated to return a string-representation of the result
	 * @param tr
	 * @return String
	 * @throws Exception
	 */
	private String getTransformsResult(Transform[] tr) throws Exception
	{	
		Transform[] myTransforms = tr;
		String result = "";
		for (int t=0; t<tr.length-1; t++)
		{	
			myTransforms[t+1].setInput((InputStream)myTransforms[t].transform(),null);
		}
		ByteArrayInputStream is = (ByteArrayInputStream)myTransforms[tr.length-1].transform();
		byte[] b = new byte[1];
		is.read(b);
		while (is.available() > 0)
		{		
			result += new String(b);	
			is.read(b);
		}
		result += new String(b);
		
		return result;
	}
		
		
	/**
	 * Method createRequestEnd.
	 * @param useReturnHashInputData
	 * @param useSupplement
	 * @param supplementReference
	 * @return String
	 * @throws Exception
	 */
	private String createRequestEnd(
		boolean useReturnHashInputData, 
		boolean useSupplement,
		String supplementReference)
		throws Exception {
	
		String reqEnd = null;
	
/*		reqEnd =
			"</VerifySignatureEnvironment>\n"
				+ "		<VerifySignatureLocation>#xpointer(/VerifyXMLSignatureRequest/VerifySignatureInfo/VerifySignatureEnvironment/dsig:Signature)</VerifySignatureLocation>\n"
				+ "		</VerifySignatureInfo>\n";
*/
		reqEnd ="</XMLContent>"+
			"</VerifySignatureEnvironment>\n"
				+ "		<VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>\n"
				+ "		</VerifySignatureInfo>\n";


		
		if (useSupplement) 
		{
		reqEnd += "		<SupplementProfile>\n" +
				  "			<Content Reference=\"" + supplementReference.toString() + "\">\n" +
				  "				<XMLContent xml:space=\"preserve\">"+readFileCR(supplementReference.toString())+"</XMLContent>\n" +
				  "			</Content>\n" +
				  "		</SupplementProfile>\n";
		}
				
		if (useReturnHashInputData) {
			reqEnd += "		<ReturnHashInputData/>\n";
		}
		reqEnd += "		<TrustProfileID>TrustProfile1</TrustProfileID>\n"
			+ "</VerifyXMLSignatureRequest>\n";
		return reqEnd;		

	}
	
	private String createSignatureInfoEnd()
		throws Exception {
	
	return	"</XMLContent>"+"</VerifySignatureEnvironment>\n"
				+ "		<VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>\n"
				+ "		</VerifySignatureInfo>\n";
		
	}
		
	private String createRequestShortEnd(boolean useReturnHashInputData)
		throws Exception {
	
		String reqEnd = "";
		
		if (useReturnHashInputData)
		reqEnd = "		<ReturnHashInputData/>\n";

		reqEnd += "		<TrustProfileID>TrustProfile1</TrustProfileID>\n"
			+ "</VerifyXMLSignatureRequest>\n";
		return reqEnd;		

	}
	/**
	 * Method createResponse.
	 * @param testNumber
	 * @param signatureCheckCode
	 * @return String
	 * @throws Exception
	 */
	private String createResponse(String x509cert, String testNumber, String signatureCheckCode) throws Exception {
		// 
		vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/"	+ "test-ee2003_normal_extract.cer");

		String res = null;

		res = vxBean.getHeader();
		res += vxBean.getSubjectDN();
		res += "				<dsig:X509IssuerSerial>\n";
		res += vxBean.getIssuerDN();
		res += vxBean.getSerialNumber();
		res += "				</dsig:X509IssuerSerial>\n"
      + x509cert 
			+ "			</dsig:X509Data>\n"
			+ " 		</SignerInfo>\n";
		res += "		<HashInputData>\n" + "			";
		/*res	+= "<XMLContent xml:space=\"preserve\">"+readFileCR(
				configuration_.getProperty("baseDir")
					+ "resources/testSimple.txt")+
					"</XMLContent>";*/
		res += "<Base64Content>"+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ "resources/testSimple.txt"))+"</Base64Content>";
					    
		res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");

		return res;
	}
	
	private String createResponseL(String x509cert, String testNumber, String signatureCheckCode,String filename) throws Exception {
		// 
		vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/"	+ "test-ee2003_normal_extract.cer");

		String res = null;

		res = vxBean.getHeader();
		res += vxBean.getSubjectDN();
		res += "				<dsig:X509IssuerSerial>\n";
		res += vxBean.getIssuerDN();
		res += vxBean.getSerialNumber();
		res += "				</dsig:X509IssuerSerial>\n"
      + x509cert 
			+ "			</dsig:X509Data>\n"
			+ " 		</SignerInfo>\n";
					    
		res += replaceString(vxBean.getFooterSignatureCheck(signatureCheckCode, "0"),"</HashInputData>","");

		return res;
	}

	private String createResponse(String x509cert, String testNumber, String signatureCheckCode,int code) throws Exception {
		// 
		vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/"	+ "test-ee2003_normal_extract.cer");

		String res = null;

		res = vxBean.getHeader();
		res += vxBean.getSubjectDN();
		res += "				<dsig:X509IssuerSerial>\n";
		res += vxBean.getIssuerDN();
		res += vxBean.getSerialNumber();
		res += "				</dsig:X509IssuerSerial>\n"
      + x509cert 
			+ "			</dsig:X509Data>\n"
			+ " 		</SignerInfo>\n";
		res += "     <SignatureCheck>\n" +
		  "     	<Code>1</Code><Info><FailedReference>1</FailedReference></Info>\n" +		  
 		  "		</SignatureCheck>\n" +
 		  "     <CertificateCheck>\n" +
 		  "     	<Code>0</Code>\n" +
 		  "     </CertificateCheck>\n" +
 		  "</VerifyXMLSignatureResponse>";;

		return res;
	}


	/**
	 * Method createResponse.
	 * @param testNumber
	 * @param signatureCheckCode
	 * @return String
	 * @throws Exception
	 */
	private String createResponse(String x509cert, String testNumber, String signatureCheckCode,int code,String filename) throws Exception {
		// 
		vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/"	+ "test-ee2003_normal_extract.cer");

		String res = null;

		res = vxBean.getHeader();
		res += vxBean.getSubjectDN();
		res += "				<dsig:X509IssuerSerial>\n";
		res += vxBean.getIssuerDN();
		res += vxBean.getSerialNumber();
		res += "				</dsig:X509IssuerSerial>\n"
      + x509cert 
			+ "			</dsig:X509Data>\n"
			+ " 		</SignerInfo>\n";
		res += "		<HashInputData>\n" + "			";
		/*res	+= "<XMLContent xml:space=\"preserve\">"+readFileCR(
				configuration_.getProperty("baseDir")
					+ "resources/testSimple.txt")+
					"</XMLContent>";*/
		if(filename.startsWith("text:"))
			res += "<Base64Content>"+Base64Utils.encode(filename.substring(5).getBytes())+"</Base64Content>";
		else
			res += "<Base64Content>"+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ filename))+"</Base64Content>";
					    
		res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");

		return res;
	}

/**
	 * Method createResponse.
	 * @param testNumber
	 * @param signatureCheckCode
	 * @return String
	 * @throws Exception
	 */
	private String createResponse(String x509cert, String testNumber, String signatureCheckCode,String iss,String subject,String serial) throws Exception {
		// 
		vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/"	+ "test-ee2003_normal_extract.cer");

		String res = null;

		res = vxBean.getHeader();
		res += subject;
		res += "				<dsig:X509IssuerSerial>\n";
		res += iss;
		res += serial;
		res += "				</dsig:X509IssuerSerial>\n"
      + x509cert 
			+ "			</dsig:X509Data>\n"
			+ " 		</SignerInfo>\n";
		res += "		<HashInputData>\n" + "			";
		/*res	+= "<XMLContent xml:space=\"preserve\">"+readFileCR(
				configuration_.getProperty("baseDir")
					+ "resources/testSimple.txt")+
					"</XMLContent>";*/
		res += "<Base64Content>"+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ "resources/testSimple.txt"))+"</Base64Content>";
					    
		res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");

		return res;
	}

	
		private String createResponse(String x509cert, String testNumber, String signatureCheckCode, String hashData) throws Exception {
		// 
		vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/"	+ "test-ee2003_normal.der");

		String res = null;

		res = vxBean.getHeader();
		res += vxBean.getSubjectDN();
		res += "				<dsig:X509IssuerSerial>\n";
		res += vxBean.getIssuerDN();
		res += vxBean.getSerialNumber();
		res += "				</dsig:X509IssuerSerial>\n"
			   + x509cert 
      + "			</dsig:X509Data>\n"
			+ " 		</SignerInfo>\n";
		res += "	<HashInputData>\n";
		/*	   "		<XMLContent xml:space=\"preserve\">"+ 
			   hashData +
			   "</XMLContent>\n";*/
		res += "<Base64Content>"+Base64Utils.encode(hashData.getBytes())+"</Base64Content>";
		System.out.println(res);
		res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");
		System.out.println(res);

		return res;
	}
	
	private String createResponse(String x509cert, String testNumber, String signatureCheckCode, String hashData,String hashData2) throws Exception {
		// 
		vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/"	+ "test-ee2003_normal.der");

		String res = null;

		res = vxBean.getHeader();
		res += vxBean.getSubjectDN();
		res += "				<dsig:X509IssuerSerial>\n";
		res += vxBean.getIssuerDN();
		res += vxBean.getSerialNumber();
		res += "				</dsig:X509IssuerSerial>\n"
			   + x509cert 
      + "			</dsig:X509Data>\n"
			+ " 		</SignerInfo>\n";
		res += "	<HashInputData>\n";
		/*	   "		<XMLContent xml:space=\"preserve\">"+ 
			   hashData +
			   "</XMLContent>\n";*/
		res += "<Base64Content>"+Base64Utils.encode(hashData.getBytes())+"</Base64Content>";
		res += "</HashInputData><HashInputData>";
		res += "<Base64Content>"+Base64Utils.encode(hashData2.getBytes())+"</Base64Content>";
		res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0");

		return res;
	}
	
	private String createResponseWithoutHashInputData(String x509cert, String testNumber, String signatureCheckCode,boolean dsig) throws Exception {
		// 
		vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/"	+ "test-ee2003_normal.der");

		String res = null;

		res = vxBean.getHeader();
		res += vxBean.getSubjectDN();
		res += "				<dsig:X509IssuerSerial>\n";
		res += vxBean.getIssuerDN();
		res += vxBean.getSerialNumber();
		res += "				</dsig:X509IssuerSerial>\n"
			   + x509cert 
      + "			</dsig:X509Data>\n"
			+ " 		</SignerInfo>\n"
			+ "     <SignatureCheck>\n" +
			  "     	<Code>" + signatureCheckCode + "</Code>\n" +		  
 			  "		</SignatureCheck>\n";
 			  
 			  if(dsig) res+=vxBean.createXMLDSIGManifestCheck("0","","1");
 		res+= "     <CertificateCheck>\n" +
	 		  "     	<Code>0</Code>\n" +
	 		  "     </CertificateCheck>\n" +
 			  "</VerifyXMLSignatureResponse>";

			return res;
	}
	
	private String createResponseWithoutHashInputData(String x509cert, String testNumber, String signatureCheckCode) throws Exception {
		// 
		vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/"	+ "test-ee2003_normal.der");

		String res = null;

		res = vxBean.getHeader();
		res += vxBean.getSubjectDN();
		res += "				<dsig:X509IssuerSerial>\n";
		res += vxBean.getIssuerDN();
		res += vxBean.getSerialNumber();
		res += "				</dsig:X509IssuerSerial>\n"
			   + x509cert 
      + "			</dsig:X509Data>\n"
			+ " 		</SignerInfo>\n"
			+ "     <SignatureCheck>\n" +
			  "     	<Code>" + signatureCheckCode + "</Code>\n" +		  
 			  "		</SignatureCheck>\n" +
 			  "     <CertificateCheck>\n" +
	 		  "     	<Code>0</Code>\n" +
	 		  "     </CertificateCheck>\n" +
 			  "</VerifyXMLSignatureResponse>";

			return res;
	}
		
	private String createResponsePart(String x509cert) throws Exception {

		// 
		vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/"	+ "test-ee2003_normal.der");

		String res = null;

		res = vxBean.getHeader();
		res += vxBean.getSubjectDN();
		res += "				<dsig:X509IssuerSerial>\n";
		res += vxBean.getIssuerDN();
		res += vxBean.getSerialNumber();
    res += "				</dsig:X509IssuerSerial>\n";

    res +=x509cert;

     res += "			</dsig:X509Data>\n"
			+ " 		</SignerInfo>\n";
		/*res += "		<HashInputData>\n" + "			<XMLContent>";
		res	+= readFile(
				configuration_.getProperty("baseDir")
					+ "resources/testSimple.txt");
		*/
		//res += vxBean.getFooterXMLDSIGManifestCheck(xmlDSIGManifestCheckCode,"0");

		return res;
	}
	
	public String readFileCR(String filename) throws Exception {

		/*StringBuffer data = new StringBuffer();
		String line = null;
		BufferedReader br = new BufferedReader(new FileReader(filename));
		while ((line = br.readLine()) != null) {
			data.append(line);
			data.append("\n");
		}
		*/
		String response="";
		byte[] result;

		if (filename.substring(0,4).toLowerCase().equals("http"))
		{	
			
			URL targetUrl = new URL(filename);
			HttpURLConnection h = (HttpURLConnection)targetUrl.openConnection();			
			InputStream is =  h.getInputStream();
					
			int size = 0;
			
			result = new byte[h.getContentLength()];
			for (int i = 0; i < result.length; i++) {
				byte[] b = new byte[1];
				is.read(b);
				result[i]=b[0];
			}
			is.close();			
		}
		else
		{
			RandomAccessFile raf = new RandomAccessFile(filename, "r");
			if (raf.length() > Integer.MAX_VALUE)
				throw new IOException("file too big to fit in byte array.");
			
			result = new byte[(int) raf.length()];		
			raf.read(result);
			raf.close();
		
		}	
		
			byte[] temp = new byte[result.length];
			int s = 0;	
			for (int t=0; t<result.length; t++)
			{	
				temp[s] = result[t];		
				s++;
				if (temp[s-1]==10)
					{
					if (temp[s-2]==13)	
						{
							temp[s-2]=10;
							s--;
						}
					}
			}
		byte[] res = new byte[s];
		result = null;
		
		System.arraycopy(temp,0,res,0,s);
	
	
		response = new String(res);
		
		try {
			response = replaceString(response,"<?xml version=\"1.0\" encoding=\"utf-8\"?>","");						
		}
		catch (Exception e) {}

		return response;
		}										

private InputStream getHttpInputStream(String url) throws Exception
	{
		URL targetUrl = new URL(url);
		HttpURLConnection h = (HttpURLConnection)targetUrl.openConnection();			
		return  h.getInputStream();		
	}

private String convertManifestToString(Element e) throws Exception
	{
	    String result =(new DOMWriterImpl(true)).writeToString(e);      
	    result = replaceString(result,"<?xml version=\"1.0\"?>","");
	    result = replaceStringAll(result,"&apos;","'");
	    result = replaceStringAll(result,"#sha1\"/><dsig:","#sha1\"></dsig:DigestMethod><dsig:");
	    
	    //result = replaceString(result," xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"","");
		return	result;
	}
	
	private String stripNLCR(String input)
	{
		String output = replaceStringAll(input,"\n","");
		output = replaceStringAll(output,"\r","");
		return output;
	}
	
	public static String replaceStringAll(
		String input,
		String oldPart,
		String newPart)
		{

		String erg = null;
		
		int pos = input.indexOf(oldPart);
		if(pos==-1) return input;

		while(true)
		{
	
			//First Part
			pos = input.indexOf(oldPart);
			if(pos==-1) break;
			erg = input.substring(0, pos);
			
			//Insert new Part
			erg += newPart;
	
			//insert REST
			erg
				+= input.substring(
					input.indexOf(oldPart) + oldPart.length(),
					input.length());
			
			input = erg;
		}
		return erg;
	}
	

}