ClassMethod DecryptDoc(filename As %String)
{
#include %soap
set reader=##class(%XML.Reader).%New()
set status=reader.OpenFile(filename)
if $$$ISERR(status) {do $System.Status.DisplayError(status) quit }
set doc=reader.Document
//get <Signature> element
do reader.Correlate("EncryptedKey","%XML.Security.EncryptedKey")
if 'reader.Next(.ikey,.status) {
write !,"unable to import key",!
do $system.OBJ.DisplayError(status)
quit
}
set keys=##class(%Collection.ListOfObj).%New()
do keys.Insert(ikey)
// the following step returns the decrypted document
set status=##class(%XML.Security.EncryptedData).ValidateDocument(.doc,keys)
set writer=##class(%XML.Writer).%New()
set writer.Indent=1
do writer.Document(doc)
quit $$$OK
}