diff options
Diffstat (limited to 'spss.test/src/testgenerator/TestGeneratorVX.java')
-rw-r--r-- | spss.test/src/testgenerator/TestGeneratorVX.java | 2793 |
1 files changed, 2793 insertions, 0 deletions
diff --git a/spss.test/src/testgenerator/TestGeneratorVX.java b/spss.test/src/testgenerator/TestGeneratorVX.java new file mode 100644 index 000000000..20ff44a22 --- /dev/null +++ b/spss.test/src/testgenerator/TestGeneratorVX.java @@ -0,0 +1,2793 @@ +package testgenerator; +import iaik.ixsil.algorithms.Transform; +import iaik.ixsil.algorithms.TransformImplBase64Decode; +import iaik.ixsil.algorithms.TransformImplCanonicalXML; +import iaik.ixsil.algorithms.TransformImplCanonicalXMLWithComments; +import iaik.ixsil.algorithms.TransformImplEnvelopedSignature; +import iaik.ixsil.algorithms.TransformImplExclusiveCanonicalXML; +import iaik.ixsil.algorithms.TransformImplExclusiveCanonicalXMLWithComments; +import iaik.ixsil.algorithms.TransformImplXPath; +import iaik.ixsil.algorithms.TransformImplXPath2; +import iaik.ixsil.algorithms.TransformImplXSLT; +import iaik.ixsil.core.Position; +import iaik.ixsil.util.URI; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.apache.xml.serialize.DOMWriterImpl; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import at.gv.egovernment.moa.util.Base64Utils; +import at.gv.egovernment.moa.util.Constants; +import at.gv.egovernment.moa.util.DOMUtils; +import at.gv.egovernment.moa.util.EntityResolverChain; +import at.gv.egovernment.moa.util.MOAEntityResolver; +import at.gv.egovernment.moa.util.MOAErrorHandler; +import at.gv.egovernment.moa.util.StreamEntityResolver; + +/** + * @author stephan + */ +public class TestGeneratorVX extends TestCases { + + private static final int canAlgCanXML = 1; + private static final int canAlgCanXMLwithCom = 2; + private static final int canAlgExcXML = 3; + private static final int canAlgExcXMLwithCom = 4; + private static VXResponseBean vxBean = null; + + public static void main(String[] args) throws Exception { + + vxBean = new VXResponseBean(); + + TestGeneratorVX testcase = new TestGeneratorVX(); + testcase.createVXConfig(); + + testcase.create001(); + testcase.create002(); + testcase.create003(); + testcase.create004(); + testcase.create005(); + testcase.create006(); + testcase.create007(); + testcase.create009(); + testcase.create008(); + + testcase.create101(); + testcase.create102(); + testcase.create103(); + testcase.create104(); + testcase.create105(); + testcase.create106(); + + testcase.create301(); + testcase.create302(); + testcase.create303(); + testcase.create304(); + testcase.create305(); + + testcase.create307(); + testcase.create308(); + + testcase.create310(); + testcase.create311(); + testcase.create312(); + testcase.create313(); + testcase.create314(); + testcase.create314_2(); + testcase.create315(); + testcase.create316(); + testcase.create317(); + testcase.create318(); + testcase.create318_2(); + testcase.create319(); + testcase.create320(); + testcase.create320_2(); + testcase.create321(); + testcase.create322(); + testcase.create323(); + testcase.create324(); + testcase.create325(); + testcase.create326(); + testcase.create327(); + + //testcase.createL00(); + + } + + /* ==================================================================================================== */ + + public TestGeneratorVX() throws Exception { + + super(); + + // Set config properties + configuration_.setProperty("TestClass", "TestGeneratorVX"); + + // configuration_.setProperty("privateKeyFile", baseDir + "additionalFiles/keys/RSAPrivateKey.der"); + // configuration_.setProperty("publicKeyFile", baseDir + "additionalFiles/keys/RSAPublicKey.der"); + // configuration_.setProperty("signatureFile", baseDir + "additionalFiles/signatures/Signature.unit1.xml"); + + iaik.security.provider.IAIK.addAsProvider(); + iaik.security.ecc.provider.ECCProvider.addAsProvider(); + } + + /* ==================================================================================================== */ + + public void testEcc() throws Exception + { + Date d = new Date(); + long start = d.getTime(); + long initEcc = 0; + long timeEcc = 0; + long initRSA = 0; + long timeRSA = 0; + + + TestGeneratorVX testcase = new TestGeneratorVX(); + testcase.ecccreate319(); + initEcc = (new Date()).getTime() - start; + testcase.ecccreate320(); + testcase.ecccreate321(); + testcase.ecccreate322(); + testcase.ecccreate323(); + testcase.ecccreate324(); + + timeEcc = (new Date()).getTime() - start; + + start = (new Date()).getTime(); + + testcase = new TestGeneratorVX(); + testcase.create319(); + initRSA = (new Date()).getTime() - start; + testcase.create320(); + testcase.create321(); + testcase.create322(); + testcase.create323(); + testcase.create324(); + timeRSA =(new Date()).getTime() - start; + + System.out.println("========================================================="); + System.out.println("========================================================="); + + System.out.println("Init ECC (inkl. 1st Test): "+ (initEcc)+ "ms" ); + System.out.println("ECC-Tests gesamt: "+ (timeEcc)+ "ms" ); + System.out.println("ECC-Tests 2-5: "+ (timeEcc-initEcc)+ "ms" ); + System.out.println("========================================================="); + System.out.println("Init RSA (inkl. 1st Test): "+ (initRSA)+ "ms" ); + System.out.println("RSA-Tests gesamt: "+ (timeRSA)+ "ms" ); + System.out.println("RSA-Tests 2-5: "+ (timeRSA-initRSA)+ "ms" ); + System.out.println("========================================================="); + } + +public void ecccreate319() throws Exception { + String testNumber = "ecc319"; + + + // Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); // Create from whole cloth +// + // Element root = (Element) document.createElement("Data"); + // root.appendChild(document.createTextNode(readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")) ); +// Element root2 = (Element) document.createElement("Element2"); + // root2.appendChild(document.createTextNode("Some other text") ); + + // root.appendChild(root2); + + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + //cpkcs.init(); + long start = (new Date()).getTime(); + cpkcs.initECDSA(); + System.out.println("Init-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(true,"Dies sind Testdaten"); + //cpkcs.createReferenceEnvElement(root); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir")+"resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + /** + * Method create320: + * The element KeyInfo does NOT contain the X509-certificate but + * an URI pointing to an external xml-encoded X509-file + * @throws Exception + */ + public void ecccreate320() throws Exception { + String testNumber = "ecc320"; + + //RetrievalMethdos instead of the integratede Keys + + //URI fileURI = new URI(configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der"); + URI fileURI = new URI("file:/"+configuration_.getProperty("baseDir") + "resources/X509Data.xml"); + URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data"); + //URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate"); + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); +// cpkcs.init(); + + cpkcs.initECDSA(); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(false, fileURI, typeURI, null); + + long start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + + public void ecccreate321() throws Exception { + String testNumber = "ecc321"; + + //RetrievalMethdos instead of the integratede Keys + + URI fileURI = new URI("file:/"+configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der"); + URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate"); + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + // cpkcs.init(); + cpkcs.initECDSA(); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(false, fileURI, typeURI, null); + + long start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + + /** + * Method create322. + * The reference in the signature points with an xpointer + * to the ID of an embedded valid manifest dsig:object + * @throws Exception + */ + public void ecccreate322() throws Exception { + String testNumber = "ecc322"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + // cpkcs.init(); + cpkcs.initECDSA(); + cpkcs.setCanoncialization(canAlgCanXML); + URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.createReferenceWithManifest(fileURI1,"manifestObject"); + + cpkcs.setKeyInformation(); + long start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + } + /** + * Method create323: + * There are two references in the signature pointing + * with xpointer to two embedded valid manifest dsig:objects + * @throws Exception + */ + public void ecccreate323() throws Exception { + String testNumber = "ecc323"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + // cpkcs.init(); + cpkcs.initECDSA(); + cpkcs.setCanoncialization(canAlgCanXML); + URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt"); + cpkcs.createReferenceWithManifest(fileURI1,"manifestObject"); + + //HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...??? + + cpkcs.createReferenceWithManifest(fileURI2,"manifestObject2"); + cpkcs.setKeyInformation(); + long start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + } + public void ecccreate324() throws Exception { + String testNumber = "ecc324"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + // cpkcs.init(); + cpkcs.initECDSA(); + cpkcs.setCanoncialization(canAlgCanXML); + URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt"); + cpkcs.createReferencesWithManifest(fileURI1,"manifestObject",fileURI2); + + //HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...??? + cpkcs.setKeyInformation(); + long start = (new Date()).getTime(); + Document sign = cpkcs.returnSig(); + System.out.println("Sign-Dauer für " +testNumber + ":" + ((new Date()).getTime()-start)); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + } + + public void createL00() throws Exception { + createL001("1kb"); + createL001("10kb"); + createL001("20kb"); + createL001("50kb"); + createL001("100kb"); + createL001("500kb"); + createL001("1mb"); + createL001("10mb"); + } + + public void createL001(String filename) throws Exception { + + String testNumber = "001"; + + //Create a Request with number 001, the current Time (+0 hours) + // and with the Date and ReturnHashInputDate Elements present + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/"+filename+".txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(false,false,null)); + + writeFile(vxReqFileL(testNumber,filename),request); + + + + writeFile(vxResFileL(testNumber,filename), createResponseL(cpkcs.getX509CertString(), testNumber,"0",filename)); + } + + /** + * Method create001. + * @throws Exception + */ + /* ===================================================================================================================== */ + /* ===================================================================================================================== */ + /* ===================================================================================================================== */ + + public void create001() throws Exception { + + String testNumber = "001"; + + //Create a Request with number 001, the current Time (+0 hours) + // and with the Date and ReturnHashInputDate Elements present + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + /** + * Method create002. + * @throws Exception + */ + public void create002() throws Exception { + String testNumber = "002"; + //Create a Request with number 002, the current Time (+0 hours) + // and without the Date and with ReturnHashInputDate Elements present + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,false,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + /** + * Method create003. + * @throws Exception + */ + public void create003() throws Exception { + String testNumber = "003"; + //Create a Request with number 003, the Time one Day in the past (-24 hours) + // and with the Date and with ReturnHashInputDate Elements present + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,-24), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + /** + * Method create004. + * @throws Exception + */ + public void create004() throws Exception { + String testNumber = "004"; + //Create a Request with number 004, the current Time (+0 hours) + // and with the Date and without ReturnHashInputDate Elements present + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(false,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + writeFile(vxResFile(testNumber), createResponseWithoutHashInputData(cpkcs.getX509CertString(), testNumber,"0")); + } + public void create005() throws Exception { + String testNumber = "005"; + + String request = + createRequestStart(testNumber,true,0, "Reference=\"" + configuration_.getProperty("webbaseDir") + "resources/SignatureVX005.xml\" ")+ + createRequestEnd(false,false,null); + + request = replaceString(request,"<XMLContent xml:space=\"preserve\">",""); + request = replaceString(request,"</XMLContent>",""); + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml")) + + vxBean.createSignatureCheck("0")+ + vxBean.createXMLDSIGManifestCheck("1","1","1")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + writeFile(vxResFile(testNumber), response); + } + /** + * Method create051. + * @throws Exception + */ + +public void create006() throws Exception { + + String testNumber = "006"; + // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN + Supplement supp = new Supplement(); + supp.addXMLContent("http://MyServer.com/resources/something.xsd", + "<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>"); + supp.closeSupplement(); + + String requestEnd = createSignatureInfoEnd()+ + supp.getSupplement() + createRequestShortEnd(false); + + String requestStart = createRequestStart(testNumber,true,0); + + + String reqDocString = + "<daten:Document Id=\"myDocument\" " + + "xmlns:daten=\"http://uri2.data.org\" "+ + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+ + "xsi:schemaLocation=\"http://uri2.data.org http://MyServer.com/resources/something.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >" + + "daten</daten:Document>" ; + + InputStream bis = new ByteArrayInputStream(reqDocString.getBytes()); + //Document-Builder holen + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + factory.setValidating(true); + //factory.setValidating(true); + DocumentBuilder builder = factory.newDocumentBuilder(); + + Map m = new HashMap(); + m.put("http://MyServer.com/resources/something.xsd",new ByteArrayInputStream(("<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>").getBytes())); + + EntityResolverChain chain = new EntityResolverChain(); + chain.addEntityResolver(new StreamEntityResolver(m)); + chain.addEntityResolver(new MOAEntityResolver()); + builder.setEntityResolver(chain); + + + //Dokument Parsen + System.out.println(reqDocString); + //Document reqDoc = builder.parse(bis); + Document reqDoc = DOMUtils.parseDocument(bis,true,Constants.ALL_SCHEMA_LOCATIONS, null,chain,new MOAErrorHandler()); + //Position für die Signatur angeben + //String xPath_Pos = "/moa:VerifyXMLSignatureRequest/moa:VerifySignatureInfo/moa:VerifySignatureEnvironment/moa:XMLContent + String xPath_Pos = "//daten:Document"; + //XPAth-Prefixe deklarieren + String xPath_Prefix = "daten http://uri2.data.org"; + Position pos = new Position(xPath_Pos, xPath_Prefix,0); + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt + System.out.println("REQDOC:"+DOMUtils.serializeNode(reqDoc)); + cpkcs.init(reqDoc,pos); + cpkcs.setCanoncialization(canAlgCanXML); + + cpkcs.setKeyInformation(); + /*cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt")); + cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");*/ + + Transform[] tr = new Transform[1]; + TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature(); + tr[0] = trans; + //Enveloped Transformation + cpkcs.createReferenceWithTransforms(new URI("#myDocument"),tr); +//Signieren + + cpkcs.returnSig(); + //Serialisieren + String request = requestStart + replaceString(Node2String(reqDoc.getDocumentElement()),"<?xml version=\"1.0\" encoding=\"utf-8\"?>","") + requestEnd; + + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(cpkcs.getX509CertString()) + + vxBean.createSignatureCheck("0")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + writeFile(vxResFile(testNumber), response); + } + + public void create007() throws Exception { + + String testNumber = "007"; + + String dtdLocation = configuration_.getProperty("webbaseDir") + "resources/VX.007DTD.dtd"; + + // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN + Supplement supp = new Supplement(); + supp.addBase64Content(dtdLocation, + readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/VX.007DTD.dtd")); + supp.closeSupplement(); + + String requestEnd = createSignatureInfoEnd()+ + createRequestShortEnd(false); + + //String reqDocString = createRequestStart(testNumber,true,0,"","<!DOCTYPE data:Document SYSTEM \"http://MyServer.com/resources/VX.006DTD.dtd\">") + + String reqDocString = /*createRequestStart(testNumber,true,0) +*/ + "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Document SYSTEM \"" + dtdLocation + "\"><Document Id=\"myDocument\" " + + + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+ + "xsi:schemaLocation=\"http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >" + + "\ndaten\n</Document>" /*+ requestEnd*/; + + InputStream bis = new ByteArrayInputStream(reqDocString.getBytes()); + //Document-Builder holen + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + factory.setValidating(false); + + System.out.println(reqDocString); + + DocumentBuilder builder = factory.newDocumentBuilder(); + //Dokument Parsen + Document reqDoc = builder.parse(bis); + //Position für die Signatur angeben + String xPath_Pos = "/Document"; + //XPAth-Prefixe deklarieren + String xPath_Prefix = "";//"data http://uri2.data.org"; + Position pos = new Position(xPath_Pos, xPath_Prefix,0); + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt + cpkcs.init(reqDoc,pos); + cpkcs.setCanoncialization(canAlgCanXML); + + cpkcs.setKeyInformation(); + /*cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt")); + cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");*/ + + Transform[] tr = new Transform[1]; + TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature(); + tr[0] = trans; + //Enveloped Transformation + cpkcs.createReferenceWithTransforms(new URI("#myDocument"),tr); +//Signieren + cpkcs.returnSig(); + //Serialisieren + String request = Node2String(reqDoc.getDocumentElement()); + + int i_pos = request.indexOf("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); + request = request.substring("<?xml version=\"1.0\" encoding=\"utf-8\"?>".length()); + + request = "<!DOCTYPE Document SYSTEM \"" + dtdLocation + "\">"+request; + + System.out.println("DOC:"+request); + + request ="<?xml version=\"1.0\" encoding=\"utf-8\"?><VerifyXMLSignatureRequest xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xml=\"http://www.w3.org/XML/1998/namespace\"><VerifySignatureInfo><VerifySignatureEnvironment><Base64Content>"+Base64Utils.encode(request.getBytes())+"</Base64Content></VerifySignatureEnvironment><VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation></VerifySignatureInfo>"+supp.getSupplement()+"<TrustProfileID>TrustProfile1</TrustProfileID></VerifyXMLSignatureRequest>"; + + + + + /*int i_pos = request.indexOf("<VerifyXMLSignatureRequest"); + request = request.substring(0,i_pos)+"<!DOCTYPE data:Document SYSTEM \"http://MyServer.com/resources/VX.006DTD.dtd\">\n" +request.substring(i_pos);*/ + + /*i_pos = request.indexOf("<TrustProfile"); + request = request.substring(0,i_pos)+supp.getSupplement() +request.substring(i_pos);*/ + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponseWithoutHashInputData(cpkcs.getX509CertString(), testNumber,"0",false)); + } + + + public void create008() throws Exception { + + String testNumber = "008"; + + String request = + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+ + "<VerifyXMLSignatureRequest xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" xmlns:xml=\"http://www.w3.org/XML/1998/namespace\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+ + "<VerifySignatureInfo>"+ + "<VerifySignatureEnvironment>"+ + "<XMLContent xml:space=\"preserve\">"+ + "<dsig:Signature Id=\"HS_signature\" xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+ + "<dsig:SignedInfo>"+ + "<dsig:CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>"+ + "<dsig:SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>"+ + "<dsig:Reference Id=\"reference-data-1\" URI=\"#signed-data\">"+ + "<dsig:Transforms>"+ + "<dsig:Transform Algorithm=\"http://www.w3.org/2002/06/xmldsig-filter2\">"+ + "<xf2:XPath Filter=\"intersect\" xmlns:xf2=\"http://www.w3.org/2002/06/xmldsig-filter2\">id('signed-data')/node()</xf2:XPath>"+ + "</dsig:Transform>"+ + "</dsig:Transforms>"+ + "<dsig:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+ + "<dsig:DigestValue>4lngV1x/OvR8iFWEBenH4fDihwA=</dsig:DigestValue>"+ + "</dsig:Reference>"+ + "<dsig:Reference Type=\"http://uri.etsi.org/01903/v1.1.1#SignedProperties\" URI=\"#refetsi\">"+ + "<dsig:Transforms>"+ + "<dsig:Transform Algorithm=\"http://www.w3.org/2002/06/xmldsig-filter2\">"+ + "<xf2:XPath Filter=\"intersect\" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\" xmlns:xf2=\"http://www.w3.org/2002/06/xmldsig-filter2\">id('refetsi')/etsi:QualifyingProperties/etsi:SignedProperties</xf2:XPath>"+ + "</dsig:Transform>"+ + "</dsig:Transforms>"+ + "<dsig:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+ + "<dsig:DigestValue>1j0DWguieuw2cGA06gFjoSNXr+w=</dsig:DigestValue>"+ + "</dsig:Reference>"+ + "</dsig:SignedInfo>"+ + "<dsig:SignatureValue>Yb6fsPNbKyYW+u7cU1EqF9n5QrwLXHqdGD4tJNT5+sA7kQR3Ztqz965vlBH+1pJE"+ + "nGxehxXsesZboVvkJa/jhuI0goCTW9KkdGOP71B7o7/vlyBbxaYKpnVNtBU4/qtT"+ + "xba7M0E32X+tm/x9O6foXIM0AoP3oQBZmjo9rEJ9kfk=</dsig:SignatureValue>"+ + "<dsig:KeyInfo>"+ + "<dsig:X509Data>"+ + "<dsig:X509Certificate>MIIFJTCCBA2gAwIBAgICGTcwDQYJKoZIhvcNAQEFBQAwgaExCzAJBgNVBAYTAkFU"+ + "MUgwRgYDVQQKEz9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGlt"+ + "IGVsZWt0ci4gRGF0ZW52ZXJrZWhyIEdtYkgxIzAhBgNVBAsTGmEtc2lnbi1URVNU"+ + "LVByZW1pdW0tRW5jLTAxMSMwIQYDVQQDExphLXNpZ24tVEVTVC1QcmVtaXVtLUVu"+ + "Yy0wMTAeFw0wMzAyMTAxMzIwNThaFw0wNjAyMTAxMzIwNThaMGoxCzAJBgNVBAYT"+ + "AkFUMRwwGgYDVQQDExNUZXN0cGVyc29uIE1PQTQgQlJaMQwwCgYDVQQEEwNCUlox"+ + "GDAWBgNVBCoTD1Rlc3RwZXJzb24gTU9BNDEVMBMGA1UEBRMMNzkwMTg3NDYxNjMz"+ + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDS/UW1/tZeCh7HHQmj8auUTEc4"+ + "edAgRDkUVKOm0tF3kE3WZlhGDZL0p84xsdIKyI+bwDCMATATkQwDo/Xxn9jJMi4/"+ + "t80bNyRsHk9giA0wcvz9NgmEcDwKNqawGsR9gNeK8TyIC8AuDkj1EwtkAObMvtp/"+ + "Z1phi47x3JxDDfGDpQIDAQABo4ICHzCCAhswEwYDVR0jBAwwCoAIS7OAw3GTPNgw"+ + "JwYIKwYBBQUHAQMBAf8EGDAWMAgGBgQAjkYBATAKBggrBgEFBQcLATCBggYIKwYB"+ + "BQUHAQEEdjB0MCkGCCsGAQUFBzABhh1odHRwOi8vd3d3LmEtdHJ1c3QuYXQ6ODIv"+ + "b2NzcDBHBggrBgEFBQcwAoY7aHR0cDovL3d3dy5hLXRydXN0LmF0L2NlcnRzL2Et"+ + "c2lnbi1URVNULVByZW1pdW0tU2lnLTAxYS5jcnQwgZQGA1UdIASBjDCBiTB9BgYq"+ + "KAARAQQwczA1BggrBgEFBQcCARYpaHR0cDovL3d3dy5hLXRydXN0LmF0L2RvY3Mv"+ + "Y3AvYS1zaWduLVRFU1QwOgYIKwYBBQUHAgIwLhosRGllc2VzIFplcnRpZmlrYXQg"+ + "ZGllbnQgbnVyIHp1IFRlc3R6d2Vja2VuICEwCAYGBACLMAEBMG8GA1UdHwRoMGYw"+ + "ZKBioGCGXmxkYXA6Ly9sZGFwLmEtdHJ1c3QuYXQvb3U9YS1zaWduLVRFU1QtUHJl"+ + "bWl1bS1FbmMtMDEsbz1BLVRydXN0LGM9QVQ/Y2VydGlmaWNhdGVyZXZvY2F0aW9u"+ + "bGlzdD8wEQYDVR0OBAoECE4DxL9ky4M+MA4GA1UdDwEB/wQEAwIGwDAgBgNVHREE"+ + "GTAXgRV0ZXN0cGVyc29uNEBicnouZ3YuYXQwCQYDVR0TBAIwADANBgkqhkiG9w0B"+ + "AQUFAAOCAQEAioVvsZN+NnQxXMTGdjKveTBMRTYzHflkSC8lI9XXltP5+mjIuoB2"+ + "Tn6voovA8dXz9jTsnQt8f8ye0CL2bSS9UVD1jv8So3bavquW+HlkZBAZvL39APNL"+ + "PjUUnWn0QOnrQAJ6W47UwGAUgEw3KcBcJaEa4Xb/8kUj618xGzWl6X0mKsVpxkrf"+ + "+5Cj+nmwDqChll08/90MmhSY4M5FrvmQ9GjAN5FHVsk0FPp02tKCRzoBJtzpB1DW"+ + "KHlgiDHUAXy5eD0XI7PXebPNZ4InvY/jC/IH8PRLdJT249YQmUxZ4neTtFDvb8C1"+ + "Qh6k725fh3hVxqX8ZwwWj9+iGQVk53K3CA==</dsig:X509Certificate>"+ + /*"<dsig:X509Certificate>"+ + readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/IAIKRootMusterbehoerde.cer")+ + "</dsig:X509Certificate>"+*/ + "</dsig:X509Data>"+ + "</dsig:KeyInfo>"+ + "<dsig:Object Id=\"signed-data\">"+ + "<sl10:InfoboxReadRequest xmlns:sl10=\"http://www.buergerkarte.at/namespaces/securitylayer/20020225#\">"+ + "<sl10:InfoboxIdentifier>IdentityLink</sl10:InfoboxIdentifier>"+ + "<sl10:BinaryFileParameters ContentIsXMLEntity=\"true\"/>"+ + "</sl10:InfoboxReadRequest>"+ + "</dsig:Object>"+ + "<dsig:Object Id=\"refetsi\">"+ + "<etsi:QualifyingProperties Target=\"#HS_signature\" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\">"+ + "<etsi:SignedProperties>"+ + "<etsi:SignedSignatureProperties>"+ + "<etsi:SigningTime>2003-03-04T12:32:54Z</etsi:SigningTime>"+ + "<etsi:SigningCertificate>"+ + "<etsi:Cert>"+ + "<etsi:CertDigest>"+ + "<etsi:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>"+ + "<etsi:DigestValue>Frhu1o4mL4gQHdJcU0xSA/h4COE=</etsi:DigestValue>"+ + "</etsi:CertDigest>"+ + "<etsi:IssuerSerial>"+ + "<dsig:X509IssuerName>CN=a-sign-TEST-Premium-Enc-01,OU=a-sign-TEST-Premium-Enc-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT</dsig:X509IssuerName>"+ + "<dsig:X509SerialNumber>6455</dsig:X509SerialNumber>"+ + "</etsi:IssuerSerial>"+ + "</etsi:Cert>"+ + "</etsi:SigningCertificate>"+ + "<etsi:SignaturePolicyIdentifier>"+ + "<etsi:SignaturePolicyImplied/>"+ + "</etsi:SignaturePolicyIdentifier>"+ + "</etsi:SignedSignatureProperties>"+ + "<etsi:SignedDataObjectProperties>"+ + "<etsi:DataObjectFormat ObjectReference=\"#reference-data-1\">"+ + "<etsi:MimeType>text/xml</etsi:MimeType>"+ + "</etsi:DataObjectFormat>"+ + "</etsi:SignedDataObjectProperties>"+ + "</etsi:SignedProperties>"+ + "</etsi:QualifyingProperties>"+ + "</dsig:Object>"+ + "</dsig:Signature>"+ + "</XMLContent>"+ + "</VerifySignatureEnvironment>"+ + "<VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>"+ + "</VerifySignatureInfo>"+ + "<TrustProfileID>TrustProfile1</TrustProfileID>"+ + "</VerifyXMLSignatureRequest>"; + + String response = + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+ + "<VerifyXMLSignatureResponse xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\" >"+ + " <SignerInfo>"+ + " <dsig:X509Data xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">"+ + " <dsig:X509SubjectName>serialNumber=790187461633,givenName=Testperson MOA4,SN=BRZ,CN=Testperson MOA4 BRZ,C=AT</dsig:X509SubjectName>"+ + " <dsig:X509IssuerSerial>"+ + " <dsig:X509IssuerName>CN=a-sign-TEST-Premium-Enc-01,OU=a-sign-TEST-Premium-Enc-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT</dsig:X509IssuerName>"+ + " <dsig:X509SerialNumber>6455</dsig:X509SerialNumber>"+ + " </dsig:X509IssuerSerial>"+ + "<dsig:X509Certificate>MIIFJTCCBA2gAwIBAgICGTcwDQYJKoZIhvcNAQEFBQAwgaExCzAJBgNVBAYTAkFU"+ + "MUgwRgYDVQQKEz9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGlt"+ + "IGVsZWt0ci4gRGF0ZW52ZXJrZWhyIEdtYkgxIzAhBgNVBAsTGmEtc2lnbi1URVNU"+ + "LVByZW1pdW0tRW5jLTAxMSMwIQYDVQQDExphLXNpZ24tVEVTVC1QcmVtaXVtLUVu"+ + "Yy0wMTAeFw0wMzAyMTAxMzIwNThaFw0wNjAyMTAxMzIwNThaMGoxCzAJBgNVBAYT"+ + "AkFUMRwwGgYDVQQDExNUZXN0cGVyc29uIE1PQTQgQlJaMQwwCgYDVQQEEwNCUlox"+ + "GDAWBgNVBCoTD1Rlc3RwZXJzb24gTU9BNDEVMBMGA1UEBRMMNzkwMTg3NDYxNjMz"+ + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDS/UW1/tZeCh7HHQmj8auUTEc4"+ + "edAgRDkUVKOm0tF3kE3WZlhGDZL0p84xsdIKyI+bwDCMATATkQwDo/Xxn9jJMi4/"+ + "t80bNyRsHk9giA0wcvz9NgmEcDwKNqawGsR9gNeK8TyIC8AuDkj1EwtkAObMvtp/"+ + "Z1phi47x3JxDDfGDpQIDAQABo4ICHzCCAhswEwYDVR0jBAwwCoAIS7OAw3GTPNgw"+ + "JwYIKwYBBQUHAQMBAf8EGDAWMAgGBgQAjkYBATAKBggrBgEFBQcLATCBggYIKwYB"+ + "BQUHAQEEdjB0MCkGCCsGAQUFBzABhh1odHRwOi8vd3d3LmEtdHJ1c3QuYXQ6ODIv"+ + "b2NzcDBHBggrBgEFBQcwAoY7aHR0cDovL3d3dy5hLXRydXN0LmF0L2NlcnRzL2Et"+ + "c2lnbi1URVNULVByZW1pdW0tU2lnLTAxYS5jcnQwgZQGA1UdIASBjDCBiTB9BgYq"+ + "KAARAQQwczA1BggrBgEFBQcCARYpaHR0cDovL3d3dy5hLXRydXN0LmF0L2RvY3Mv"+ + "Y3AvYS1zaWduLVRFU1QwOgYIKwYBBQUHAgIwLhosRGllc2VzIFplcnRpZmlrYXQg"+ + "ZGllbnQgbnVyIHp1IFRlc3R6d2Vja2VuICEwCAYGBACLMAEBMG8GA1UdHwRoMGYw"+ + "ZKBioGCGXmxkYXA6Ly9sZGFwLmEtdHJ1c3QuYXQvb3U9YS1zaWduLVRFU1QtUHJl"+ + "bWl1bS1FbmMtMDEsbz1BLVRydXN0LGM9QVQ/Y2VydGlmaWNhdGVyZXZvY2F0aW9u"+ + "bGlzdD8wEQYDVR0OBAoECE4DxL9ky4M+MA4GA1UdDwEB/wQEAwIGwDAgBgNVHREE"+ + "GTAXgRV0ZXN0cGVyc29uNEBicnouZ3YuYXQwCQYDVR0TBAIwADANBgkqhkiG9w0B"+ + "AQUFAAOCAQEAioVvsZN+NnQxXMTGdjKveTBMRTYzHflkSC8lI9XXltP5+mjIuoB2"+ + "Tn6voovA8dXz9jTsnQt8f8ye0CL2bSS9UVD1jv8So3bavquW+HlkZBAZvL39APNL"+ + "PjUUnWn0QOnrQAJ6W47UwGAUgEw3KcBcJaEa4Xb/8kUj618xGzWl6X0mKsVpxkrf"+ + "+5Cj+nmwDqChll08/90MmhSY4M5FrvmQ9GjAN5FHVsk0FPp02tKCRzoBJtzpB1DW"+ + "KHlgiDHUAXy5eD0XI7PXebPNZ4InvY/jC/IH8PRLdJT249YQmUxZ4neTtFDvb8C1"+ + "Qh6k725fh3hVxqX8ZwwWj9+iGQVk53K3CA==</dsig:X509Certificate>"+ + " <sl11:QualifiedCertificate xmlns:sl11=\"http://www.buergerkarte.at/namespaces/securitylayer/20020831#\"/>"+ + " </dsig:X509Data>"+ + " </SignerInfo>"+ + " <SignatureCheck>"+ + " <Code>0</Code>"+ + " </SignatureCheck>"+ + " <CertificateCheck>"+ + " <Code>0</Code>"+ + " </CertificateCheck>"+ + "</VerifyXMLSignatureResponse>"; + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber),response); + } + + public void create009() throws Exception { + + String testNumber = "009"; + // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN + Supplement supp = new Supplement(); + supp.addXMLContent("http://MyServer.com/resources/something.xsd", + "<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>"); + supp.closeSupplement(); + + String requestEnd = createSignatureInfoEnd()+ + supp.getSupplement() + createRequestShortEnd(false); + + String requestStart = createRequestStart(testNumber,true,0); + + + String reqDocString = + "<daten:Document Id=\"myDocument\" " + + "xmlns:daten=\"http://uri2.data.org\" "+ + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+ + "xsi:schemaLocation=\"http://uri2.data.org http://MyServer.com/resources/something.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >" + + "daten</daten:Document>" ; + + InputStream bis = new ByteArrayInputStream(reqDocString.getBytes()); + //Document-Builder holen + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + factory.setValidating(true); + //factory.setValidating(true); + DocumentBuilder builder = factory.newDocumentBuilder(); + + Map m = new HashMap(); + m.put("http://MyServer.com/resources/something.xsd",new ByteArrayInputStream(("<xsd:schema targetNamespace=\"http://uri2.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\"><xsd:element name=\"Document\"><xsd:complexType mixed=\"true\"><xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\"><xsd:any namespace=\"##any\" processContents=\"lax\"/></xsd:sequence><xsd:attribute name=\"Id\" type=\"xsd:ID\" use=\"required\"/></xsd:complexType></xsd:element></xsd:schema>").getBytes())); + + EntityResolverChain chain = new EntityResolverChain(); + chain.addEntityResolver(new StreamEntityResolver(m)); + chain.addEntityResolver(new MOAEntityResolver()); + builder.setEntityResolver(chain); + + + //Dokument Parsen + System.out.println(reqDocString); + //Document reqDoc = builder.parse(bis); + Document reqDoc = DOMUtils.parseDocument(bis,true,Constants.ALL_SCHEMA_LOCATIONS, null,chain,new MOAErrorHandler()); + //Position für die Signatur angeben + //String xPath_Pos = "/moa:VerifyXMLSignatureRequest/moa:VerifySignatureInfo/moa:VerifySignatureEnvironment/moa:XMLContent + String xPath_Pos = "//daten:Document"; + //XPAth-Prefixe deklarieren + String xPath_Prefix = "daten http://uri2.data.org"; + Position pos = new Position(xPath_Pos, xPath_Prefix,0); + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt + System.out.println("REQDOC:"+DOMUtils.serializeNode(reqDoc)); + cpkcs.init(reqDoc,pos); + cpkcs.setCanoncialization(canAlgCanXML); + + cpkcs.setKeyInformation(); + /*cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt")); + cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject");*/ + + Transform[] tr = new Transform[1]; + TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature(); + tr[0] = trans; + //Enveloped Transformation + cpkcs.createReferenceWithTransforms(new URI("#xpointer(id(myDocument))"),tr); +//Signieren + + cpkcs.returnSig(); + //Serialisieren + String request = requestStart + replaceString(Node2String(reqDoc.getDocumentElement()),"<?xml version=\"1.0\" encoding=\"utf-8\"?>","") + requestEnd; + + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(cpkcs.getX509CertString()) + + vxBean.createSignatureCheck("0")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + writeFile(vxResFile(testNumber), response); + } + + public void create101() throws Exception { + + String testNumber = "101"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + Supplement supp = new Supplement(); + supp.addMetaInfo("text/plain","http://www.buergerkarte.at"); + supp.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", + readBinaryFileAsBase64(configuration_.getProperty("baseDir")+"resources/testSimple.txt")); + supp.closeSupplement(); + //supp.addProfileID("Some ID"); + + String requestEnd = createSignatureInfoEnd()+ + supp.getSupplement() + createRequestShortEnd(false); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + requestEnd); + + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(cpkcs.getX509CertString()) + + vxBean.createSignatureCheck("0")+ + /*vxBean.createXMLDSIGManifestCheck("0","","1")+ */ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + writeFile(vxResFile(testNumber), response); + } + public void create102() throws Exception { + + String testNumber = "102"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + Supplement supp = new Supplement(); + supp.addMetaInfo("text/plain",null); + supp.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", + readBinaryFileAsBase64(configuration_.getProperty("baseDir")+"resources/testSimple.txt")); + supp.closeSupplement(); + //supp.addProfileID("Some ID"); + + String requestEnd = createSignatureInfoEnd()+ + supp.getSupplement() + "<ReturnHashInputData/>"+createRequestShortEnd(false); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + requestEnd); + + writeFile(vxReqFile(testNumber),request); + + + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + public void create103() throws Exception { + + String testNumber = "103"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + Supplement supp = new Supplement(); + //supp.addMetaInfo("text/plain",null); + supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")); + //supp.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", + // readBinaryFileAsBase64(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt")); + supp.closeSupplement(); + //supp.addProfileID("Some ID"); + + String requestEnd = createSignatureInfoEnd()+ + supp.getSupplement() + "<ReturnHashInputData/>"+createRequestShortEnd(false); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + requestEnd); + + writeFile(vxReqFile(testNumber),request); + + + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } +public void create104() throws Exception { + + String testNumber = "104"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + Supplement supp = new Supplement(); + supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt")); + supp.closeSupplement(); + + String requestEnd = + createSignatureInfoEnd()+ + supp.getSupplement()+"<ReturnHashInputData/>"+ + createRequestShortEnd(false); + + String request = + makeOutputFile( + createRequestStart(testNumber+" - Supplement/Content/XMLContent instead of Supplement/Content/Base64Content",true,0), + cpkcs.returnSig(), + requestEnd); + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + public void create105() throws Exception { + + String testNumber = "105"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testXML.txt"); + cpkcs.setKeyInformation(); + + Supplement supp = new Supplement(); + supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt")); + supp.closeSupplement(); + + Supplement supp2 = new Supplement(); + supp2.addBase64Content(configuration_.getProperty("webbaseDir")+"resources/testXML.txt", readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testXML.txt")); + supp2.closeSupplement(); + + String requestEnd = + createSignatureInfoEnd()+ + supp.getSupplement()+ + supp2.getSupplement() + + createRequestShortEnd(true); + + String request = + makeOutputFile( + createRequestStart(testNumber + " - 2 Supplement elements",true,0), + cpkcs.returnSig(), + requestEnd); + + String response = createResponsePart(cpkcs.getX509CertString()) + + "<HashInputData><Base64Content>"+ + readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testSimple.txt") + + "</Base64Content></HashInputData>"+ + "<HashInputData><Base64Content>"+ + readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testXML.txt") + + "</Base64Content></HashInputData>"+ + vxBean.createSignatureCheck("0")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), response); + } + +public void create106() throws Exception { + + String testNumber = "106"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String requestEnd = + createSignatureInfoEnd()+ + "<SupplementProfileID>SupplementProfile2</SupplementProfileID>" + + "<!-- Supplement Profile 2 enthaelt nicht die referenzierte URI -->" + + "<SupplementProfileID>SupplementProfile1</SupplementProfileID><ReturnHashInputData/>" + + createRequestShortEnd(false); + + String request = + makeOutputFile( + createRequestStart(testNumber +" - 2 SupplementProfileID elements" ,true,0), + cpkcs.returnSig(), + requestEnd); + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + + public void create301() throws Exception { + + String testNumber = "301"; + + //Testcast with another canoicalization algorithm + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXMLwithCom); + //cpkcs.createReference(true,"Dies sind testdaten"); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + /** + * Method create302. + * @throws Exception + */ + public void create302() throws Exception { + + String testNumber = "302"; + + //Testcast with another canoicalization algorithm + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + + cpkcs.init(); + cpkcs.setCanoncialization(canAlgExcXML); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0")); + } + /** + * Method create303. + * @throws Exception + */ + public void create303() throws Exception { + + String testNumber = "303"; + + //Testcast with another canoicalization algorithm + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + + cpkcs.init(); + cpkcs.setCanoncialization(canAlgExcXMLwithCom); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0")); + } + + public void create304() throws Exception { + + String testNumber = "304"; + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.initECDSA(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + //cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + //cpkcs.createEnvelopedDataObject("envelopedData",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")); + + cpkcs.createReference(true,readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"),"envelopedData"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0","<dsig:X509IssuerName>CN=IAIK ECDSA Test,OU=JavaSecurity,O=IAIK,C=AT</dsig:X509IssuerName>","<dsig:X509SubjectName>CN=IAIK ECDSA Test,OU=JavaSecurity,O=IAIK,C=AT</dsig:X509SubjectName>","<dsig:X509SerialNumber>68172</dsig:X509SerialNumber>")); + } + /** + * Method create305. + * @throws Exception + */ + public void create305() throws Exception { + + String testNumber = "305"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + + String refData = "Dies sind Testdaten"; + + cpkcs.createReference(true,refData); + + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",refData)); + } + + /** + * Method create307. + * @throws Exception + */ + public void create307() throws Exception { + + String testNumber = "307"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + Supplement supp = new Supplement(); + supp.addXMLContent(configuration_.getProperty("baseDir")+"resources/testSimple.txt", readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt")); + supp.closeSupplement(); + + String requestEnd = createSignatureInfoEnd()+ + supp.getSupplement() + + createRequestShortEnd(true); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + requestEnd); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0")); + } + + /** + * Method create308. + * @throws Exception + */ + public void create308() throws Exception { + + String testNumber = "308"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + Supplement supp = new Supplement(); + supp.addXMLContent(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt", readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")); + supp.closeSupplement(); + + + String requestEnd = createSignatureInfoEnd()+ supp.getSupplement() + + createRequestShortEnd(false); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + requestEnd); + + //request = replaceString(request,"<XMLContent xml:space=\"preserve\">","<XMLContent xml:space=\"preserve\">VERAENDERTE DATEN und die Ursprungsdaten: "); + request = replaceString(request,"Dies sind Testdaten","VERAENDERTE DATEN und die Ursprungsdaten: Dies sind Testdaten"); + //request = replaceString(request,Base64Utils.encode("Dies sind Testdaten".getBytes()),Base64Utils.encode("VERAENDERTE DATEN und die Ursprungsdaten: Dies sind Testdaten".getBytes())); + //request = replaceString(request,"<ReturnHashInputData/>",""); + /*request = replaceString(request,"Reference=\""+configuration_.getProperty("baseDir")+"resources/testSimple.txt\"","Reference=\"\""); + request = replaceString(request,"URI=\""+configuration_.getProperty("webbaseDir")+"resources/testSimple.txt\"","URI=\"\"");*/ + writeFile(vxReqFile(testNumber),request); + + String response = createResponse(cpkcs.getX509CertString(),testNumber,"1",1); + + writeFile(vxResFile(testNumber), response); + } + public void create310() throws Exception { + + String testNumber = "310"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + //Erzeugen der Base64-Daten + //String tmp = readBinaryFileAsBase64_new(configuration_.getProperty("baseDir")+"resources/testSimple.txt"); + + URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txtbase64.enc"); + + Transform[] tr = new Transform[1]; + tr[0] = new TransformImplBase64Decode(); + InputStream s = getHttpInputStream(target.toString()); + tr[0].setInput(s,null); + + cpkcs.createReferenceWithTransforms(target,tr); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0")); + } +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- +//-------311 scheint die XPAth - Transformation nicht richtig auszuführen- +// (Siehe Output in der Konsole.....) + + public void create311() throws Exception { + + String testNumber = "311"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + + Transform[] tr = new Transform[1]; + TransformImplXPath trans = new TransformImplXPath(); +// TransformImplXSLT trans = new TransformImplXSLT(); + + + InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/BookData.xml"); +// InputStream s2 = new FileInputStream(configuration_.getProperty("baseDir")+"resources/transform.xsl"); + trans.setInput(s,null); +// trans.setStyleSheet(s2,null); + + trans.addNSDeclaration("data",new URI("http://uri.data.org")); //new URI("file:/"+configuration_.getProperty("baseDir")+"resources/BookData.xml")); + // trans.setXPath("ancestor-or-self::data:first-name"); + trans.setXPath("ancestor-or-self::text()/ancestor-or-self::data:first-name"); + + tr[0] = trans; + + cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",1,"text:Ellipse")); + } + +public void create312() throws Exception + { String testNumber = "312"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init("signature"); + cpkcs.setCanoncialization(canAlgCanXML); + + Transform[] tr = new Transform[1]; + TransformImplXPath2 trans = new TransformImplXPath2(); + InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_book.xsl"); + trans.setInput(s,null); + + HashMap temp = new HashMap(); + temp.put("data",new URI("http://uri.data.org")); + trans.addXPathFilter("/data:book/data:first-name",TransformImplXPath2.FILTER_MODE_SUBTRACT_,temp); + tr[0] = trans; + //System.out.println(getTransformsResult(tr)); + cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr,"reference-1"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart("312",true,0), + cpkcs.returnSig(), + createSignatureInfoEnd() + + createRequestShortEnd(false)); + + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(cpkcs.getX509CertString()) + + vxBean.createSignatureCheck("0")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + writeFile(vxResFile(testNumber), response); + } + +public void create313() throws Exception + { String testNumber = "313"; + + // ERST MAL DAS DOKUMENT ALS STRING AUFBAUEN + + String requestEnd = createRequestEnd(true,false,null); + + String reqDocString = createRequestStart(testNumber,true,0) + + "<data:Document " + + "xmlns:data=\"http://uri.data.org\" "+ + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Id=\"myDocument\" "+ + "xsi:schemaLocation=\"http://uri.data.org http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX.006Schema.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >" + + "</data:Document>" + requestEnd; + + + InputStream bis = new ByteArrayInputStream(("<data:Document " + + "xmlns:data=\"http://uri.data.org\" "+ + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Id=\"myDocument\" "+ + "xsi:schemaLocation=\"http://uri.data.org http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX.006Schema.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\" >" + + "</data:Document>").getBytes()); + //Document-Builder holen + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + DocumentBuilder builder = factory.newDocumentBuilder(); + //Dokument Parsen + Document reqDoc = builder.parse(bis); + + System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement())); + //Position für die Signatur angeben + //String xPath_Pos = "/moa:VerifyXMLSignatureRequest/moa:VerifySignatureInfo/moa:VerifySignatureEnvironment/moa:XMLContent/data:Document"; + String xPath_Pos = "/node()"; + //XPAth-Prefixe deklarieren + String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\""; + Position pos = new Position(xPath_Pos, xPath_Prefix,0); + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt + cpkcs.init(reqDoc,pos); + cpkcs.setCanoncialization(canAlgCanXML); + + cpkcs.setKeyInformation(1); + //cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("webbaseDir")+"resources/testSimple.txt")); + //cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject"); + + Transform[] tr = new Transform[1]; + TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature(); + tr[0] = trans; + //Enveloped Transformation + cpkcs.createReferenceWithTransforms(new URI(""),tr); +//Signieren + cpkcs.returnSig(); + //Serialisieren + String request = Node2String(reqDoc.getDocumentElement()); + + writeFile(vxReqFile(testNumber),createRequestStart(testNumber,true,0).trim() +cutXML(request).trim()+requestEnd.trim()); + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0",1,"text:"+"<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Id=\"myDocument\" xsi:schemaLocation=\"http://uri.data.org http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/VX.006Schema.xsd http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd\"></data:Document>")); + + } + + + public void create314() throws Exception + { String testNumber = "314"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init("signature"); + cpkcs.setCanoncialization(canAlgCanXML); + + Transform[] tr = new Transform[1]; + TransformImplXSLT trans = new TransformImplXSLT(); + InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl"); + trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl")); + tr[0] = trans; + cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr,"reference-1"); + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart("314",true,0), + cpkcs.returnSig(), + createSignatureInfoEnd() + + createRequestShortEnd(false)); + + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(cpkcs.getX509CertString()) + + vxBean.createSignatureCheck("0")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + writeFile(vxResFile(testNumber), response); + } + +public void create314_2() throws Exception + { String testNumber = "314_2"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init("signature"); + cpkcs.setCanoncialization(canAlgCanXML); + + Transform[] tr = new Transform[1]; + TransformImplXSLT trans = new TransformImplXSLT(); + InputStream s = getHttpInputStream(configuration_.getProperty("webbaseDir")+"resources/CX1_bookref.xsl"); + trans.setStyleSheet(s,new URI("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_bookref.xsl")); + tr[0] = trans; + cpkcs.createReferenceWithTransforms(new URI(configuration_.getProperty("webbaseDir") + "resources/BookData.xml"),tr,"reference-1"); + cpkcs.setKeyInformation(); + + Supplement supp = new Supplement(); + String suppContent = readFileCR(configuration_.getProperty("baseDir")+"resources/CX1_book.xsl"); + suppContent = replaceString(suppContent, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>",""); + supp.addXMLContent("http://moa-test.brz.intra.gv.at/TestDatenGenerator/resources/CX1_book.xsl", suppContent ); + supp.closeSupplement(); + + String request = + makeOutputFile( + createRequestStart("314_2",true,0), + cpkcs.returnSig(), + createSignatureInfoEnd() + + supp.getSupplement() + + createRequestShortEnd(false)); + +/* request = replaceString(request, "http://moa-test.brz.intra.gv.at", "http://MyServer.com"); + request = replaceString(request, "http://moa-test.brz.intra.gv.at", "http://MyServer.com"); + request = replaceString(request, "http://moa-test.brz.intra.gv.at", "http://MyServer.com"); + //Hinweis: ich nehmen an, die URI in DSIG:REFERENCE sollte schon stimmen.... + request = replaceString(request, "http://MyServer.com", "http://moa-test.brz.intra.gv.at"); */ + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(cpkcs.getX509CertString()) + + vxBean.createSignatureCheck("0")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + writeFile(vxResFile(testNumber), response); + } + + + public void create315() throws Exception { + + String testNumber = "315"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + //cpkcs.createReference(true,"Dies sind testdaten"); + URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML"); + + Transform[] tr = new Transform[1]; + tr[0] = new TransformImplCanonicalXML(); + InputStream s = getHttpInputStream(target.toString()); + tr[0].setInput(s,null); + + String erg = getTransformsResult(tr); + + cpkcs.createReferenceWithTransforms(target,tr); + //cpkcs.createReference(false, "file:/"+ configuration_.getProperty("baseDir")+"resources/test_wo_canonicalisation.XML"); + //cpkcs.createReference(false, "file:/"+ configuration_.getProperty("baseDir")+"resources/test_w_canonicalisation.XML"); +// cpkcs.createReferenceWithManifest(new URI("file:/"+ configuration_.getProperty("baseDir")+"resources/test_w_canonicalisation.XML"),"canonicalizedData"); + + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + + + writeFile(vxReqFile(testNumber),request); + + + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg)); + } + + public void create316() throws Exception { + + String testNumber = "316"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + + URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML"); + + Transform[] tr = new Transform[1]; + tr[0] = new TransformImplCanonicalXMLWithComments(); + InputStream s = getHttpInputStream(target.toString()); + tr[0].setInput(s,null); + + String erg = getTransformsResult(tr); + + cpkcs.createReferenceWithTransforms(target,tr); + + cpkcs.setKeyInformation(); + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg)); + } + public void create317() throws Exception { + + String testNumber = "317"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + + URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML"); + + Transform[] tr = new Transform[1]; + tr[0] = new TransformImplExclusiveCanonicalXML(); + InputStream s = getHttpInputStream(target.toString()); + tr[0].setInput(s,null); + String erg = getTransformsResult(tr); + cpkcs.createReferenceWithTransforms(target,tr); + + cpkcs.setKeyInformation(); + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg)); + } + public void create318() throws Exception { + + String testNumber = "318"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XML"); + Transform[] tr = new Transform[1]; + tr[0] = new TransformImplExclusiveCanonicalXMLWithComments(); + InputStream s = getHttpInputStream(target.toString()); + tr[0].setInput(s,null); + + String erg = getTransformsResult(tr); + cpkcs.createReferenceWithTransforms(target,tr); + + cpkcs.setKeyInformation(); + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg)); + } + + public void create318_2() throws Exception { + + String testNumber = "318_2"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + + //Create a base64-encoded version of the xml file + + //String tmp = readBinaryFileAsBase64(configuration_.getProperty("baseDir")+"resources/test_wo_canonicalisation.XML"); + + URI target = new URI(configuration_.getProperty("webbaseDir") + "resources/test_wo_canonicalisation.XMLbase64.enc"); + + Transform[] tr = new Transform[3]; + tr[0] = new TransformImplBase64Decode(); + InputStream s = getHttpInputStream(target.toString()); + tr[0].setInput(s,null); + tr[1] = new TransformImplCanonicalXMLWithComments(); + tr[1].setInput(s,null); + + tr[2] = new TransformImplExclusiveCanonicalXML(); + tr[2].setInput(s,null); + String erg = getTransformsResult(tr); + cpkcs.createReferenceWithTransforms(target,tr); + + cpkcs.setKeyInformation(); + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0",erg)); + } + + /** + * Method create319: + * SignedInfo/Reference appears two times: + * the first reference points to an enveloped dsig:Object, + * the seconde reference points to an external File + * @throws Exception + */ + public void create319() throws Exception { + String testNumber = "319"; + + + // Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); // Create from whole cloth + +// Element root = (Element) document.createElement("Data"); + // root.appendChild(document.createTextNode(readFileCR(configuration_.getProperty("baseDir")+"resources/test-ee2003_normal.derbase64.enc.bak")) ); + //root.appendChild(document.createTextNode("Hallo\nHallo\nHallo")); + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(true,"Dies sind Testdaten"); + //cpkcs.createReferenceEnvElement(root); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(); + + Document sign = cpkcs.returnSig(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + /*String erg = "Dies sind Testdaten" + + "</XMLContent>\n" + + " </HashInputData>\n" + + " <HashInputData>\n" + + "<XMLContent xml:space=\"preserve\">" + + readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt"); */ + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(),testNumber,"0","Dies sind Testdaten",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt"))); + } + + /** + * Method create320: + * The element KeyInfo does NOT contain the X509-certificate but + * an URI pointing to an external xml-encoded X509-file + * @throws Exception + */ + public void create320() throws Exception { + String testNumber = "320"; + + //RetrievalMethdos instead of the integratede Keys + + //URI fileURI = new URI(configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der"); + URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml"); + URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data"); + //URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate"); + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(false, fileURI, typeURI, null); + + Document sign = cpkcs.returnSig(); + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml"),testNumber,"0")); + } + +public void create320_2() throws Exception { + String testNumber = "320_2"; + + //RetrievalMethdos instead of the integratede Keys + + //URI fileURI = new URI(configuration_.getProperty("baseDir") + "resources/test-ee2003_normal.der"); + URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/TEMPX509Data.xml"); + URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#X509Data"); + //URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate"); + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(false, fileURI, typeURI, null); + +// Supplement supp = new Supplement(); + +// supp.addXMLContent(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml",readFileCR(configuration_.getProperty("webbaseDir") + "resources/X509Data.xml")); +// supp.closeSupplement(); + Document sign = cpkcs.returnSig(); + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,true,configuration_.getProperty("webbaseDir") + "resources/TEMPX509Data.xml")); + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml"),testNumber,"0")); + } + + + /** + * Method create321. + * The element KeyInfo does NOT contain the X509-certificate but + * an URI pointing to an external raw X509-file + * @throws Exception + */ + public void create321() throws Exception { + String testNumber = "321"; + + //RetrievalMethdos instead of the integratede Keys + + URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/test-ee2003_normal.der"); + URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate"); + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + cpkcs.setKeyInformation(false, fileURI, typeURI, null); + Document sign = cpkcs.returnSig(); String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + writeFile(vxResFile(testNumber), createResponse(readFileCR(configuration_.getProperty("webbaseDir") + "resources/SignatureVX005Cert.xml"),testNumber,"0")); + } + + + /** + * Method create322. + * The reference in the signature points with an xpointer + * to the ID of an embedded valid manifest dsig:object + * @throws Exception + */ +public void create322() throws Exception { + String testNumber = "322"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + Element elem = cpkcs.createReferenceWithManifest(fileURI1,"manifestObject"); + + cpkcs.setKeyInformation(); + Document sign = cpkcs.returnSig(); String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + + String response = createResponsePart(cpkcs.getX509CertString()) + + "<HashInputData><Base64Content>"+ + Base64Utils.encode(stripNLCR(convertManifestToString(elem)).getBytes()) + + "</Base64Content></HashInputData>"+ + vxBean.createSignatureCheck("0")+ + vxBean.createXMLDSIGManifestCheck("0","","1")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + writeFile(vxResFile(testNumber), response); + } + /** + * Method create323: + * There are two references in the signature pointing + * with xpointer to two embedded valid manifest dsig:objects + * @throws Exception + */ + public void create323() throws Exception { + String testNumber = "323"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt"); + Element man1 = cpkcs.createReferenceWithManifest(fileURI1,"manifestObject"); + + //HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...??? + + Element man2 = cpkcs.createReferenceWithManifest(fileURI2,"manifestObject2"); + cpkcs.setKeyInformation(); + Document sign = cpkcs.returnSig(); + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(cpkcs.getX509CertString()) + + "<HashInputData><Base64Content>"+ + Base64Utils.encode(stripNLCR(convertManifestToString(man1)).getBytes()) + + "</Base64Content></HashInputData>"+ + "<HashInputData><Base64Content>"+ + Base64Utils.encode(stripNLCR(convertManifestToString(man2)).getBytes()) + + "</Base64Content></HashInputData>"+ + vxBean.createSignatureCheck("0")+ + vxBean.createXMLDSIGManifestCheck("0","","1")+ + vxBean.createXMLDSIGManifestCheck("0","","2")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + writeFile(vxResFile(testNumber), response); + + } + public void create324() throws Exception { + String testNumber = "324"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + URI fileURI1 = new URI(configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + URI fileURI2 = new URI(configuration_.getProperty("webbaseDir") + "resources/testXML.txt"); + Element man = cpkcs.createReferencesWithManifest(fileURI1,"manifestObject",fileURI2); + + //HINWEIS: Durch das 2malige Aufrufen wird ein WEITERES dsig:Object ELEMENT erzeugt... darf das so sein...??? + cpkcs.setKeyInformation(); + Document sign = cpkcs.returnSig(); + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + sign, + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(cpkcs.getX509CertString()) + + "<HashInputData><Base64Content>"+ + Base64Utils.encode(stripNLCR(convertManifestToString(man)).getBytes()) + + "</Base64Content></HashInputData>"+ + vxBean.createSignatureCheck("0")+ + vxBean.createXMLDSIGManifestCheck("0","","1")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + writeFile(vxResFile(testNumber), response); + + } + + /** + * Method create325. + * @throws Exception + */ + public void create325() throws Exception { + String testNumber = "325"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + + Element mani = cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject"); + cpkcs.createEnvelopedDataObject("envelopedData",readFile(configuration_.getProperty("baseDir")+"resources/testSimple.txt")); + + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + String response = createResponsePart(cpkcs.getX509CertString()) + + "<HashInputData><Base64Content>"+ + Base64Utils.encode(stripNLCR(convertManifestToString(mani)).getBytes()) + + "</Base64Content></HashInputData>"+ + vxBean.createSignatureCheck("0")+ + vxBean.createXMLDSIGManifestCheck("1","1","1")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + writeFile(vxResFile(testNumber), response); + } + + public void create326() throws Exception { + String testNumber = "326"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + + Element mani = cpkcs.createReferenceWithManifest(new URI("#xpointer(id('envelopedData')/node())"),"manifestObject"); + cpkcs.createEnvelopedDataObject("envelopedData",readFileCR(configuration_.getProperty("baseDir")+"resources/testSimple.txt")); + + cpkcs.setKeyInformation(); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(false,false,null)); + + request = replaceString(request,"<dsig:Object Id=\"envelopedData\">","<dsig:Object Id=\"envelopedData\">Dies sind veraenderte Daten und die Ursprungsdaten: \n"); + + writeFile(vxReqFile(testNumber),request); + + String response = createResponsePart(cpkcs.getX509CertString()) + + vxBean.createSignatureCheck("0")+ + vxBean.createXMLDSIGManifestCheck("1","1","1")+ + vxBean.createCertificateCheck("0")+ + "</VerifyXMLSignatureResponse>"; + + + writeFile(vxResFile(testNumber), response); + } + + /** + * Method create327: The certificate comes as raw data and is converted to a dsig:object with + * base64-data, the KeyInfo has a retrievalMethod pointing to that object and transforming the + * data back to raw-data for using that to create the signature + * @throws Exception + */ + public void create327() throws Exception { + + String testNumber = "327"; + + URI fileURI = new URI(configuration_.getProperty("webbaseDir") + "resources/test-ee2003_normal.der"); + URI typeURI = new URI("http://www.w3.org/2000/09/xmldsig#rawX509Certificate"); + + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init(); + cpkcs.setCanoncialization(canAlgCanXML); + + cpkcs.createReference(false,configuration_.getProperty("webbaseDir") + "resources/testSimple.txt"); + + //DER-encoded RAW-Zertifikat zu Binary64 konvertieren + + //String tmp = readBinaryFileAsBase64(fileURI.getPath()); : Funktioniert nicht mehr wegen http-addi + + //dsig:Object mit den Binary64-Daten erzeugen (==> CRs weglassen!!!!!) + cpkcs.createEnvelopedDataObject("rawCertAsBase64",readFileCR(fileURI.toString()+"base64.enc")); + + //Neue Transformation erzeugen, um die Base64-Daten zurückzuwandeln + Transform[] tr = new Transform[1]; + tr[0] = new TransformImplBase64Decode(); + InputStream s = getHttpInputStream(fileURI.toString() + "base64.enc"); + tr[0].setInput(s,null); + + //Neues KeyInfo-Objekt erzeugen, wobei nicht die Zertifikate sondern + //nur eine RetrievalMethod angegeben wird, die auf das oben erzeugte Base64-dsig:Object verweist + cpkcs.setKeyInformation(true, new URI("#xpointer(id('rawCertAsBase64')/node())") , typeURI, tr); + + String request = + makeOutputFile( + createRequestStart(testNumber,true,0), + cpkcs.returnSig(), + createRequestEnd(true,false,null)); + + writeFile(vxReqFile(testNumber),request); + + cpkcs.setKeyInformation(1); + + writeFile(vxResFile(testNumber), createResponse(cpkcs.getX509CertString(), testNumber,"0")); + } + + /** + * Method makeOutputFile. + * @param start + * @param signatureDoc + * @param end + * @return String + * @throws Exception + */ + public String makeOutputFile( + String start, + Document signatureDoc, + String end) + throws Exception { + ArrayList foundNodes = new ArrayList(); + findNode( + signatureDoc.getDocumentElement(), + "dsig:Signature", + foundNodes); + + Node outputNode = null; + + if (foundNodes.size() > 0) { + outputNode = (Node) foundNodes.get(0); + } + + String erg = Node2String(outputNode); + + // remove the <?xml ?> Prologue + int pos = erg.indexOf("<dsig"); + erg = erg.substring(pos); + + // insert the dsig:signature element in a MOA Response Message + erg = start + erg + end; + + return erg; + } + + /** + * Method createRequestStart. + * @param testNumber + * @param useDate + * @param changeHours + * @return String + */ + private String createRequestStart(String testNumber, boolean useDate, int changeHours) +{ + return createRequestStart(testNumber, useDate,changeHours,""); + +} + + private String createRequestStart(String testNumber, boolean useDate, int changeHours, String attribut) + { + return createRequestStart(testNumber, useDate,changeHours,attribut,""); + } + private String createRequestStart(String testNumber, boolean useDate, int changeHours, String attribut,String dtd) + {String reqStart = null; + System.out.println("======================================================"); + System.out.println("================== TEST-NUMBER "+ testNumber + " ==================="); + System.out.println("======================================================"); + + reqStart = + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + + "<!-- Testnumber: " + + testNumber + + "-->\n"; + + if(dtd!=null && !dtd.trim().equals("")) + reqStart += dtd; + + reqStart+= "<VerifyXMLSignatureRequest\n" + + " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n" + + " xmlns:xml=\"http://www.w3.org/XML/1998/namespace\"" + + " xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">\n"; + + if (useDate) { + reqStart += " <DateTime>" + + getDate(changeHours) + + "</DateTime>\n"; + } + + reqStart += " <VerifySignatureInfo>\n" + + " <VerifySignatureEnvironment "+attribut+">\n" + + " <XMLContent xml:space=\"preserve\">" ; + return reqStart; + } + + /** + * Method getTransformsResult:the input transforms array will + * be calculated to return a string-representation of the result + * @param tr + * @return String + * @throws Exception + */ + private String getTransformsResult(Transform[] tr) throws Exception + { + Transform[] myTransforms = tr; + String result = ""; + for (int t=0; t<tr.length-1; t++) + { + myTransforms[t+1].setInput((InputStream)myTransforms[t].transform(),null); + } + ByteArrayInputStream is = (ByteArrayInputStream)myTransforms[tr.length-1].transform(); + byte[] b = new byte[1]; + is.read(b); + while (is.available() > 0) + { + result += new String(b); + is.read(b); + } + result += new String(b); + + return result; + } + + + /** + * Method createRequestEnd. + * @param useReturnHashInputData + * @param useSupplement + * @param supplementReference + * @return String + * @throws Exception + */ + private String createRequestEnd( + boolean useReturnHashInputData, + boolean useSupplement, + String supplementReference) + throws Exception { + + String reqEnd = null; + +/* reqEnd = + "</VerifySignatureEnvironment>\n" + + " <VerifySignatureLocation>#xpointer(/VerifyXMLSignatureRequest/VerifySignatureInfo/VerifySignatureEnvironment/dsig:Signature)</VerifySignatureLocation>\n" + + " </VerifySignatureInfo>\n"; +*/ + reqEnd ="</XMLContent>"+ + "</VerifySignatureEnvironment>\n" + + " <VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>\n" + + " </VerifySignatureInfo>\n"; + + + + if (useSupplement) + { + reqEnd += " <SupplementProfile>\n" + + " <Content Reference=\"" + supplementReference.toString() + "\">\n" + + " <XMLContent xml:space=\"preserve\">"+readFileCR(supplementReference.toString())+"</XMLContent>\n" + + " </Content>\n" + + " </SupplementProfile>\n"; + } + + if (useReturnHashInputData) { + reqEnd += " <ReturnHashInputData/>\n"; + } + reqEnd += " <TrustProfileID>TrustProfile1</TrustProfileID>\n" + + "</VerifyXMLSignatureRequest>\n"; + return reqEnd; + + } + + private String createSignatureInfoEnd() + throws Exception { + + return "</XMLContent>"+"</VerifySignatureEnvironment>\n" + + " <VerifySignatureLocation>//dsig:Signature</VerifySignatureLocation>\n" + + " </VerifySignatureInfo>\n"; + + } + + private String createRequestShortEnd(boolean useReturnHashInputData) + throws Exception { + + String reqEnd = ""; + + if (useReturnHashInputData) + reqEnd = " <ReturnHashInputData/>\n"; + + reqEnd += " <TrustProfileID>TrustProfile1</TrustProfileID>\n" + + "</VerifyXMLSignatureRequest>\n"; + return reqEnd; + + } + /** + * Method createResponse. + * @param testNumber + * @param signatureCheckCode + * @return String + * @throws Exception + */ + private String createResponse(String x509cert, String testNumber, String signatureCheckCode) throws Exception { + // + vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal_extract.cer"); + + String res = null; + + res = vxBean.getHeader(); + res += vxBean.getSubjectDN(); + res += " <dsig:X509IssuerSerial>\n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " </dsig:X509IssuerSerial>\n" + + x509cert + + " </dsig:X509Data>\n" + + " </SignerInfo>\n"; + res += " <HashInputData>\n" + " "; + /*res += "<XMLContent xml:space=\"preserve\">"+readFileCR( + configuration_.getProperty("baseDir") + + "resources/testSimple.txt")+ + "</XMLContent>";*/ + res += "<Base64Content>"+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ "resources/testSimple.txt"))+"</Base64Content>"; + + res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0"); + + return res; + } + + private String createResponseL(String x509cert, String testNumber, String signatureCheckCode,String filename) throws Exception { + // + vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal_extract.cer"); + + String res = null; + + res = vxBean.getHeader(); + res += vxBean.getSubjectDN(); + res += " <dsig:X509IssuerSerial>\n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " </dsig:X509IssuerSerial>\n" + + x509cert + + " </dsig:X509Data>\n" + + " </SignerInfo>\n"; + + res += replaceString(vxBean.getFooterSignatureCheck(signatureCheckCode, "0"),"</HashInputData>",""); + + return res; + } + + private String createResponse(String x509cert, String testNumber, String signatureCheckCode,int code) throws Exception { + // + vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal_extract.cer"); + + String res = null; + + res = vxBean.getHeader(); + res += vxBean.getSubjectDN(); + res += " <dsig:X509IssuerSerial>\n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " </dsig:X509IssuerSerial>\n" + + x509cert + + " </dsig:X509Data>\n" + + " </SignerInfo>\n"; + res += " <SignatureCheck>\n" + + " <Code>1</Code><Info><FailedReference>1</FailedReference></Info>\n" + + " </SignatureCheck>\n" + + " <CertificateCheck>\n" + + " <Code>0</Code>\n" + + " </CertificateCheck>\n" + + "</VerifyXMLSignatureResponse>";; + + return res; + } + + + /** + * Method createResponse. + * @param testNumber + * @param signatureCheckCode + * @return String + * @throws Exception + */ + private String createResponse(String x509cert, String testNumber, String signatureCheckCode,int code,String filename) throws Exception { + // + vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal_extract.cer"); + + String res = null; + + res = vxBean.getHeader(); + res += vxBean.getSubjectDN(); + res += " <dsig:X509IssuerSerial>\n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " </dsig:X509IssuerSerial>\n" + + x509cert + + " </dsig:X509Data>\n" + + " </SignerInfo>\n"; + res += " <HashInputData>\n" + " "; + /*res += "<XMLContent xml:space=\"preserve\">"+readFileCR( + configuration_.getProperty("baseDir") + + "resources/testSimple.txt")+ + "</XMLContent>";*/ + if(filename.startsWith("text:")) + res += "<Base64Content>"+Base64Utils.encode(filename.substring(5).getBytes())+"</Base64Content>"; + else + res += "<Base64Content>"+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ filename))+"</Base64Content>"; + + res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0"); + + return res; + } + +/** + * Method createResponse. + * @param testNumber + * @param signatureCheckCode + * @return String + * @throws Exception + */ + private String createResponse(String x509cert, String testNumber, String signatureCheckCode,String iss,String subject,String serial) throws Exception { + // + vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal_extract.cer"); + + String res = null; + + res = vxBean.getHeader(); + res += subject; + res += " <dsig:X509IssuerSerial>\n"; + res += iss; + res += serial; + res += " </dsig:X509IssuerSerial>\n" + + x509cert + + " </dsig:X509Data>\n" + + " </SignerInfo>\n"; + res += " <HashInputData>\n" + " "; + /*res += "<XMLContent xml:space=\"preserve\">"+readFileCR( + configuration_.getProperty("baseDir") + + "resources/testSimple.txt")+ + "</XMLContent>";*/ + res += "<Base64Content>"+readBinaryFileAsBase64_new((configuration_.getProperty("baseDir")+ "resources/testSimple.txt"))+"</Base64Content>"; + + res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0"); + + return res; + } + + + private String createResponse(String x509cert, String testNumber, String signatureCheckCode, String hashData) throws Exception { + // + vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der"); + + String res = null; + + res = vxBean.getHeader(); + res += vxBean.getSubjectDN(); + res += " <dsig:X509IssuerSerial>\n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " </dsig:X509IssuerSerial>\n" + + x509cert + + " </dsig:X509Data>\n" + + " </SignerInfo>\n"; + res += " <HashInputData>\n"; + /* " <XMLContent xml:space=\"preserve\">"+ + hashData + + "</XMLContent>\n";*/ + res += "<Base64Content>"+Base64Utils.encode(hashData.getBytes())+"</Base64Content>"; + System.out.println(res); + res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0"); + System.out.println(res); + + return res; + } + + private String createResponse(String x509cert, String testNumber, String signatureCheckCode, String hashData,String hashData2) throws Exception { + // + vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der"); + + String res = null; + + res = vxBean.getHeader(); + res += vxBean.getSubjectDN(); + res += " <dsig:X509IssuerSerial>\n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " </dsig:X509IssuerSerial>\n" + + x509cert + + " </dsig:X509Data>\n" + + " </SignerInfo>\n"; + res += " <HashInputData>\n"; + /* " <XMLContent xml:space=\"preserve\">"+ + hashData + + "</XMLContent>\n";*/ + res += "<Base64Content>"+Base64Utils.encode(hashData.getBytes())+"</Base64Content>"; + res += "</HashInputData><HashInputData>"; + res += "<Base64Content>"+Base64Utils.encode(hashData2.getBytes())+"</Base64Content>"; + res += vxBean.getFooterSignatureCheck(signatureCheckCode, "0"); + + return res; + } + + private String createResponseWithoutHashInputData(String x509cert, String testNumber, String signatureCheckCode,boolean dsig) throws Exception { + // + vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der"); + + String res = null; + + res = vxBean.getHeader(); + res += vxBean.getSubjectDN(); + res += " <dsig:X509IssuerSerial>\n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " </dsig:X509IssuerSerial>\n" + + x509cert + + " </dsig:X509Data>\n" + + " </SignerInfo>\n" + + " <SignatureCheck>\n" + + " <Code>" + signatureCheckCode + "</Code>\n" + + " </SignatureCheck>\n"; + + if(dsig) res+=vxBean.createXMLDSIGManifestCheck("0","","1"); + res+= " <CertificateCheck>\n" + + " <Code>0</Code>\n" + + " </CertificateCheck>\n" + + "</VerifyXMLSignatureResponse>"; + + return res; + } + + private String createResponseWithoutHashInputData(String x509cert, String testNumber, String signatureCheckCode) throws Exception { + // + vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der"); + + String res = null; + + res = vxBean.getHeader(); + res += vxBean.getSubjectDN(); + res += " <dsig:X509IssuerSerial>\n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " </dsig:X509IssuerSerial>\n" + + x509cert + + " </dsig:X509Data>\n" + + " </SignerInfo>\n" + + " <SignatureCheck>\n" + + " <Code>" + signatureCheckCode + "</Code>\n" + + " </SignatureCheck>\n" + + " <CertificateCheck>\n" + + " <Code>0</Code>\n" + + " </CertificateCheck>\n" + + "</VerifyXMLSignatureResponse>"; + + return res; + } + + private String createResponsePart(String x509cert) throws Exception { + + // + vxBean.init(configuration_.getProperty("webbaseDir")+ "resources/" + "test-ee2003_normal.der"); + + String res = null; + + res = vxBean.getHeader(); + res += vxBean.getSubjectDN(); + res += " <dsig:X509IssuerSerial>\n"; + res += vxBean.getIssuerDN(); + res += vxBean.getSerialNumber(); + res += " </dsig:X509IssuerSerial>\n"; + + res +=x509cert; + + res += " </dsig:X509Data>\n" + + " </SignerInfo>\n"; + /*res += " <HashInputData>\n" + " <XMLContent>"; + res += readFile( + configuration_.getProperty("baseDir") + + "resources/testSimple.txt"); + */ + //res += vxBean.getFooterXMLDSIGManifestCheck(xmlDSIGManifestCheckCode,"0"); + + return res; + } + + public String readFileCR(String filename) throws Exception { + + /*StringBuffer data = new StringBuffer(); + String line = null; + BufferedReader br = new BufferedReader(new FileReader(filename)); + while ((line = br.readLine()) != null) { + data.append(line); + data.append("\n"); + } + */ + String response=""; + byte[] result; + + if (filename.substring(0,4).toLowerCase().equals("http")) + { + + URL targetUrl = new URL(filename); + HttpURLConnection h = (HttpURLConnection)targetUrl.openConnection(); + InputStream is = h.getInputStream(); + + int size = 0; + + result = new byte[h.getContentLength()]; + for (int i = 0; i < result.length; i++) { + byte[] b = new byte[1]; + is.read(b); + result[i]=b[0]; + } + is.close(); + } + else + { + RandomAccessFile raf = new RandomAccessFile(filename, "r"); + if (raf.length() > Integer.MAX_VALUE) + throw new IOException("file too big to fit in byte array."); + + result = new byte[(int) raf.length()]; + raf.read(result); + raf.close(); + + } + + byte[] temp = new byte[result.length]; + int s = 0; + for (int t=0; t<result.length; t++) + { + temp[s] = result[t]; + s++; + if (temp[s-1]==10) + { + if (temp[s-2]==13) + { + temp[s-2]=10; + s--; + } + } + } + byte[] res = new byte[s]; + result = null; + + System.arraycopy(temp,0,res,0,s); + + + response = new String(res); + + try { + response = replaceString(response,"<?xml version=\"1.0\" encoding=\"utf-8\"?>",""); + } + catch (Exception e) {} + + return response; + } + +private InputStream getHttpInputStream(String url) throws Exception + { + URL targetUrl = new URL(url); + HttpURLConnection h = (HttpURLConnection)targetUrl.openConnection(); + return h.getInputStream(); + } + +private String convertManifestToString(Element e) throws Exception + { + String result =(new DOMWriterImpl(true)).writeToString(e); + result = replaceString(result,"<?xml version=\"1.0\"?>",""); + result = replaceStringAll(result,"'","'"); + result = replaceStringAll(result,"#sha1\"/><dsig:","#sha1\"></dsig:DigestMethod><dsig:"); + + //result = replaceString(result," xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\"",""); + return result; + } + + private String stripNLCR(String input) + { + String output = replaceStringAll(input,"\n",""); + output = replaceStringAll(output,"\r",""); + return output; + } + + public static String replaceStringAll( + String input, + String oldPart, + String newPart) + { + + String erg = null; + + int pos = input.indexOf(oldPart); + if(pos==-1) return input; + + while(true) + { + + //First Part + pos = input.indexOf(oldPart); + if(pos==-1) break; + erg = input.substring(0, pos); + + //Insert new Part + erg += newPart; + + //insert REST + erg + += input.substring( + input.indexOf(oldPart) + oldPart.length(), + input.length()); + + input = erg; + } + return erg; + } + + +} + |