diff options
author | Vivien Kraus <vivien@planete-kraus.eu> | 2020-01-01 00:00:00 +0100 |
---|---|---|
committer | Vivien Kraus <vivien@planete-kraus.eu> | 2021-05-11 00:14:32 +0200 |
commit | d36c331137eb2016d044ce948cf0989c23fecab0 (patch) | |
tree | 331ff74d1773c40622deb9eaf89e1eddf3809415 /src/jwk/libwebidoidc-jwk.c | |
parent | fccfd5e7845fa849a9c398e8803accb36f35249d (diff) |
Add a function to hash a public key for DPoP.
Diffstat (limited to 'src/jwk/libwebidoidc-jwk.c')
-rw-r--r-- | src/jwk/libwebidoidc-jwk.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/jwk/libwebidoidc-jwk.c b/src/jwk/libwebidoidc-jwk.c index 84da5da..71cb71c 100644 --- a/src/jwk/libwebidoidc-jwk.c +++ b/src/jwk/libwebidoidc-jwk.c @@ -3,6 +3,7 @@ #define _(s) dgettext (PACKAGE, s) void webid_oidc_random (size_t len, uint8_t * dst); +SCM webidoidc_hash_g (SCM alg, SCM payload); /* Register "generate-key", a guile function to generate a keypair. */ void init_webidoidc_jwk (void); @@ -173,9 +174,22 @@ SCM_DEFINE (webidoidc_strip_key_g, "strip-key", 1, 0, 0, (SCM key), scm_throw (unsupported_kty, scm_list_1 (key)); } +static SCM scm_to_json_string; + +SCM_SYMBOL (sha256, "SHA-256"); + +SCM_DEFINE (webidoidc_jkt_g, "jkt", 1, 0, 0, (SCM key), "Hash a public key.") +{ + SCM stripped = webidoidc_strip_key_g (key); + SCM as_json = scm_call_1 (scm_to_json_string, stripped); + SCM as_bytevector = scm_string_to_utf8 (as_json); + return webidoidc_hash_g (sha256, as_bytevector); +} + void init_webidoidc_jwk (void) { + scm_to_json_string = scm_c_public_ref ("json", "scm->json-string"); #ifndef SCM_MAGIC_SNARFER #include "libwebidoidc-jwk.x" #endif /* not SCM_MAGIC_SNARFER */ |