summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2023-05-17 10:08:57 +0200
committerGravatar default2023-05-17 10:08:57 +0200
commit970ad7a54041af7aa95e4466912a59df13b97282 (patch)
treec583a83fa9fb412ed81b0b1b17c48222f058d826
parentBackport from xs. (diff)
downloadsnac2-970ad7a54041af7aa95e4466912a59df13b97282.tar.gz
snac2-970ad7a54041af7aa95e4466912a59df13b97282.tar.xz
snac2-970ad7a54041af7aa95e4466912a59df13b97282.zip
Got rid of xs_encdec.h.
Diffstat (limited to '')
-rw-r--r--Makefile29
-rw-r--r--activitypub.c1
-rw-r--r--html.c1
-rw-r--r--http.c1
-rw-r--r--httpd.c2
-rw-r--r--main.c1
-rw-r--r--mastoapi.c1
-rw-r--r--snac.c1
-rw-r--r--utils.c1
-rw-r--r--webfinger.c1
-rw-r--r--xs_encdec.h155
-rw-r--r--xs_openssl.h15
-rw-r--r--xs_version.h2
13 files changed, 29 insertions, 182 deletions
diff --git a/Makefile b/Makefile
index 62beea0..ae3b231 100644
--- a/Makefile
+++ b/Makefile
@@ -27,24 +27,23 @@ install:
27 mkdir -p -m 755 $(PREFIX_MAN)/man8 27 mkdir -p -m 755 $(PREFIX_MAN)/man8
28 install -m 644 doc/snac.8 $(PREFIX_MAN)/man8/snac.8 28 install -m 644 doc/snac.8 $(PREFIX_MAN)/man8/snac.8
29 29
30activitypub.o: activitypub.c xs.h xs_encdec.h xs_json.h xs_curl.h \ 30activitypub.o: activitypub.c xs.h xs_json.h xs_curl.h xs_mime.h \
31 xs_mime.h xs_openssl.h xs_regex.h xs_time.h xs_set.h snac.h 31 xs_openssl.h xs_regex.h xs_time.h xs_set.h snac.h
32data.o: data.c xs.h xs_io.h xs_json.h xs_openssl.h xs_glob.h xs_set.h \ 32data.o: data.c xs.h xs_io.h xs_json.h xs_openssl.h xs_glob.h xs_set.h \
33 xs_time.h snac.h 33 xs_time.h snac.h
34format.o: format.c xs.h xs_regex.h snac.h 34format.o: format.c xs.h xs_regex.h snac.h
35html.o: html.c xs.h xs_io.h xs_encdec.h xs_json.h xs_regex.h xs_set.h \ 35html.o: html.c xs.h xs_io.h xs_json.h xs_regex.h xs_set.h xs_openssl.h \
36 xs_openssl.h xs_time.h xs_mime.h snac.h 36 xs_time.h xs_mime.h snac.h
37http.o: http.c xs.h xs_io.h xs_encdec.h xs_openssl.h xs_curl.h xs_time.h \ 37http.o: http.c xs.h xs_io.h xs_openssl.h xs_curl.h xs_time.h xs_json.h \
38 xs_json.h snac.h 38 snac.h
39httpd.o: httpd.c xs.h xs_io.h xs_encdec.h xs_json.h xs_socket.h \ 39httpd.o: httpd.c xs.h xs_io.h xs_json.h xs_socket.h xs_httpd.h xs_mime.h \
40 xs_httpd.h xs_mime.h xs_time.h snac.h 40 xs_time.h snac.h
41main.o: main.c xs.h xs_io.h xs_encdec.h xs_json.h snac.h 41main.o: main.c xs.h xs_io.h xs_json.h snac.h
42mastoapi.o: mastoapi.c xs.h xs_encdec.h xs_openssl.h xs_json.h xs_io.h \ 42mastoapi.o: mastoapi.c xs.h xs_openssl.h xs_json.h xs_io.h xs_time.h \
43 xs_time.h xs_glob.h snac.h 43 xs_glob.h xs_set.h snac.h
44snac.o: snac.c xs.h xs_io.h xs_encdec.h xs_json.h xs_curl.h xs_openssl.h \ 44snac.o: snac.c xs.h xs_io.h xs_unicode.h xs_json.h xs_curl.h xs_openssl.h \
45 xs_socket.h xs_httpd.h xs_mime.h xs_regex.h xs_set.h xs_time.h xs_glob.h \ 45 xs_socket.h xs_httpd.h xs_mime.h xs_regex.h xs_set.h xs_time.h xs_glob.h \
46 snac.h 46 snac.h
47upgrade.o: upgrade.c xs.h xs_io.h xs_json.h xs_glob.h snac.h 47upgrade.o: upgrade.c xs.h xs_io.h xs_json.h xs_glob.h snac.h
48utils.o: utils.c xs.h xs_io.h xs_encdec.h xs_json.h xs_time.h \ 48utils.o: utils.c xs.h xs_io.h xs_json.h xs_time.h xs_openssl.h snac.h
49 xs_openssl.h snac.h 49webfinger.o: webfinger.c xs.h xs_json.h xs_curl.h snac.h
50webfinger.o: webfinger.c xs.h xs_encdec.h xs_json.h xs_curl.h snac.h
diff --git a/activitypub.c b/activitypub.c
index 13415df..13e17b3 100644
--- a/activitypub.c
+++ b/activitypub.c
@@ -2,7 +2,6 @@
2/* copyright (c) 2022 - 2023 grunfink / MIT license */ 2/* copyright (c) 2022 - 2023 grunfink / MIT license */
3 3
4#include "xs.h" 4#include "xs.h"
5#include "xs_encdec.h"
6#include "xs_json.h" 5#include "xs_json.h"
7#include "xs_curl.h" 6#include "xs_curl.h"
8#include "xs_mime.h" 7#include "xs_mime.h"
diff --git a/html.c b/html.c
index 861ac8b..4e3f235 100644
--- a/html.c
+++ b/html.c
@@ -3,7 +3,6 @@
3 3
4#include "xs.h" 4#include "xs.h"
5#include "xs_io.h" 5#include "xs_io.h"
6#include "xs_encdec.h"
7#include "xs_json.h" 6#include "xs_json.h"
8#include "xs_regex.h" 7#include "xs_regex.h"
9#include "xs_set.h" 8#include "xs_set.h"
diff --git a/http.c b/http.c
index 58d188c..75769f2 100644
--- a/http.c
+++ b/http.c
@@ -3,7 +3,6 @@
3 3
4#include "xs.h" 4#include "xs.h"
5#include "xs_io.h" 5#include "xs_io.h"
6#include "xs_encdec.h"
7#include "xs_openssl.h" 6#include "xs_openssl.h"
8#include "xs_curl.h" 7#include "xs_curl.h"
9#include "xs_time.h" 8#include "xs_time.h"
diff --git a/httpd.c b/httpd.c
index 841ad4c..09b8d41 100644
--- a/httpd.c
+++ b/httpd.c
@@ -3,12 +3,12 @@
3 3
4#include "xs.h" 4#include "xs.h"
5#include "xs_io.h" 5#include "xs_io.h"
6#include "xs_encdec.h"
7#include "xs_json.h" 6#include "xs_json.h"
8#include "xs_socket.h" 7#include "xs_socket.h"
9#include "xs_httpd.h" 8#include "xs_httpd.h"
10#include "xs_mime.h" 9#include "xs_mime.h"
11#include "xs_time.h" 10#include "xs_time.h"
11#include "xs_openssl.h"
12 12
13#include "snac.h" 13#include "snac.h"
14 14
diff --git a/main.c b/main.c
index 322aa67..1462c64 100644
--- a/main.c
+++ b/main.c
@@ -3,7 +3,6 @@
3 3
4#include "xs.h" 4#include "xs.h"
5#include "xs_io.h" 5#include "xs_io.h"
6#include "xs_encdec.h"
7#include "xs_json.h" 6#include "xs_json.h"
8 7
9#include "snac.h" 8#include "snac.h"
diff --git a/mastoapi.c b/mastoapi.c
index cb0ba91..f5701d9 100644
--- a/mastoapi.c
+++ b/mastoapi.c
@@ -4,7 +4,6 @@
4#ifndef NO_MASTODON_API 4#ifndef NO_MASTODON_API
5 5
6#include "xs.h" 6#include "xs.h"
7#include "xs_encdec.h"
8#include "xs_openssl.h" 7#include "xs_openssl.h"
9#include "xs_json.h" 8#include "xs_json.h"
10#include "xs_io.h" 9#include "xs_io.h"
diff --git a/snac.c b/snac.c
index 8005546..48353f1 100644
--- a/snac.c
+++ b/snac.c
@@ -7,7 +7,6 @@
7#include "xs_io.h" 7#include "xs_io.h"
8#include "xs_unicode.h" 8#include "xs_unicode.h"
9#include "xs_json.h" 9#include "xs_json.h"
10#include "xs_encdec.h"
11#include "xs_curl.h" 10#include "xs_curl.h"
12#include "xs_openssl.h" 11#include "xs_openssl.h"
13#include "xs_socket.h" 12#include "xs_socket.h"
diff --git a/utils.c b/utils.c
index 189bd18..8594d84 100644
--- a/utils.c
+++ b/utils.c
@@ -3,7 +3,6 @@
3 3
4#include "xs.h" 4#include "xs.h"
5#include "xs_io.h" 5#include "xs_io.h"
6#include "xs_encdec.h"
7#include "xs_json.h" 6#include "xs_json.h"
8#include "xs_time.h" 7#include "xs_time.h"
9#include "xs_openssl.h" 8#include "xs_openssl.h"
diff --git a/webfinger.c b/webfinger.c
index 3471b49..ca4ed71 100644
--- a/webfinger.c
+++ b/webfinger.c
@@ -2,7 +2,6 @@
2/* copyright (c) 2022 - 2023 grunfink / MIT license */ 2/* copyright (c) 2022 - 2023 grunfink / MIT license */
3 3
4#include "xs.h" 4#include "xs.h"
5#include "xs_encdec.h"
6#include "xs_json.h" 5#include "xs_json.h"
7#include "xs_curl.h" 6#include "xs_curl.h"
8 7
diff --git a/xs_encdec.h b/xs_encdec.h
deleted file mode 100644
index 14cb36e..0000000
--- a/xs_encdec.h
+++ /dev/null
@@ -1,155 +0,0 @@
1/* copyright (c) 2022 - 2023 grunfink / MIT license */
2
3#ifndef _XS_ENCDEC_H
4
5#define _XS_ENCDEC_H
6
7 xs_str *xs_base64_enc(const xs_val *data, int sz);
8 xs_val *xs_base64_dec(const xs_str *data, int *size);
9 int xs_is_base64(const char *str);
10
11
12#ifdef XS_IMPLEMENTATION
13
14/** base64 */
15
16static char *xs_b64_tbl = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
17 "abcdefghijklmnopqrstuvwxyz"
18 "0123456789+/=";
19
20xs_str *xs_base64_enc_tbl(const xs_val *data, int sz, const char *b64_tbl)
21/* encodes data to base64 using a table */
22{
23 xs_str *s;
24 unsigned char *p;
25 char *i;
26 int bsz, n;
27
28 bsz = ((sz + 3 - 1) / 3) * 4;
29 i = s = xs_realloc(NULL, _xs_blk_size(bsz + 1));
30 p = (unsigned char *)data;
31
32 for (n = 0; n < sz; n += 3) {
33 int l = sz - n;
34
35 if (l == 1) {
36 *i++ = b64_tbl[(p[n] >> 2) & 0x3f];
37 *i++ = b64_tbl[(p[n] << 4) & 0x3f];
38 *i++ = '=';
39 *i++ = '=';
40 }
41 else
42 if (l == 2) {
43 *i++ = b64_tbl[(p[n] >> 2) & 0x3f];
44 *i++ = b64_tbl[(p[n] << 4 | p[n + 1] >> 4) & 0x3f];
45 *i++ = b64_tbl[(p[n + 1] << 2) & 0x3f];
46 *i++ = '=';
47 }
48 else {
49 *i++ = b64_tbl[(p[n] >> 2) & 0x3f];
50 *i++ = b64_tbl[(p[n] << 4 | p[n + 1] >> 4) & 0x3f];
51 *i++ = b64_tbl[(p[n + 1] << 2 | p[n + 2] >> 6) & 0x3f];
52 *i++ = b64_tbl[(p[n + 2]) & 0x3f];
53 }
54 }
55
56 *i = '\0';
57
58 return s;
59}
60
61
62xs_str *xs_base64_enc(const xs_val *data, int sz)
63/* encodes data to base64 */
64{
65 return xs_base64_enc_tbl(data, sz, xs_b64_tbl);
66}
67
68
69xs_val *xs_base64_dec_tbl(const xs_str *data, int *size, const char *b64_tbl)
70/* decodes data from base64 using a table */
71{
72 xs_val *s = NULL;
73 int sz = 0;
74 char *p;
75
76 p = (char *)data;
77
78 /* size of data must be a multiple of 4 */
79 if (strlen(p) % 4)
80 return NULL;
81
82 for (p = (char *)data; *p; p += 4) {
83 int cs[4];
84 int n;
85 unsigned char tmp[3];
86
87 for (n = 0; n < 4; n++) {
88 char *ss = strchr(b64_tbl, p[n]);
89
90 if (ss == NULL) {
91 /* not a base64 char */
92 return xs_free(s);
93 }
94
95 cs[n] = ss - b64_tbl;
96 }
97
98 n = 0;
99
100 /* first byte */
101 tmp[n++] = cs[0] << 2 | ((cs[1] >> 4) & 0x0f);
102
103 /* second byte */
104 if (cs[2] != 64)
105 tmp[n++] = cs[1] << 4 | ((cs[2] >> 2) & 0x3f);
106
107 /* third byte */
108 if (cs[3] != 64)
109 tmp[n++] = cs[2] << 6 | (cs[3] & 0x3f);
110
111 /* must be done manually because data can be pure binary */
112 s = xs_realloc(s, _xs_blk_size(sz + n));
113 memcpy(s + sz, tmp, n);
114 sz += n;
115 }
116
117 /* asciiz it to use it as a string */
118 s = xs_realloc(s, _xs_blk_size(sz + 1));
119 s[sz] = '\0';
120
121 *size = sz;
122
123 return s;
124}
125
126
127xs_val *xs_base64_dec(const xs_str *data, int *size)
128/* decodes data from base64 */
129{
130 return xs_base64_dec_tbl(data, size, xs_b64_tbl);
131}
132
133
134int xs_is_base64_tbl(const char *str, const char *b64_tbl)
135/* returns 1 if str is a base64 string, with table */
136{
137 while (*str) {
138 if (strchr(b64_tbl, *str++) == NULL)
139 return 0;
140 }
141
142 return 1;
143}
144
145
146int xs_is_base64(const char *str)
147/* returns 1 if str is a base64 string */
148{
149 return xs_is_base64_tbl(str, xs_b64_tbl);
150}
151
152
153#endif /* XS_IMPLEMENTATION */
154
155#endif /* _XS_ENCDEC_H */
diff --git a/xs_openssl.h b/xs_openssl.h
index 4a86046..d1a52f0 100644
--- a/xs_openssl.h
+++ b/xs_openssl.h
@@ -6,7 +6,15 @@
6 6
7xs_str *_xs_digest(const xs_val *input, int size, const char *digest, int as_hex); 7xs_str *_xs_digest(const xs_val *input, int size, const char *digest, int as_hex);
8 8
9#ifndef _XS_MD5_H
9#define xs_md5_hex(input, size) _xs_digest(input, size, "md5", 1) 10#define xs_md5_hex(input, size) _xs_digest(input, size, "md5", 1)
11#endif /* XS_MD5_H */
12
13#ifndef _XS_BASE64_H
14xs_str *xs_base64_enc(const xs_val *data, int sz);
15xs_val *xs_base64_dec(const xs_str *data, int *size);
16#endif /* XS_BASE64_H */
17
10#define xs_sha1_hex(input, size) _xs_digest(input, size, "sha1", 1) 18#define xs_sha1_hex(input, size) _xs_digest(input, size, "sha1", 1)
11#define xs_sha256_hex(input, size) _xs_digest(input, size, "sha256", 1) 19#define xs_sha256_hex(input, size) _xs_digest(input, size, "sha256", 1)
12#define xs_sha256_base64(input, size) _xs_digest(input, size, "sha256", 0) 20#define xs_sha256_base64(input, size) _xs_digest(input, size, "sha256", 0)
@@ -22,7 +30,9 @@ int xs_evp_verify(const char *pubkey, const char *mem, int size, const char *b64
22#include "openssl/pem.h" 30#include "openssl/pem.h"
23#include "openssl/evp.h" 31#include "openssl/evp.h"
24 32
25#if 0 33
34#ifndef _XS_BASE64_H
35
26xs_str *xs_base64_enc(const xs_val *data, int sz) 36xs_str *xs_base64_enc(const xs_val *data, int sz)
27/* encodes data to base64 */ 37/* encodes data to base64 */
28{ 38{
@@ -77,7 +87,8 @@ xs_val *xs_base64_dec(const xs_str *data, int *size)
77 87
78 return s; 88 return s;
79} 89}
80#endif 90
91#endif /* _XS_BASE64_H */
81 92
82 93
83xs_str *_xs_digest(const xs_val *input, int size, const char *digest, int as_hex) 94xs_str *_xs_digest(const xs_val *input, int size, const char *digest, int as_hex)
diff --git a/xs_version.h b/xs_version.h
index e3b333f..099bc71 100644
--- a/xs_version.h
+++ b/xs_version.h
@@ -1 +1 @@
/* e0835629880a2846ad69c02a63a9209d5dd34945 */ /* 1948fa3c5f0df994170cd38b9144b99734b071e6 */