![]() |
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
(DataFlex) How to Generate an Elliptic Curve Shared SecretDemonstrates how to generate an ECC (Elliptic Curve Cryptography) shared secret. Imagine a cilent has one ECC private key, the server has another. A shared secret is computed by each side providing it's public key to the other. The private keys are kept private. Note: This example requires Chilkat v11.0.0 or greater.
Use ChilkatAx-win32.pkg Procedure Test Boolean iSuccess Variant vPrngClient Handle hoPrngClient Handle hoEccClient Variant vPrivKeyClient Handle hoPrivKeyClient Variant vPubKeyClient Handle hoPubKeyClient Variant vPrngServer Handle hoPrngServer Handle hoEccServer Variant vPrivKeyServer Handle hoPrivKeyServer Variant vPubKeyServer Handle hoPubKeyServer Variant vPubKeyFromServer Handle hoPubKeyFromServer String sSharedSecret1 Variant vPubKeyFromClient Handle hoPubKeyFromClient String sSharedSecret2 String sTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // This example includes both client-side and server-side code. // Each code segment is marked as client-side or server-side. // Imagine these segments are running on separate computers... // ----------------------------------------------------------------- // (Client-Side) Generate an ECC key, save the public part to a file. // ----------------------------------------------------------------- Get Create (RefClass(cComChilkatPrng)) To hoPrngClient If (Not(IsComObjectCreated(hoPrngClient))) Begin Send CreateComObject of hoPrngClient End Get Create (RefClass(cComChilkatEcc)) To hoEccClient If (Not(IsComObjectCreated(hoEccClient))) Begin Send CreateComObject of hoEccClient End Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKeyClient If (Not(IsComObjectCreated(hoPrivKeyClient))) Begin Send CreateComObject of hoPrivKeyClient End Get pvComObject of hoPrngClient to vPrngClient Get pvComObject of hoPrivKeyClient to vPrivKeyClient Get ComGenKey Of hoEccClient "secp256r1" vPrngClient vPrivKeyClient To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoEccClient To sTemp1 Showln sTemp1 Procedure_Return End Get Create (RefClass(cComChilkatPublicKey)) To hoPubKeyClient If (Not(IsComObjectCreated(hoPubKeyClient))) Begin Send CreateComObject of hoPubKeyClient End Get pvComObject of hoPubKeyClient to vPubKeyClient Get ComToPublicKey Of hoPrivKeyClient vPubKeyClient To iSuccess Get ComSavePemFile Of hoPubKeyClient False "qa_output/eccClientPub.pem" To iSuccess // ----------------------------------------------------------------- // (Server-Side) Generate an ECC key, save the public part to a file. // ----------------------------------------------------------------- Get Create (RefClass(cComChilkatPrng)) To hoPrngServer If (Not(IsComObjectCreated(hoPrngServer))) Begin Send CreateComObject of hoPrngServer End Get Create (RefClass(cComChilkatEcc)) To hoEccServer If (Not(IsComObjectCreated(hoEccServer))) Begin Send CreateComObject of hoEccServer End Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKeyServer If (Not(IsComObjectCreated(hoPrivKeyServer))) Begin Send CreateComObject of hoPrivKeyServer End Get pvComObject of hoPrngServer to vPrngServer Get pvComObject of hoPrivKeyServer to vPrivKeyServer Get ComGenKey Of hoEccServer "secp256r1" vPrngServer vPrivKeyServer To iSuccess Get Create (RefClass(cComChilkatPublicKey)) To hoPubKeyServer If (Not(IsComObjectCreated(hoPubKeyServer))) Begin Send CreateComObject of hoPubKeyServer End Get pvComObject of hoPubKeyServer to vPubKeyServer Get ComToPublicKey Of hoPrivKeyServer vPubKeyServer To iSuccess Get ComSavePemFile Of hoPubKeyServer False "qa_output/eccServerPub.pem" To iSuccess // ----------------------------------------------------------------- // (Client-Side) Generate the shared secret using our private key, and the other's public key. // ----------------------------------------------------------------- // Imagine that the server sent the public key PEM to the client. // (This is simulated by loading the server's public key from the file. Get Create (RefClass(cComChilkatPublicKey)) To hoPubKeyFromServer If (Not(IsComObjectCreated(hoPubKeyFromServer))) Begin Send CreateComObject of hoPubKeyFromServer End Get ComLoadFromFile Of hoPubKeyFromServer "qa_output/eccServerPub.pem" To iSuccess Get pvComObject of hoPrivKeyClient to vPrivKeyClient Get pvComObject of hoPubKeyFromServer to vPubKeyFromServer Get ComSharedSecretENC Of hoEccClient vPrivKeyClient vPubKeyFromServer "base64" To sSharedSecret1 // ----------------------------------------------------------------- // (Server-Side) Generate the shared secret using our private key, and the other's public key. // ----------------------------------------------------------------- // Imagine that the client sent the public key PEM to the server. // (This is simulated by loading the client's public key from the file. Get Create (RefClass(cComChilkatPublicKey)) To hoPubKeyFromClient If (Not(IsComObjectCreated(hoPubKeyFromClient))) Begin Send CreateComObject of hoPubKeyFromClient End Get ComLoadFromFile Of hoPubKeyFromClient "qa_output/eccClientPub.pem" To iSuccess Get pvComObject of hoPrivKeyServer to vPrivKeyServer Get pvComObject of hoPubKeyFromClient to vPubKeyFromClient Get ComSharedSecretENC Of hoEccServer vPrivKeyServer vPubKeyFromClient "base64" To sSharedSecret2 // --------------------------------------------------------- // Examine the shared secrets. They should be the same. // Both sides now have a secret that only they know. // --------------------------------------------------------- Showln sSharedSecret1 Showln sSharedSecret2 End_Procedure |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.