![]() |
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
(PureBasic) Sign String to create a CAdES-T Signature, using HTTP Proxy to Access Timestamp ServerThis example will sign a string to create a CAdEST-T signature. It will use an HTTP proxy to access the timestamp server.
IncludeFile "CkBinData.pb" IncludeFile "CkCert.pb" IncludeFile "CkJsonObject.pb" IncludeFile "CkHttp.pb" IncludeFile "CkCrypt2.pb" Procedure ChilkatExample() crypt.i = CkCrypt2::ckCreate() If crypt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf cert.i = CkCert::ckCreate() If cert.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkCert::setCkSmartCardPin(cert, "123456") success.i = CkCert::ckLoadFromSmartcard(cert,"") If success <> 1 Debug CkCert::ckLastErrorText(cert) CkCrypt2::ckDispose(crypt) CkCert::ckDispose(cert) ProcedureReturn EndIf success = CkCrypt2::ckSetSigningCert(crypt,cert) ; Use SHA-256 rather than the default of SHA-1 CkCrypt2::setCkHashAlgorithm(crypt, "sha256") ; Create JSON that tells Chilkat what signing attributes to include: attrs.i = CkJsonObject::ckCreate() If attrs.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckUpdateBool(attrs,"contentType",1) CkJsonObject::ckUpdateBool(attrs,"signingTime",1) CkJsonObject::ckUpdateBool(attrs,"messageDigest",1) CkJsonObject::ckUpdateBool(attrs,"signingCertificateV2",1) ; A CAdES-T signature is one that includes a timestampToken created by an online TSA (time stamping authority). ; We must include the TSA's URL, as well as a few options to indicate what is desired. ; Except for the TSA URL, the options shown here are typically what you would need. CkJsonObject::ckUpdateBool(attrs,"timestampToken.enabled",1) CkJsonObject::ckUpdateString(attrs,"timestampToken.tsaUrl","https://freetsa.org/tsr") CkJsonObject::ckUpdateBool(attrs,"timestampToken.addNonce",0) CkJsonObject::ckUpdateBool(attrs,"timestampToken.requestTsaCert",1) CkJsonObject::ckUpdateString(attrs,"timestampToken.hashAlg","sha256") CkCrypt2::setCkSigningAttributes(crypt, CkJsonObject::ckEmit(attrs)) strToSign.s = "Hello World!" bd.i = CkBinData::ckCreate() If bd.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkBinData::ckAppendString(bd,strToSign,"utf-8") ; ------------------------------------------------------------------------- ; The purpose of this example is to show how an HTTP object with custom ; settings can be used to access the Internet when signing. ; Access to the Internet is needed to communicate with the timestamp server. http.i = CkHttp::ckCreate() If http.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; This can be a domain name, hostname, or IP address. CkHttp::setCkProxyDomain(http, "172.16.16.56") CkHttp::setCkProxyPort(http, 808) CkHttp::setCkProxyLogin(http, "myProxyLogin") CkHttp::setCkProxyPassword(http, "myProxyPassword") CkCrypt2::ckSetTsaHttpObj(crypt,http) ; ------------------------------------------------------------------------- ; This creates the CAdES-T signature. During the signature creation, it ; communicates with the TSA to get a timestampToken. ; The contents of bd are signed and replaced with the CAdES-T signature (which embeds the original content). success = CkCrypt2::ckOpaqueSignBd(crypt,bd) If success <> 1 Debug CkCrypt2::ckLastErrorText(crypt) CkCrypt2::ckDispose(crypt) CkCert::ckDispose(cert) CkJsonObject::ckDispose(attrs) CkBinData::ckDispose(bd) CkHttp::ckDispose(http) ProcedureReturn EndIf ; Get the signature in base64 format: Debug CkBinData::ckGetEncoded(bd,"base64_mime") Debug "Success." CkCrypt2::ckDispose(crypt) CkCert::ckDispose(cert) CkJsonObject::ckDispose(attrs) CkBinData::ckDispose(bd) CkHttp::ckDispose(http) ProcedureReturn EndProcedure |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.