-/*
- * Copyright 2001-2006 Internet2
- *
- * 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
+/**
+ * Licensed to the University Corporation for Advanced Internet
+ * Development, Inc. (UCAID) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for
+ * additional information regarding copyright ownership.
+ *
+ * UCAID 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
+ * 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.
+ * 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.
*/
/**
- * @file Signature.h
+ * @file xmltooling/signature/Signature.h
*
* XMLObject representing XML Digital Signature, version 20020212, Signature element.
*/
#define __xmltooling_sig_h__
#include <xmltooling/exceptions.h>
-#include <xmltooling/XMLObjectBuilder.h>
-#include <xmltooling/signature/ContentReference.h>
-#include <xmltooling/util/XMLConstants.h>
+#include <xmltooling/ConcreteXMLObjectBuilder.h>
-#include <xsec/dsig/DSIGSignature.hpp>
+class DSIGSignature;
+class XSECCryptoKey;
/**
* @namespace xmlsignature
*/
namespace xmlsignature {
+ class XMLTOOL_API ContentReference;
class XMLTOOL_API KeyInfo;
/**
class XMLTOOL_API Signature : public virtual xmltooling::XMLObject
{
public:
- virtual ~Signature() {}
+ virtual ~Signature();
/** Element local name */
static const XMLCh LOCAL_NAME[];
/**
- * Sets the canonicalization method for the ds:SignedInfo element
+ * Gets the canonicalization method for the ds:SignedInfo element.
+ *
+ * @return the canonicalization method
+ */
+ virtual const XMLCh* getCanonicalizationMethod() const=0;
+
+ /**
+ * Gets the signing algorithm for the signature.
+ *
+ * @return the signature algorithm, or nullptr if indeterminate
+ */
+ virtual const XMLCh* getSignatureAlgorithm() const=0;
+
+ /**
+ * Sets the canonicalization method for the ds:SignedInfo element.
*
* @param c14n the canonicalization method
*/
/**
* Sets a KeyInfo object to embed in the Signature.
*
- * @param keyInfo pointer to a KeyInfo object, or NULL
+ * @param keyInfo pointer to a KeyInfo object, or nullptr
*/
virtual void setKeyInfo(KeyInfo* keyInfo)=0;
* for validation purposes is provided through the native
* DSIGSignature object.
*
- * @return pointer to a KeyInfo object, or NULL
+ * @return pointer to a KeyInfo object, or nullptr
*/
virtual KeyInfo* getKeyInfo() const=0;
* Sets the ContentReference object to the Signature to be applied
* when the signature is created.
*
- * @param reference the reference to attach, or NULL
+ * @param reference the reference to attach, or nullptr
*/
virtual void setContentReference(ContentReference* reference)=0;
* for validation purposes is provided through the native
* DSIGSignature object.
*
- * @return pointer to a ContentReference object, or NULL
+ * @return pointer to a ContentReference object, or nullptr
*/
virtual ContentReference* getContentReference() const=0;
/**
* Compute and append the signature based on the assigned
* ContentReference, KeyInfo, and signing key.
+ *
+ * @param credential optional source of signing key and KeyInfo
*/
- virtual void sign()=0;
+ virtual void sign(const xmltooling::Credential* credential=nullptr)=0;
/**
* Type-safe clone operation.
);
protected:
- Signature() {}
+ /** Default constructor. */
+ Signature();
};
/**
* Builder for Signature objects.
*/
- class XMLTOOL_API SignatureBuilder : public xmltooling::XMLObjectBuilder
+ class XMLTOOL_API SignatureBuilder : public xmltooling::ConcreteXMLObjectBuilder
{
public:
+#ifdef HAVE_COVARIANT_RETURNS
virtual Signature* buildObject(
- const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
+#else
+ virtual xmltooling::XMLObject* buildObject(
+#endif
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
) const;
/**
#else
virtual xmltooling::XMLObject* buildObject() const;
#endif
- static Signature* buildSignature() {
- const SignatureBuilder* b = dynamic_cast<const SignatureBuilder*>(
- xmltooling::XMLObjectBuilder::getBuilder(
- xmltooling::QName(xmlconstants::XMLSIG_NS,Signature::LOCAL_NAME)
- )
- );
- if (b) {
-#ifdef HAVE_COVARIANT_RETURNS
- return b->buildObject();
-#else
- return dynamic_cast<Signature*>(b->buildObject());
-#endif
- }
- throw xmltooling::XMLObjectException("Unable to obtain typed builder for Signature.");
- }
+ /** Singleton builder. */
+ static Signature* buildSignature();
};
DECL_XMLTOOLING_EXCEPTION(SignatureException,XMLTOOL_EXCEPTIONAPI(XMLTOOL_API),xmlsignature,xmltooling::XMLSecurityException,Exceptions in signature processing);