setReferenceData Method
[This sample code uses features that were implemented in MSXML 5.0 for Microsoft Office Applications. XML digital signatures are not supported in MXSML 6.0 and later.]
Assigns a new data source to a specified <ds:Reference>
element within a signature object. You can use this method to sign or verify different data from the default data source.
JScript Syntax
objXMLDigitalSignature.setReferenceData(uri, pSRC);
Visual Basic Syntax
objXMLDigitalSignature.setReferenceData
(uri, pSRC)
C/C++ Syntax Using Smart Pointers
objXMLDigitalSignature->setReferenceData(uri, pSRC);
C/C++ Syntax
HRESULT setReferenceData(
BSTR uri,
IUnknown* pSRC);
Parameters
uri[in]
Identifies the <ds:Reference>
element. The string value of this parameter is matched against the URI
attribute value of a <ds:Reference>
element within an XML digital signature object. To locate a <ds:Reference>
element without the URI
attribute, set this parameter to "##null
".
pSRC[in]
The new data source for use with the specified <ds:Reference>
element for future verification or signing. The new data can be represented as an IXMLDOMNode
, an IStream
object, or a SAX proxy object created by the createSAXProxy Method method. For a SAX proxy, the caller must start the SAX reader by calling its parse
or parseURL
methods or performing other equivalent operations before sign
or verify
can proceed.
Return Values
S_OK
The value returned if successful.
E_FAILURE
The value returned if the method call failed.
Remarks
This method does not resolve or check the content of the uri
parameter. It uses uri
only to locate appropriate <ds:Reference>
elements in the signature or template. To specify the <ds:Reference>
element with NULL URI
attribute value (that is, the <ds:Reference>
element without the URI
attribute ), use "##null"
in the uri
parameter. This method does not modify the <ds:Signature>
XML fragment.
You must set the signature
property before calling this method.
The new data source (pSrc
) object can be any of the following types:
An
IXMLOMNode
object, which must be either a document or an element node, is treated as an XML document.An
IStream
object is treated as a binary stream containing either XML or non-XML data, unless the stream undergoes a transformation that outputs XML. In the latter case, theIStream
object is treated as an XML document.A SAX proxy object, which must be connected to a SAX Reader that accepts a SAX stream, is treated as an XML document.
Although <ds:Signature>
can have multiple <ds:Reference>
elements with the same URI
attribute value, you cannot override their data source using the setReferenceData
method. Calling setReferenceData
on such a signature object to override the data source will result in an error.
The setReferenceData
method initiates the computation of the digest value either immediately or some time later. Therefore, once set, the new data source should not be modified or destroyed before you call sign
or verify
. Otherwise, the result is undefined.
Example
This example uses a enveloping signature template that contains two <ds:Object>
elements. Each contains a simple text string. One object (obj2
) is referenced in the <ds:Reference>
element and the other is not. By default, signing is performed on the referenced data only. However, you can use the setReferenceData
method to specify different data to be signed and/or verified.
The example uses an enveloping signature template, and outputs a signed signature file.
We've provided source files for the sample in three languages: JScript, Visual Basic, and C++. The output is the same in each language.
Applies to
IXMLDigitalSignature | IXMLDigitalSignatureEx
Versioning
MSXML 5.0 for Microsoft Office Applications and later