AutoIt
AutoIt
Verify an XML Signature with Multiple References
See more XML Digital Signatures Examples
Demonstrates how to verify an XML digital signature that contains multiple references.Chilkat AutoIt Downloads
Local $bSuccess = False
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
; An example of an enveloping XML signature with mulitple references is available at
; https://www.chilkatsoft.com/exampleData/envelopedMultipleRefs.xml
; This example will show how to verify the signature and all references, and also how
; to verify each reference individually. This is useful to distinguish which part
; of the XML signature validation failed. It could be that one or more of the references
; failed because of a hash computation mismatch. Or it could be that the signature over
; the SignedInfo failed.
; First, let's grab the sample XML signature.
$oHttp = ObjCreate("Chilkat.Http")
$oSbXml = ObjCreate("Chilkat.StringBuilder")
$bSuccess = $oHttp.QuickGetSb("https://www.chilkatsoft.com/exampleData/envelopedMultipleRefs.xml",$oSbXml)
If ($bSuccess <> True) Then
ConsoleWrite($oHttp.LastErrorText & @CRLF)
Exit
EndIf
; Load the XML containing the signature to be verified.
$oVerifier = ObjCreate("Chilkat.XmlDSig")
$bSuccess = $oVerifier.LoadSignatureSb($oSbXml)
If ($bSuccess <> True) Then
ConsoleWrite($oVerifier.LastErrorText & @CRLF)
Exit
EndIf
Local $bVerifyReferenceDigests = True
; The quick way to validate all references and the signature over the SignedInfo
; is to call VerifySignature with verifyReferenceDigests equal to True.
Local $bVerified = $oVerifier.VerifySignature($bVerifyReferenceDigests)
ConsoleWrite("Signature and all reference digests verified = " & $bVerified & @CRLF)
; Let's pretend the call to VerifySignature returned False. Something did not validate.
; Was it one or more of the References that did not hash to the correct value?
; Or was it the signature over the SignedInfo that failed?
; We can check just the signature over the SignedInfo by passing False to VerifySignature.
; This allows us to skip the hashing and checking each Reference.
$bVerifyReferenceDigests = False
Local $bSignedInfoVerified = $oVerifier.VerifySignature($bVerifyReferenceDigests)
ConsoleWrite("Neglecting the reference hashes, the SignedInfo validation result = " & $bSignedInfoVerified & @CRLF)
; We can also verify each reference digest separately
Local $iNumRefs = $oVerifier.NumReferences
Local $i = 0
While $i < $iNumRefs
Local $bRefDigestVerified = $oVerifier.VerifyReferenceDigest($i)
ConsoleWrite("Reference " & $i & " digest verified = " & $bRefDigestVerified & @CRLF)
$i = $i + 1
Wend
; For this sample XML signature with 3 References, we get the following output:
; Signature and all reference digests verified = True
; Neglecting the reference hashes, the SignedInfo validation result = True
; Reference 0 digest verified = True
; Reference 1 digest verified = True
; Reference 2 digest verified = Tru