var xmldoc, xmldsig, infile; var szResult = ""; NOKEYINFO = 0; KEYVALUE = 1; CERTIFICATES = 2; PURGE = 4; DSIGNS = "xmlns:ds='http://www.w3.org/2000/09/xmldsig#'"; PROV_RSA_FULL = 1; // Change this key container name to your own if necessary. RSA_KEY = "MyRSAFullKeys"; csp = PROV_RSA_FULL; key = RSA_KEY; infile = "signature_template.sign.rsa.xml"; if (InitXML()) { if (LoadXML(infile)) { alert("Sign with fwWriteKeyInfo = NOKEYINFO:"); SignXML(NOKEYINFO); alert("Sign with fwWriteKeyInfo = KEYVALUE:"); SignXML(KEYVALUE|PURGE); alert("Sign with fwWriteKeyInfo = CERTIFICATES:"); SignXML(CERTIFICATES); alert("Sign with fwWriteKeyInfo = CERTIFICATES|PURGE:"); SignXML(CERTIFICATES|PURGE); alert("Sign with fwWriteKeyInfo = PURGE:"); SignXML(PURGE); } } ///////// Helper functions. ///////// function alert(str) { WScript.echo(str); } ///////// Set the signature for signing. //////// function InitXML() { try { xmldoc = new ActiveXObject("Msxml2.DOMDOcument.5.0"); xmldsig= new ActiveXObject("Msxml2.MXDigitalSignature.5.0"); } catch (e) { alert("Installation of mxsml5 is required to run this app.\n"); return false; } xmldoc.async = false; xmldoc.preserveWhiteSpace = true; xmldoc.validateOnParse = false; xmldoc.resolveExternals = false; return true; } function LoadXML(file) { if (xmldoc == null) { alert("must instantiate xml dom\n"); return false; } if (!xmldoc.load(file)) { alert("Can't load "+ file + "\n"); return false; } xmldoc.setProperty("SelectionNamespaces", DSIGNS); xmldsig.signature = xmldoc.selectSingleNode(".//ds:Signature"); return true; } function SignXML(fwWriteKeyInfo) { if (!xmldsig.signature) { alert("Invalid signature template\n"); return false; } var oKey = xmldsig.createKeyFromCSP(csp, "", key, 0); if (!oKey) { alert("Invalid key.\n"); return false; } var oSignedKey = xmldsig.sign(oKey,fwWriteKeyInfo); if (!oSignedKey) { alert("sign failed.\n"); return false; } alert("The specified data was signed successfully.\n"+ "Resultant signature:\n"+ xmldoc.xml + "\n"); return true; }
Try It!
Note Under operating systems other than Windows 2000 or Windows XP, you might need to install Windows Scripting Host (to run cscript.exe or wscript.exe), if it is not already installed.