diff options
author | gregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d> | 2003-11-11 22:36:36 +0000 |
---|---|---|
committer | gregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d> | 2003-11-11 22:36:36 +0000 |
commit | 643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc (patch) | |
tree | 9e750c9103ad923b291820bc85fcbd669c2e7900 /spss.test/src/testgenerator/TestGeneratorFeature41.java | |
parent | bc620256eb9b4dc6a33244b1105e58773358dbe6 (diff) | |
download | moa-id-spss-643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc.tar.gz moa-id-spss-643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc.tar.bz2 moa-id-spss-643b4096cdd0f0ed98f21c9b5b681ed89bcb08dc.zip |
Erstellt.tags/Build-1.2.0.D01-svn
git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@51 d688527b-c9ab-4aba-bd8d-4036d912da1d
Diffstat (limited to 'spss.test/src/testgenerator/TestGeneratorFeature41.java')
-rw-r--r-- | spss.test/src/testgenerator/TestGeneratorFeature41.java | 1167 |
1 files changed, 1167 insertions, 0 deletions
diff --git a/spss.test/src/testgenerator/TestGeneratorFeature41.java b/spss.test/src/testgenerator/TestGeneratorFeature41.java new file mode 100644 index 000000000..7ecb28449 --- /dev/null +++ b/spss.test/src/testgenerator/TestGeneratorFeature41.java @@ -0,0 +1,1167 @@ +package testgenerator; + +import iaik.ixsil.algorithms.CanonicalizationAlgorithmImplCanonicalXML; +import iaik.ixsil.algorithms.DigestAlgorithmImplSHA1; +import iaik.ixsil.algorithms.SignatureAlgorithmImplRSA; +import iaik.ixsil.algorithms.Transform; +import iaik.ixsil.algorithms.TransformImplBase64Decode; +import iaik.ixsil.algorithms.TransformImplEnvelopedSignature; +import iaik.ixsil.algorithms.TransformImplXSLT; +import iaik.ixsil.core.Position; +import iaik.ixsil.core.Signer; +import iaik.ixsil.core.SignerManifest; +import iaik.ixsil.core.SignerReference; +import iaik.ixsil.core.SignerSignature; +import iaik.ixsil.core.SignerSignedInfo; +import iaik.ixsil.init.IXSILConstants; +import iaik.ixsil.keyinfo.KeyManagerImpl; +import iaik.ixsil.keyinfo.x509.KeyProviderImplX509Data; +import iaik.ixsil.keyinfo.x509.X509Data; +import iaik.ixsil.util.URI; + +import iaik.pkcs.pkcs12.PKCS12; +import iaik.utils.Base64OutputStream; + +import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.security.cert.X509Certificate; +import java.security.interfaces.RSAPrivateKey; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.w3c.dom.Document; +import org.w3c.dom.DocumentFragment; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.Text; + +import at.gv.egovernment.moa.util.Base64Utils; +import at.gv.egovernment.moa.util.Constants; +import at.gv.egovernment.moa.util.DOMUtils; +import at.gv.egovernment.moa.util.EntityResolverChain; +import at.gv.egovernment.moa.util.MOAEntityResolver; +import at.gv.egovernment.moa.util.MOAErrorHandler; +import at.gv.egovernment.moa.util.StreamEntityResolver; + +/** + * @author Gregor Karlinger + */ +public class TestGeneratorFeature41 extends TestCases +{ + + String datadirectory = "data/feature41/"; + + public static void main(String[] args) throws Exception + { + TestGeneratorFeature41 testcase = new TestGeneratorFeature41(); + + testcase.create001(); + testcase.create002(); + testcase.create003(); + testcase.create004(); + testcase.create005(); + } + + /* ==================================================================================================== */ + + public TestGeneratorFeature41() throws Exception + { + + super(); + + // Set config properties + configuration_.setProperty("TestClass", "TestGeneratorFeature41"); + + iaik.security.provider.IAIK.addAsJDK14Provider(); + iaik.security.ecc.provider.ECCProvider.addAsProvider(); + } + + /* ---------------------------------------------------------------------------------------------------- */ + + public Document createPKCS12Sig( + String TestNumber, + String data, + boolean env, + boolean mani, + String data2, + boolean env2) + throws Exception + { + String resFile = + configuration_.getProperty("baseDir") + + datadirectory + + configuration_.getProperty("TestClass") + + "." + + TestNumber + + ".Res.xml"; + + PKCS12 pkcs12 = + decryptPKCS12(configuration_.getProperty("PKCS12file"), configuration_.getProperty("PKCS12password")); + + // Create signature generator + URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_); + Signer signer = new Signer(baseURI); + + // Configure signed information + + // Get interface for signed information + SignerSignature signature = signer.getSignature(); + SignerSignedInfo signedInfo = signer.getSignature().getSignerSignedInfo(); + + // Set canonicalization algorithm + CanonicalizationAlgorithmImplCanonicalXML c14nAlg = new CanonicalizationAlgorithmImplCanonicalXML(); + signedInfo.setCanonicalizationAlgorithm(c14nAlg); + + // Set signature algorithm + SignatureAlgorithmImplRSA signatureAlg = new SignatureAlgorithmImplRSA(); + RSAPrivateKey privateKey = getPrivateKey(pkcs12); + signatureAlg.setSignerKey(privateKey); + signedInfo.setSignatureAlgorithm(signatureAlg); + + if (!mani) + { + SignerReference reference = signedInfo.createReference(); + if (env) + { + iaik.ixsil.core.Object object = null; + //object = signature.createObject(data); + if (data.startsWith("<xml")) + { + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = db.parse(new ByteArrayInputStream(data.getBytes())); + + object = signature.createObject(doc.getDocumentElement()); + } + else if (data.startsWith("<Testdaten")) + { + + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = + db.parse( + new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + data).getBytes())); + + object = signature.createObject(doc.getDocumentElement()); + } + else if (data.startsWith("b64:")) + { + data = data.substring(4); + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = db.newDocument(); + Element root = doc.createElement("root"); + doc.appendChild(root); + //String encoded = Base64Utils.encode(data.getBytes()); + String encoded = Base64Utils.encode(data.getBytes()); + /*encoded = replaceStringAll(encoded,"\n",""); + encoded = replaceStringAll(encoded,"\r","");*/ + Text textnode = doc.createTextNode(encoded); + + System.out.println("Encoded:" + encoded); + //root.appendChild(textnode); + + DocumentFragment df = doc.createDocumentFragment(); + + df.appendChild(textnode); + + object = signature.createObject(df); + + TransformImplBase64Decode trans = new TransformImplBase64Decode(); + InputStream s = new ByteArrayInputStream(encoded.getBytes()); + trans.setInput(s, null); + + reference.insertTransformAt(trans, 0); + } + else + { + object = signature.createObject(data); + } + + object.setId("signed-data-1-1-1"); + signature.addObject(object); + + DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1(); + reference.setDigestAlgorithm(digestAlg); + + reference.setURI(new URI("#xpointer(id('signed-data-1-1-1')/node())")); + + } + else + { + // Create and configure reference + URI refURI = null; + String baseDir = configuration_.getProperty("baseDir"); + refURI = new URI(data); + + reference.setURI(refURI); + DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1(); + reference.setDigestAlgorithm(digestAlg); + } + reference.setId("reference-1-1"); + signedInfo.addReference(reference); + } + + if (data2 != null) + { + SignerReference reference = signedInfo.createReference(); + reference = signedInfo.createReference(); + if (env2) + { + iaik.ixsil.core.Object object = null; + if (data2.startsWith("<xml")) + { + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = db.parse(new ByteArrayInputStream(data.getBytes())); + + object = signature.createObject(doc.getDocumentElement()); + } + else if (data2.startsWith("<Testdaten")) + { + + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = + db.parse( + new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + data).getBytes())); + + object = signature.createObject(doc.getDocumentElement()); + } + else + object = signature.createObject(data2); + + if (!env) + object.setId("signed-data-1-2-1"); + else + object.setId("signed-data-1-2-1"); + signature.addObject(object); + + DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1(); + reference.setDigestAlgorithm(digestAlg); + + if (!env) + reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())")); + else + reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())")); + } + else + { + // Create and configure reference + URI refURI = null; + String baseDir = configuration_.getProperty("baseDir"); + refURI = new URI(data2); + + reference.setURI(refURI); + DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1(); + reference.setDigestAlgorithm(digestAlg); + } + reference.setId("reference-1-2"); + signedInfo.addReference(reference); + } + + // Add reference to signature + + if (mani) + { + + /*iaik.ixsil.core.Object object = null; + if(env) + object = signature.createObject(readFile(data)); + else + object = signature.createObject(data); + + object.setId("envelopedData"); + signature.addObject(object);*/ + SignerReference reference = signedInfo.createReference(); + SignerManifest manifest = signer.createManifest(); + SignerReference manifestRef = manifest.createReference(); + + DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1(); + manifestRef.setDigestAlgorithm(digestAlg); + + manifestRef.setURI(new URI(data)); + manifestRef.setId("reference-1-1"); + + manifest.addReference(manifestRef); + manifest.setId("dsig-manifest-1-1"); + iaik.ixsil.core.Object manifestObject = signature.createObject(manifest); + signature.addObject(manifestObject); + manifest.computeDigestValues(); + + reference = signedInfo.createReference(); + reference.setURI(new URI("#dsig-manifest-1-1")); + reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_)); + reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1()); + + // Add reference to signature + signedInfo.addReference(reference); + + /*Element envelopedDataElem = + signer.toDocument().createElement("EnvelopedDataElement"); + + if(env) + { + envelopedDataElem.appendChild( + signer.toDocument().createTextNode(readFile(data))); + } + else + { + envelopedDataElem.appendChild( + signer.toDocument().createTextNode(data)); + } + + iaik.ixsil.core.Object object = signature.createObject(envelopedDataElem); + signature.addObject(object); + + // Create Manifest with a single reference pointing to the enveloped data + SignerManifest manifest = signer.createManifest(); + SignerReference manifestRef = manifest.createReference(); + manifestRef.setURI( + new URI( + null, + null, + null, + null, + "xmlns(dsig=" + + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_ + + ") " + + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[1]/descendant::node())")); + manifestRef.setDigestAlgorithm(new DigestAlgorithmImplSHA1()); + manifest.addReference(manifestRef); + + // Add Manifest to signature structure (use an Object) and compute digest values for manifest reference + iaik.ixsil.core.Object manifestObject = signature.createObject(manifest); + signature.addObject(manifestObject); + manifest.computeDigestValues(); + + // Create and configure reference to manifest + reference = signedInfo.createReference(); + reference.setURI( + new URI( + null, + null, + null, + null, + "xmlns(dsig=" + + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_ + + ") " + + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[2]/dsig:Manifest)")); + reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_)); + reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1()); + + // Add reference to signature + signedInfo.addReference(reference);*/ + } + + // Create key information + KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument()); + + X509Certificate[] certs = getCertificates(pkcs12); + X509Data x509Data = new X509Data(); + x509Data.insertHintAt(certs[1], 0); + /*for (int i = 0; i < certs.length; i++) + { + + }*/ + + KeyProviderImplX509Data x509DataKeyProvider = new KeyProviderImplX509Data(signer.toDocument()); + x509DataKeyProvider.insertX509DataAt(x509Data, 0); + + // X509Data key information (certificate chain) + keyManager.addKeyProvider(x509DataKeyProvider); + + signer.getSignature().setKeyManager(keyManager); + signer.getSignature().setId("signature-1-1"); + // Compute signature value + signer.getSignature().sign(); + + return signer.toDocument(); + } + + public Document createPKCS12Sig( + String TestNumber, + String data, + boolean env, + boolean mani, + String data2, + boolean env2, + String id1, + String id2) + throws Exception + { + String resFile = + configuration_.getProperty("baseDir") + + datadirectory + + configuration_.getProperty("TestClass") + + "." + + TestNumber + + ".Res.xml"; + + PKCS12 pkcs12 = + decryptPKCS12(configuration_.getProperty("PKCS12file"), configuration_.getProperty("PKCS12password")); + + // Create signature generator + URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_); + Signer signer = new Signer(baseURI); + + // Configure signed information + + // Get interface for signed information + SignerSignature signature = signer.getSignature(); + SignerSignedInfo signedInfo = signer.getSignature().getSignerSignedInfo(); + + // Set canonicalization algorithm + CanonicalizationAlgorithmImplCanonicalXML c14nAlg = new CanonicalizationAlgorithmImplCanonicalXML(); + signedInfo.setCanonicalizationAlgorithm(c14nAlg); + + // Set signature algorithm + SignatureAlgorithmImplRSA signatureAlg = new SignatureAlgorithmImplRSA(); + RSAPrivateKey privateKey = getPrivateKey(pkcs12); + signatureAlg.setSignerKey(privateKey); + signedInfo.setSignatureAlgorithm(signatureAlg); + + if (!mani) + { + SignerReference reference = signedInfo.createReference(); + if (env) + { + iaik.ixsil.core.Object object = null; + //object = signature.createObject(data); + if (data.startsWith("<xml")) + { + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = db.parse(new ByteArrayInputStream(data.getBytes())); + + object = signature.createObject(doc.getDocumentElement()); + } + else if (data.startsWith("<Testdaten")) + { + + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = + db.parse( + new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + data).getBytes())); + + object = signature.createObject(doc.getDocumentElement()); + } + else if (data.startsWith("b64:")) + { + data = data.substring(4); + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = db.newDocument(); + Element root = doc.createElement("root"); + doc.appendChild(root); + //String encoded = Base64Utils.encode(data.getBytes()); + String encoded = Base64Utils.encode(data.getBytes()); + /*encoded = replaceStringAll(encoded,"\n",""); + encoded = replaceStringAll(encoded,"\r","");*/ + Text textnode = doc.createTextNode(encoded); + + System.out.println("Encoded:" + encoded); + //root.appendChild(textnode); + + DocumentFragment df = doc.createDocumentFragment(); + + df.appendChild(textnode); + + object = signature.createObject(df); + + TransformImplBase64Decode trans = new TransformImplBase64Decode(); + InputStream s = new ByteArrayInputStream(encoded.getBytes()); + trans.setInput(s, null); + + reference.insertTransformAt(trans, 0); + } + else + { + object = signature.createObject(data); + } + + object.setId("signed-data-1-1-1"); + signature.addObject(object); + + DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1(); + reference.setDigestAlgorithm(digestAlg); + + reference.setURI(new URI("#xpointer(id('signed-data-1-1-1')/node())")); + + } + else + { + // Create and configure reference + URI refURI = null; + String baseDir = configuration_.getProperty("baseDir"); + refURI = new URI(data); + + reference.setURI(refURI); + DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1(); + reference.setDigestAlgorithm(digestAlg); + } + reference.setId("reference-2-1"); + signedInfo.addReference(reference); + } + + if (data2 != null) + { + SignerReference reference = signedInfo.createReference(); + reference = signedInfo.createReference(); + if (env2) + { + iaik.ixsil.core.Object object = null; + if (data2.startsWith("<xml")) + { + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = db.parse(new ByteArrayInputStream(data.getBytes())); + + object = signature.createObject(doc.getDocumentElement()); + } + else if (data2.startsWith("<Testdaten")) + { + + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = + db.parse( + new ByteArrayInputStream(("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + data).getBytes())); + + object = signature.createObject(doc.getDocumentElement()); + } + else + object = signature.createObject(data2); + + if (!env) + object.setId("signed-data-1-2-1"); + else + object.setId("signed-data-1-2-1"); + signature.addObject(object); + + DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1(); + reference.setDigestAlgorithm(digestAlg); + + if (!env) + reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())")); + else + reference.setURI(new URI("#xpointer(id('signed-data-1-2-1')/node())")); + } + else + { + // Create and configure reference + URI refURI = null; + String baseDir = configuration_.getProperty("baseDir"); + refURI = new URI(data2); + + reference.setURI(refURI); + DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1(); + reference.setDigestAlgorithm(digestAlg); + } + reference.setId("reference-1-2"); + signedInfo.addReference(reference); + } + + // Add reference to signature + + if (mani) + { + + /*iaik.ixsil.core.Object object = null; + if(env) + object = signature.createObject(readFile(data)); + else + object = signature.createObject(data); + + object.setId("envelopedData"); + signature.addObject(object);*/ + SignerReference reference = signedInfo.createReference(); + SignerManifest manifest = signer.createManifest(); + SignerReference manifestRef = manifest.createReference(); + + DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1(); + manifestRef.setDigestAlgorithm(digestAlg); + + manifestRef.setURI(new URI(data)); + manifestRef.setId("reference-1-1"); + + manifest.addReference(manifestRef); + manifest.setId("dsig-manifest-1-1"); + iaik.ixsil.core.Object manifestObject = signature.createObject(manifest); + signature.addObject(manifestObject); + manifest.computeDigestValues(); + + reference = signedInfo.createReference(); + reference.setURI(new URI("#dsig-manifest-1-1")); + reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_)); + reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1()); + + // Add reference to signature + signedInfo.addReference(reference); + + /*Element envelopedDataElem = + signer.toDocument().createElement("EnvelopedDataElement"); + + if(env) + { + envelopedDataElem.appendChild( + signer.toDocument().createTextNode(readFile(data))); + } + else + { + envelopedDataElem.appendChild( + signer.toDocument().createTextNode(data)); + } + + iaik.ixsil.core.Object object = signature.createObject(envelopedDataElem); + signature.addObject(object); + + // Create Manifest with a single reference pointing to the enveloped data + SignerManifest manifest = signer.createManifest(); + SignerReference manifestRef = manifest.createReference(); + manifestRef.setURI( + new URI( + null, + null, + null, + null, + "xmlns(dsig=" + + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_ + + ") " + + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[1]/descendant::node())")); + manifestRef.setDigestAlgorithm(new DigestAlgorithmImplSHA1()); + manifest.addReference(manifestRef); + + // Add Manifest to signature structure (use an Object) and compute digest values for manifest reference + iaik.ixsil.core.Object manifestObject = signature.createObject(manifest); + signature.addObject(manifestObject); + manifest.computeDigestValues(); + + // Create and configure reference to manifest + reference = signedInfo.createReference(); + reference.setURI( + new URI( + null, + null, + null, + null, + "xmlns(dsig=" + + IXSILConstants.NAMESPACE_URI_XMLSIGNATURE_ELEM_ + + ") " + + "xpointer(here()/ancestor::dsig:Signature[1]/dsig:Object[2]/dsig:Manifest)")); + reference.setType(new URI(IXSILConstants.REFERENCETYPE_ATTR_VALUE_MANIFEST_)); + reference.setDigestAlgorithm(new DigestAlgorithmImplSHA1()); + + // Add reference to signature + signedInfo.addReference(reference);*/ + } + + // Create key information + KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument()); + + X509Certificate[] certs = getCertificates(pkcs12); + X509Data x509Data = new X509Data(); + x509Data.insertHintAt(certs[1], 0); + /*for (int i = 0; i < certs.length; i++) + { + + }*/ + + KeyProviderImplX509Data x509DataKeyProvider = new KeyProviderImplX509Data(signer.toDocument()); + x509DataKeyProvider.insertX509DataAt(x509Data, 0); + + // X509Data key information (certificate chain) + keyManager.addKeyProvider(x509DataKeyProvider); + + signer.getSignature().setKeyManager(keyManager); + signer.getSignature().setId("signature-2-1"); + // Compute signature value + signer.getSignature().sign(); + + return signer.toDocument(); + } + + /* ---------------------------------------------------------------------------------------------------- */ + + public Element getElement(String data) throws Exception + { + String etsinamespace = "http://uri.etsi.org/01903/v1.1.1#"; + + getX509Content(); + + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + //dbf.setNamespaceAware(true); + //dbf.setValidating(true); + + Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); + + Element qualprop = doc.createElementNS(etsinamespace, "etsi:QualifyingProperties"); + qualprop.setAttributeNS(null, "Target", "#signature-1-1"); + qualprop.setAttributeNS(IXSILConstants.NAMESPACE_URI_NAMESPACES_, "xmlns:etsi", etsinamespace); + //qualprop.setPrefix("etsi");*/ + //qualprop.setAttributeNodeNS(doc.createAttributeNS(etsinamespace,"etsi")); + Element signprop = doc.createElementNS(etsinamespace, "etsi:SignedProperties"); + Element signsigprop = doc.createElementNS(etsinamespace, "etsi:SignedSignatureProperties"); + Element signdataobjectprop = doc.createElementNS(etsinamespace, "etsi:SignedDataObjectProperties"); + Element signdate = doc.createElementNS(etsinamespace, "etsi:SigningTime"); + Text datevalue = doc.createTextNode("2003-05-10T00:01:01"); + Element signcert = doc.createElementNS(etsinamespace, "etsi:SigningCertificate"); + Element cert = doc.createElementNS(etsinamespace, "etsi:Cert"); + Element signpolyident = doc.createElementNS(etsinamespace, "etsi:SignaturePolicyIdentifier"); + Element signpolyimp = doc.createElementNS(etsinamespace, "etsi:SignaturePolicyImplied"); + Element certdig = doc.createElementNS(etsinamespace, "etsi:CertDigest"); + Element digmeth = doc.createElementNS(etsinamespace, "etsi:DigestMethod"); + digmeth.setAttribute("Algorithm", "http://www.w3.org/2000/09/xmldsig#sha1"); + Element digvalue = doc.createElementNS(etsinamespace, "etsi:DigestValue"); + + ByteArrayOutputStream fos = new ByteArrayOutputStream(); + Base64OutputStream base64os = new Base64OutputStream(fos); + base64os.write(this.X509hash.getBytes()); + base64os.flush(); + + Text dig_value = doc.createTextNode(fos.toString()); + Element is = doc.createElementNS(etsinamespace, "etsi:IssuerSerial"); + Element i = doc.createElement("dsig:X509IssuerName"); + Text i_value = doc.createTextNode(this.X509name); + Element s = doc.createElement("dsig:X509SerialNumber"); + Text s_value = doc.createTextNode(this.X509number.toString()); + Element dataobjformat = doc.createElementNS(etsinamespace, "etsi:DataObjectFormat"); + dataobjformat.setAttribute("ObjectReference", "#reference-1-1"); + Element mimetype = doc.createElementNS(etsinamespace, "etsi:MimeType"); + //mimetype.setNodeValue("text/plain"); + Text mimevalue = doc.createTextNode("text/plain"); + + qualprop.appendChild(signprop); + signprop.appendChild(signsigprop); + signsigprop.appendChild(signdate); + signdate.appendChild(datevalue); + signsigprop.appendChild(signcert); + signcert.appendChild(cert); + cert.appendChild(certdig); + certdig.appendChild(digmeth); + certdig.appendChild(digvalue); + digvalue.appendChild(dig_value); + cert.appendChild(is); + is.appendChild(i); + i.appendChild(i_value); + is.appendChild(s); + s.appendChild(s_value); + signsigprop.appendChild(signpolyident); + signpolyident.appendChild(signpolyimp); + signprop.appendChild(signdataobjectprop); + signdataobjectprop.appendChild(dataobjformat); + dataobjformat.appendChild(mimetype); + mimetype.appendChild(mimevalue); + + return qualprop; + } + + /* ---------------------------------------------------------------------------------------------------- */ + + public void create001() throws Exception + { + + String testNumber = "001"; + + String resFile = + configuration_.getProperty("baseDir") + + datadirectory + + configuration_.getProperty("TestClass") + + "." + + testNumber + + ".Res.xml"; + + PKCS12 pkcs12 = + decryptPKCS12(configuration_.getProperty("PKCS12file"), configuration_.getProperty("PKCS12password")); + + // Create signature generator + URI baseURI = new URI(IXSILConstants.DUMMY_ABSURI_); + Signer signer = new Signer(baseURI); + + // Configure signed information + + // Get interface for signed information + SignerSignature signature = signer.getSignature(); + SignerSignedInfo signedInfo = signer.getSignature().getSignerSignedInfo(); + + // Set canonicalization algorithm + CanonicalizationAlgorithmImplCanonicalXML c14nAlg = new CanonicalizationAlgorithmImplCanonicalXML(); + signedInfo.setCanonicalizationAlgorithm(c14nAlg); + + // Set signature algorithm + SignatureAlgorithmImplRSA signatureAlg = new SignatureAlgorithmImplRSA(); + RSAPrivateKey privateKey = getPrivateKey(pkcs12); + signatureAlg.setSignerKey(privateKey); + signedInfo.setSignatureAlgorithm(signatureAlg); + + // Create and configure reference + String baseDir = configuration_.getProperty("baseDir"); + InputStream dataIS = new FileInputStream(baseDir + "resources/documents/testDaten.txt"); + + SignerReference reference = signedInfo.createReference(); + reference.setURI(new URI("testDaten.txt")); + reference.setExplicitData(dataIS, SignerReference.EXPLICITDATATYPE_RAW_); + DigestAlgorithmImplSHA1 digestAlg = new DigestAlgorithmImplSHA1(); + reference.setDigestAlgorithm(digestAlg); + reference.setId("reference-1-1"); + signedInfo.addReference(reference); + + // Create key information + KeyManagerImpl keyManager = new KeyManagerImpl(signer.toDocument()); + + X509Certificate[] certs = getCertificates(pkcs12); + X509Data x509Data = new X509Data(); + x509Data.insertHintAt(certs[1], 0); + KeyProviderImplX509Data x509DataKeyProvider = new KeyProviderImplX509Data(signer.toDocument()); + x509DataKeyProvider.insertX509DataAt(x509Data, 0); + + // X509Data key information (certificate chain) + keyManager.addKeyProvider(x509DataKeyProvider); + + signer.getSignature().setKeyManager(keyManager); + signer.getSignature().setId("signature-1-1"); + // Compute signature value + signer.getSignature().sign(); + + String erg = makeOutputFile(signer.toDocument()); + writeFile(resFile, erg); + } + + /* ---------------------------------------------------------------------------------------------------- */ + + public void create002() throws Exception + { + + String testNumber = "002"; + + String resFile = + configuration_.getProperty("baseDir") + + datadirectory + + configuration_.getProperty("TestClass") + + "." + + testNumber + + ".Res.xml"; + + Document signatureDoc = createPKCS12Sig(testNumber, "b64:Dies sind Testdaten", true, false, null, false); + String erg = makeOutputFile(signatureDoc); + writeFile(resFile, erg); + } + + /* ---------------------------------------------------------------------------------------------------- */ + + public void create003() throws Exception + { + + String testNumber = "003"; + + String resFile = + configuration_.getProperty("baseDir") + + datadirectory + + configuration_.getProperty("TestClass") + + "." + + testNumber + + ".Res.xml"; + + InputStream bis = + new ByteArrayInputStream( + ("<data:Document xmlns:data=\"http://uri.data.org\">" + + readFile(configuration_.getProperty("baseDir") + "resources/documents/testSimple.txt") + + "</data:Document>") + .getBytes()); + + //Document-Builder holen + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + DocumentBuilder builder = factory.newDocumentBuilder(); + //Dokument Parsen + Document reqDoc = builder.parse(bis); + + System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement())); + //Position für die Signatur angeben + String xPath_Pos = "/node()"; + //XPAth-Präfixe deklarieren + String xPath_Prefix = "data xmlns:data=\"http://uri.data.org\""; + Position pos = new Position(xPath_Pos, xPath_Prefix, 0); + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt + cpkcs.init(reqDoc, pos, "signature-1-1"); + cpkcs.setCanoncialization(1); + cpkcs.createReference( + false, + configuration_.getProperty("webbaseDir") + "resources/documents/testSimple.txt", + "reference-1-1"); + cpkcs.setKeyInformation(1); + + Document doc = cpkcs.returnSig(); + + String output = + makeOutputFile( + doc, + "<data:Document xmlns:data=\"http://uri.data.org\">", + cutXML(readFile(configuration_.getProperty("baseDir") + "resources/documents/testSimple.txt")) + + "</data:Document>"); + + writeFile(resFile, output); + } + + /* ---------------------------------------------------------------------------------------------------- */ + + public void create004() throws Exception + { + + String testNumber = "004"; + + String resFile = + configuration_.getProperty("baseDir") + + datadirectory + + configuration_.getProperty("TestClass") + + "." + + testNumber + + ".Res.xml"; + + InputStream bis = + new ByteArrayInputStream( + ("<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://anywhere.org/testDocument.schema.xsd\">Dies sind Testdaten</data:Document>") + .getBytes()); + + //Document-Builder holen + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + factory.setValidating(true); + DocumentBuilder builder = factory.newDocumentBuilder(); + + Map m = new HashMap(); + m.put( + "http://anywhere.org/testDocument.schema.xsd", + new ByteArrayInputStream( + ("<xsd:schema targetNamespace=\"http://uri.data.org\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://uri.data.org\" elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" id=\"tollesSchema\">" + + "<xsd:element name=\"Document\">" + + "<xsd:complexType mixed=\"true\">" + + "<xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">" + + "<xsd:any namespace=\"##any\" processContents=\"lax\"/>" + + "</xsd:sequence>" + + "<xsd:attribute name=\"attr\" type=\"xsd:ID\" use=\"required\"/>" + + "</xsd:complexType>" + + "</xsd:element></xsd:schema>") + .getBytes())); + + EntityResolverChain chain = new EntityResolverChain(); + chain.addEntityResolver(new StreamEntityResolver(m)); + chain.addEntityResolver(new MOAEntityResolver()); + builder.setEntityResolver(chain); + + //Dokument Parsen + Document reqDoc = + DOMUtils.parseDocument(bis, true, Constants.ALL_SCHEMA_LOCATIONS, null, chain, new MOAErrorHandler()); + + System.out.println(DOMUtils.serializeNode(reqDoc.getDocumentElement())); + + //Position für die Signatur angeben + String xPath_Pos = "//data:Document"; + + //XPAth-Prefixe deklarieren + String xPath_Prefix = "data http://uri.data.org"; + + Position pos = new Position(xPath_Pos, xPath_Prefix, 0); + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + //Signer erzeugen, der das obige Doc als Basis nimmt, und die Signatur an der besagten stelle einfügt + cpkcs.init(reqDoc, pos, "signature-1-1"); + cpkcs.setCanoncialization(1); + + //Enveloped Transformation + Transform[] tr = new Transform[1]; + TransformImplEnvelopedSignature trans = new TransformImplEnvelopedSignature(); + tr[0] = trans; + cpkcs.createReferenceWithTransforms(new URI("#document"), tr, "reference-1-1"); + + cpkcs.setKeyInformation(1); + + Document doc = cpkcs.returnSig(); + + String output = + makeOutputFile( + doc, + "<data:Document xmlns:data=\"http://uri.data.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" attr=\"document\" xsi:schemaLocation=\"http://uri.data.org http://anywhere.org/testDocument.schema.xsd\">", + readFile(configuration_.getProperty("baseDir") + "resources/documents/testSimple.txt") + + "</data:Document>"); + + writeFile(resFile, output); + } + + /* ---------------------------------------------------------------------------------------------------- */ + + public void create005() throws Exception + { + + String testNumber = "005"; + String resFile = + configuration_.getProperty("baseDir") + + datadirectory + + configuration_.getProperty("TestClass") + + "." + + testNumber + + ".Res.xml"; + + CreatePKCSSignature cpkcs = new CreatePKCSSignature(); + cpkcs.init("signature-1-1"); + cpkcs.setCanoncialization(1); + + Transform[] tr = new Transform[1]; + TransformImplXSLT trans = new TransformImplXSLT(); + URL u = new URL(configuration_.getProperty("webbaseDir") + "resources/stylesheets/ref.book.notavailable.xsl"); + URLConnection hu = u.openConnection(); + + trans.setStyleSheet( + hu.getInputStream(), + new URI(configuration_.getProperty("webbaseDir") + "resources/stylesheets/ref.book.notavailable.xsl")); + tr[0] = trans; + + cpkcs.createReferenceWithTransforms( + new URI(configuration_.getProperty("webbaseDir") + "resources/documents/bookData.xml"), + tr, + "reference-1-1"); + + cpkcs.setKeyInformation(1); + + Document doc = cpkcs.returnSig(); + String output = makeOutputFile(doc); + writeFile(resFile, output); + } + + /* ---------------------------------------------------------------------------------------------------- */ + + public void writeFile(String filename, String data) throws Exception + { + BufferedWriter bw = new BufferedWriter(new FileWriter(filename)); + bw.write(data); + bw.close(); + } + + /* ---------------------------------------------------------------------------------------------------- */ + + private String makeOutputFile(Document signatureDoc) throws Exception + { + ArrayList foundNodes = new ArrayList(); + findNode(signatureDoc.getDocumentElement(), "dsig:Signature", foundNodes); + + Node outputNode = null; + + if (foundNodes.size() > 0) + { + outputNode = (Node) foundNodes.get(0); + } + + String erg = Node2String(outputNode); + + // remove the <?xml ?> Prologue + int pos = erg.indexOf("<dsig"); + erg = erg.substring(pos); + + // insert the dsig:signature element in a MOA Response Message + erg = + "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + + "<CreateXMLSignatureResponse\n" + + " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n" + + " >" + + + //" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\">\n"+ + "<SignatureEnvironment>" + erg + "</SignatureEnvironment></CreateXMLSignatureResponse>"; + + return erg; + } + + /* ---------------------------------------------------------------------------------------------------- */ + + private String makeOutputFile(Document signatureDoc, Document signatureDoc2) throws Exception + { + ArrayList foundNodes = new ArrayList(); + findNode(signatureDoc.getDocumentElement(), "dsig:Signature", foundNodes); + + Node outputNode = null; + + if (foundNodes.size() > 0) + { + outputNode = (Node) foundNodes.get(0); + } + + String erg = Node2String(outputNode); + + // remove the <?xml ?> Prologue + int pos = erg.indexOf("<dsig"); + erg = erg.substring(pos); + + foundNodes.clear(); + findNode(signatureDoc2.getDocumentElement(), "dsig:Signature", foundNodes); + + outputNode = null; + + if (foundNodes.size() > 0) + { + outputNode = (Node) foundNodes.get(0); + } + + String erg2 = Node2String(outputNode); + + // remove the <?xml ?> Prologue + pos = erg2.indexOf("<dsig"); + erg2 = erg2.substring(pos); + + // insert the dsig:signature element in a MOA Response Message + erg = + "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + + "<CreateXMLSignatureResponse\n" + + " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"\n" + + " >" + + "<SignatureEnvironment>" + + erg + + "</SignatureEnvironment><SignatureEnvironment>" + + erg2 + + "</SignatureEnvironment> </CreateXMLSignatureResponse>"; + + //erg = replaceString(erg,"Id=\"signature-1-1\"","Id=\"signature-2-1\""); + //erg = replaceString(erg,"Id=\"reference-1-1\"","Id=\"reference-2-1\""); + + return erg; + } + + /* ---------------------------------------------------------------------------------------------------- */ + + public String makeOutputFile(Document signatureDoc, String prefix, String suffix) throws Exception + { + ArrayList foundNodes = new ArrayList(); + findNode(signatureDoc.getDocumentElement(), "dsig:Signature", foundNodes); + + Node outputNode = null; + + if (foundNodes.size() > 0) + { + outputNode = (Node) foundNodes.get(0); + } + + String erg = Node2String(outputNode); + + // remove the <?xml ?> Prologue + int pos = erg.indexOf("<dsig"); + erg = erg.substring(pos); + + // insert the dsig:signature element in a MOA Response Message + erg = + "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + + "<CreateXMLSignatureResponse" + + " xmlns=\"http://reference.e-government.gv.at/namespace/moa/20020822#\"" + + " >" + + + //" xmlns:etsi=\"http://uri.etsi.org/01903/v1.1.1#\">"+ + "<SignatureEnvironment>" + + prefix + + erg + + suffix + + "</SignatureEnvironment> </CreateXMLSignatureResponse>"; + + return erg; + } + +} |