commit b355650

V. Luna  ·  2026-10-08 00:42:05 +0000 UTC
parent 3f327b1
fix .clangd and add digest
2 files changed,  +41, -3
+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