commit 315a43a

default  ·  2023-01-07 23:26:48 +0000 UTC
parent 9525be7
Added support for HTTP signature pseudo-headers (created) and (expires).

They are used in Lemmy.
1 files changed,  +18, -1
M http.c
M http.c
+18, -1
 1@@ -109,6 +109,8 @@ int check_signature(snac *snac, char *req)
 2     xs *keyId = NULL;
 3     xs *headers = NULL;
 4     xs *signature = NULL;
 5+    xs *created = NULL;
 6+    xs *expires = NULL;
 7     char *pubkey;
 8     char *p;
 9 
10@@ -127,6 +129,12 @@ int check_signature(snac *snac, char *req)
11             else
12             if (xs_startswith(v, "signature"))
13                 signature = xs_crop(xs_dup(v), 11, -1);
14+            else
15+            if (xs_startswith(v, "created"))
16+                created = xs_crop(xs_dup(v), 9, -1);
17+            else
18+            if (xs_startswith(v, "expires"))
19+                expires = xs_crop(xs_dup(v), 9, -1);
20         }
21     }
22 
23@@ -170,6 +178,14 @@ int check_signature(snac *snac, char *req)
24             if (strcmp(v, "(request-target)") == 0) {
25                 ss = xs_fmt("%s: post %s", v, xs_dict_get(req, "path"));
26             }
27+            else
28+            if (strcmp(v, "(created)") == 0) {
29+                ss = xs_fmt("%s: %s", v, created);
30+            }
31+            else
32+            if (strcmp(v, "(expires)") == 0) {
33+                ss = xs_fmt("%s: %s", v, expires);
34+            }
35             else {
36                 /* add the header */
37                 if ((hc = xs_dict_get(req, v)) == NULL) {
38@@ -187,7 +203,8 @@ int check_signature(snac *snac, char *req)
39     }
40 
41     if (xs_evp_verify(pubkey, sig_str, strlen(sig_str), signature) != 1) {
42-        snac_debug(snac, 1, xs_fmt("rsa verify error %s", keyId));
43+        snac_debug(snac, 0, xs_fmt("rsa verify error %s", keyId));
44+        return 0;
45     }
46 
47     return 1;