Visual Basic Source: sign.frm
Dim xmldoc As New DOMDocument50
Dim xmldsig As New MXDigitalSignature50
Dim dsigKey As IXMLDSigKey
Dim dataObj As IXMLDOMNode
Dim infile, provType, keyContainer
Const DSIGNS = "xmlns:ds='http://www.w3.org/2000/09/xmldsig#'"
Const PROV_RSA_FULL = 1
' Change this key container name to your own if necessary.
Const RSA_KEY = "MyRSAFullKeys"
Private Function WriteLine(ByVal str As String)
Text1.Text = Text1.Text + str + vbNewLine
End Function
Private Function writeClear()
Text1.Text = ""
End Function
Private Function LoadXML(ByVal file As String)
' Read input XML file and display the content in the text3.
Path = App.Path + "\" + file
xmldoc.async = False
xmldoc.preserveWhiteSpace = True
xmldoc.validateOnParse = False
xmldoc.resolveExternals = False
If xmldoc.Load(Path) = False Then
WriteLine "Can't load " + Path
WriteLine "Reason: " + xmldoc.parseError.reason
LoadXML = False
Exit Function
End If
xmldoc.setProperty "SelectionNamespaces", DSIGNS
Set xmldsig.signature = xmldoc.selectSingleNode(".//ds:Signature")
LoadXML = True
End Function
Private Function SignXML(fwWriteKeyInfo As Long)
If xmldsig.signature Is Nothing Then
WriteLine "Invalid signature template."
SignXML = False
Exit Function
End If
If keyContainer = "" Then
WriteLine "Invalid key container."
SignXML = False
Exit Function
End If
Set oKey = xmldsig.createKeyFromCSP(provType, "", keyContainer, 0)
If oKey Is Nothing Then
WriteLine "Invalid key"
SignXML = False
Exit Function
End If
Set oSignedKey = xmldsig.sign(oKey, fwWriteKeyInfo)
If oSignedKey Is Nothing Then
WriteLine "sign failed."
SignXML = False
Exit Function
End If
WriteLine "The specified data was signed succesffully."
WriteLine "Resultant signature: "
WriteLine xmldoc.xml
SignXML = True
End Function
Private Sub Form_Load()
'Set text box to use form to determine its width
'and height when form is loaded
Text1.Left = 100
Text1.Top = 100
Text1.Width = Form1.Width - 350
Text1.Height = Form1.Height - 750
provType = PROV_RSA_FULL
keyContainer = RSA_KEY
infile = "signature_template.sign.rsa.xml"
writeClear
If LoadXML(infile) = True Then
WriteLine "Sign with fwWriteKeyInfo = NOKEYINFO:"
SignXML NOKEYINFO
WriteLine "Sign with fwWriteKeyInfo = KEYVALUE:"
SignXML KEYVALUE
WriteLine "Sign with fwWriteKeyInfo = CERTIFICATES:"
SignXML CERTIFICATES
WriteLine "Sign with fwWriteKeyInfo = CERTIFICATES|PURGE:"
SignXML CERTIFICATES + PURGE
WriteLine "Sign with fwWriteKeyInfo = PURGE:"
SignXML PURGE
End If
End Sub
Private Sub Form_Resize()
'Set text box to use form in determining its width and height
'when form is resized
Text1.Width = Form1.Width - 350
Text1.Height = Form1.Height - 750
End Sub
Try It!
- Ensure that you have completed all the procedures in Getting Started with XML Digital Signatures.
- Copy the XML signature template resource file, and paste it into a text file. Save the file as signature_template.sign.rsa.xml.
- Create a Standard EXE project in Visual Basic. Save the empty project as sign.vbp to the same directory where you saved signature_template.sign.rsa.xml. Save the form file as sign.frm.
- Create a reference to MSXML 5.0. To do this, select References... from the Project menu, and then check the box for Microsoft XML, v5.0.
- Double click on the TextBox icon from the tools menu. A TextBox control will appear on the project's form named "Text1". In the Properties window, set the value for the ScrollBar property to "2 – Vertical" and the value of the MultiLine property to True.
- Copy the Visual Basic code listing above, and paste it into the code editor to replace whatever is already there.
- Execute the code by selecting Start from the Run menu.
- Verify that the output is similar to that listed in the Output topic. You can resize the form as needed to view the output text more easily.
