aboutsummaryrefslogtreecommitdiff
path: root/src/mbedtls.c
diff options
context:
space:
mode:
authorDavid Timber <mieabby@gmail.com>2020-01-11 18:03:47 +1100
committerDavid Timber <mieabby@gmail.com>2020-01-11 18:03:47 +1100
commit10512fc50e6184397206a41c157c09d9b02e9e1a (patch)
tree5f0779032edf0f0710400ae6c99b9a3f2977735d /src/mbedtls.c
parent129e12d7685a6ea99fde514ad104a0368a19033d (diff)
staged resolv_worker
* replaced RNG from `rnd` to `mbedtls_ctr_drbg` * use of `uint_fastN_t` where appropriate * heartbeat protocol draft * improved worker scheduling mech
Diffstat (limited to 'src/mbedtls.c')
-rw-r--r--src/mbedtls.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/mbedtls.c b/src/mbedtls.c
new file mode 100644
index 0000000..518da1f
--- /dev/null
+++ b/src/mbedtls.c
@@ -0,0 +1,52 @@
+#include "mbedtls.h"
+
+#include <unistd.h>
+#include <errno.h>
+
+#include <mbedtls/ssl.h>
+
+
+int prne_mbedtls_x509_crt_verify_cb (void *param, mbedtls_x509_crt *crt, int crt_depth, uint32_t *flags) {
+ *flags &= ~MBEDTLS_X509_BADCERT_EXPIRED;
+ return 0;
+}
+
+int prne_mbedtls_ssl_send_cb (void *ctx, const unsigned char *buf, size_t len) {
+ const int fd = *(int*)ctx;
+ ssize_t ret;
+
+ ret = write(fd, buf, len);
+ if (ret < 0) {
+ switch (errno) {
+#if EAGAIN == EWOULDBLOCK
+ case EAGAIN:
+#else
+ case EAGAIN:
+ case EWOULDBLOCK:
+#endif
+ return MBEDTLS_ERR_SSL_WANT_WRITE;
+ }
+ }
+
+ return ret;
+}
+
+int prne_mbedtls_ssl_recv_cb (void *ctx, unsigned char *buf, size_t len) {
+ const int fd = *(int*)ctx;
+ ssize_t ret;
+
+ ret = read(fd, buf, len);
+ if (ret < 0) {
+ switch (errno) {
+#if EAGAIN == EWOULDBLOCK
+ case EAGAIN:
+#else
+ case EAGAIN:
+ case EWOULDBLOCK:
+#endif
+ return MBEDTLS_ERR_SSL_WANT_READ;
+ }
+ }
+
+ return ret;
+}