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) Get Ed25519 Key in Different FormatsDemonstrates how to get/save an Ed25519 private key to different formats. Converting a private key from one format to another is done by loading in one format and saving/getting in another. Note: This example requires Chilkat v9.5.0.83 or greater.
Use ChilkatAx-win32.pkg Procedure Test Handle hoEddsa Variant vPrng Handle hoPrng Variant vPrivKey Handle hoPrivKey Boolean iSuccess String sPkcs1Base64 String sPkcs8Base64 String sPassword String sPkcs8EncBase64 String sEd25519Pem String sJwk Handle hoJson String sEd25519_xml Variant vSbPubKeyHex Handle hoSbPubKeyHex String sPrivKeyHex String sTemp1 // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. Get Create (RefClass(cComChilkatEdDSA)) To hoEddsa If (Not(IsComObjectCreated(hoEddsa))) Begin Send CreateComObject of hoEddsa End Get Create (RefClass(cComChilkatPrng)) To hoPrng If (Not(IsComObjectCreated(hoPrng))) Begin Send CreateComObject of hoPrng End Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKey If (Not(IsComObjectCreated(hoPrivKey))) Begin Send CreateComObject of hoPrivKey End // Generates a new ed25519 key and stores it in privKey. Get pvComObject of hoPrng to vPrng Get pvComObject of hoPrivKey to vPrivKey Get ComGenEd25519Key Of hoEddsa vPrng vPrivKey To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoEddsa To sTemp1 Showln sTemp1 Procedure_Return End // ---------------------------------------------------------- // Ed25519 PKCS1 format // // This is the format created by: openssl genpkey -algorithm X25519 -out xkey.pem Get ComGetPkcs1ENC Of hoPrivKey "base64" To sPkcs1Base64 Showln sPkcs1Base64 // Sample output: MC4CAQAwBQYDK2VuBCIEIB1mwirs+eC6XGbkjPIiZyBwQ7768uSd9v5PHOLFbIXo // PKCS1 is a binary ASN.1 DER format. You can examine the contents with two online tools: // 1) Go to ASN.1 Decoder and paste the base64 into the online form. // 2) Or Decode Base64 ASN.1 to XML // The PKCS1 ASN.1 format for an Ed25519 key look like this: // SEQUENCE // INTEGER 0 // SEQUENCE // OBJECT IDENTIFIER 1.3.101.110 curveX25519 (ECDH 25519 key agreement algorithm) // OCTET STRING // OCTET STRING (32 byte) 1D66C... // Save it directly to a file. Get ComSavePkcs1File Of hoPrivKey "qa_output/ed25519.key" To iSuccess // ---------------------------------------------------------- // Ed25519 Unencrypted PKCS8 format // // For ed25519, the ASN.1 output is the same as for PKCS1. Get ComGetPkcs8ENC Of hoPrivKey "base64" To sPkcs8Base64 Showln sPkcs8Base64 // PKCS8 is a binary ASN.1 DER format. You can examine the contents with two online tools: // 1) Go to ASN.1 Decoder and paste the base64 into the online form. // 2) Or Decode Base64 ASN.1 to XML // ---------------------------------------------------------- // Ed25519 Encrypted PKCS8 format // // Note: The encrypted output cannot be examined using the above online tools because the ASN.1 is encrypted. Move "secret" To sPassword Get ComGetPkcs8EncryptedENC Of hoPrivKey "base64" sPassword To sPkcs8EncBase64 Showln sPkcs8EncBase64 // ---------------------------------------------------------- // Ed25519 in PEM format: // Get ComGetPkcs1Pem Of hoPrivKey To sEd25519Pem Showln sEd25519Pem // Sample output: // -----BEGIN PRIVATE KEY----- // MC4CAQAwBQYDK2VuBCIEIOKPhbULJagBAi7hbRdn1f4AAzh1RqqCHqCAvau7N6yO // -----END PRIVATE KEY----- // ---------------------------------------------------------- // Ed25519 in JWK Format // Get ComGetJwk Of hoPrivKey To sJwk Get Create (RefClass(cComChilkatJsonObject)) To hoJson If (Not(IsComObjectCreated(hoJson))) Begin Send CreateComObject of hoJson End Get ComLoad Of hoJson sJwk To iSuccess Set ComEmitCompact Of hoJson To False Get ComEmit Of hoJson To sTemp1 Showln sTemp1 // Sample output: // { // "kty": "OKP", // "crv": "Ed25519", // "x": "SE2Kne5xt51z1eciMH2T2ftDQp96Gl6FhY6zSQujiP0", // "d": "O-eRXewadF0sNyB0U9omcnt8Qg2ZmeK3WSXPYgqe570", // "use": "sig" // } // In the above JWK, x is the public key, y is the private key. // Both are 32 bytes and are base64-url encoded. // ---------------------------------------------------------- // Ed25519 in XML Format // Get ComGetXml Of hoPrivKey To sEd25519_xml Showln sEd25519_xml // Sample output: <Ed25519KeyValue>w4b/gI0zgYKgjtfWLjNfc4issmP7Qap84uesYNgEefP/WoY3jNOhOzgTYsMtOnuyGn3MdA4NZtsUXVNI1NiTlA==</Ed25519KeyValue> // The base64 content is composed of the concatenation of the 32-byte private key with the 32-byte public key and then base64 encoded. // In other words: Base64(privKey || pubKey) // ---------------------------------------------------------- // Ed25519 in Raw Hex Format // Get Create (RefClass(cComChilkatStringBuilder)) To hoSbPubKeyHex If (Not(IsComObjectCreated(hoSbPubKeyHex))) Begin Send CreateComObject of hoSbPubKeyHex End Get pvComObject of hoSbPubKeyHex to vSbPubKeyHex Get ComGetRawHex Of hoPrivKey vSbPubKeyHex To sPrivKeyHex // We should have a 32-byte private key (a 64 character hex string). Showln "private key = " sPrivKeyHex // We should have a 32-byte public key (a 64 character hex string). Get ComGetAsString Of hoSbPubKeyHex To sTemp1 Showln "public key = " sTemp1 // Sample output: // key type = ed25519 // size in bits = 256 // private key = d4ee72dbf913584ad5b6d8f1f769f8ad3afe7c28cbf1d4fbe097a88f44755842 // public key = 19bf44096984cdfe8541bac167dc3b96c85086aa30b6b6cb0c5c38ad703166e1 End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.