Csilk 0.2.1
A lightweight, high-performance C HTTP web framework
Loading...
Searching...
No Matches
internal.h
Go to the documentation of this file.
1
22#ifndef CSILK_INTERNAL_H
23#define CSILK_INTERNAL_H
24
25#include <setjmp.h>
26#include <stddef.h>
27#include <stdint.h>
28#include <uv.h>
29
30#include "csilk/csilk.h"
31#include "csilk/test/test.h"
32
43typedef struct {
44 uint32_t state[5];
45 uint32_t count[2];
47 uint8_t buffer[64];
49
57void csilk_sha1_init(csilk_sha1_ctx* context);
58
68void csilk_sha1_update(csilk_sha1_ctx* context, const uint8_t* data, size_t len);
69
78void csilk_sha1_final(csilk_sha1_ctx* context, uint8_t digest[20]);
79
86typedef struct {
87 uint32_t state[8];
88 uint64_t count;
89 uint8_t buffer[64];
91
98
106void csilk_sha256_update(csilk_sha256_ctx* context, const uint8_t* data, size_t len);
107
114void csilk_sha256_final(csilk_sha256_ctx* context, uint8_t digest[32]);
115
128 const uint8_t* key, size_t key_len, const uint8_t* data, size_t data_len, uint8_t out[32]);
129
140void csilk_base64_encode(const uint8_t* src, size_t len, char* out);
141
152void csilk_base64url_encode(const uint8_t* src, size_t len, char* out);
153
165int csilk_base64url_decode(const char* src, uint8_t* out);
166
178void csilk_ws_parse_frame(csilk_ctx_t* c, const uint8_t* buf, size_t nread);
179
188void _csilk_send_response(csilk_ctx_t* c) __attribute__((weak));
189
200void _csilk_send_data(csilk_ctx_t* c, const uint8_t* data, size_t len);
201
213void _csilk_hmac_sha256(csilk_ctx_t* c,
214 const uint8_t* key,
215 size_t key_len,
216 const uint8_t* data,
217 size_t data_len,
218 uint8_t out[32]);
219
229void _csilk_generate_uuid(csilk_ctx_t* c, char buf[37]);
230
237void* _csilk_get_internal_client(csilk_ctx_t* c);
238
243void _csilk_set_internal_client(csilk_ctx_t* c, void* client);
244
262int _csilk_symmetric_encrypt(csilk_ctx_t* c,
263 const uint8_t* key,
264 size_t key_len,
265 const uint8_t* plaintext,
266 size_t plaintext_len,
267 const uint8_t* iv,
268 size_t iv_len,
269 uint8_t* ciphertext,
270 size_t* ciphertext_len,
271 uint8_t* tag,
272 size_t tag_len);
273
292int _csilk_symmetric_decrypt(csilk_ctx_t* c,
293 const uint8_t* key,
294 size_t key_len,
295 const uint8_t* ciphertext,
296 size_t ciphertext_len,
297 const uint8_t* iv,
298 size_t iv_len,
299 const uint8_t* tag,
300 size_t tag_len,
301 uint8_t* plaintext,
302 size_t* plaintext_len);
303
318 csilk_ctx_t* c, char* public_key, size_t* pub_len, char* private_key, size_t* priv_len);
319
333int _csilk_asymmetric_encrypt(csilk_ctx_t* c,
334 const char* public_key,
335 size_t pub_len,
336 const uint8_t* plaintext,
337 size_t plaintext_len,
338 uint8_t* ciphertext,
339 size_t* ciphertext_len);
340
354int _csilk_asymmetric_decrypt(csilk_ctx_t* c,
355 const char* private_key,
356 size_t priv_len,
357 const uint8_t* ciphertext,
358 size_t ciphertext_len,
359 uint8_t* plaintext,
360 size_t* plaintext_len);
361
375int _csilk_sign(csilk_ctx_t* c,
376 const char* private_key,
377 size_t priv_len,
378 const uint8_t* data,
379 size_t data_len,
380 uint8_t* signature,
381 size_t* sig_len);
382
396int _csilk_verify(csilk_ctx_t* c,
397 const char* public_key,
398 size_t pub_len,
399 const uint8_t* data,
400 size_t data_len,
401 const uint8_t* signature,
402 size_t sig_len);
403
414size_t csilk_url_decode(char* str);
415
424void csilk_generate_uuid(char* buf);
425
430typedef struct csilk_mq_msg_s {
431 char* topic;
432 void* payload;
434 size_t len;
435 struct csilk_mq_msg_s*
438
443typedef struct csilk_mq_topic_s {
444 char* name;
449 struct csilk_mq_topic_s* next;
451
472 uv_async_t async_handle;
474 uv_mutex_t queue_mutex;
480 /* Global middlewares */
486 /* Persistence (WAL) */
487 uv_file wal_fd;
489 char* wal_path;
491 uv_mutex_t wal_mutex;
493 /* Monitoring */
496 uint64_t failed_total;
497 uint32_t queue_depth;
499 csilk_ctx_t** monitors;
502 uv_mutex_t monitor_mutex;
503};
504
520
527typedef struct {
528 uv_work_t req;
530 char* topic;
531 void* payload;
532 size_t len;
534
541csilk_mq_t* _csilk_mq_new(uv_loop_t* loop);
542
550void _csilk_mq_free(csilk_mq_t* mq);
551
552#endif
High-performance C web framework — main public API header.
void(* csilk_mq_worker_t)(const char *topic, const void *payload, size_t len)
Signature for a background MQ worker function.
Definition csilk.h:2422
void(* csilk_mq_handler_t)(csilk_mq_ctx_t *ctx)
MQ handler signature for middleware and subscribers.
Definition csilk.h:2394
csilk_mq_msg_t * queue_tail
Definition internal.h:476
uint64_t count
Definition internal.h:88
void _csilk_hmac_sha256(csilk_ctx_t *c, const uint8_t *key, size_t key_len, const uint8_t *data, size_t data_len, uint8_t out[32])
Internal: Compute HMAC-SHA256 using the server's crypto driver (if set) or the built-in software impl...
Definition utils.c:697
csilk_mq_t * _csilk_mq_new(uv_loop_t *loop)
Internal: Create a new MQ instance bound to a libuv loop.
Definition mq.c:329
int _csilk_asymmetric_encrypt(csilk_ctx_t *c, const char *public_key, size_t pub_len, const uint8_t *plaintext, size_t plaintext_len, uint8_t *ciphertext, size_t *ciphertext_len)
Internal: Asymmetric encrypt using the context's cipher driver or the built-in OpenSSL RSA-OAEP imple...
Definition utils.c:815
void csilk_hmac_sha256(const uint8_t *key, size_t key_len, const uint8_t *data, size_t data_len, uint8_t out[32])
Compute HMAC-SHA256 (keyed-hash message authentication code).
Definition utils.c:402
uv_mutex_t wal_mutex
Definition internal.h:491
char * name
Definition internal.h:444
uv_async_t async_handle
Definition internal.h:472
void _csilk_generate_uuid(csilk_ctx_t *c, char buf[37])
Internal: Generate a random UUID v4 string using the crypto driver (if set) or the built-in /dev/uran...
Definition utils.c:725
uv_work_t req
Definition internal.h:528
void csilk_base64url_encode(const uint8_t *src, size_t len, char *out)
Encode raw bytes as a Base64URL (RFC 4648 §5) string.
Definition utils.c:506
uv_mutex_t queue_mutex
Definition internal.h:474
void csilk_sha256_init(csilk_sha256_ctx *context)
Initialise a SHA-256 hashing context.
Definition utils.c:313
uv_file wal_fd
Definition internal.h:487
csilk_mq_worker_t handler
Definition internal.h:529
uint32_t queue_depth
Definition internal.h:497
int csilk_base64url_decode(const char *src, uint8_t *out)
Decode a Base64URL (RFC 4648 §5) string to raw bytes.
Definition utils.c:541
void csilk_ws_parse_frame(csilk_ctx_t *c, const uint8_t *buf, size_t nread)
Parse an incoming WebSocket frame from the raw TCP stream.
Definition websocket.c:293
void * payload
Definition internal.h:432
size_t len
Definition internal.h:532
uint64_t published_total
Definition internal.h:494
csilk_mq_msg_t * queue_head
Definition internal.h:475
void csilk_base64_encode(const uint8_t *src, size_t len, char *out)
Encode raw bytes as a standard Base64 string.
Definition utils.c:457
size_t handler_count
Definition internal.h:516
uint64_t failed_total
Definition internal.h:496
csilk_ctx_t ** monitors
Definition internal.h:499
void * payload
Definition internal.h:531
void csilk_sha1_update(csilk_sha1_ctx *context, const uint8_t *data, size_t len)
Feed data into the SHA-1 hashing context.
Definition utils.c:142
csilk_mq_msg_t * msg
Definition internal.h:513
int _csilk_generate_keypair(csilk_ctx_t *c, char *public_key, size_t *pub_len, char *private_key, size_t *priv_len)
Internal: Generate an RSA-2048 key pair using the context's cipher driver or the built-in OpenSSL imp...
Definition utils.c:804
void csilk_sha256_update(csilk_sha256_ctx *context, const uint8_t *data, size_t len)
Feed data into the SHA-256 hashing context.
Definition utils.c:335
csilk_mq_handler_t * handlers
Definition internal.h:514
struct csilk_mq_msg_s * next
Definition internal.h:435
size_t handler_count
Definition internal.h:447
int _csilk_verify(csilk_ctx_t *c, const char *public_key, size_t pub_len, const uint8_t *data, size_t data_len, const uint8_t *signature, size_t sig_len)
Internal: Verify a signature using the context's cipher driver or the built-in OpenSSL RSA-PSS implem...
Definition utils.c:865
int _csilk_symmetric_encrypt(csilk_ctx_t *c, const uint8_t *key, size_t key_len, const uint8_t *plaintext, size_t plaintext_len, const uint8_t *iv, size_t iv_len, uint8_t *ciphertext, size_t *ciphertext_len, uint8_t *tag, size_t tag_len)
Internal: Symmetric encrypt using the context's cipher driver or the built-in OpenSSL AES-256-GCM imp...
Definition utils.c:746
struct csilk_mq_topic_s * next
Definition internal.h:449
int aborted
Definition internal.h:518
void _csilk_set_internal_client(csilk_ctx_t *c, void *client)
Set the internal client connection object.
Definition context.c:561
void csilk_sha1_final(csilk_sha1_ctx *context, uint8_t digest[20])
Finalise the SHA-1 hash and write the 20-byte digest.
Definition utils.c:176
csilk_mq_handler_t * global_middlewares
Definition internal.h:481
void * _csilk_get_internal_client(csilk_ctx_t *c)
Get the internal client connection object.
Definition context.c:551
uv_mutex_t monitor_mutex
Definition internal.h:502
size_t global_mw_capacity
Definition internal.h:484
size_t handler_capacity
Definition internal.h:448
csilk_mq_t * mq
Definition internal.h:512
int _csilk_asymmetric_decrypt(csilk_ctx_t *c, const char *private_key, size_t priv_len, const uint8_t *ciphertext, size_t ciphertext_len, uint8_t *plaintext, size_t *plaintext_len)
Internal: Asymmetric decrypt using the context's cipher driver or the built-in OpenSSL RSA-OAEP imple...
Definition utils.c:832
void _csilk_send_response(csilk_ctx_t *c) __attribute__((weak))
Internal: Trigger the response send path.
Definition server.c:897
char * topic
Definition internal.h:530
int _csilk_sign(csilk_ctx_t *c, const char *private_key, size_t priv_len, const uint8_t *data, size_t data_len, uint8_t *signature, size_t *sig_len)
Internal: Sign data using the context's cipher driver or the built-in OpenSSL RSA-PSS implementation.
Definition utils.c:849
size_t len
Definition internal.h:434
size_t global_mw_count
Definition internal.h:483
void csilk_sha1_init(csilk_sha1_ctx *context)
Initialise a SHA-1 hashing context.
Definition utils.c:122
void _csilk_mq_free(csilk_mq_t *mq)
Internal: Destroy an MQ instance and release all resources.
Definition mq.c:958
int handler_index
Definition internal.h:517
uint64_t delivered_total
Definition internal.h:495
size_t csilk_url_decode(char *str)
URL-decode a percent-encoded string in-place.
Definition url.c:56
csilk_mq_handler_t * handlers
Definition internal.h:445
char * topic
Definition internal.h:431
size_t monitor_count
Definition internal.h:500
void csilk_sha256_final(csilk_sha256_ctx *context, uint8_t digest[32])
Finalise the SHA-256 hash and write the 32-byte digest.
Definition utils.c:361
void _csilk_send_data(csilk_ctx_t *c, const uint8_t *data, size_t len)
Internal: Send data through the appropriate I/O path.
Definition server.c:855
void csilk_generate_uuid(char *buf)
Generate a random UUID v4 string (standalone, no context needed).
Definition utils.c:628
size_t monitor_capacity
Definition internal.h:501
csilk_mq_topic_t * topics
Definition internal.h:478
char * wal_path
Definition internal.h:489
int _csilk_symmetric_decrypt(csilk_ctx_t *c, const uint8_t *key, size_t key_len, const uint8_t *ciphertext, size_t ciphertext_len, const uint8_t *iv, size_t iv_len, const uint8_t *tag, size_t tag_len, uint8_t *plaintext, size_t *plaintext_len)
Internal: Symmetric decrypt using the context's cipher driver or the built-in OpenSSL AES-256-GCM imp...
Definition utils.c:775
Internal: Per-message MQ context passed to middleware and subscribers.
Definition internal.h:511
Internal: A single message in the MQ linked-list queue. Messages are heap-allocated and linked via ne...
Definition internal.h:430
Internal: The Message Queue instance.
Definition internal.h:471
Internal: A topic node in the MQ's linked list of topics. Holds the topic name and its associated mid...
Definition internal.h:443
Internal: Context passed to libuv's thread-pool work callback.
Definition internal.h:527
SHA-1 hashing context.
Definition internal.h:43
SHA-256 hashing context.
Definition internal.h:86
struct __attribute__((packed))
Packed binary header prefixed to every WAL record.
Definition workflow_wal.h:54