| 1 | module mbedtls |
| 2 | |
| 3 | #flag -I @VEXEROOT/thirdparty/mbedtls/library |
| 4 | #flag -I @VEXEROOT/thirdparty/mbedtls/include |
| 5 | // #flag -D _FILE_OFFSET_BITS=64 |
| 6 | #flag -I @VEXEROOT/thirdparty/mbedtls/3rdparty/everest/include |
| 7 | #flag -I @VEXEROOT/thirdparty/mbedtls/3rdparty/everest/include/everest |
| 8 | #flag -I @VEXEROOT/thirdparty/mbedtls/3rdparty/everest/include/everest/kremlib |
| 9 | |
| 10 | $if macos && arm64 && tinyc { |
| 11 | // Ensure mbedtls disables unsupported ARM asm paths for tinycc on Apple Silicon. |
| 12 | #flag -D__TINYC__ |
| 13 | } |
| 14 | |
| 15 | // TODO: this should be built-in to the compiler |
| 16 | $if prod && opt_size ? { |
| 17 | #flag -Os |
| 18 | } |
| 19 | |
| 20 | #flag @VEXEROOT/thirdparty/mbedtls/library/aes.o |
| 21 | #flag @VEXEROOT/thirdparty/mbedtls/library/aesce.o |
| 22 | #flag @VEXEROOT/thirdparty/mbedtls/library/aesni.o |
| 23 | #flag @VEXEROOT/thirdparty/mbedtls/library/aria.o |
| 24 | #flag @VEXEROOT/thirdparty/mbedtls/library/asn1parse.o |
| 25 | #flag @VEXEROOT/thirdparty/mbedtls/library/asn1write.o |
| 26 | #flag @VEXEROOT/thirdparty/mbedtls/library/base64.o |
| 27 | #flag @VEXEROOT/thirdparty/mbedtls/library/bignum.o |
| 28 | #flag @VEXEROOT/thirdparty/mbedtls/library/bignum_core.o |
| 29 | #flag @VEXEROOT/thirdparty/mbedtls/library/bignum_mod.o |
| 30 | #flag @VEXEROOT/thirdparty/mbedtls/library/bignum_mod_raw.o |
| 31 | #flag @VEXEROOT/thirdparty/mbedtls/library/block_cipher.o |
| 32 | #flag @VEXEROOT/thirdparty/mbedtls/library/camellia.o |
| 33 | #flag @VEXEROOT/thirdparty/mbedtls/library/ccm.o |
| 34 | #flag @VEXEROOT/thirdparty/mbedtls/library/chacha20.o |
| 35 | #flag @VEXEROOT/thirdparty/mbedtls/library/chachapoly.o |
| 36 | #flag @VEXEROOT/thirdparty/mbedtls/library/cipher.o |
| 37 | #flag @VEXEROOT/thirdparty/mbedtls/library/cipher_wrap.o |
| 38 | #flag @VEXEROOT/thirdparty/mbedtls/library/cmac.o |
| 39 | #flag @VEXEROOT/thirdparty/mbedtls/library/constant_time.o |
| 40 | #flag @VEXEROOT/thirdparty/mbedtls/library/ctr_drbg.o |
| 41 | #flag @VEXEROOT/thirdparty/mbedtls/library/debug.o |
| 42 | #flag @VEXEROOT/thirdparty/mbedtls/library/des.o |
| 43 | #flag @VEXEROOT/thirdparty/mbedtls/library/dhm.o |
| 44 | #flag @VEXEROOT/thirdparty/mbedtls/library/ecdh.o |
| 45 | #flag @VEXEROOT/thirdparty/mbedtls/library/ecdsa.o |
| 46 | #flag @VEXEROOT/thirdparty/mbedtls/library/ecjpake.o |
| 47 | #flag @VEXEROOT/thirdparty/mbedtls/library/ecp.o |
| 48 | #flag @VEXEROOT/thirdparty/mbedtls/library/ecp_curves.o |
| 49 | #flag @VEXEROOT/thirdparty/mbedtls/library/ecp_curves_new.o |
| 50 | #flag @VEXEROOT/thirdparty/mbedtls/library/entropy.o |
| 51 | #flag @VEXEROOT/thirdparty/mbedtls/library/entropy_poll.o |
| 52 | #flag @VEXEROOT/thirdparty/mbedtls/library/error.o |
| 53 | #flag @VEXEROOT/thirdparty/mbedtls/library/gcm.o |
| 54 | #flag @VEXEROOT/thirdparty/mbedtls/library/hkdf.o |
| 55 | #flag @VEXEROOT/thirdparty/mbedtls/library/hmac_drbg.o |
| 56 | #flag @VEXEROOT/thirdparty/mbedtls/library/lmots.o |
| 57 | #flag @VEXEROOT/thirdparty/mbedtls/library/lms.o |
| 58 | #flag @VEXEROOT/thirdparty/mbedtls/library/md5.o |
| 59 | #flag @VEXEROOT/thirdparty/mbedtls/library/md.o |
| 60 | #flag @VEXEROOT/thirdparty/mbedtls/library/memory_buffer_alloc.o |
| 61 | #flag @VEXEROOT/thirdparty/mbedtls/library/mps_reader.o |
| 62 | #flag @VEXEROOT/thirdparty/mbedtls/library/mps_trace.o |
| 63 | #flag @VEXEROOT/thirdparty/mbedtls/library/net_sockets.o |
| 64 | #flag @VEXEROOT/thirdparty/mbedtls/library/nist_kw.o |
| 65 | #flag @VEXEROOT/thirdparty/mbedtls/library/oid.o |
| 66 | #flag @VEXEROOT/thirdparty/mbedtls/library/padlock.o |
| 67 | #flag @VEXEROOT/thirdparty/mbedtls/library/pem.o |
| 68 | #flag @VEXEROOT/thirdparty/mbedtls/library/pk.o |
| 69 | #flag @VEXEROOT/thirdparty/mbedtls/library/pkcs12.o |
| 70 | #flag @VEXEROOT/thirdparty/mbedtls/library/pkcs5.o |
| 71 | #flag @VEXEROOT/thirdparty/mbedtls/library/pkcs7.o |
| 72 | #flag @VEXEROOT/thirdparty/mbedtls/library/pk_ecc.o |
| 73 | #flag @VEXEROOT/thirdparty/mbedtls/library/pkparse.o |
| 74 | #flag @VEXEROOT/thirdparty/mbedtls/library/pk_wrap.o |
| 75 | #flag @VEXEROOT/thirdparty/mbedtls/library/pkwrite.o |
| 76 | #flag @VEXEROOT/thirdparty/mbedtls/library/platform.o |
| 77 | #flag @VEXEROOT/thirdparty/mbedtls/library/platform_util.o |
| 78 | #flag @VEXEROOT/thirdparty/mbedtls/library/poly1305.o |
| 79 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_aead.o |
| 80 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto.o |
| 81 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_cipher.o |
| 82 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_client.o |
| 83 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_driver_wrappers_no_static.o |
| 84 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_ecp.o |
| 85 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_ffdh.o |
| 86 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_hash.o |
| 87 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_mac.o |
| 88 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_pake.o |
| 89 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_random.o |
| 90 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_rsa.o |
| 91 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_se.o |
| 92 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_slot_management.o |
| 93 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_crypto_storage.o |
| 94 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_its_file.o |
| 95 | #flag @VEXEROOT/thirdparty/mbedtls/library/psa_util.o |
| 96 | #flag @VEXEROOT/thirdparty/mbedtls/library/ripemd160.o |
| 97 | #flag @VEXEROOT/thirdparty/mbedtls/library/rsa_alt_helpers.o |
| 98 | #flag @VEXEROOT/thirdparty/mbedtls/library/rsa.o |
| 99 | #flag @VEXEROOT/thirdparty/mbedtls/library/sha1.o |
| 100 | #flag @VEXEROOT/thirdparty/mbedtls/library/sha256.o |
| 101 | #flag @VEXEROOT/thirdparty/mbedtls/library/sha3.o |
| 102 | #flag @VEXEROOT/thirdparty/mbedtls/library/sha512.o |
| 103 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_cache.o |
| 104 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_ciphersuites.o |
| 105 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_client.o |
| 106 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_cookie.o |
| 107 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_debug_helpers_generated.o |
| 108 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_msg.o |
| 109 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_ticket.o |
| 110 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_tls12_client.o |
| 111 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_tls12_server.o |
| 112 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_tls13_client.o |
| 113 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_tls13_generic.o |
| 114 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_tls13_keys.o |
| 115 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_tls13_server.o |
| 116 | #flag @VEXEROOT/thirdparty/mbedtls/library/ssl_tls.o |
| 117 | #flag @VEXEROOT/thirdparty/mbedtls/library/threading.o |
| 118 | #flag @VEXEROOT/thirdparty/mbedtls/library/timing.o |
| 119 | #flag @VEXEROOT/thirdparty/mbedtls/library/version.o |
| 120 | #flag @VEXEROOT/thirdparty/mbedtls/library/version_features.o |
| 121 | #flag @VEXEROOT/thirdparty/mbedtls/library/x509.o |
| 122 | #flag @VEXEROOT/thirdparty/mbedtls/library/x509_create.o |
| 123 | #flag @VEXEROOT/thirdparty/mbedtls/library/x509_crl.o |
| 124 | #flag @VEXEROOT/thirdparty/mbedtls/library/x509_crt.o |
| 125 | #flag @VEXEROOT/thirdparty/mbedtls/library/x509_csr.o |
| 126 | #flag @VEXEROOT/thirdparty/mbedtls/library/x509write.o |
| 127 | #flag @VEXEROOT/thirdparty/mbedtls/library/x509write_crt.o |
| 128 | #flag @VEXEROOT/thirdparty/mbedtls/library/x509write_csr.o |
| 129 | #flag @VEXEROOT/thirdparty/mbedtls/3rdparty/everest/library/Hacl_Curve25519_joined.o |
| 130 | #flag @VEXEROOT/thirdparty/mbedtls/3rdparty/everest/library/everest.o |
| 131 | #flag @VEXEROOT/thirdparty/mbedtls/3rdparty/everest/library/x25519.o |
| 132 | |
| 133 | #include <mbedtls/net_sockets.h> |
| 134 | #include <mbedtls/ssl.h> |
| 135 | #include <mbedtls/entropy.h> |
| 136 | #include <mbedtls/ctr_drbg.h> |
| 137 | #include <mbedtls/error.h> |
| 138 | #include <mbedtls/threading.h> |
| 139 | #insert "@VEXEROOT/vlib/net/mbedtls/mbedtls_helpers.h" |
| 140 | #insert "@VEXEROOT/vlib/net/mbedtls/mbedtls_threading.h" |
| 141 | |
| 142 | // v_mbedtls_threading_setup installs the mutex callbacks mbedtls needs when it |
| 143 | // is built with MBEDTLS_THREADING_ALT (Windows). On platforms that use pthread |
| 144 | // threading or no threading it is a no-op. Defined in mbedtls_threading.h. |
| 145 | fn C.v_mbedtls_threading_setup() |
| 146 | |
| 147 | // init installs mbedtls' thread-safety callbacks once, before any TLS use, so |
| 148 | // the library's shared state (RNG, key blinding, internal globals) is safe to |
| 149 | // use across threads. A no-op on non-Windows builds. |
| 150 | fn init() { |
| 151 | C.v_mbedtls_threading_setup() |
| 152 | } |
| 153 | |
| 154 | @[typedef] |
| 155 | pub struct C.mbedtls_net_context { |
| 156 | mut: |
| 157 | fd int |
| 158 | } |
| 159 | |
| 160 | @[typedef] |
| 161 | pub struct C.mbedtls_ssl_context {} |
| 162 | |
| 163 | @[typedef] |
| 164 | pub struct C.mbedtls_ssl_config {} |
| 165 | |
| 166 | @[typedef] |
| 167 | pub struct C.mbedtls_ssl_send_t {} |
| 168 | |
| 169 | @[typedef] |
| 170 | pub struct C.mbedtls_ssl_recv_t {} |
| 171 | |
| 172 | @[typedef] |
| 173 | pub struct C.mbedtls_ssl_recv_timeout_t {} |
| 174 | |
| 175 | @[typedef] |
| 176 | pub struct C.mbedtls_pk_context {} |
| 177 | |
| 178 | @[typedef] |
| 179 | pub struct C.mbedtls_ctr_drbg_context {} |
| 180 | |
| 181 | @[typedef] |
| 182 | pub struct C.mbedtls_entropy_context {} |
| 183 | |
| 184 | @[typedef] |
| 185 | pub struct C.mbedtls_x509_crt {} |
| 186 | |
| 187 | @[typedef] |
| 188 | pub struct C.mbedtls_x509_crl {} |
| 189 | |
| 190 | fn C.mbedtls_net_init(&C.mbedtls_net_context) |
| 191 | fn C.mbedtls_net_connect(&C.mbedtls_net_context, &char, &char, i32) i32 |
| 192 | fn C.mbedtls_net_bind(&C.mbedtls_net_context, &char, &char, i32) i32 |
| 193 | fn C.mbedtls_net_accept(&C.mbedtls_net_context, &C.mbedtls_net_context, voidptr, usize, &usize) i32 |
| 194 | fn C.mbedtls_net_recv(voidptr, &u8, usize) i32 |
| 195 | fn C.mbedtls_net_send(voidptr, &u8, usize) i32 |
| 196 | fn C.mbedtls_net_recv_timeout(voidptr, &u8, usize, u32) i32 |
| 197 | fn C.mbedtls_net_free(&C.mbedtls_net_context) |
| 198 | |
| 199 | fn C.mbedtls_ssl_init(&C.mbedtls_ssl_context) |
| 200 | fn C.mbedtls_ssl_setup(&C.mbedtls_ssl_context, &C.mbedtls_ssl_config) i32 |
| 201 | fn C.mbedtls_ssl_session_reset(&C.mbedtls_ssl_context) |
| 202 | fn C.mbedtls_ssl_conf_authmode(&C.mbedtls_ssl_config, i32) |
| 203 | fn C.mbedtls_ssl_conf_rng(&C.mbedtls_ssl_config, fn (voidptr, &u8, usize) int, &C.mbedtls_ctr_drbg_context) |
| 204 | fn C.mbedtls_ssl_set_bio(&C.mbedtls_ssl_context, &C.mbedtls_net_context, fn (voidptr, &u8, usize) i32, fn (voidptr, &u8, usize) i32, fn (voidptr, &u8, usize, u32) i32) |
| 205 | fn C.mbedtls_ssl_conf_own_cert(&C.mbedtls_ssl_config, &C.mbedtls_x509_crt, &C.mbedtls_pk_context) i32 |
| 206 | fn C.mbedtls_ssl_conf_ca_chain(&C.mbedtls_ssl_config, &C.mbedtls_x509_crt, &C.mbedtls_x509_crl) |
| 207 | fn C.mbedtls_ssl_set_hostname(&C.mbedtls_ssl_context, &char) i32 |
| 208 | fn C.mbedtls_ssl_handshake(&C.mbedtls_ssl_context) i32 |
| 209 | fn C.mbedtls_ssl_read(&C.mbedtls_ssl_context, &u8, usize) i32 |
| 210 | fn C.mbedtls_ssl_write(&C.mbedtls_ssl_context, &u8, usize) i32 |
| 211 | fn C.mbedtls_ssl_free(&C.mbedtls_ssl_context) |
| 212 | fn C.mbedtls_ssl_config_init(&C.mbedtls_ssl_config) |
| 213 | fn C.mbedtls_ssl_config_defaults(&C.mbedtls_ssl_config, i32, i32, i32) i32 |
| 214 | fn C.mbedtls_ssl_config_free(&C.mbedtls_ssl_config) |
| 215 | fn C.mbedtls_ssl_conf_sni(&C.mbedtls_ssl_config, fn (voidptr, &C.mbedtls_ssl_context, &char, int) int, voidptr) |
| 216 | fn C.mbedtls_ssl_set_hs_ca_chain(&C.mbedtls_ssl_config, &C.mbedtls_x509_crt, &C.mbedtls_x509_crl) |
| 217 | fn C.mbedtls_ssl_set_hs_own_cert(&C.mbedtls_ssl_context, &C.mbedtls_x509_crt, &C.mbedtls_pk_context) i32 |
| 218 | fn C.mbedtls_ssl_set_hs_authmode(&C.mbedtls_ssl_context, i32) |
| 219 | |
| 220 | fn C.mbedtls_pk_init(&C.mbedtls_pk_context) |
| 221 | fn C.mbedtls_pk_free(&C.mbedtls_pk_context) |
| 222 | fn C.mbedtls_pk_parse_key(&C.mbedtls_pk_context, &u8, usize, &u8, usize, fn (voidptr, &u8, usize) int, |
| 223 | voidptr) i32 |
| 224 | fn C.mbedtls_pk_parse_keyfile(&C.mbedtls_pk_context, &char, &char, fn (voidptr, &u8, usize) int, voidptr) i32 |
| 225 | |
| 226 | fn C.mbedtls_ctr_drbg_init(&C.mbedtls_ctr_drbg_context) |
| 227 | fn C.mbedtls_ctr_drbg_seed(&C.mbedtls_ctr_drbg_context, fn (voidptr, &u8, usize), voidptr, &u8, usize) i32 |
| 228 | fn C.mbedtls_ctr_drbg_free(&C.mbedtls_ctr_drbg_context) |
| 229 | fn C.mbedtls_ctr_drbg_random(voidptr, &u8, usize) i32 |
| 230 | |
| 231 | fn C.mbedtls_entropy_init(&C.mbedtls_entropy_context) |
| 232 | fn C.mbedtls_entropy_free(&C.mbedtls_entropy_context) |
| 233 | fn C.mbedtls_entropy_func(voidptr, &u8, usize) |
| 234 | |
| 235 | fn C.mbedtls_x509_crt_init(&C.mbedtls_x509_crt) |
| 236 | fn C.mbedtls_x509_crt_free(&C.mbedtls_x509_crt) |
| 237 | fn C.mbedtls_x509_crt_parse(&C.mbedtls_x509_crt, &u8, usize) i32 |
| 238 | fn C.mbedtls_x509_crt_parse_file(&C.mbedtls_x509_crt, &char) i32 |
| 239 | |
| 240 | fn C.mbedtls_high_level_strerr(i32) &char |
| 241 | |
| 242 | fn C.mbedtls_debug_set_threshold(level i32) |
| 243 | |
| 244 | fn C.mbedtls_ssl_conf_read_timeout(conf &C.mbedtls_ssl_config, timeout u32) |
| 245 | |
| 246 | // protos is `const char **`; declared as voidptr so V emits a clean |
| 247 | // `(void*)` cast and avoids -cstrict nested-pointer const warnings. |
| 248 | fn C.mbedtls_ssl_conf_alpn_protocols(conf &C.mbedtls_ssl_config, protos voidptr) i32 |
| 249 | |
| 250 | fn C.mbedtls_ssl_get_alpn_protocol(&C.mbedtls_ssl_context) voidptr |
| 251 | |
| 252 | fn C.v_mbedtls_ssl_set_bio_nonblocking(&C.mbedtls_ssl_context, &C.mbedtls_net_context) |
| 253 | |