From fdeadf1ba9a0eef32086ffaba950da91ef324979 Mon Sep 17 00:00:00 2001 From: Vivien Kraus Date: Fri, 27 Nov 2020 19:42:01 +0100 Subject: Implement JWS encoding and decoding --- tests/jws.scm | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 tests/jws.scm (limited to 'tests/jws.scm') diff --git a/tests/jws.scm b/tests/jws.scm new file mode 100644 index 0000000..502daf2 --- /dev/null +++ b/tests/jws.scm @@ -0,0 +1,51 @@ +(use-modules (webid-oidc stubs) + (webid-oidc jws) + (webid-oidc testing)) + +(with-test-environment + "jws" + (lambda () + (let* ((key (json-string->scm "{\"kty\":\"RSA\",\"e\":\"AQAB\",\"kid\":\"db7cdbbf-0ca3-48da-abf6-8f34002a4651\",\"n\":\"nzyis1ZjfNB0bBgKFMSvvkTtwlvBsaJq7S5wA-kzeVOVpVWwkWdVha4s38XM_pa_yr47av7-z3VTmvDRyAHcaT92whREFpLv9cj5lTeJSibyr_Mrm_YtjCZVWgaOYIhwrXwKLqPr_11inWsAkfIytvHWTxZYEcXLgAXFuUuaS3uF9gEiNQwzGTU1v0FqkqTBr4B8nW3HCN47XUu0t8Y0e-lf4s4OxQawWD79J9_5d3Ry0vbV3Am1FtGJiJvOwRsIfVChDpYStTcHTCMqtvWbV6L11BWkpzGXSW4Hv43qa-GSYOD2QU68Mb59oSk2OB-BtOLpJofmbGEGgvmwyCI9Mw\"}")) + (other-key (generate-key #:n-size 2048)) + (encoded "eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.hZnl5amPk_I3tb4O-Otci_5XZdVWhPlFyVRvcqSwnDo_srcysDvhhKOD01DigPK1lJvTSTolyUgKGtpLqMfRDXQlekRsF4XhAjYZTmcynf-C-6wO5EI4wYewLNKFGGJzHAknMgotJFjDi_NCVSjHsW3a10nTao1lB82FRS305T226Q0VqNVJVWhE4G0JQvi2TssRtCxYTqzXVt22iDKkXeZJARZ1paXHGV5Kd1CljcZtkNZYIGcwnj65gvuCwohbkIxAnhZMJXCLaVvHqv9l-AAUV7esZvkQR1IpwBAiDQJh4qxPjFGylyXrHMqh5NlT_pWL2ZoULWTg_TJjMO9TuQ") + (expected-alg "PS256") + (expected-typ "JWT") + (expected-sub "1234567890") + (expected-name "John Doe") + (expected-admin #t) + (expected-iat 1516239022) + (parsed (jws-decode encoded (lambda (jws) + (and (jws? jws) + key)))) + (parsed-header (jws-header parsed)) + (parsed-payload (jws-payload parsed)) + (alg (jws-alg parsed)) + (typ (assq-ref parsed-header 'typ)) + (sub (assq-ref parsed-payload 'sub)) + (name (assq-ref parsed-payload 'name)) + (admin (assq-ref parsed-payload 'admin)) + (iat (assq-ref parsed-payload 'iat)) + (re-encoded (jws-encode parsed other-key)) + (re-parsed (jws-decode re-encoded (lambda (jws) other-key))) + (re-parsed-header (jws-header re-parsed)) + (re-parsed-payload (jws-payload re-parsed)) + (re-alg (jws-alg re-parsed)) + (re-typ (assq-ref re-parsed-header 'typ)) + (re-sub (assq-ref re-parsed-payload 'sub)) + (re-name (assq-ref re-parsed-payload 'name)) + (re-admin (assq-ref re-parsed-payload 'admin)) + (re-iat (assq-ref re-parsed-payload 'iat))) + (unless (and (equal? alg expected-alg) + (equal? re-alg expected-alg) + (equal? typ expected-typ) + (equal? re-typ expected-typ) + (equal? sub expected-sub) + (equal? re-sub expected-sub) + (equal? name expected-name) + (equal? re-name expected-name) + (equal? admin expected-admin) + (equal? re-admin expected-admin) + (equal? iat expected-iat) + (equal? re-iat expected-iat)) + (format (current-error-port) + "The JWS test failed."))))) -- cgit v1.2.3