Lua Requires Chilkat v11.0.0+
Lua
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-512Chilkat Lua Downloads
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"
-- }