Sample code for 30+ languages & platforms
PureBasic

Create JWT using a Brainpool EC Key

See more JSON Web Token (JWT) Examples

Demonstrates how to create a JWT using an EC private key. This is for JOSE headers having an "alg" member with any of the following values:
  • BP160R1
  • BP192R1
  • BP224R1
  • BP256R1
  • BP320R1
  • BP384R1
  • BP512R1

This example also demonstrates how to include time constraints:

  • nbf: Not Before Time
  • exp: Expiration Time
  • iat: Issue At Time

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkJwt.pb"
IncludeFile "CkPrivateKey.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ; Demonstrates how to create a JWT using a brainpool EC private key.

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

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

    ; Load a brainpool EC key.
    success = CkPrivateKey::ckLoadPemFile(privKey,"c:/qa_data/pem/ec_brainpool_privKey.pem")
    If success <> 1
        Debug CkPrivateKey::ckLastErrorText(privKey)
        CkPrivateKey::ckDispose(privKey)
        ProcedureReturn
    EndIf

    ; You can examine the curve name of the key you just loaded by getting the private in XML format:
    ; <ECCKeyValue curve="CURVE_NAME">...</ECCKeyValue>
    Debug CkPrivateKey::ckGetXml(privKey)

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

    ; Build the JOSE header
    jose.i = CkJsonObject::ckCreate()
    If jose.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Use the brainpool curve name matching the private key you just loaded.
    ; Use "BP256R1", or "BP384R1", etc.   
    success = CkJsonObject::ckAppendString(jose,"alg","BP256R1")
    success = CkJsonObject::ckAppendString(jose,"typ","JWT")

    ; Now build the JWT claims (also known as the payload)
    claims.i = CkJsonObject::ckCreate()
    If claims.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkJsonObject::ckAppendString(claims,"iss","http://example.org")
    success = CkJsonObject::ckAppendString(claims,"sub","John")
    success = CkJsonObject::ckAppendString(claims,"aud","http://example.com")

    ; Set the timestamp of when the JWT was created to now.
    curDateTime.i = CkJwt::ckGenNumericDate(jwt,0)
    success = CkJsonObject::ckAddIntAt(claims,-1,"iat",curDateTime)

    ; Set the "not process before" timestamp to now.
    success = CkJsonObject::ckAddIntAt(claims,-1,"nbf",curDateTime)

    ; Set the timestamp defining an expiration time (end time) for the token
    ; to be now + 1 hour (3600 seconds)
    success = CkJsonObject::ckAddIntAt(claims,-1,"exp",curDateTime + 3600)

    ; Produce the smallest possible JWT:
    CkJwt::setCkAutoCompact(jwt, 1)

    ; Create the JWT token.  This is where the ECC signature is created.
    token.s = CkJwt::ckCreateJwtPk(jwt,CkJsonObject::ckEmit(jose),CkJsonObject::ckEmit(claims),privKey)

    Debug token


    CkPrivateKey::ckDispose(privKey)
    CkJwt::ckDispose(jwt)
    CkJsonObject::ckDispose(jose)
    CkJsonObject::ckDispose(claims)


    ProcedureReturn
EndProcedure