Sample code for 30+ languages & platforms
PureBasic

Generate an Ed25519 Key Pair

See more Ed25519 Examples

Demonstrates how to generate a new Ed25519 public/private key pair.

Note: This example requires Chilkat v9.5.0.83 or greater.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkEdDSA.pb"
IncludeFile "CkPrivateKey.pb"
IncludeFile "CkPrng.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example assumes the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    eddsa.i = CkEdDSA::ckCreate()
    If eddsa.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    prng.i = CkPrng::ckCreate()
    If prng.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    privKey.i = CkPrivateKey::ckCreate()
    If privKey.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Generates a new eddsa key and stores it in privKey.
    success = CkEdDSA::ckGenEd25519Key(eddsa,prng,privKey)
    If success = 0
        Debug CkEdDSA::ckLastErrorText(eddsa)
        CkEdDSA::ckDispose(eddsa)
        CkPrng::ckDispose(prng)
        CkPrivateKey::ckDispose(privKey)
        ProcedureReturn
    EndIf

    ; Examine the ed25519 key in JWK format;
    jwk.s = CkPrivateKey::ckGetJwk(privKey)

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoad(json,jwk)
    CkJsonObject::setCkEmitCompact(json, 0)
    Debug CkJsonObject::ckEmit(json)

    ; 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.


    CkEdDSA::ckDispose(eddsa)
    CkPrng::ckDispose(prng)
    CkPrivateKey::ckDispose(privKey)
    CkJsonObject::ckDispose(json)


    ProcedureReturn
EndProcedure