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
(Visual FoxPro) 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.
LOCAL loEddsa LOCAL loPrng LOCAL loPrivKey LOCAL lnSuccess LOCAL lcPkcs1Base64 LOCAL lcPkcs8Base64 LOCAL lcPassword LOCAL lcPkcs8EncBase64 LOCAL lcEd25519Pem LOCAL lcJwk LOCAL loJson LOCAL lcEd25519_xml LOCAL loSbPubKeyHex LOCAL lcPrivKeyHex * This example assumes the Chilkat API to have been previously unlocked. * See Global Unlock Sample for sample code. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.EdDSA') loEddsa = CreateObject('Chilkat.EdDSA') * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Prng') loPrng = CreateObject('Chilkat.Prng') * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.PrivateKey') loPrivKey = CreateObject('Chilkat.PrivateKey') * Generates a new ed25519 key and stores it in privKey. lnSuccess = loEddsa.GenEd25519Key(loPrng,loPrivKey) IF (lnSuccess = 0) THEN ? loEddsa.LastErrorText RELEASE loEddsa RELEASE loPrng RELEASE loPrivKey CANCEL ENDIF * ---------------------------------------------------------- * Ed25519 PKCS1 format * * This is the format created by: openssl genpkey -algorithm X25519 -out xkey.pem lcPkcs1Base64 = loPrivKey.GetPkcs1ENC("base64") ? lcPkcs1Base64 * 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. lnSuccess = loPrivKey.SavePkcs1File("qa_output/ed25519.key") * ---------------------------------------------------------- * Ed25519 Unencrypted PKCS8 format * * For ed25519, the ASN.1 output is the same as for PKCS1. lcPkcs8Base64 = loPrivKey.GetPkcs8ENC("base64") ? lcPkcs8Base64 * 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. lcPassword = "secret" lcPkcs8EncBase64 = loPrivKey.GetPkcs8EncryptedENC("base64",lcPassword) ? lcPkcs8EncBase64 * ---------------------------------------------------------- * Ed25519 in PEM format: * lcEd25519Pem = loPrivKey.GetPkcs1Pem() ? lcEd25519Pem * Sample output: * -----BEGIN PRIVATE KEY----- * MC4CAQAwBQYDK2VuBCIEIOKPhbULJagBAi7hbRdn1f4AAzh1RqqCHqCAvau7N6yO * -----END PRIVATE KEY----- * ---------------------------------------------------------- * Ed25519 in JWK Format * lcJwk = loPrivKey.GetJwk() * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.JsonObject') loJson = CreateObject('Chilkat.JsonObject') loJson.Load(lcJwk) loJson.EmitCompact = 0 ? loJson.Emit() * 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 * lcEd25519_xml = loPrivKey.GetXml() ? lcEd25519_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 * * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.StringBuilder') loSbPubKeyHex = CreateObject('Chilkat.StringBuilder') lcPrivKeyHex = loPrivKey.GetRawHex(loSbPubKeyHex) * We should have a 32-byte private key (a 64 character hex string). ? "private key = " + lcPrivKeyHex * We should have a 32-byte public key (a 64 character hex string). ? "public key = " + loSbPubKeyHex.GetAsString() * Sample output: * key type = ed25519 * size in bits = 256 * private key = d4ee72dbf913584ad5b6d8f1f769f8ad3afe7c28cbf1d4fbe097a88f44755842 * public key = 19bf44096984cdfe8541bac167dc3b96c85086aa30b6b6cb0c5c38ad703166e1 RELEASE loEddsa RELEASE loPrng RELEASE loPrivKey RELEASE loJson RELEASE loSbPubKeyHex |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.