commit b355650
V. Luna
·
2026-10-08 00:42:05 +0000 UTC
parent 3f327b1
fix .clangd and add digest
2 files changed,
+41,
-3
M
.clangd
M
.clangd
+1,
-1
1@@ -1,2 +1,2 @@
2 CompileFlags:
3- Add: [-I., -I/usr/local/include, -I/home/v/opt/bearssl/include, -D_GNU_SOURCE, -DXS_IMPLEMENTATION]
4+ Add: [-x, c, -I., -I/usr/local/include, -I/home/v/opt/bearssl/include, -D_GNU_SOURCE, -DXS_IMPLEMENTATION]
+40,
-2
1@@ -2,6 +2,7 @@
2 #define _XS_BEARSSL_H
3
4 #include "xs.h"
5+#include "xs_hex.h"
6
7 #ifndef _XS_BASE64_H
8 xs_str* xs_base64_enc(const xs_val *data, int size);
9@@ -9,8 +10,7 @@ xs_str* xs_base64_enc(const xs_val *data, int size);
10
11 #ifdef XS_IMPLEMENTATION
12
13-#include "bearssl_rsa.h"
14-#include "bearssl_pem.h"
15+#include "bearssl_hash.h"
16
17 #ifndef _XS_BASE64_H
18 /* *
19@@ -108,6 +108,44 @@ xs_val* xs_base64_dec(const xs_str* data, int* size) {
20 }
21 #endif // _XS_BASE64_H
22
23+/* im hungy */
24+static int _digest_raw(const char* name, const void* data, size_t len, unsigned char* out) {
25+ if (strcmp(name, "md5") == 0) {
26+ br_md5_context ctx;
27+ br_md5_init(&ctx);
28+ br_md5_update(&ctx, data, len);
29+ br_md5_out(&ctx, out);
30+ return 16;
31+ }
32+
33+ if (strcmp(name, "sha1") == 0) {
34+ br_sha1_context ctx;
35+ br_sha1_init(&ctx);
36+ br_sha1_update(&ctx, data, len);
37+ br_sha1_out(&ctx, out);
38+ return 20;
39+ }
40+
41+ if (strcmp(name, "sha256") == 0) {
42+ br_sha256_context ctx;
43+ br_sha256_init(&ctx);
44+ br_sha256_update(&ctx, data, len);
45+ br_sha256_out(&ctx, out);
46+ return 32;
47+ }
48+
49+ return 0;
50+}
51+
52+xs_str* _xs_digest(const xs_val* input, int size, const char* digest, int as_hex) {
53+ unsigned char out[64];
54+ int n = _digest_raw(digest, input, size, out);
55+
56+ if (n == 0) { return NULL; }
57+
58+ return as_hex ? xs_hex_enc((char*)out, n) : xs_base64_enc((char*)out, n);
59+}
60+
61 #endif // XS_IMPLEMENTATION
62
63 #endif // _XS_BEARSSL_H