| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.camel.component.xmlsecurity; |
| |
| import java.io.ByteArrayInputStream; |
| import java.security.KeyPair; |
| import java.util.Map; |
| |
| import javax.xml.crypto.KeySelector; |
| |
| import org.w3c.dom.Document; |
| |
| import org.apache.camel.CamelContext; |
| import org.apache.camel.Message; |
| import org.apache.camel.builder.RouteBuilder; |
| import org.apache.camel.component.mock.MockEndpoint; |
| import org.apache.camel.component.xmlsecurity.api.KeyAccessor; |
| import org.apache.camel.component.xmlsecurity.api.XmlSignatureHelper; |
| import org.apache.camel.spi.Registry; |
| import org.apache.camel.spring.SpringCamelContext; |
| import org.apache.camel.support.SimpleRegistry; |
| import org.junit.Test; |
| import org.springframework.context.support.ClassPathXmlApplicationContext; |
| |
| public class SpringXmlSignatureTest extends XmlSignatureTest { |
| |
| private static KeyPair rsaPair; |
| |
| @Override |
| protected CamelContext createCamelContext() throws Exception { |
| rsaPair = getKeyPair("RSA", 1024); |
| return SpringCamelContext.springCamelContext( |
| new ClassPathXmlApplicationContext("/org/apache/camel/component/xmlsecurity/SpringXmlSignatureTests.xml"), true); |
| } |
| |
| public static KeyAccessor getDsaKeyAccessor() { |
| return getKeyAccessor(getKeyPair("DSA", 1024).getPrivate()); |
| } |
| |
| public static KeyAccessor getRsaKeyAccessor() { |
| return getKeyAccessor(rsaPair.getPrivate()); |
| } |
| |
| public static KeySelector getDsaKeySelector() { |
| return KeySelector.singletonKeySelector(getKeyPair("DSA", 1024).getPublic()); |
| } |
| |
| public static KeySelector getRsaKeySelector() { |
| return KeySelector.singletonKeySelector(rsaPair.getPublic()); |
| } |
| |
| @Override |
| protected Registry createCamelRegistry() throws Exception { |
| return new SimpleRegistry(); |
| } |
| |
| @Override |
| protected RouteBuilder[] createRouteBuilders() throws Exception { |
| return new RouteBuilder[] {}; |
| } |
| |
| @Override |
| XmlSignerEndpoint getDetachedSignerEndpoint() { |
| XmlSignerEndpoint endpoint = (XmlSignerEndpoint) context() |
| .getEndpoint( |
| "xmlsecurity:sign:detached?keyAccessor=#accessorRsa&xpathsToIdAttributes=#xpathsToIdAttributes&"// |
| + "schemaResourceUri=org/apache/camel/component/xmlsecurity/Test.xsd&signatureId=&clearHeaders=false"); |
| return endpoint; |
| } |
| |
| @Override |
| XmlSignerEndpoint getSignatureEncpointForSignException() { |
| XmlSignerEndpoint endpoint = (XmlSignerEndpoint)context().getEndpoint(// |
| "xmlsecurity:sign:signexceptioninvalidkey?keyAccessor=#accessorRsa"); |
| return endpoint; |
| } |
| |
| @Override |
| String getVerifierEndpointURIEnveloped() { |
| return "xmlsecurity:verify:enveloped?keySelector=#selectorRsa"; |
| } |
| |
| @Override |
| String getSignerEndpointURIEnveloped() { |
| return "xmlsecurity:sign:enveloped?keyAccessor=#accessorRsa&parentLocalName=root&parentNamespace=http://test/test"; |
| } |
| |
| @Override |
| String getVerifierEndpointURIEnveloping() { |
| return "xmlsecurity:verify:enveloping?keySelector=#selectorRsa"; |
| } |
| |
| @Override |
| String getSignerEndpointURIEnveloping() { |
| return "xmlsecurity:sign:enveloping?keyAccessor=#accessorRsa"; |
| } |
| |
| @Test |
| public void xades() throws Exception { |
| MockEndpoint mock = getMockEndpoint("mock:result"); |
| mock.expectedMessageCount(1); |
| sendBody("direct:xades", payload); |
| assertMockEndpointsSatisfied(); |
| |
| Message message = getMessage(mock); |
| byte[] body = message.getBody(byte[].class); |
| Document doc = XmlSignatureHelper.newDocumentBuilder(true).parse(new ByteArrayInputStream(body)); |
| Map<String, String> prefix2Ns = XAdESSignaturePropertiesTest.getPrefix2NamespaceMap(); |
| prefix2Ns.put("t", "http://test.com/"); |
| XAdESSignaturePropertiesTest |
| .checkXpath( |
| doc, |
| "/ds:Signature/ds:Object/etsi:QualifyingProperties/etsi:SignedProperties/etsi:SignedSignatureProperties/etsi:SignerRole/etsi:ClaimedRoles/etsi:ClaimedRole/t:test", |
| prefix2Ns, "test"); |
| } |
| } |