From 643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc Mon Sep 17 00:00:00 2001 From: gregor Date: Tue, 11 Nov 2003 22:36:36 +0000 Subject: Erstellt. git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@51 d688527b-c9ab-4aba-bd8d-4036d912da1d --- spss.test/src/testgenerator/TestGeneratorVX.java | 2793 ++++++++++++++++++++++ 1 file changed, 2793 insertions(+) create mode 100644 spss.test/src/testgenerator/TestGeneratorVX.java (limited to 'spss.test/src/testgenerator/TestGeneratorVX.java') diff --git a/spss.test/src/testgenerator/TestGeneratorVX.java b/spss.test/src/testgenerator/TestGeneratorVX.java new file mode 100644 index 000000000..20ff44a22 --- /dev/null +++ b/spss.test/src/testgenerator/TestGeneratorVX.java @@ -0,0 +1,2793 @@ +package testgenerator; +import iaik.ixsil.algorithms.Transform; +import iaik.ixsil.algorithms.TransformImplBase64Decode; +import iaik.ixsil.algorithms.TransformImplCanonicalXML; +import iaik.ixsil.algorithms.TransformImplCanonicalXMLWithComments; +import iaik.ixsil.algorithms.TransformImplEnvelopedSignature; +import iaik.ixsil.algorithms.TransformImplExclusiveCanonicalXML; +import iaik.ixsil.algorithms.TransformImplExclusiveCanonicalXMLWithComments; +import iaik.ixsil.algorithms.TransformImplXPath; +import iaik.ixsil.algorithms.TransformImplXPath2; +import iaik.ixsil.algorithms.TransformImplXSLT; +import iaik.ixsil.core.Position; +import iaik.ixsil.util.URI; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.apache.xml.serialize.DOMWriterImpl; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import at.gv.egovernment.moa.util.Base64Utils; +import at.gv.egovernment.moa.util.Constants; +import at.gv.egovernment.moa.util.DOMUtils; +import at.gv.egovernment.moa.util.EntityResolverChain; +import at.gv.egovernment.moa.util.MOAEntityResolver; +import at.gv.egovernment.moa.util.MOAErrorHandler; +import at.gv.egovernment.moa.util.StreamEntityResolver; + +/** + * @author stephan + */ +public class TestGeneratorVX extends TestCases { + + private static final int canAlgCanXML = 1; + private static final int canAlgCanXMLwithCom = 2; + private static final int canAlgExcXML = 3; + private static final int canAlgExcXMLwithCom = 4; + private static VXResponseBean vxBean = null; + + public static void main(String[] args) throws Exception { + + vxBean = new VXResponseBean(); + + TestGeneratorVX testcase = new TestGeneratorVX(); + testcase.createVXConfig(); + + testcase.create001(); + testcase.create002(); + testcase.create003(); + testcase.create004(); + testcase.create005(); + testcase.create006(); + testcase.create007(); + testcase.create009(); + testcase.create008(); + + testcase.create101(); + testcase.create102(); + testcase.create103(); + testcase.create104(); + testcase.create105(); + testcase.create106(); + + testcase.create301(); + testcase.create302(); + testcase.create303(); + testcase.create304(); + testcase.create305(); + + testcase.create307(); + testcase.create308(); + + testcase.create310(); + testcase.create311(); + testcase.create312(); + testcase.create313(); + testcase.create314(); + testcase.create314_2(); + testcase.create315(); + testcase.create316(); + testcase.create317(); + testcase.create318(); + testcase.create318_2(); + testcase.create319(); + testcase.create320(); + testcase.create320_2(); + testcase.create321(); + testcase.create322(); + testcase.create323(); + testcase.create324(); + testcase.create325(); + testcase.create326(); + testcase.create327(); + + //testcase.createL00(); + + } + + /* ==================================================================================================== */ + + public TestGeneratorVX() throws Exception { + + super(); + + // Set config properties + configuration_.setProperty("TestClass", "TestGeneratorVX"); + + // configuration_.setProperty("privateKeyFile", baseDir + "additionalFiles/keys/RSAPrivateKey.der"); + // configuration_.setProperty("publicKeyFile", baseDir + "additionalFiles/keys/RSAPublicKey.der"); + // configuration_.setProperty("signatureFile", baseDir + "additionalFiles/signatures/Signature.unit1.xml"); + + iaik.security.provider.IAIK.addAsProvider(); + iaik.security.ecc.provider.ECCProvider.addAsProvider(); + } + + /* ==================================================================================================== */ + + public void testEcc() throws Exception + { + Date d = new Date(); + long start = d.getTime(); + long initEcc = 0; + long timeEcc = 0; + long initRSA = 0; + long timeRSA = 0; + + + TestGeneratorVX testcase = new TestGeneratorVX(); + testcase.ecccreate319(); + initEcc = (new Date()).getTime() - start; + testcase.ecccreate320(); + testcase.ecccreate321(); + testcase.ecccreate322(); + testcase.ecccreate323(); + testcase.ecccreate324(); + + timeEcc = (new Date()).getTime() - start; + + start = (new Date()).getTime(); + + testcase = new TestGeneratorVX(); + testcase.create319(); + initRSA = (new Date()).getTime() - start; + testcase.create320(); + testcase.create321(); + testcase.create322(); + testcase.create323(); + testcase.create324(); + timeRSA =(new Date()).getTime() - start; + + System.out.println("========================================================="); + System.out.println("========================================================="); + + System.out.println("Init ECC (inkl. 1st Test): "+ (initEcc)+ "ms" ); + System.out.println("ECC-Tests gesamt: "+ (timeEcc)+ "ms" ); + System.out.println("ECC-Tests 2-5: "+ (timeEcc-initEcc)+ "ms" ); + System.out.println("========================================================="); + System.out.println("Init RSA (inkl. 1st Test): "+ (initRSA)+ "ms" ); + System.out.println("RSA-Tests gesamt: "+ (timeRSA)+ "ms" ); + System.out.println("RSA-Tests 2-5: "+ (timeRSA-initRSA)+ "ms" ); + System.out.println("========================================================="); + } + +public void ecccreate319() throws Exception { + String testNumber = "ecc319"; + + + // Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); // Create from whole cloth +// + // Element root = (Element) document.createElement("Data"); + // root.appendChild(document.createTextNode(readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")) ); +// Element root2 = (Element) document.createElement("Element2"); + // root2.appendChild(document.createTextNode("Some other text") ); + + // root.appendChild(root2); + + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + //cpkcs.init(); + long start = (new Date()).getTime(); + cpkcs.initECDSA(); + System.out.println("Init-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(true,"Dies sind Testdaten"); + //cpkcs.createReferenceEnvElement(root); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + /** + * Method create320: + * The element KeyInfo does NOT contain the X509-certificate but + * an URI pointing to an external xml-encoded X509-file + * @throws Exception + */ + public void ecccreate320() throws Exception { + String testNumber = "ecc320"; + + //RetrievalMethdos instead of the integratede Keys + + //URI fileURI = new URI(configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der"); + URI fileURI = new URI("file:/"+configuration_.getProperty("baseDir") + "resources/X509Data.xml"); + URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data"); + //URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate"); + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); +// cpkcs.init(); + + cpkcs.initECDSA(); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(false, fileURI, typeURI, null); + + long start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + + public void ecccreate321() throws Exception { + String testNumber = "ecc321"; + + //RetrievalMethdos instead of the integratede Keys + + URI fileURI = new URI("file:/"+configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der"); + URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate"); + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + // cpkcs.init(); + cpkcs.initECDSA(); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(false, fileURI, typeURI, null); + + long start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + + /** + * Method create322. + * The reference in the signature points with an xpointer + * to the ID of an embedded valid manifest dsig:object + * @throws Exception + */ + public void ecccreate322() throws Exception { + String testNumber = "ecc322"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + // cpkcs.init(); + cpkcs.initECDSA(); + cpkcs.setCanoncialization(canAlgCanXML); + URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.createReferenceWithManifest(fileURI1,"manifestObject"); + + cpkcs.setKeyInformation(); + long start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + } + /** + * Method create323: + * There are two references in the signature pointing + * with xpointer to two embedded valid manifest dsig:objects + * @throws Exception + */ + public void ecccreate323() throws Exception { + String testNumber = "ecc323"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + // cpkcs.init(); + cpkcs.initECDSA(); + cpkcs.setCanoncialization(canAlgCanXML); + URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt"); + cpkcs.createReferenceWithManifest(fileURI1,"manifestObject"); + + //HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...??? + + cpkcs.createReferenceWithManifest(fileURI2,"manifestObject2"); + cpkcs.setKeyInformation(); + long start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + } + public void ecccreate324() throws Exception { + String testNumber = "ecc324"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + // cpkcs.init(); + cpkcs.initECDSA(); + cpkcs.setCanoncialization(canAlgCanXML); + URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt"); + cpkcs.createReferencesWithManifest(fileURI1,"manifestObject",fileURI2); + + //HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...??? + cpkcs.setKeyInformation(); + long start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + } + + public void createL00() throws Exception { + createL001("1kb"); + createL001("10kb"); + createL001("20kb"); + createL001("50kb"); + createL001("100kb"); + createL001("500kb"); + createL001("1mb"); + createL001("10mb"); + } + + public void createL001(String filename) throws Exception { + + String testNumber = "001"; + + //Create a Request with number 001, the current Time (+0 hours) + // and with the Date and ReturnHashInputDate Elements present + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/"+filename+".txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(false,false,null)); + + writeFile(vxReqFileL(testNumber,filename),request); + + + + writeFile(vxResFileL(testNumber,filename), createResponseL(cpkcs.getX509CertString(), testNumber,"0",filename)); + } + + /** + * Method create001. + * @throws Exception + */ + /* ===================================================================================================================== */ + /* ===================================================================================================================== */ + /* ===================================================================================================================== */ + + public void create001() throws Exception { + + String testNumber = "001"; + + //Create a Request with number 001, the current Time (+0 hours) + // and with the Date and ReturnHashInputDate Elements present + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + /** + * Method create002. + * @throws Exception + */ + public void create002() throws Exception { + String testNumber = "002"; + //Create a Request with number 002, the current Time (+0 hours) + // and without the Date and with ReturnHashInputDate Elements present + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,false,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + /** + * Method create003. + * @throws Exception + */ + public void create003() throws Exception { + String testNumber = "003"; + //Create a Request with number 003, the Time one Day in the past (-24 hours) + // and with the Date and with ReturnHashInputDate Elements present + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,-24), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + /** + * Method create004. + * @throws Exception + */ + public void create004() throws Exception { + String testNumber = "004"; + //Create a Request with number 004, the current Time (+0 hours) + // and with the Date and without ReturnHashInputDate Elements present + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(false,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + writeFile(vxResFile(testNumber), createResponseWithoutHashInputData(cpkcs.getX509CertString(), testNumber,"0")); + } + public void create005() throws Exception { + String testNumber = "005"; + + String request = + createRequestStart(testNumber,true,0, "Reference=\"" + configuration_.getProperty("webbaseDir") + "resources/SignatureVX005.xml\" ")+ + createRequestEnd(false,false,null); + + request = replaceString(request,"",""); + request = replaceString(request,"",""); + 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")+ + ""; + + 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", + ""); + supp.closeSupplement(); + + String requestEnd = createSignatureInfoEnd()+ + supp.getSupplement() + createRequestShortEnd(false); + + String requestStart = createRequestStart(testNumber,true,0); + + + String reqDocString = + "" + + "daten" ; + + 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(("").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()),"","") + requestEnd; + + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(cpkcs.getX509CertString()) + + vxBean.createSignatureCheck("0")+ + vxBean.createCertificateCheck("0")+ + ""; + + 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,"","") + + String reqDocString = /*createRequestStart(testNumber,true,0) +*/ + "" + + "\ndaten\n" /*+ 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(""); + request = request.substring("".length()); + + request = ""+request; + + System.out.println("DOC:"+request); + + request =""+Base64Utils.encode(request.getBytes())+"//dsig:Signature"+supp.getSupplement()+"TrustProfile1"; + + + + + /*int i_pos = request.indexOf("\n" +request.substring(i_pos);*/ + + /*i_pos = request.indexOf(""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + "id('signed-data')/node()"+ + ""+ + ""+ + ""+ + "4lngV1x/OvR8iFWEBenH4fDihwA="+ + ""+ + ""+ + ""+ + ""+ + "id('refetsi')/etsi:QualifyingProperties/etsi:SignedProperties"+ + ""+ + ""+ + ""+ + "1j0DWguieuw2cGA06gFjoSNXr+w="+ + ""+ + ""+ + "Yb6fsPNbKyYW+u7cU1EqF9n5QrwLXHqdGD4tJNT5+sA7kQR3Ztqz965vlBH+1pJE"+ + "nGxehxXsesZboVvkJa/jhuI0goCTW9KkdGOP71B7o7/vlyBbxaYKpnVNtBU4/qtT"+ + "xba7M0E32X+tm/x9O6foXIM0AoP3oQBZmjo9rEJ9kfk="+ + ""+ + ""+ + "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=="+ + /*""+ + readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/IAIKRootMusterbehoerde.cer")+ + ""+*/ + ""+ + ""+ + ""+ + ""+ + "IdentityLink"+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + "2003-03-04T12:32:54Z"+ + ""+ + ""+ + ""+ + ""+ + "Frhu1o4mL4gQHdJcU0xSA/h4COE="+ + ""+ + ""+ + "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"+ + "6455"+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + "text/xml"+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + "//dsig:Signature"+ + ""+ + "TrustProfile1"+ + ""; + + String response = + ""+ + ""+ + " "+ + " "+ + " serialNumber=790187461633,givenName=Testperson MOA4,SN=BRZ,CN=Testperson MOA4 BRZ,C=AT"+ + " "+ + " 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"+ + " 6455"+ + " "+ + "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=="+ + " "+ + " "+ + " "+ + " "+ + " 0"+ + " "+ + " "+ + " 0"+ + " "+ + ""; + + 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", + ""); + supp.closeSupplement(); + + String requestEnd = createSignatureInfoEnd()+ + supp.getSupplement() + createRequestShortEnd(false); + + String requestStart = createRequestStart(testNumber,true,0); + + + String reqDocString = + "" + + "daten" ; + + 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(("").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()),"","") + requestEnd; + + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(cpkcs.getX509CertString()) + + vxBean.createSignatureCheck("0")+ + vxBean.createCertificateCheck("0")+ + ""; + + 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")+ + ""; + + 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() + ""+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() + ""+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()+""+ + 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()) + + ""+ + readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testSimple.txt") + + ""+ + ""+ + readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testXML.txt") + + ""+ + vxBean.createSignatureCheck("0")+ + vxBean.createCertificateCheck("0")+ + ""; + + + 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()+ + "SupplementProfile2" + + "" + + "SupplementProfile1" + + 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","CN=IAIK ECDSA Test,OU=JavaSecurity,O=IAIK,C=AT","CN=IAIK ECDSA Test,OU=JavaSecurity,O=IAIK,C=AT","68172")); + } + /** + * 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,"","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,"",""); + /*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")+ + ""; + + 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) + + "" + + "" + requestEnd; + + + InputStream bis = new ByteArrayInputStream(("" + + "").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:"+"")); + + } + + + 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")+ + ""; + + 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, "",""); + 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")+ + ""; + 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" + + "\n" + + " \n" + + " \n" + + "" + + 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()) + + ""+ + Base64Utils.encode(stripNLCR(convertManifestToString(elem)).getBytes()) + + ""+ + vxBean.createSignatureCheck("0")+ + vxBean.createXMLDSIGManifestCheck("0","","1")+ + vxBean.createCertificateCheck("0")+ + ""; + + 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()) + + ""+ + Base64Utils.encode(stripNLCR(convertManifestToString(man1)).getBytes()) + + ""+ + ""+ + Base64Utils.encode(stripNLCR(convertManifestToString(man2)).getBytes()) + + ""+ + vxBean.createSignatureCheck("0")+ + vxBean.createXMLDSIGManifestCheck("0","","1")+ + vxBean.createXMLDSIGManifestCheck("0","","2")+ + vxBean.createCertificateCheck("0")+ + ""; + + 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()) + + ""+ + Base64Utils.encode(stripNLCR(convertManifestToString(man)).getBytes()) + + ""+ + vxBean.createSignatureCheck("0")+ + vxBean.createXMLDSIGManifestCheck("0","","1")+ + vxBean.createCertificateCheck("0")+ + ""; + + 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()) + + ""+ + Base64Utils.encode(stripNLCR(convertManifestToString(mani)).getBytes()) + + ""+ + vxBean.createSignatureCheck("0")+ + vxBean.createXMLDSIGManifestCheck("1","1","1")+ + vxBean.createCertificateCheck("0")+ + ""; + + 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,"","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")+ + ""; + + + 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 Prologue + int pos = erg.indexOf("" + + "\n"; + + if(dtd!=null && !dtd.trim().equals("")) + reqStart += dtd; + + reqStart+= "\n"; + + if (useDate) { + reqStart += " " + + getDate(changeHours) + + "\n"; + } + + reqStart += " \n" + + " \n" + + " " ; + 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 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 = + "\n" + + " #xpointer(/VerifyXMLSignatureRequest/VerifySignatureInfo/VerifySignatureEnvironment/dsig:Signature)\n" + + " \n"; +*/ + reqEnd =""+ + "\n" + + " //dsig:Signature\n" + + " \n"; + + + + if (useSupplement) + { + reqEnd += " \n" + + " \n" + + " "+readFileCR(supplementReference.toString())+"\n" + + " \n" + + " \n"; + } + + if (useReturnHashInputData) { + reqEnd += " \n"; + } + reqEnd += " TrustProfile1\n" + + "\n"; + return reqEnd; + + } + + private String createSignatureInfoEnd() + throws Exception { + + return ""+"\n" + + " //dsig:Signature\n" + + " \n"; + + } + + private String createRequestShortEnd(boolean useReturnHashInputData) + throws Exception { + + String reqEnd = ""; + + if (useReturnHashInputData) + reqEnd = " \n"; + + reqEnd += " TrustProfile1\n" + + "\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 += " \n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " \n" + + x509cert + + " \n" + + " \n"; + res += " \n" + " "; + /*res += ""+readFileCR( + configuration_.getProperty("baseDir") + + "resources/testSimple.txt")+ + "";*/ + res += ""+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ "resources/testSimple.txt"))+""; + + 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 += " \n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " \n" + + x509cert + + " \n" + + " \n"; + + res += replaceString(vxBean.getFooterSignatureCheck(signatureCheckCode, "0"),"",""); + + 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 += " \n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " \n" + + x509cert + + " \n" + + " \n"; + res += " \n" + + " 11\n" + + " \n" + + " \n" + + " 0\n" + + " \n" + + "";; + + 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 += " \n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " \n" + + x509cert + + " \n" + + " \n"; + res += " \n" + " "; + /*res += ""+readFileCR( + configuration_.getProperty("baseDir") + + "resources/testSimple.txt")+ + "";*/ + if(filename.startsWith("text:")) + res += ""+Base64Utils.encode(filename.substring(5).getBytes())+""; + else + res += ""+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ filename))+""; + + 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 += " \n"; + res += iss; + res += serial; + res += " \n" + + x509cert + + " \n" + + " \n"; + res += " \n" + " "; + /*res += ""+readFileCR( + configuration_.getProperty("baseDir") + + "resources/testSimple.txt")+ + "";*/ + res += ""+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ "resources/testSimple.txt"))+""; + + 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 += " \n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " \n" + + x509cert + + " \n" + + " \n"; + res += " \n"; + /* " "+ + hashData + + "\n";*/ + res += ""+Base64Utils.encode(hashData.getBytes())+""; + 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 += " \n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " \n" + + x509cert + + " \n" + + " \n"; + res += " \n"; + /* " "+ + hashData + + "\n";*/ + res += ""+Base64Utils.encode(hashData.getBytes())+""; + res += ""; + res += ""+Base64Utils.encode(hashData2.getBytes())+""; + 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 += " \n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " \n" + + x509cert + + " \n" + + " \n" + + " \n" + + " " + signatureCheckCode + "\n" + + " \n"; + + if(dsig) res+=vxBean.createXMLDSIGManifestCheck("0","","1"); + res+= " \n" + + " 0\n" + + " \n" + + ""; + + 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 += " \n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " \n" + + x509cert + + " \n" + + " \n" + + " \n" + + " " + signatureCheckCode + "\n" + + " \n" + + " \n" + + " 0\n" + + " \n" + + ""; + + 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 += " \n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " \n"; + + res +=x509cert; + + res += " \n" + + " \n"; + /*res += " \n" + " "; + 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",""); + } + 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,"",""); + result = replaceStringAll(result,"'","'"); + result = replaceStringAll(result,"#sha1\"/>