Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... 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.
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 Boolean bTemp1 // 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 pvComObject of hoPrngClient to vPrngClient Get ComGenEccKey Of hoEccClient "secp256r1" vPrngClient To vPrivKeyClient If (IsComObject(vPrivKeyClient)) Begin Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKeyClient Set pvComObject Of hoPrivKeyClient To vPrivKeyClient End Get ComLastMethodSuccess Of hoEccClient To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoEccClient To sTemp1 Showln sTemp1 Procedure_Return End Get ComGetPublicKey Of hoPrivKeyClient To vPubKeyClient If (IsComObject(vPubKeyClient)) Begin Get Create (RefClass(cComChilkatPublicKey)) To hoPubKeyClient Set pvComObject Of hoPubKeyClient To vPubKeyClient End Get ComSavePemFile Of hoPubKeyClient False "qa_output/eccClientPub.pem" To iSuccess Send Destroy of hoPubKeyClient // ----------------------------------------------------------------- // (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 pvComObject of hoPrngServer to vPrngServer Get ComGenEccKey Of hoEccServer "secp256r1" vPrngServer To vPrivKeyServer If (IsComObject(vPrivKeyServer)) Begin Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKeyServer Set pvComObject Of hoPrivKeyServer To vPrivKeyServer End Get ComLastMethodSuccess Of hoEccServer To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoEccServer To sTemp1 Showln sTemp1 Procedure_Return End Get ComGetPublicKey Of hoPrivKeyServer To vPubKeyServer If (IsComObject(vPubKeyServer)) Begin Get Create (RefClass(cComChilkatPublicKey)) To hoPubKeyServer Set pvComObject Of hoPubKeyServer To vPubKeyServer End Get ComSavePemFile Of hoPubKeyServer False "qa_output/eccServerPub.pem" To iSuccess Send Destroy of hoPubKeyServer // ----------------------------------------------------------------- // (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 hoPubKeyFromServer to vPubKeyFromServer Get ComSharedSecretENC Of hoEccClient vPrivKeyClient vPubKeyFromServer "base64" To sSharedSecret1 Send Destroy of hoPrivKeyClient // ----------------------------------------------------------------- // (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 hoPubKeyFromClient to vPubKeyFromClient Get ComSharedSecretENC Of hoEccServer vPrivKeyServer vPubKeyFromClient "base64" To sSharedSecret2 Send Destroy of hoPrivKeyServer // --------------------------------------------------------- // 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-2024 Chilkat Software, Inc. All Rights Reserved.