Sample code for 30+ languages & platforms
PureBasic

Create a JWS into a StringBuilder

See more JSON Web Signatures (JWS) Examples

Demonstrates Jws.CreateJwsSb, which creates a JWS and writes it into a StringBuilder.

Background. JWS (JSON Web Signature) integrity-protects a payload with a signature or MAC. The header alg names the algorithm; this example uses HMAC-SHA256 (HS256) with a symmetric MAC key.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkJws.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

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

    ;  Set the protected header for signer 0, specifying the signature algorithm (alg).
    header.i = CkJsonObject::ckCreate()
    If header.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckUpdateString(header,"alg","HS256")
    success = CkJws::ckSetProtectedHeader(jws,0,header)
    If success = 0
        Debug CkJws::ckLastErrorText(jws)
        CkJws::ckDispose(jws)
        CkJsonObject::ckDispose(header)
        ProcedureReturn
    EndIf

    ;  Set the payload to be signed.
    bIncludeBom.i = 0
    success = CkJws::ckSetPayload(jws,"This is the content to sign.","utf-8",bIncludeBom)
    If success = 0
        Debug CkJws::ckLastErrorText(jws)
        CkJws::ckDispose(jws)
        CkJsonObject::ckDispose(header)
        ProcedureReturn
    EndIf

    ;  Provide the HMAC key (base64) for signer 0.  In production, obtain the key from a secure source
    ;  rather than hard-coding it.
    base64Key.s = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU="
    success = CkJws::ckSetMacKey(jws,0,base64Key,"base64")
    If success = 0
        Debug CkJws::ckLastErrorText(jws)
        CkJws::ckDispose(jws)
        CkJsonObject::ckDispose(header)
        ProcedureReturn
    EndIf

    ;  Create the JWS and write it into a StringBuilder.
    sbJws.i = CkStringBuilder::ckCreate()
    If sbJws.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkJws::ckCreateJwsSb(jws,sbJws)
    If success = 0
        Debug CkJws::ckLastErrorText(jws)
        CkJws::ckDispose(jws)
        CkJsonObject::ckDispose(header)
        CkStringBuilder::ckDispose(sbJws)
        ProcedureReturn
    EndIf

    Debug CkStringBuilder::ckGetAsString(sbJws)


    CkJws::ckDispose(jws)
    CkJsonObject::ckDispose(header)
    CkStringBuilder::ckDispose(sbJws)


    ProcedureReturn
EndProcedure