Lua Requires Chilkat v11.0.0+
Lua
Validate JWS Using RSASSA-PKCS1-v1_5 SHA-256
See more JSON Web Signatures (JWS) Examples
Validates a JSON Web Signature (JWS) that uses RSASSA-PKCS1-v1_5 SHA-256.Chilkat 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 RSA public key to validate and recover the protected header and payload.
-- We only need a public key for signature validation. This is the RSA public key
-- that is used:
-- {"kty":"RSA",
-- "n":"ofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd_wWJcyQoTbji9k0l8W26mPddx
-- HmfHQp-Vaw-4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL-yRT-SFd2lZS-pCgNMs
-- D1W_YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb_7OMg0LOL-bSf63kpaSH
-- SXndS5z5rexMdbBYUsLA9e-KXBdQOS-UTo7WTBEMa2R2CapHg665xsmtdV
-- MTBQY4uDZlxvb3qCo5ZwKh9kG4LT6_I5IhlJH7aGhyxXFvUK-DWNmoudF8
-- NAco9_h9iaGNj8q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQ",
-- "e":"AQAB"
-- }
local sbPubKey = chilkat.StringBuilder.new()
sbPubKey:append("{\"kty\":\"RSA\",")
sbPubKey:append("\"n\":\"ofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd_wWJcyQoTbji9k0l8W26mPddx")
sbPubKey:append("HmfHQp-Vaw-4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL-yRT-SFd2lZS-pCgNMs")
sbPubKey:append("D1W_YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb_7OMg0LOL-bSf63kpaSH")
sbPubKey:append("SXndS5z5rexMdbBYUsLA9e-KXBdQOS-UTo7WTBEMa2R2CapHg665xsmtdV")
sbPubKey:append("MTBQY4uDZlxvb3qCo5ZwKh9kG4LT6_I5IhlJH7aGhyxXFvUK-DWNmoudF8")
sbPubKey:append("NAco9_h9iaGNj8q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQ\",")
sbPubKey:append("\"e\":\"AQAB\"")
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 RSA public key:
local signatureIndex = 0
jws:set_public_key(signatureIndex, pubKey)
-- Load the JWS.
local sbJws = chilkat.StringBuilder.new()
sbJws:append("eyJhbGciOiJSUzI1NiJ9")
sbJws:append(".")
sbJws:append("eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt")
sbJws:append("cGxlLmNvbS9pc19yb290Ijp0cnVlfQ")
sbJws:append(".")
sbJws:append("cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7")
sbJws:append("AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4")
sbJws:append("BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K")
sbJws:append("0GarZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqv")
sbJws:append("hJ1phCnvWh6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrB")
sbJws:append("p0igcN_IoypGlUPQGe77Rw")
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 RSA 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:
-- Signature validated.
-- --
-- Recovered content:
-- {"iss":"joe",
-- "exp":1300819380,
-- "http://example.com/is_root":true}
-- --
-- Protected (JOSE) header:
-- {
-- "alg": "RS256"
-- }