Added: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureTransform.java URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureTransform.java?rev=1410551&view=auto ============================================================================== --- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureTransform.java (added) +++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureTransform.java Fri Nov 16 19:46:28 2012 @@ -0,0 +1,84 @@ +/* + * Copyright 2012 The Apache Software Foundation. + * + * Licensed 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.juddi.model; + +import java.util.ArrayList; +import java.util.List; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.OrderBy; +import javax.persistence.Table; + +/** + * + */ +@Entity +@Table(name="j3_signature_transform") +public class SignatureTransform implements java.io.Serializable { + private static final long serialVersionUID = -3233157941119408702L; + + private Long id; + private Reference reference; + private String transform; + private List<SignatureTransformDataValue> signatureTransformDataValue = new ArrayList<SignatureTransformDataValue>(0); + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "reference_key", nullable = false) + public Reference getReference() { + return reference; + } + + public void setReference(Reference reference) { + this.reference = reference; + } + + @Column(name="transform") + public String getTransform() { + return transform; + } + + public void setTransform(String transform) { + this.transform = transform; + } + + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "signatureTransform") + @OrderBy + public List<SignatureTransformDataValue> getSignatureTransformDataValue() { + return signatureTransformDataValue; + } + + public void setSignatureTransformDataValue(List<SignatureTransformDataValue> signatureDataValue) { + this.signatureTransformDataValue = signatureDataValue; + } +}
Added: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureTransformDataValue.java URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureTransformDataValue.java?rev=1410551&view=auto ============================================================================== --- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureTransformDataValue.java (added) +++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureTransformDataValue.java Fri Nov 16 19:46:28 2012 @@ -0,0 +1,80 @@ +/* + * Copyright 2012 The Apache Software Foundation. + * + * Licensed 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.juddi.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.Lob; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +/** + * + */ +@Entity +@Table(name="j3_signature_transform_data_value") +public class SignatureTransformDataValue implements java.io.Serializable { + private static final long serialVersionUID = -2233157941119408702L; + + private Long id; + private String contentType; + private byte[] contentBytes; + private SignatureTransform signatureTransform; + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "signature_transform_key", nullable = false) + public SignatureTransform getSignatureTransform() { + return signatureTransform; + } + + public void setSignatureTransform(SignatureTransform signatureTransform) { + this.signatureTransform = signatureTransform; + } + + @Column(name="content_type") + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + @Lob + @Column(name="content_bytes") + public byte[] getContentBytes() { + return contentBytes; + } + + public void setContentBytes(byte[] contentBytes) { + this.contentBytes = contentBytes; + } +} Added: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureValue.java URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureValue.java?rev=1410551&view=auto ============================================================================== --- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureValue.java (added) +++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignatureValue.java Fri Nov 16 19:46:28 2012 @@ -0,0 +1,66 @@ +/* + * Copyright 2012 The Apache Software Foundation. + * + * Licensed 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.juddi.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Lob; +import javax.persistence.Table; + +/** + * + */ +@Entity +@Table(name="j3_signature_value") +public class SignatureValue implements java.io.Serializable { + private static final long serialVersionUID = -3233157941119408717L; + + private Long id; + private byte[] value; + private String xmlID; + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Column(name="value_bytes") + @Lob + public byte[] getValue() { + return value; + } + + public void setValue(byte[] value) { + this.value = value; + } + + @Column(name="xml_id") + public String getXmlID() { + return xmlID; + } + + public void setXmlID(String xmlID) { + this.xmlID = xmlID; + } +} Added: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignedInfo.java URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignedInfo.java?rev=1410551&view=auto ============================================================================== --- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignedInfo.java (added) +++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/SignedInfo.java Fri Nov 16 19:46:28 2012 @@ -0,0 +1,95 @@ +/* + * Copyright 2012 The Apache Software Foundation. + * + * Licensed 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.juddi.model; + +import java.util.ArrayList; +import java.util.List; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.OrderBy; +import javax.persistence.Table; + +/** + * + */ +@Entity +@Table(name="j3_signed_info") +public class SignedInfo implements java.io.Serializable { + private static final long serialVersionUID = -2233157941119408719L; + + private Long id; + private CanonicalizationMethod canonicalizationMethod; + private SignatureMethod signatureMethod; + private List<Reference> reference = new ArrayList<Reference>(0); + private String xmlID; + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL) + @JoinColumn(name = "canonicalization_method", nullable = false) + public CanonicalizationMethod getCanonicalizationMethod() { + return canonicalizationMethod; + } + + public void setCanonicalizationMethod(CanonicalizationMethod canonicalizationMethod) { + this.canonicalizationMethod = canonicalizationMethod; + } + + @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL) + @JoinColumn(name = "signature_method", nullable = false) + public SignatureMethod getSignatureMethod() { + return signatureMethod; + } + + public void setSignatureMethod(SignatureMethod signatureMethod) { + this.signatureMethod = signatureMethod; + } + + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "signedInfo") + @OrderBy + public List<Reference> getReference() { + return reference; + } + + public void setReference(List<Reference> reference) { + this.reference = reference; + } + + @Column(name="xml_id") + public String getXmlID() { + return xmlID; + } + + public void setXmlID(String xmlID) { + this.xmlID = xmlID; + } +} Modified: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/Tmodel.java URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/Tmodel.java?rev=1410551&r1=1410550&r2=1410551&view=diff ============================================================================== --- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/Tmodel.java (original) +++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/model/Tmodel.java Fri Nov 16 19:46:28 2012 @@ -45,6 +45,7 @@ public class Tmodel extends UddiEntity i private List<TmodelDescr> tmodelDescrs = new ArrayList<TmodelDescr>(0); private List<TmodelIdentifier> tmodelIdentifiers = new ArrayList<TmodelIdentifier>(0); private TmodelCategoryBag categoryBag; + private List<Signature> signatures = new ArrayList<Signature>(0); public Tmodel() { } @@ -132,4 +133,13 @@ public class Tmodel extends UddiEntity i this.categoryBag = categoryBag; } + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "tmodel") + @OrderBy + public List<Signature> getSignatures() { + return signatures; + } + + public void setSignatures(List<Signature> signatures) { + this.signatures = signatures; + } } Modified: juddi/trunk/juddi-core/src/main/resources/persistence/openjpa-persistence.xml URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/resources/persistence/openjpa-persistence.xml?rev=1410551&r1=1410550&r2=1410551&view=diff ============================================================================== --- juddi/trunk/juddi-core/src/main/resources/persistence/openjpa-persistence.xml (original) +++ juddi/trunk/juddi-core/src/main/resources/persistence/openjpa-persistence.xml Fri Nov 16 19:46:28 2012 @@ -19,6 +19,7 @@ <class>org.apache.juddi.model.BusinessIdentifier</class> <class>org.apache.juddi.model.BusinessName</class> <class>org.apache.juddi.model.BusinessService</class> + <class>org.apache.juddi.model.CanonicalizationMethod</class> <class>org.apache.juddi.model.CategoryBag</class> <class>org.apache.juddi.model.Clerk</class> <class>org.apache.juddi.model.ClientSubscriptionInfo</class> @@ -30,7 +31,11 @@ <class>org.apache.juddi.model.InstanceDetailsDocDescr</class> <class>org.apache.juddi.model.KeyedReference</class> <class>org.apache.juddi.model.KeyedReferenceGroup</class> + <class>org.apache.juddi.model.KeyDataValue</class> + <class>org.apache.juddi.model.KeyInfo</class> <class>org.apache.juddi.model.Node</class> + <class>org.apache.juddi.model.ObjectType</class> + <class>org.apache.juddi.model.ObjectTypeContent</class> <class>org.apache.juddi.model.OverviewDoc</class> <class>org.apache.juddi.model.OverviewDocDescr</class> <class>org.apache.juddi.model.PersonName</class> @@ -38,11 +43,18 @@ <class>org.apache.juddi.model.Publisher</class> <class>org.apache.juddi.model.PublisherAssertion</class> <class>org.apache.juddi.model.PublisherAssertionId</class> + <class>org.apache.juddi.model.Reference</class> <class>org.apache.juddi.model.ServiceCategoryBag</class> <class>org.apache.juddi.model.ServiceDescr</class> <class>org.apache.juddi.model.ServiceName</class> <class>org.apache.juddi.model.ServiceProjection</class> <class>org.apache.juddi.model.ServiceProjectionId</class> + <class>org.apache.juddi.model.Signature</class> + <class>org.apache.juddi.model.SignatureMethod</class> + <class>org.apache.juddi.model.SignatureTransform</class> + <class>org.apache.juddi.model.SignatureTransformDataValue</class> + <class>org.apache.juddi.model.SignatureValue</class> + <class>org.apache.juddi.model.SignedInfo</class> <class>org.apache.juddi.model.Subscription</class> <class>org.apache.juddi.model.SubscriptionChunkToken</class> <class>org.apache.juddi.model.SubscriptionMatch</class> Modified: juddi/trunk/juddiv3-war/persistence/hibernate-persistence.xml URL: http://svn.apache.org/viewvc/juddi/trunk/juddiv3-war/persistence/hibernate-persistence.xml?rev=1410551&r1=1410550&r2=1410551&view=diff ============================================================================== --- juddi/trunk/juddiv3-war/persistence/hibernate-persistence.xml (original) +++ juddi/trunk/juddiv3-war/persistence/hibernate-persistence.xml Fri Nov 16 19:46:28 2012 @@ -19,6 +19,7 @@ <class>org.apache.juddi.model.BusinessIdentifier</class> <class>org.apache.juddi.model.BusinessName</class> <class>org.apache.juddi.model.BusinessService</class> + <class>org.apache.juddi.model.CanonicalizationMethod</class> <class>org.apache.juddi.model.CategoryBag</class> <class>org.apache.juddi.model.Clerk</class> <class>org.apache.juddi.model.ClientSubscriptionInfo</class> @@ -30,7 +31,11 @@ <class>org.apache.juddi.model.InstanceDetailsDocDescr</class> <class>org.apache.juddi.model.KeyedReference</class> <class>org.apache.juddi.model.KeyedReferenceGroup</class> + <class>org.apache.juddi.model.KeyDataValue</class> + <class>org.apache.juddi.model.KeyInfo</class> <class>org.apache.juddi.model.Node</class> + <class>org.apache.juddi.model.ObjectType</class> + <class>org.apache.juddi.model.ObjectTypeContent</class> <class>org.apache.juddi.model.OverviewDoc</class> <class>org.apache.juddi.model.OverviewDocDescr</class> <class>org.apache.juddi.model.PersonName</class> @@ -38,10 +43,18 @@ <class>org.apache.juddi.model.Publisher</class> <class>org.apache.juddi.model.PublisherAssertion</class> <class>org.apache.juddi.model.PublisherAssertionId</class> + <class>org.apache.juddi.model.Reference</class> <class>org.apache.juddi.model.ServiceCategoryBag</class> <class>org.apache.juddi.model.ServiceDescr</class> <class>org.apache.juddi.model.ServiceName</class> <class>org.apache.juddi.model.ServiceProjection</class> + <class>org.apache.juddi.model.ServiceProjectionId</class> + <class>org.apache.juddi.model.Signature</class> + <class>org.apache.juddi.model.SignatureMethod</class> + <class>org.apache.juddi.model.SignatureTransform</class> + <class>org.apache.juddi.model.SignatureTransformDataValue</class> + <class>org.apache.juddi.model.SignatureValue</class> + <class>org.apache.juddi.model.SignedInfo</class> <class>org.apache.juddi.model.Subscription</class> <class>org.apache.juddi.model.SubscriptionChunkToken</class> <class>org.apache.juddi.model.SubscriptionMatch</class> Modified: juddi/trunk/juddiv3-war/persistence/openjpa-persistence.xml URL: http://svn.apache.org/viewvc/juddi/trunk/juddiv3-war/persistence/openjpa-persistence.xml?rev=1410551&r1=1410550&r2=1410551&view=diff ============================================================================== --- juddi/trunk/juddiv3-war/persistence/openjpa-persistence.xml (original) +++ juddi/trunk/juddiv3-war/persistence/openjpa-persistence.xml Fri Nov 16 19:46:28 2012 @@ -19,6 +19,7 @@ <class>org.apache.juddi.model.BusinessIdentifier</class> <class>org.apache.juddi.model.BusinessName</class> <class>org.apache.juddi.model.BusinessService</class> + <class>org.apache.juddi.model.CanonicalizationMethod</class> <class>org.apache.juddi.model.CategoryBag</class> <class>org.apache.juddi.model.Clerk</class> <class>org.apache.juddi.model.ClientSubscriptionInfo</class> @@ -30,7 +31,11 @@ <class>org.apache.juddi.model.InstanceDetailsDocDescr</class> <class>org.apache.juddi.model.KeyedReference</class> <class>org.apache.juddi.model.KeyedReferenceGroup</class> + <class>org.apache.juddi.model.KeyDataValue</class> + <class>org.apache.juddi.model.KeyInfo</class> <class>org.apache.juddi.model.Node</class> + <class>org.apache.juddi.model.ObjectType</class> + <class>org.apache.juddi.model.ObjectTypeContent</class> <class>org.apache.juddi.model.OverviewDoc</class> <class>org.apache.juddi.model.OverviewDocDescr</class> <class>org.apache.juddi.model.PersonName</class> @@ -38,11 +43,18 @@ <class>org.apache.juddi.model.Publisher</class> <class>org.apache.juddi.model.PublisherAssertion</class> <class>org.apache.juddi.model.PublisherAssertionId</class> + <class>org.apache.juddi.model.Reference</class> <class>org.apache.juddi.model.ServiceCategoryBag</class> <class>org.apache.juddi.model.ServiceDescr</class> <class>org.apache.juddi.model.ServiceName</class> <class>org.apache.juddi.model.ServiceProjection</class> <class>org.apache.juddi.model.ServiceProjectionId</class> + <class>org.apache.juddi.model.Signature</class> + <class>org.apache.juddi.model.SignatureMethod</class> + <class>org.apache.juddi.model.SignatureTransform</class> + <class>org.apache.juddi.model.SignatureTransformDataValue</class> + <class>org.apache.juddi.model.SignatureValue</class> + <class>org.apache.juddi.model.SignedInfo</class> <class>org.apache.juddi.model.Subscription</class> <class>org.apache.juddi.model.SubscriptionChunkToken</class> <class>org.apache.juddi.model.SubscriptionMatch</class> Modified: juddi/trunk/uddi-tck-base/pom.xml URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck-base/pom.xml?rev=1410551&r1=1410550&r2=1410551&view=diff ============================================================================== --- juddi/trunk/uddi-tck-base/pom.xml (original) +++ juddi/trunk/uddi-tck-base/pom.xml Fri Nov 16 19:46:28 2012 @@ -35,5 +35,11 @@ <artifactId>junit</artifactId> <version>4.5</version> </dependency> + <dependency> + <groupId>xmlunit</groupId> + <artifactId>xmlunit</artifactId> + <version>1.3</version> + </dependency> + </dependencies> </project> \ No newline at end of file Modified: juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusiness.java URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusiness.java?rev=1410551&r1=1410550&r2=1410551&view=diff ============================================================================== --- juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusiness.java (original) +++ juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusiness.java Fri Nov 16 19:46:28 2012 @@ -14,11 +14,23 @@ */ package org.apache.juddi.v3.tck; +import java.io.File; +import java.io.FileInputStream; +import java.net.URL; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertTrue; import java.rmi.RemoteException; +import java.security.KeyStore; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.cert.Certificate; +import java.util.Arrays; import java.util.List; +import javax.xml.bind.JAXB; +import javax.xml.transform.dom.DOMResult; +import javax.xml.transform.dom.DOMSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -32,6 +44,8 @@ import org.uddi.api_v3.GetBusinessDetail import org.uddi.api_v3.SaveBusiness; import org.uddi.v3_service.UDDIInquiryPortType; import org.uddi.v3_service.UDDIPublicationPortType; +import org.w3c.dom.Document; +import org.w3c.dom.Element; /** * @author <a href="mailto:[email protected]">Kurt T Stam</a> * @author <a href="mailto:[email protected]">Jeff Faath</a> @@ -53,6 +67,10 @@ public class TckBusiness public final static String RIFTSAW_BUSINESS_KEY = "uddi:riftsaw.jboss.org:business_redhat-jboss"; public final static String RIFTSAW_BUSINESS_XML = "uddi_data/bpel/riftsaw/businessEntity.xml"; + final static String SIGNATURE_KEYSTORE = "uddi_data/signature/signature.jks"; + final static String SIGNATURE_KEYSTORE_TYPE = "JKS"; + final static String SIGNATURE_KEYSTORE_PASSWORD = "changeit"; + final static String SIGNATURE_KEYSTORE_ALIAS = "mykey"; private Log logger = LogFactory.getLog(this.getClass()); private UDDIPublicationPortType publication = null; @@ -85,8 +103,14 @@ public class TckBusiness deleteBusinesses(authInfoSam, SAM_BUSINESS_XML, SAM_BUSINESS_KEY, numberOfCopies); } + public void saveJoePublisherBusinessX509Signature(String authInfoJoe) { + saveBusiness(authInfoJoe, JOE_BUSINESS_XML, JOE_BUSINESS_KEY); + signBusiness(authInfoJoe, JOE_BUSINESS_KEY); + verifyBusinessSignature(authInfoJoe, JOE_BUSINESS_KEY); + } + public void saveJoePublisherBusiness(String authInfoJoe) { - saveBusiness(authInfoJoe, JOE_BUSINESS_XML, JOE_BUSINESS_KEY); + saveBusiness(authInfoJoe, JOE_BUSINESS_XML, JOE_BUSINESS_KEY, true); } public void saveCombineCatBagsPublisherBusiness(String authInfoJoe) { @@ -176,8 +200,91 @@ public class TckBusiness Assert.fail("No exception should be thrown"); } } - - public void saveBusiness(String authInfo, String businessXML, String businessKey) { + + public void signBusiness(String authInfo, String businessKey) { + try { + GetBusinessDetail gb = new GetBusinessDetail(); + gb.getBusinessKey().add(businessKey); + BusinessDetail bd = inquiry.getBusinessDetail(gb); + List<BusinessEntity> beOutList = bd.getBusinessEntity(); + BusinessEntity bizEntity = beOutList.get(0); + bizEntity.getSignature().clear(); + BusinessEntity bizEntitySigned = signJAXBObject(bizEntity); + + SaveBusiness sb = new SaveBusiness(); + sb.setAuthInfo(authInfo); + sb.getBusinessEntity().add(bizEntitySigned); + publication.saveBusiness(sb); + } catch(Throwable e) { + logger.error(e.getMessage(),e); + Assert.fail("No exception should be thrown"); + } + } + + public void verifyBusinessSignature(String authInfo, String businessKey) { + try { + GetBusinessDetail gb = new GetBusinessDetail(); + gb.getBusinessKey().add(businessKey); + BusinessDetail bd = inquiry.getBusinessDetail(gb); + List<BusinessEntity> beOutList = bd.getBusinessEntity(); + BusinessEntity bizEntity = beOutList.get(0); + + boolean sigOk = verifySignedJAXBObject(bizEntity); + assertTrue("Signature invalid!", sigOk); + } catch(Throwable e) { + logger.error(e.getMessage(),e); + Assert.fail("No exception should be thrown"); + } + } + + private <T> T signJAXBObject(T jaxbObj) { + DOMResult domResult = new DOMResult(); + JAXB.marshal(jaxbObj, domResult); + Document doc = ((Document)domResult.getNode()); + Element docElement = doc.getDocumentElement(); + + try { + KeyStore ks = KeyStore.getInstance(SIGNATURE_KEYSTORE_TYPE); + URL url = Thread.currentThread().getContextClassLoader().getResource(SIGNATURE_KEYSTORE); + ks.load(url.openStream(), SIGNATURE_KEYSTORE_PASSWORD.toCharArray()); + KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry)ks.getEntry(SIGNATURE_KEYSTORE_ALIAS, new KeyStore.PasswordProtection(SIGNATURE_KEYSTORE_PASSWORD.toCharArray())); + PrivateKey privateKey = keyEntry.getPrivateKey(); + Certificate origCert = keyEntry.getCertificate(); + PublicKey validatingKey = origCert.getPublicKey(); + TckSigningUtil.signDOM(docElement, privateKey, origCert); + + DOMSource domSource = new DOMSource(doc); + T result = (T)JAXB.unmarshal(domSource, jaxbObj.getClass()); + return result; + } catch (Exception e) { + throw new RuntimeException("Signature failure due to: " + e.getMessage(), e); + } + } + + private boolean verifySignedJAXBObject(Object obj) { + try { + DOMResult domResult = new DOMResult(); + JAXB.marshal(obj, domResult); + Document doc = ((Document)domResult.getNode()); + Element docElement = doc.getDocumentElement(); + + KeyStore ks = KeyStore.getInstance(SIGNATURE_KEYSTORE_TYPE); + URL url = Thread.currentThread().getContextClassLoader().getResource(SIGNATURE_KEYSTORE); + ks.load(url.openStream(), SIGNATURE_KEYSTORE_PASSWORD.toCharArray()); + KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry)ks.getEntry(SIGNATURE_KEYSTORE_ALIAS, new KeyStore.PasswordProtection(SIGNATURE_KEYSTORE_PASSWORD.toCharArray())); + PrivateKey privateKey = keyEntry.getPrivateKey(); + Certificate origCert = keyEntry.getCertificate(); + PublicKey validatingKey = origCert.getPublicKey(); + return TckSigningUtil.verifySignature(docElement, validatingKey); + } catch (Exception e) { + throw new RuntimeException (e); + } + } + + public void saveBusiness(String authInfo, String businessXML, String businessKey) { + saveBusiness(authInfo, businessXML, businessKey, false); + } + public void saveBusiness(String authInfo, String businessXML, String businessKey, boolean serialize) { try { SaveBusiness sb = new SaveBusiness(); sb.setAuthInfo(authInfo); @@ -194,6 +301,10 @@ public class TckBusiness List<BusinessEntity> beOutList = bd.getBusinessEntity(); BusinessEntity beOut = beOutList.get(0); + if (serialize) { + JAXB.marshal(beOut, new File("target/aftersave.xml")); + } + assertEquals(beIn.getBusinessKey(), beOut.getBusinessKey()); TckValidator.checkNames(beIn.getName(), beOut.getName()); @@ -201,7 +312,7 @@ public class TckBusiness TckValidator.checkDiscoveryUrls(beIn.getDiscoveryURLs(), beOut.getDiscoveryURLs()); TckValidator.checkContacts(beIn.getContacts(), beOut.getContacts()); TckValidator.checkCategories(beIn.getCategoryBag(), beOut.getCategoryBag()); - + TckValidator.checkSignatures(beIn.getSignature(), beOut.getSignature()); } catch(Throwable e) { logger.error(e.getMessage(),e); Assert.fail("No exception should be thrown"); Added: juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckSigningUtil.java URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckSigningUtil.java?rev=1410551&view=auto ============================================================================== --- juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckSigningUtil.java (added) +++ juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckSigningUtil.java Fri Nov 16 19:46:28 2012 @@ -0,0 +1,165 @@ +package org.apache.juddi.v3.tck; + +import java.io.BufferedReader; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.security.InvalidAlgorithmParameterException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.cert.Certificate; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import javax.xml.crypto.dsig.CanonicalizationMethod; +import javax.xml.crypto.dsig.DigestMethod; +import javax.xml.crypto.dsig.Reference; +import javax.xml.crypto.dsig.SignatureMethod; +import javax.xml.crypto.dsig.SignedInfo; +import javax.xml.crypto.dsig.Transform; +import javax.xml.crypto.dsig.XMLSignature; +import javax.xml.crypto.dsig.XMLSignatureFactory; +import javax.xml.crypto.dsig.dom.DOMSignContext; +import javax.xml.crypto.dsig.dom.DOMValidateContext; +import javax.xml.crypto.dsig.keyinfo.KeyInfo; +import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory; +import javax.xml.crypto.dsig.keyinfo.X509Data; +import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec; +import javax.xml.crypto.dsig.spec.TransformParameterSpec; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +public class TckSigningUtil { + + private static XMLSignatureFactory initXMLSigFactory() { + XMLSignatureFactory fac = XMLSignatureFactory.getInstance(); + return fac; + } + + private static Reference initReference(XMLSignatureFactory fac) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException { + List transformers = new ArrayList(); + transformers.add(fac.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null)); + Reference ref = fac.newReference("", fac.newDigestMethod(DigestMethod.SHA1, null), transformers, null, null); + return ref; + } + + private static SignedInfo initSignedInfo(XMLSignatureFactory fac) throws Exception { + Reference ref = initReference(fac); + SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE, (C14NMethodParameterSpec) null), fac.newSignatureMethod(SignatureMethod.DSA_SHA1, null), Collections.singletonList(ref)); + return si; + } + + public static boolean verifySignature(Element element, PublicKey validatingKey) { + XMLSignatureFactory fac = initXMLSigFactory(); + NodeList nl = element.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature"); + if (nl.getLength() == 0) { + throw new RuntimeException("Cannot find Signature element"); + } + DOMValidateContext valContext = new DOMValidateContext(validatingKey, nl.item(0)); + try { + valContext.setProperty("javax.xml.crypto.dsig.cacheReference", Boolean.TRUE); + XMLSignature signature = fac.unmarshalXMLSignature(valContext); + boolean coreValidity = signature.validate(valContext); + // Check core validation status. + if (coreValidity == false) { + System.err.println("Signature failed core validation"); + boolean sv = signature.getSignatureValue().validate(valContext); + System.out.println("signature validation status: " + sv); + // Check the validation status of each Reference. + @SuppressWarnings("unchecked") + Iterator<Reference> i = signature.getSignedInfo().getReferences().iterator(); + System.out.println("---------------------------------------------"); + for (int j = 0; i.hasNext(); j++) { + Reference ref = (Reference) i.next(); + boolean refValid = ref.validate(valContext); + System.out.println("ref[" + j + "] validity status: " + refValid); + System.out.println("Ref type: " + ref.getType() + ", URI: " + ref.getURI()); + for (Object xform : ref.getTransforms()) { + System.out.println("Transform: " + xform); + } + String calcDigValStr = digestToString(ref.getCalculatedDigestValue()); + String expectedDigValStr = digestToString(ref.getDigestValue()); + System.out.println(" Calc Digest: " + calcDigValStr); + System.out.println("Expected Digest: " + expectedDigValStr); + InputStream is = ref.getDigestInputStream(); + InputStreamReader isr = new InputStreamReader(is); + BufferedReader br = new BufferedReader(isr); + String line; + while ((line = br.readLine()) != null) { + System.out.println(line); + } + is.close(); + System.out.println("---------------------------------------------"); + } + } else { + System.out.println("Signature passed core validation"); + } + return coreValidity; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static String digestToString(byte[] digest) { + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + String hex = Integer.toHexString(0xFF & b); + if (hex.length() == 1) { + sb.append('0'); + } + sb.append(hex); + } + return sb.toString(); + } + + public static void signDOM(Node node, PrivateKey privateKey, Certificate origCert) { + XMLSignatureFactory fac = initXMLSigFactory(); + X509Certificate cert = (X509Certificate) origCert; + // Create the KeyInfo containing the X509Data. + KeyInfoFactory kif = fac.getKeyInfoFactory(); + List<Object> x509Content = new ArrayList<Object>(); + x509Content.add(cert.getSubjectX500Principal().getName()); + x509Content.add(cert); + X509Data xd = kif.newX509Data(x509Content); + KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd)); + + // Create a DOMSignContext and specify the RSA PrivateKey and + // location of the resulting XMLSignature's parent element. + DOMSignContext dsc = new DOMSignContext(privateKey, node); + dsc.putNamespacePrefix("http://www.w3.org/2000/09/xmldsig#", "ns2"); + + // Create the XMLSignature, but don't sign it yet. + try { + SignedInfo si = initSignedInfo(fac); + XMLSignature signature = fac.newXMLSignature(si, ki); + + // Marshal, generate, and sign the enveloped signature. + signature.sign(dsc); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static void serializeNode(Node node, String filename) { + try { + Transformer xform = TransformerFactory.newInstance().newTransformer(); + DOMSource domSrc = new DOMSource(node); + FileOutputStream fos = new FileOutputStream(filename); + StreamResult streamResult = new StreamResult(fos); + xform.transform(domSrc, streamResult); + fos.close(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} Modified: juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckValidator.java URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckValidator.java?rev=1410551&r1=1410550&r2=1410551&view=diff ============================================================================== --- juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckValidator.java (original) +++ juddi/trunk/uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckValidator.java Fri Nov 16 19:46:28 2012 @@ -19,12 +19,19 @@ package org.apache.juddi.v3.tck; * @author <a href="mailto:[email protected]">Kurt T Stam</a> * @author <a href="mailto:[email protected]">Tom Cunningham</a> */ +import java.util.Arrays; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; import java.util.Collection; import java.util.Iterator; import java.util.List; +import javax.xml.bind.JAXB; +import javax.xml.bind.JAXBElement; +import javax.xml.transform.dom.DOMResult; +import javax.xml.transform.dom.DOMSource; +import org.custommonkey.xmlunit.Diff; +import org.custommonkey.xmlunit.XMLUnit; import org.uddi.api_v3.BindingTemplate; import org.uddi.api_v3.BindingTemplates; @@ -43,6 +50,20 @@ import org.uddi.api_v3.OverviewURL; import org.uddi.api_v3.PersonName; import org.uddi.api_v3.TModelInstanceDetails; import org.uddi.api_v3.TModelInstanceInfo; +import org.w3._2000._09.xmldsig_.CanonicalizationMethodType; +import org.w3._2000._09.xmldsig_.DigestMethodType; +import org.w3._2000._09.xmldsig_.KeyInfoType; +import org.w3._2000._09.xmldsig_.ObjectType; +import org.w3._2000._09.xmldsig_.ReferenceType; +import org.w3._2000._09.xmldsig_.SignatureMethodType; +import org.w3._2000._09.xmldsig_.SignatureType; +import org.w3._2000._09.xmldsig_.SignatureValueType; +import org.w3._2000._09.xmldsig_.SignedInfoType; +import org.w3._2000._09.xmldsig_.TransformType; +import org.w3._2000._09.xmldsig_.TransformsType; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; public class TckValidator { @@ -104,6 +125,198 @@ public class TckValidator { } } + public static void checkSignatures(List<SignatureType> sigs1, List<SignatureType> sigs2) { + if (sigs1 == null || sigs2 == null) { + assertEquals(sigs1, sigs2); + return; + } + assertEquals(sigs1.size(), sigs2.size()); + Iterator<SignatureType> sigsList1Itr = sigs1.iterator(); + Iterator<SignatureType> sigsList2Itr = sigs2.iterator(); + while (sigsList1Itr.hasNext()) { + SignatureType sig1 = sigsList1Itr.next(); + SignatureType sig2 = sigsList2Itr.next(); + + assertEquals(sig1.getId(), sig2.getId()); + checkKeyInfo(sig1.getKeyInfo(), sig2.getKeyInfo()); + checkObjectType(sig1.getObject(), sig2.getObject()); + checkSignatureValue(sig1.getSignatureValue(), sig2.getSignatureValue()); + checkSignedInfo(sig1.getSignedInfo(), sig2.getSignedInfo()); + } + } + + public static void checkKeyInfo(KeyInfoType kit1, KeyInfoType kit2) { + if (kit1 == null || kit2 == null) { + assertEquals(kit1, kit2); + return; + } + assertEquals(kit1.getId(), kit2.getId()); + + DOMResult domResult1 = new DOMResult(); + DOMResult domResult2 = new DOMResult(); + JAXB.marshal(kit1, domResult1); + JAXB.marshal(kit2, domResult2); + + Document doc1 = (Document)domResult1.getNode(); + DOMSource domSource1 = new DOMSource(doc1.getDocumentElement()); + Document doc2 = (Document)domResult2.getNode(); + DOMSource domSource2 = new DOMSource(doc2.getDocumentElement()); + XMLUnit.setIgnoreAttributeOrder(true); + XMLUnit.setIgnoreComments(true); + XMLUnit.setIgnoreWhitespace(true); + Diff diff = new Diff(domSource1, domSource2); + assertTrue("Key info elements should match", diff.similar()); + } + + public static void checkObjectType(List<ObjectType> obj1List, List<ObjectType> obj2List) { + if (obj1List == null || obj2List == null) { + assertEquals(obj1List, obj2List); + return; + } + assertEquals(obj1List.size(), obj2List.size()); + Iterator<ObjectType> objList1Itr = obj1List.iterator(); + Iterator<ObjectType> objList2Itr = obj2List.iterator(); + while (objList1Itr.hasNext()) { + ObjectType obj1 = objList1Itr.next(); + ObjectType obj2 = objList2Itr.next(); + assertEquals(obj1.getEncoding(), obj2.getEncoding()); + assertEquals(obj1.getId(), obj2.getId()); + assertEquals(obj1.getMimeType(), obj2.getMimeType()); + } + } + + public static void checkSignatureValue(SignatureValueType sv1, SignatureValueType sv2) { + if (sv1 == null || sv2 == null) { + assertEquals(sv1, sv2); + return; + } + assertEquals(sv1.getId(), sv2.getId()); + assertTrue(Arrays.equals(sv1.getValue(), sv2.getValue())); + } + + public static void checkSignedInfo(SignedInfoType si1, SignedInfoType si2) { + if (si1 == null || si2 == null) { + assertEquals(si1, si2); + return; + } + assertEquals(si1.getId(), si2.getId()); + checkCanonicalizationMethod(si1.getCanonicalizationMethod(), si2.getCanonicalizationMethod()); + checkReference(si1.getReference(), si2.getReference()); + checkSignatureMethod(si1.getSignatureMethod(), si2.getSignatureMethod()); + } + + public static void checkCanonicalizationMethod(CanonicalizationMethodType cm1, CanonicalizationMethodType cm2) { + if (cm1 == null || cm2 == null) { + assertEquals(cm1, cm2); + return; + } + assertEquals(cm1.getAlgorithm(), cm2.getAlgorithm()); + } + + public static void checkReference(List<ReferenceType> r1List, List<ReferenceType> r2List) { + if (r1List == null || r2List == null) { + assertEquals(r1List, r2List); + return; + } + assertEquals(r1List.size(), r2List.size()); + + Iterator<ReferenceType> rList1Itr = r1List.iterator(); + Iterator<ReferenceType> rList2Itr = r2List.iterator(); + while (rList1Itr.hasNext()) { + ReferenceType r1 = rList1Itr.next(); + ReferenceType r2 = rList2Itr.next(); + checkReference(r1, r2); + } + } + + public static void checkReference(ReferenceType r1, ReferenceType r2) { + assertTrue(Arrays.equals(r1.getDigestValue(), r2.getDigestValue())); + assertEquals(r1.getId(), r2.getId()); + assertEquals(r1.getType(), r2.getType()); + assertEquals(r1.getURI(), r2.getURI()); + + checkDigestMethod(r1.getDigestMethod(), r2.getDigestMethod()); + checkTransforms(r1.getTransforms(), r2.getTransforms()); + } + + public static void checkDigestMethod(DigestMethodType dm1, DigestMethodType dm2) { + if (dm1 == null || dm2 == null) { + assertEquals(dm1, dm2); + return; + } + assertEquals(dm1.getAlgorithm(), dm2.getAlgorithm()); + } + + public static void checkTransforms(TransformsType tTypes1, TransformsType tTypes2) { + if (tTypes1 == null || tTypes2 == null) { + assertEquals(tTypes1, tTypes2); + return; + } + List<TransformType> tt1List = tTypes1.getTransform(); + List<TransformType> tt2List = tTypes2.getTransform(); + if (tt1List == null || tt2List == null) { + assertEquals(tt1List, tt2List); + return; + } + assertEquals(tt1List.size(), tt2List.size()); + + Iterator<TransformType> ttList1Itr = tt1List.iterator(); + Iterator<TransformType> ttList2Itr = tt2List.iterator(); + while (ttList1Itr.hasNext()) { + TransformType tx1 = ttList1Itr.next(); + TransformType tx2 = ttList2Itr.next(); + + assertEquals(tx1.getAlgorithm(), tx2.getAlgorithm()); + checkTransformContentList(tx1.getContent(), tx2.getContent()); + } + } + + public static void checkTransformContentList(List<Object> list1, List<Object> list2) { + if (list1 == null || list2 == null) { + assertEquals(list1, list2); + return; + } + assertEquals(list1.size(), list2.size()); + + Iterator<Object> list1Itr = list1.iterator(); + Iterator<Object> list2Itr = list2.iterator(); + while (list1Itr.hasNext()) { + Object obj1 = list1Itr.next(); + Object obj2 = list2Itr.next(); + + if (obj1 instanceof String) { + assertEquals((String)obj1, obj2); + } else if (obj1 instanceof Element || obj1 instanceof JAXBElement) { + if (obj1 instanceof JAXBElement) { + DOMResult domResult = new DOMResult(); + JAXB.marshal(obj1, domResult); + obj1 = ((Document)domResult.getNode()).getDocumentElement(); + } + if (obj2 instanceof JAXBElement) { + DOMResult domResult = new DOMResult(); + JAXB.marshal(obj2, domResult); + obj2 = ((Document)domResult.getNode()).getDocumentElement(); + } + XMLUnit.setIgnoreAttributeOrder(true); + XMLUnit.setIgnoreComments(true); + DOMSource domSrc1 = new DOMSource((Element)obj1); + DOMSource domSrc2 = new DOMSource((Element)obj2); + Diff diff = new Diff(domSrc1, domSrc2); + assertTrue("Element should be the same", diff.similar()); + } else { + throw new RuntimeException("Unrecognized type: " + obj1.getClass()); + } + } + } + + public static void checkSignatureMethod(SignatureMethodType smt1, SignatureMethodType smt2) { + if (smt1 == null || smt2 == null) { + assertEquals(smt1, smt2); + return; + } + assertEquals(smt1.getAlgorithm(), smt2.getAlgorithm()); + } + public static void checkContacts(Contacts contacts1, Contacts contacts2) { if (contacts1 == null || contacts2 == null) { assertEquals(contacts1, contacts2); Modified: juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/joepublisher/businessEntity.xml URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/joepublisher/businessEntity.xml?rev=1410551&r1=1410550&r2=1410551&view=diff ============================================================================== --- juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/joepublisher/businessEntity.xml (original) +++ juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/joepublisher/businessEntity.xml Fri Nov 16 19:46:28 2012 @@ -15,7 +15,14 @@ * limitations under the License. * */ --> -<businessEntity xmlns="urn:uddi-org:api_v3" xmlns:xml="http://www.w3.org/XML/1998/namespace" businessKey="uddi:uddi.joepublisher.com:businessone"> +<businessEntity + xmlns="urn:uddi-org:api_v3" + xmlns:xml="http://www.w3.org/XML/1998/namespace" + businessKey="uddi:uddi.joepublisher.com:businessone" + xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" + 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" +> <discoveryURLs> <discoveryURL useType="home">http://www.businessone.com</discoveryURL> <discoveryURL useType="serviceList">http://www.businessone.com/services</discoveryURL> @@ -57,4 +64,65 @@ <identifierBag> <keyedReference tModelKey="uddi:tmodelkey:identifier" keyName="identify" keyValue="identity" /> </identifierBag> + <ns2:Signature> + <ns2:SignedInfo> + <ns2:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> + <ns2:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/> + <ns2:Reference URI=""> + <ns2:Transforms> + <ns2:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> + <ns2:XPath> + not(ancestor-or-self::Signature) + </ns2:XPath> + <a xmlns="http://mycustomernamespace/" xmlns:myotherothersigprefix="http://www.other2.com/"> + </a> + </ns2:Transform> + </ns2:Transforms> + <ns2:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> + <ns2:DigestValue>LfYUewvRm4ezL9t4X2d8Kxdzrj8=</ns2:DigestValue> + </ns2:Reference> + </ns2:SignedInfo> + <ns2:SignatureValue>UJYI43pA5O7gGfz3bXp8JOL4/YNE7nyDh3HoTAIYYkSn3xfbIf/MZg==</ns2:SignatureValue> + <ns2:KeyInfo> + <ns2:KeyName>Test Key Name</ns2:KeyName> + <ns2:KeyValue> + <ns2:DSAKeyValue> + <ns2:P>TstP</ns2:P> + <ns2:Q>TstQ</ns2:Q> + <ns2:G>TstG</ns2:G> + <ns2:Y>TstY</ns2:Y> + <ns2:J>TstJ</ns2:J> + <ns2:Seed>TestSeed</ns2:Seed> + <ns2:PgenCounter>TestPGenCounter</ns2:PgenCounter> + </ns2:DSAKeyValue> + <ns2:RSAKeyValue> + <ns2:Modulus>xA7SEU+e0yQH5rm9kbCDN9o3aPIo7HbP7tX6WOocLZAtNfyxSZDU16ksL6W + jubafOqNEpcwR3RdFsT7bCqnXPBe5ELh5u4VEy19MzxkXRgrMvavzyBpVRgBUwUlV + 5foK5hhmbktQhyNdy/6LpQRhDUDsTvK+g9Ucj47es9AQJ3U=</ns2:Modulus> + <ns2:Exponent>AQAB</ns2:Exponent> + </ns2:RSAKeyValue> + </ns2:KeyValue> + <ns2:MgmtData>Test Mgmt Data</ns2:MgmtData> + <ns2:RetrievalMethod Type="TestType" URI="TestURI"> + <ns2:Transforms> + <ns2:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> + <ns2:XPath xmlns:mydsigprefix="http://www.w3.org/2000/09/xmldsig#"> + not(ancestor-or-self::mydsigprefix:RetrievalMethod) + </ns2:XPath> + </ns2:Transform> + </ns2:Transforms> + </ns2:RetrievalMethod> + <ns2:PGPData> + <ns2:PGPKeyID>TstKeyID</ns2:PGPKeyID> + <ns2:PGPKeyPacket>TestPGPKeyPacket</ns2:PGPKeyPacket> + </ns2:PGPData> + <ns2:SPKIData> + <ns2:SPKISexp>TestSPKISexp</ns2:SPKISexp> + </ns2:SPKIData> + <ns2:X509Data xmlns="urn:uddi-org:api_v3"> + <ns2:X509Certificate>MIIC9TCCArOgAwIBAgIET/GwbTALBgcqhkjOOAQDBQAwXjELMAkGA1UEBhMCQ0MxCzAJBgNVBAgTAlNUMQ0wCwYDVQQHEwRDaXR5MQwwCgYDVQQKEwNPcmcxEDAOBgNVBAsTB09yZ1VuaXQxEzARBgNVBAMTCkZpcnN0IExhc3QwHhcNMTIwNzAyMTQzMDA1WhcNMTIwOTMwMTQzMDA1WjBeMQswCQYDVQQGEwJDQzELMAkGA1UECBMCU1QxDTALBgNVBAcTBENpdHkxDDAKBgNVBAoTA09yZzEQMA4GA1UECxMHT3JnVW5pdDETMBEGA1UEAxMKRmlyc3QgTGFzdDCCAbcwggEsBgcqhkjOOAQBMIIBHwKBgQD9f1OBHXUSKVLfSpwu7OTn9hG3UjzvRADDHj+AtlEmaUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeBO4AdNG/yZmC3a5lQpaSfn+gEexAiwk+7qdf+t8Yb+DtX58aophUPBPuD9tPFHsMCNVQTWhaRMvZ1864rYdcq7/IiAxmd0UgBxwIVAJdgUI8VIwvMspK5gqLrhAvwWBz1AoGBAPfhoIXWmz3ey7yrXDa4V7l5lK+7+jrqgvlXTAs9B4JnUVlXjrrUWU/mcQcQgYC0SRZxI+hMKBYTt88JMozIpuE8FnqLVHyNKOCjrh4rs6Z1kW6jfwv6ITVi8ftiegEkO8yk8b6oUZCJqIPf4VrlnwaSi2ZegHtVJWQBTDv+z0kqA4GEAAKBgGt63jF7cdAX8c43zp3IclOIp2nF5GOnqtRMXSjgNzk23gD7YwclqOkXz5rWnpLUsVVWZ1QYg6Bb0cOeh90rNrD6u5TqMQ9piJgoT9FENfdJs3B/YcpMfrBdsTk4Z7ESpS0HUTFnAymf8gQNSw9nQa0kPkAKBpJeV3Lh0X2FeU9DMAsGByqGSM44BAMFAAMvAD AsAhQ4pPzahHdxHjey/WxXZgMW+1Y8uwIUI+G1wC6N1+zUcn1rJqp/2IbuXO4=</ns2:X509Certificate> + <ns2:X509SubjectName>CN=First Last,OU=OrgUnit,O=Org,L=City,ST=ST,C=CC</ns2:X509SubjectName> + </ns2:X509Data> + </ns2:KeyInfo> + </ns2:Signature> </businessEntity> \ No newline at end of file Added: juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/signature/signature.jks URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/signature/signature.jks?rev=1410551&view=auto ============================================================================== Binary file - no diff available. Propchange: juddi/trunk/uddi-tck-base/src/main/resources/uddi_data/signature/signature.jks ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Modified: juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_030_BusinessEntityIntegrationTest.java URL: http://svn.apache.org/viewvc/juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_030_BusinessEntityIntegrationTest.java?rev=1410551&r1=1410550&r2=1410551&view=diff ============================================================================== --- juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_030_BusinessEntityIntegrationTest.java (original) +++ juddi/trunk/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_030_BusinessEntityIntegrationTest.java Fri Nov 16 19:46:28 2012 @@ -73,7 +73,17 @@ public class UDDI_030_BusinessEntityInte } } - + @Test + public void testJoePublisherBusinessEntitySignature() { + try { + tckTModel.saveJoePublisherTmodel(authInfoJoe); + tckBusiness.saveJoePublisherBusinessX509Signature(authInfoJoe); + tckFindEntity.findAllBusiness(); + tckBusiness.deleteJoePublisherBusiness(authInfoJoe); + } finally { + tckTModel.deleteJoePublisherTmodel(authInfoJoe); + } + } @Test public void testJoePublisherBusinessEntity() { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
