![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Visual FoxPro) Create Enveloping XML Digital SignatureThis example creates an enveloping digital signature. Note: This example requires Chilkat v11.0.0 or greater.
LOCAL lnSuccess LOCAL loHttp LOCAL loZipFile LOCAL lcKeyUrl LOCAL loZip LOCAL loEntry LOCAL loEcKey LOCAL loGen LOCAL loSbContent LOCAL loSbXml lnSuccess = 0 * This example requires the Chilkat API to have been previously unlocked. * See Global Unlock Sample for sample code. * Let's use the ECDSA private key at https://www.chilkatsoft.com/exampleData/secp256r1-key.zip * for signing. loHttp = CreateObject('Chilkat.Http') loZipFile = CreateObject('Chilkat.BinData') lcKeyUrl = "https://www.chilkatsoft.com/exampleData/secp256r1-key.zip" lnSuccess = loHttp.QuickGetBd(lcKeyUrl,loZipFile) IF (lnSuccess = 0) THEN ? loHttp.LastErrorText RELEASE loHttp RELEASE loZipFile CANCEL ENDIF loZip = CreateObject('Chilkat.Zip') lnSuccess = loZip.OpenBd(loZipFile) loEntry = CreateObject('Chilkat.ZipEntry') lnSuccess = loZip.EntryMatching("*.pem",loEntry) IF (lnSuccess = 0) THEN ? loZip.LastErrorText RELEASE loHttp RELEASE loZipFile RELEASE loZip RELEASE loEntry CANCEL ENDIF loEcKey = CreateObject('Chilkat.PrivateKey') lnSuccess = loEcKey.LoadPem(loEntry.UnzipToString(0,"utf-8")) IF (lnSuccess <> 1) THEN ? loEcKey.LastErrorText RELEASE loHttp RELEASE loZipFile RELEASE loZip RELEASE loEntry RELEASE loEcKey CANCEL ENDIF * ---------------------------------------------------------------------------- loGen = CreateObject('Chilkat.XmlDSigGen') * Provide the ECDSA key to the XML Digital Signature generator loGen.SetPrivateKey(loEcKey) * Add an enveloped reference to the content to be signed. loSbContent = CreateObject('Chilkat.StringBuilder') loSbContent.Append("This is the content that is signed.") loGen.AddEnvelopedRef("abc123",loSbContent,"sha256","C14N","") * Generate the XML digital signature. * Notice that in other examples, the sbXml passed to CreateXmlDSigSb * already contains XML, and the XML signature is inserted at the location * specified by the SigLocation property. In this case, both SigLocation * and sbXml are empty. The result is that sbXml will contain just the Signature. loSbXml = CreateObject('Chilkat.StringBuilder') lnSuccess = loGen.CreateXmlDSigSb(loSbXml) IF (lnSuccess = 0) THEN ? loGen.LastErrorText RELEASE loHttp RELEASE loZipFile RELEASE loZip RELEASE loEntry RELEASE loEcKey RELEASE loGen RELEASE loSbContent RELEASE loSbXml CANCEL ENDIF * Examine the enveloped signature, where the data is contained within the XML Signature ? loSbXml.GetAsString() * The Signature returned is compact and in a single line, like this: * <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"/><ds:Reference URI="#abc123"><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>tEVrbXXjeTXjF3tIojul4/sgeEGN49E1dxr/GMs8GNE=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>/pILUshwrzgdGc4bPgp85TDfbUiM9pn8EIPNRVWKuoVEtPsv4XRthUrv9aDDvajmyl2okLwTakANgtaxO1ULMw==</ds:SignatureValue><ds:KeyInfo><ds:KeyValue><ds:ECKeyValue xmlns="http://www.w3.org/2009/xmldsig11#"><ds:NamedCurve URI="urn:oid:1.2.840.10045.3.1.7" /><ds:PublicKey>BOVKaiLPKEDChhkA64UEBOXTv/VFHnhrUPN+bXqCvEl7rroAYpH5tKzbiGTtMSlp4JO9Pxg44zeX7EoWDvOrpD0=</ds:PublicKey></ds:ECKeyValue></ds:KeyValue></ds:KeyInfo><ds:Object Id="abc123">This is the content that is signed.</ds:Object></ds:Signature> * XML pretty-printed, the signature is as follows, but pretty-printing introductes whitespace that breaks the signature.. * <?xml version="1.0" encoding="utf-8" ?> * <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> * <ds:SignedInfo> * <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> * <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256" /> * <ds:Reference URI="#abc123"> * <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> * <ds:DigestValue>tEVrbXXjeTXjF3tIojul4/sgeEGN49E1dxr/GMs8GNE=</ds:DigestValue> * </ds:Reference> * </ds:SignedInfo> * <ds:SignatureValue>/pILUshwrzgdGc4bPgp85TDfbUiM9pn8EIPNRVWKuoVEtPsv4XRthUrv9aDDvajmyl2okLwTakANgtaxO1ULMw==</ds:SignatureValue> * <ds:KeyInfo> * <ds:KeyValue> * <ds:ECKeyValue xmlns="http://www.w3.org/2009/xmldsig11#"> * <ds:NamedCurve URI="urn:oid:1.2.840.10045.3.1.7" /> * <ds:PublicKey>BOVKaiLPKEDChhkA64UEBOXTv/VFHnhrUPN+bXqCvEl7rroAYpH5tKzbiGTtMSlp4JO9Pxg44zeX7EoWDvOrpD0=</ds:PublicKey> * </ds:ECKeyValue> * </ds:KeyValue> * </ds:KeyInfo> * <ds:Object Id="abc123">This is the content that is signed.</ds:Object> * </ds:Signature> * RELEASE loHttp RELEASE loZipFile RELEASE loZip RELEASE loEntry RELEASE loEcKey RELEASE loGen RELEASE loSbContent RELEASE loSbXml |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.