Sample code for 30+ languages & platforms
DataFlex

Get ECC Public Key in JWK Format (JSON Web Key)

See more ECC Examples

Demonstrates how to get an ECC public key in JWK (JSON Web Key) format.

Note: This example requires Chilkat v9.5.0.66 or later.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoSbPem
    Handle hoPubKey
    String sJwk
    Handle hoJson
    String sTemp1

    Move False To iSuccess

    // Note: This example requires Chilkat v9.5.0.66 or later.

    // Load a PEM file into memory.
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbPem
    If (Not(IsComObjectCreated(hoSbPem))) Begin
        Send CreateComObject of hoSbPem
    End
    Get ComLoadFile Of hoSbPem "qa_data/pem/ecc_public.pem" "utf-8" To iSuccess
    If (iSuccess <> True) Begin
        Showln "Failed to load PEM file."
        Procedure_Return
    End

    // Load the PEM into a public key object.
    Get Create (RefClass(cComChilkatPublicKey)) To hoPubKey
    If (Not(IsComObjectCreated(hoPubKey))) Begin
        Send CreateComObject of hoPubKey
    End
    Get ComGetAsString Of hoSbPem To sTemp1
    Get ComLoadFromString Of hoPubKey sTemp1 To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoPubKey To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Get the public key in JWK format:
    Get ComGetJwk Of hoPubKey To sJwk

    // The GetJwk method will return the JWK in the most compact JSON format possible,
    // as a single line with no extra whitespace.  To get a more human-readable JWK (for this example),
    // load into a Chilkat JSON object and emit non-compact:

    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
    Showln "ECC Public Key in JWK format:"
    Get ComEmit Of hoJson To sTemp1
    Showln sTemp1

    // Sample output:
    // { 
    //   "kty": "EC",
    //   "crv": "P-256",
    //   "x": "oBUyo8CQAFPeYPvv78ylh5MwFZjTCLQeb042TjiMJxE",
    //   "y": "vvQyxZkUjJQUPU_0bCy3Pj5qQdfu8jwEfqEeYGZ95CU"
    // }
    // 
    // Additional information can be added like this:
    Get ComAppendString Of hoJson "use" "enc" To iSuccess
    Get ComAppendString Of hoJson "kid" "123ABC" To iSuccess

    // Now examine the JSON:
    Get ComEmit Of hoJson To sTemp1
    Showln sTemp1

    // { 
    //   "kty": "EC",
    //   "crv": "P-256",
    //   "x": "oBUyo8CQAFPeYPvv78ylh5MwFZjTCLQeb042TjiMJxE",
    //   "y": "vvQyxZkUjJQUPU_0bCy3Pj5qQdfu8jwEfqEeYGZ95CU",
    //   "use": "enc",
    //   "kid": "123ABC"
    // }


End_Procedure