Sample code for 30+ languages & platforms
Lua Requires Chilkat v11.0.0+

Validate a JWS Using ECDSA P-521 SHA-512

See more JSON Web Signatures (JWS) Examples

Validates a JSON Web Signature (JWS) that uses ECDSA P-521 SHA-512

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

-- This example takes a JSON signature in compact serialization format,
-- and uses an ECDSA public key to validate and recover the protected header and payload.

-- We only need a public key for signature validation.  This is the ECDSA public key
-- that is used:

--      {"kty":"EC",
--       "crv":"P-521",
--       "x":"AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk",
--       "y":"ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2"
--      }

local sbPubKey = chilkat.StringBuilder.new()
sbPubKey:append("{\"kty\":\"EC\",")
sbPubKey:append("\"crv\":\"P-521\",")
sbPubKey:append("\"x\":\"AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk\",")
sbPubKey:append("\"y\":\"ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2\"")
sbPubKey:append("}")

local pubKey = chilkat.PublicKey.new()
local success = pubKey:load_from_string(sbPubKey:get_as_string())
if not success then
    print(pubKey.last_error_text)
    return
end

local jws = chilkat.Jws.new()

-- Set the ECC public key:
local signatureIndex = 0
jws:set_public_key(signatureIndex, pubKey)

-- Load the JWS.
local sbJws = chilkat.StringBuilder.new()
sbJws:append("eyJhbGciOiJFUzUxMiJ9")
sbJws:append(".")
sbJws:append("UGF5bG9hZA")
sbJws:append(".")
sbJws:append("AdwMgeerwtHoh-l192l60hp9wAHZFVJbLfD_UxMi70cwnZOYaRI1bKPWROc-mZZq")
sbJws:append("wqT2SI-KGDKB34XO0aw_7XdtAG8GaSwFKdCAPZgoXD2YBJZCPEX3xKpRwcdOO8Kp")
sbJws:append("EHwJjyqOgzDO7iKvU8vcnwNrmxYbSW9ERBXukOXolLzeO_Jn")

success = jws:load_jws_sb(sbJws)
if not success then
    print(jws.last_error_text)
    return
end

-- Validate the 1st (and only) signature at index 0..
local v = jws:validate(signatureIndex)
if v < 0 then
    -- Perhaps Chilkat was not unlocked or the trial expired..
    print("Method call failed for some other reason.")
    print(jws.last_error_text)
    return
end

if v == 0 then
    print("Invalid signature.  The ECC key was incorrect, the JWS was invalid, or both.")
    return
end

-- If we get here, the signature was validated..
print("Signature validated.")
print("--")

-- Recover the original content:
print("Recovered content:")
print(jws:get_payload("utf-8"))
print("--")

-- Examine the protected header:

local joseHeader = chilkat.JsonObject.new()
success = jws:get_protected_h(signatureIndex, joseHeader)
if not success then
    print(jws.last_error_text)
    return
end

joseHeader.emit_compact = false

print("Protected (JOSE) header:")
print(joseHeader:emit())

-- Output:
-- (the string "Payload" was the content that was signed.)

--     Signature validated.
--     --
--     Recovered content:
--     Payload
--     --
--     Protected (JOSE) header:
--     {
--       "alg": "ES512"
--     }