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;