From 25692ca4a6f03a7297de6c660b5707137083c8ae Mon Sep 17 00:00:00 2001 From: Mikhail Tavarez Date: Sun, 15 Sep 2024 18:38:23 -0500 Subject: [PATCH 01/18] fix build --- .github/workflows/test.yml | 2 -- magic.lock | 14 +++++++++++++ mojoproject.toml | 3 ++- src/recipe.yaml | 7 ++++--- src/rustls/__init__.mojo | 42 ++++++++++++++++++++++++++++++++++++++ src/test.mojo | 11 ++++++++++ 6 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 src/rustls/__init__.mojo create mode 100644 src/test.mojo diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 654887c..8c7e628 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -35,5 +35,3 @@ jobs: run: | source $HOME/.bash_profile magic run tests - magic run benchmarks - magic run examples diff --git a/magic.lock b/magic.lock index 0f0b1c6..8353660 100644 --- a/magic.lock +++ b/magic.lock @@ -34,6 +34,7 @@ environments: - conda: https://conda.modular.com/max/osx-arm64/max-python-24.5.0-3.12release.conda - conda: https://conda.modular.com/max/noarch/mblack-24.5.0-release.conda - conda: https://conda.modular.com/max/noarch/mojo-jupyter-24.5.0-release.conda + - conda: file:///Users/mikhailtavarez/.rattler/output/osx-arm64/mojo-rustls-ffi-0.1.1-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda @@ -499,6 +500,19 @@ packages: - python size: 21595 timestamp: 1726172475911 +- kind: conda + name: mojo-rustls-ffi + version: 0.1.1 + build: h60d57d3_0 + subdir: osx-arm64 + url: file:///Users/mikhailtavarez/.rattler/output/osx-arm64/mojo-rustls-ffi-0.1.1-h60d57d3_0.conda + sha256: afd80198be1eafdfab5b23b8d7b12bf5fae1090dec45fe0ced77946817ea2911 + md5: e4abcc9984d79b797dbde911dbf9b731 + arch: arm64 + platform: osx + license: MIT + size: 1170952 + timestamp: 1726443386227 - kind: conda name: mypy_extensions version: 1.0.0 diff --git a/mojoproject.toml b/mojoproject.toml index b1fccdc..cbf4218 100644 --- a/mojoproject.toml +++ b/mojoproject.toml @@ -4,7 +4,7 @@ channels = ["conda-forge", "https://conda.modular.com/max", "file:////Users/mikh description = "Add a short description here" name = "mojo-rustls" platforms = ["osx-arm64"] -version = "0.1.0" +version = "0.1.1" [tasks] tests = "bash scripts/tests.sh" @@ -14,3 +14,4 @@ publish = { cmd = "bash scripts/publish.sh", env = { PREFIX_API_KEY = "$PREFIX_A [dependencies] max = ">=24.5.0,<25" +mojo-rustls-ffi = ">=0.1.0,<0.2" # self dependency just for local testing diff --git a/src/recipe.yaml b/src/recipe.yaml index a609aa5..c277d49 100644 --- a/src/recipe.yaml +++ b/src/recipe.yaml @@ -5,17 +5,18 @@ context: package: name: "mojo-rustls-ffi" - version: 0.1.0 + version: 0.1.1 source: - # - path: ./librustls.dylib - path: ../LICENSE build: script: - mkdir -p ${PREFIX}/share/mojo-rustls-ffi - git clone --depth=1 git@github.com:rustls/rustls-ffi.git - - cd rustls-ffi && cargo cinstall --library-type=cdylib --destdir=${PREFIX}/share/mojo-rustls-ffi/librustls.dylib + - cd rustls-ffi && cargo cinstall --library-type=cdylib --destdir=./output + - ls -la output/usr/local/lib + - cp output/usr/local/lib/librustls.dylib ${PREFIX}/share/mojo-rustls-ffi/librustls.dylib - cd .. && rm -R rustls-ffi about: diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo new file mode 100644 index 0000000..36e1d3f --- /dev/null +++ b/src/rustls/__init__.mojo @@ -0,0 +1,42 @@ +from sys import ffi +import os + +var _rustls = ffi.DLHandle(os.getenv("CONDA_PREFIX") + "/share/mojo-rustls-ffi/librustls.dylib", ffi.RTLD.LAZY) + +struct ClientConfig: + pass + +struct RootCertStoreBuilder: + pass + +struct RootCertStore: + pass + +struct WebPkiServerCertVerifierBuilder: + pass + +struct ServerCertVerifier: + pass + + +fn new_client_config() -> UnsafePointer[ClientConfig]: + return _rustls.get_function[ + fn () -> UnsafePointer[ClientConfig] + ]("rustls_client_config_builder_new")() + +fn new_root_cert_store_builder() -> UnsafePointer[RootCertStoreBuilder]: + return _rustls.get_function[ + fn () -> UnsafePointer[RootCertStoreBuilder] + ]("rustls_root_cert_store_builder_new")() + +fn load_roots_from_file(builder: UnsafePointer[RootCertStoreBuilder], file_path: UnsafePointer[UInt8], optional: Bool) -> Int: + return _rustls.get_function[ + fn (UnsafePointer[RootCertStoreBuilder], UnsafePointer[UInt8], Bool) -> Int + ]("rustls_root_cert_store_builder_load_roots_from_file")(builder, file_path, optional) + + +struct RustlsClientConfig: + var _handle: UnsafePointer[ClientConfig] + + fn __init__(inout self): + self._handle = new_client_config() diff --git a/src/test.mojo b/src/test.mojo new file mode 100644 index 0000000..9c5c023 --- /dev/null +++ b/src/test.mojo @@ -0,0 +1,11 @@ +from rustls import new_root_cert_store_builder, load_roots_from_file, RustlsClientConfig + + +fn main(): + var cert_path = "/etc/ssl/cert.pem" + var config = RustlsClientConfig() + + var root_cert_store_builder = new_root_cert_store_builder() + var result = load_roots_from_file(root_cert_store_builder, cert_path.unsafe_ptr(), False) + + print("Result: ", result) \ No newline at end of file From f69d861f079fe3652f4f0951e5fd6a8e8ac395bf Mon Sep 17 00:00:00 2001 From: Mikhail Tavarez Date: Mon, 16 Sep 2024 13:37:40 -0500 Subject: [PATCH 02/18] wip test script --- magic.lock | 16 ++++ mojoproject.toml | 3 +- src/rustls/__init__.mojo | 138 +++++++++++++++++++++++++++++---- src/test.mojo | 160 +++++++++++++++++++++++++++++++++++++-- 4 files changed, 298 insertions(+), 19 deletions(-) diff --git a/magic.lock b/magic.lock index 8353660..198ad81 100644 --- a/magic.lock +++ b/magic.lock @@ -5,11 +5,13 @@ environments: - url: https://conda.anaconda.org/conda-forge/ - url: https://conda.modular.com/max/ - url: file:///Users/mikhailtavarez/.rattler/output/ + - url: https://repo.prefix.dev/mojo-community/ packages: osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://repo.prefix.dev/mojo-community/osx-arm64/gojo-0.1.9-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.2-pyhd8ed1ab_0.conda @@ -98,6 +100,20 @@ packages: license_family: BSD size: 84437 timestamp: 1692311973840 +- kind: conda + name: gojo + version: 0.1.9 + build: h60d57d3_0 + subdir: osx-arm64 + url: https://repo.prefix.dev/mojo-community/osx-arm64/gojo-0.1.9-h60d57d3_0.conda + sha256: 4c268d0d8d5f1b78a547e78a3db9e8037143918cd1d696f5adb5db55942cef5e + depends: + - max >=24.5.0,<24.6.0 + arch: arm64 + platform: osx + license: MIT + size: 1009999 + timestamp: 1726268309700 - kind: conda name: importlib-metadata version: 8.5.0 diff --git a/mojoproject.toml b/mojoproject.toml index cbf4218..78463f8 100644 --- a/mojoproject.toml +++ b/mojoproject.toml @@ -1,6 +1,6 @@ [project] authors = ["Mikhail Tavarez "] -channels = ["conda-forge", "https://conda.modular.com/max", "file:////Users/mikhailtavarez/.rattler/output"] +channels = ["conda-forge", "https://conda.modular.com/max", "file:////Users/mikhailtavarez/.rattler/output", "https://repo.prefix.dev/mojo-community"] description = "Add a short description here" name = "mojo-rustls" platforms = ["osx-arm64"] @@ -15,3 +15,4 @@ publish = { cmd = "bash scripts/publish.sh", env = { PREFIX_API_KEY = "$PREFIX_A [dependencies] max = ">=24.5.0,<25" mojo-rustls-ffi = ">=0.1.0,<0.2" # self dependency just for local testing +gojo = ">=0.1.9,<0.2" diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index 36e1d3f..e80f63a 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -1,42 +1,154 @@ from sys import ffi import os +alias RustlsResult = Int var _rustls = ffi.DLHandle(os.getenv("CONDA_PREFIX") + "/share/mojo-rustls-ffi/librustls.dylib", ffi.RTLD.LAZY) -struct ClientConfig: +@value +struct SliceBytes(): + var data: UnsafePointer[UInt8] + var len: Int + # var phantom: PhantomData<&'a [u8]>, + + +struct WebPkiServerCertVerifierBuilder: pass + +fn new_root_cert_store_builder() -> UnsafePointer[RootCertStoreBuilder]: + return _rustls.get_function[fn () -> UnsafePointer[RootCertStoreBuilder]]("rustls_root_cert_store_builder_new")() + + +fn load_roots_from_file( + builder: UnsafePointer[RootCertStoreBuilder], file_path: UnsafePointer[UInt8], optional: Bool +) -> RustlsResult: + return _rustls.get_function[fn (UnsafePointer[RootCertStoreBuilder], UnsafePointer[UInt8], Bool) -> RustlsResult]( + "rustls_root_cert_store_builder_load_roots_from_file" + )(builder, file_path, optional) + + +# Cipher + + struct RootCertStoreBuilder: pass + struct RootCertStore: pass -struct WebPkiServerCertVerifierBuilder: - pass + +fn build_root_cert_store_builder( + builder: UnsafePointer[RootCertStoreBuilder], root_cert_store_out: UnsafePointer[UnsafePointer[RootCertStore]] +) -> RustlsResult: + return _rustls.get_function[ + fn ( + builder: UnsafePointer[RootCertStoreBuilder], + root_cert_store_out: UnsafePointer[UnsafePointer[RootCertStore]], + ) -> RustlsResult + ]("rustls_root_cert_store_builder_build")(builder, root_cert_store_out) + struct ServerCertVerifier: pass -fn new_client_config() -> UnsafePointer[ClientConfig]: +fn new_web_pki_server_cert_verifier_builder( + store: UnsafePointer[RootCertStore], +) -> UnsafePointer[WebPkiServerCertVerifierBuilder]: + return _rustls.get_function[fn (UnsafePointer[RootCertStore]) -> UnsafePointer[WebPkiServerCertVerifierBuilder]]( + "rustls_web_pki_server_cert_verifier_builder_new" + )(store) + + +fn build_web_pki_server_cert_verifier_builder( + builder: UnsafePointer[WebPkiServerCertVerifierBuilder], + verifier_out: UnsafePointer[UnsafePointer[ServerCertVerifier]], +) -> RustlsResult: return _rustls.get_function[ - fn () -> UnsafePointer[ClientConfig] - ]("rustls_client_config_builder_new")() + fn ( + UnsafePointer[WebPkiServerCertVerifierBuilder], UnsafePointer[UnsafePointer[ServerCertVerifier]] + ) -> RustlsResult + ]("rustls_web_pki_server_cert_verifier_builder_build")(builder, verifier_out) -fn new_root_cert_store_builder() -> UnsafePointer[RootCertStoreBuilder]: + +fn client_config_builder_set_server_verifier( + builder: UnsafePointer[ClientConfigBuilder], + verifier: UnsafePointer[ServerCertVerifier], +) -> None: return _rustls.get_function[ - fn () -> UnsafePointer[RootCertStoreBuilder] - ]("rustls_root_cert_store_builder_new")() + fn ( + UnsafePointer[ClientConfigBuilder], UnsafePointer[ServerCertVerifier] + ) -> None + ]("rustls_client_config_builder_set_server_verifier")(builder, verifier) + + +fn client_config_builder_set_alpn_protocols( + builder: UnsafePointer[ClientConfigBuilder], + protocols: UnsafePointer[String], + len: UInt, +) -> RustlsResult: + return _rustls.get_function[ + fn ( + UnsafePointer[ClientConfigBuilder], UnsafePointer[String], UInt + ) -> RustlsResult + ]("rustls_client_config_builder_set_alpn_protocols")(builder, protocols, len) + + +fn build_client_config_builder( + builder: UnsafePointer[ClientConfigBuilder], + config_out: UnsafePointer[UnsafePointer[ClientConfig]], +) -> RustlsResult: + return _rustls.get_function[ + fn ( + UnsafePointer[ClientConfigBuilder], UnsafePointer[UnsafePointer[ClientConfig]] + ) -> RustlsResult + ]("rustls_client_config_builder_build")(builder, config_out) + +# Connection +@value +struct LogParams: + var level: UInt + var message: String + + +struct RustlsConnection: + pass + + +struct Connection: + var conn: RustlsConnection + var userdata: UnsafePointer[UInt8] + var log_callback: fn (userdata: UnsafePointer[UInt8], params: UnsafePointer[LogParams]) -> None + + +# Client +struct ClientConfig: + pass + +@value +struct ClientConfigBuilder: + pass + + +fn new_client_config_builder() -> UnsafePointer[ClientConfigBuilder]: + return _rustls.get_function[fn () -> UnsafePointer[ClientConfigBuilder]]("rustls_client_config_builder_new")() + -fn load_roots_from_file(builder: UnsafePointer[RootCertStoreBuilder], file_path: UnsafePointer[UInt8], optional: Bool) -> Int: +fn new_client_connection( + config: UnsafePointer[ClientConfig], + server_name: UnsafePointer[UInt8], + conn_out: UnsafePointer[UnsafePointer[Connection]], +) -> None: return _rustls.get_function[ - fn (UnsafePointer[RootCertStoreBuilder], UnsafePointer[UInt8], Bool) -> Int - ]("rustls_root_cert_store_builder_load_roots_from_file")(builder, file_path, optional) + fn ( + UnsafePointer[ClientConfig], UnsafePointer[UInt8], UnsafePointer[UnsafePointer[Connection]] + ) -> None + ]("rustls_client_connection_new")(config, server_name, conn_out) struct RustlsClientConfig: - var _handle: UnsafePointer[ClientConfig] + var _handle: UnsafePointer[ClientConfigBuilder] fn __init__(inout self): self._handle = new_client_config() diff --git a/src/test.mojo b/src/test.mojo index 9c5c023..bd3cf7c 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -1,11 +1,161 @@ -from rustls import new_root_cert_store_builder, load_roots_from_file, RustlsClientConfig +from rustls import ( + new_root_cert_store_builder, + load_roots_from_file, + RustlsClientConfig, + new_client_connection, + new_client_config_builder, + Connection, + build_root_cert_store_builder, + RootCertStore, + new_web_pki_server_cert_verifier_builder, + build_web_pki_server_cert_verifier_builder, + ServerCertVerifier, + client_config_builder_set_server_verifier, + ClientConfigBuilder, + ClientConfig, + client_config_builder_set_alpn_protocols, + SliceBytes, + build_client_config_builder, + +) +import os +from sys import exit +from gojo.net import dial_tcp + +fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: String, path: String) -> None: + var rconn = UnsafePointer[Connection]() + var connection = dial_tcp("tcp", host, port) + + var result = new_client_connection(client_config, host.unsafe_ptr(), UnsafePointer.address_of(rconn)) + if result != 7000: + print("failed to build cert store, Result: ", result) + exit(1) + + +# int +# do_request(const struct rustls_client_config *client_config, +# const char *hostname, const char *port, +# const char *path) // NOLINT(bugprone-easily-swappable-parameters) +# { +# struct rustls_connection *rconn = NULL; +# struct conndata *conn = NULL; +# int ret = 1; +# int sockfd = make_conn(hostname, port); +# if(sockfd < 0) { +# // No perror because make_conn printed error already. +# goto cleanup; +# } + +# rustls_result result = +# rustls_client_connection_new(client_config, hostname, &rconn); +# if(result != RUSTLS_RESULT_OK) { +# print_error("client_connection_new", result); +# goto cleanup; +# } + +# conn = calloc(1, sizeof(struct conndata)); +# if(conn == NULL) { +# goto cleanup; +# } +# conn->rconn = rconn; +# conn->fd = sockfd; +# conn->verify_arg = "verify_arg"; + +# rustls_connection_set_userdata(rconn, conn); +# rustls_connection_set_log_callback(rconn, log_cb); + +# ret = send_request_and_read_response(conn, rconn, hostname, path); +# if(ret != RUSTLS_RESULT_OK) { +# goto cleanup; +# } + +# ret = 0; + +# cleanup: +# rustls_connection_free(rconn); +# if(sockfd > 0) { +# close(sockfd); +# } +# if(conn != NULL) { +# if(conn->data.data != NULL) { +# free(conn->data.data); +# } +# free(conn); +# } + return ret; +} fn main(): var cert_path = "/etc/ssl/cert.pem" - var config = RustlsClientConfig() + if not os.setenv("CA_FILE", cert_path): + print("Failed to set CA_FILE environment variable") + exit(1) + + # var config = RustlsClientConfig() + var config_builder = new_client_config_builder() + + var server_cert_root_store_builder = new_root_cert_store_builder() + var result = load_roots_from_file(server_cert_root_store_builder, cert_path.unsafe_ptr(), False) + if result != 7000: + print("failed to load roots from file, Result: ", result) + exit(1) + + var server_cert_root_store = UnsafePointer[RootCertStore]() + result = build_root_cert_store_builder(server_cert_root_store_builder, UnsafePointer.address_of(server_cert_root_store)) + if result != 7000: + print("failed to build cert store, Result: ", result) + exit(1) + + var server_cert_verifier_builder = new_web_pki_server_cert_verifier_builder(server_cert_root_store) + var server_cert_verifier = UnsafePointer[ServerCertVerifier]() + result = build_web_pki_server_cert_verifier_builder( + server_cert_verifier_builder, UnsafePointer.address_of(server_cert_verifier) + ) + if result != 7000: + print("failed to build cert store, Result: ", result) + exit(1) + + client_config_builder_set_server_verifier(config_builder, server_cert_verifier) + + # var config_builder = new_client_config_builder() + var alpn_http11 = String("http/1.1") + result = client_config_builder_set_alpn_protocols(config_builder, UnsafePointer.address_of(alpn_http11), 1) + if result != 7000: + print("failed to set alpn protocol, Result: ", result) + exit(1) + + var client_config = UnsafePointer[ClientConfig]() + result = build_client_config_builder(config_builder, UnsafePointer.address_of(client_config)) + if result != 7000: + print("failed to build client config, Result: ", result) + exit(1) + + var host = "www.google.com" + var port = "443" + var path = "/" + result = do_request(client_config, host, port, path) + if result != 7000: + print("failed to build client config, Result: ", result) + exit(1) + + # var client_config = new_client_config() + # var rconn = UnsafePointer[Connection]() + # var server: String = "www.google.com" + # result = new_client_connection(client_config, server.unsafe_ptr(), UnsafePointer.address_of(rconn)) + # if result != 7000: + # print("Failed to connect to server, Result: ", result) + # exit(1) + - var root_cert_store_builder = new_root_cert_store_builder() - var result = load_roots_from_file(root_cert_store_builder, cert_path.unsafe_ptr(), False) +# struct rustls_connection *rconn = NULL; +# struct conndata *conn = NULL; +# int ret = 1; +# int sockfd = make_conn(hostname, port); +# if(sockfd < 0) { +# // No perror because make_conn printed error already. +# goto cleanup; +# } - print("Result: ", result) \ No newline at end of file +# rustls_result result = +# rustls_client_connection_new(client_config, hostname, &rconn); From 35e2f56de3f33a95ca08b3a6d038163bf3912406 Mon Sep 17 00:00:00 2001 From: Mikhail Tavarez Date: Mon, 16 Sep 2024 13:41:11 -0500 Subject: [PATCH 03/18] rename --- mojoproject.toml | 2 +- src/recipe.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mojoproject.toml b/mojoproject.toml index 78463f8..efd39d4 100644 --- a/mojoproject.toml +++ b/mojoproject.toml @@ -14,5 +14,5 @@ publish = { cmd = "bash scripts/publish.sh", env = { PREFIX_API_KEY = "$PREFIX_A [dependencies] max = ">=24.5.0,<25" -mojo-rustls-ffi = ">=0.1.0,<0.2" # self dependency just for local testing +mojo-rustls = ">=0.1.0,<0.2" # self dependency just for local testing gojo = ">=0.1.9,<0.2" diff --git a/src/recipe.yaml b/src/recipe.yaml index c277d49..458a7d3 100644 --- a/src/recipe.yaml +++ b/src/recipe.yaml @@ -4,7 +4,7 @@ context: version: "13.4.2" # this should be changed package: - name: "mojo-rustls-ffi" + name: "mojo-rustls" version: 0.1.1 source: @@ -12,16 +12,16 @@ source: build: script: - - mkdir -p ${PREFIX}/share/mojo-rustls-ffi + - mkdir -p ${PREFIX}/share/mojo-rustls - git clone --depth=1 git@github.com:rustls/rustls-ffi.git - cd rustls-ffi && cargo cinstall --library-type=cdylib --destdir=./output - ls -la output/usr/local/lib - - cp output/usr/local/lib/librustls.dylib ${PREFIX}/share/mojo-rustls-ffi/librustls.dylib + - cp output/usr/local/lib/librustls.dylib ${PREFIX}/share/mojo-rustls/librustls.dylib - cd .. && rm -R rustls-ffi about: - homepage: https://github.com/rustls/mojo-rustls-ffi + homepage: https://github.com/rustls/mojo-rustls license: MIT license_file: LICENSE summary: Rustls FFI bindings - use Rustls from any language - repository: https://github.com/rustls/mojo-rustls-ffi \ No newline at end of file + repository: https://github.com/rustls/mojo-rustls \ No newline at end of file From 9ceb0198e40960213bec54ab2c5797c5b3e81259 Mon Sep 17 00:00:00 2001 From: Mikhail Tavarez Date: Mon, 16 Sep 2024 13:44:08 -0500 Subject: [PATCH 04/18] update to new nbame --- magic.lock | 14 +++++++------- mojoproject.toml | 2 +- src/rustls/__init__.mojo | 2 +- src/test.mojo | 28 ++++++++++++++-------------- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/magic.lock b/magic.lock index 198ad81..bc3cd1c 100644 --- a/magic.lock +++ b/magic.lock @@ -36,7 +36,7 @@ environments: - conda: https://conda.modular.com/max/osx-arm64/max-python-24.5.0-3.12release.conda - conda: https://conda.modular.com/max/noarch/mblack-24.5.0-release.conda - conda: https://conda.modular.com/max/noarch/mojo-jupyter-24.5.0-release.conda - - conda: file:///Users/mikhailtavarez/.rattler/output/osx-arm64/mojo-rustls-ffi-0.1.1-h60d57d3_0.conda + - conda: file:///Users/mikhailtavarez/.rattler/output/osx-arm64/mojo-rustls-0.1.1-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda @@ -517,18 +517,18 @@ packages: size: 21595 timestamp: 1726172475911 - kind: conda - name: mojo-rustls-ffi + name: mojo-rustls version: 0.1.1 build: h60d57d3_0 subdir: osx-arm64 - url: file:///Users/mikhailtavarez/.rattler/output/osx-arm64/mojo-rustls-ffi-0.1.1-h60d57d3_0.conda - sha256: afd80198be1eafdfab5b23b8d7b12bf5fae1090dec45fe0ced77946817ea2911 - md5: e4abcc9984d79b797dbde911dbf9b731 + url: file:///Users/mikhailtavarez/.rattler/output/osx-arm64/mojo-rustls-0.1.1-h60d57d3_0.conda + sha256: 0f4c7da11d276305c771fb785eeb658261cc49c03f68644195a20ceb529d8d4d + md5: 261d5199c07bdab2dd688e04a7340d3f arch: arm64 platform: osx license: MIT - size: 1170952 - timestamp: 1726443386227 + size: 1172398 + timestamp: 1726512179540 - kind: conda name: mypy_extensions version: 1.0.0 diff --git a/mojoproject.toml b/mojoproject.toml index efd39d4..f92548f 100644 --- a/mojoproject.toml +++ b/mojoproject.toml @@ -14,5 +14,5 @@ publish = { cmd = "bash scripts/publish.sh", env = { PREFIX_API_KEY = "$PREFIX_A [dependencies] max = ">=24.5.0,<25" -mojo-rustls = ">=0.1.0,<0.2" # self dependency just for local testing +mojo-rustls = ">=0.1.1,<0.2" # self dependency just for local testing gojo = ">=0.1.9,<0.2" diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index e80f63a..c26871e 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -2,7 +2,7 @@ from sys import ffi import os alias RustlsResult = Int -var _rustls = ffi.DLHandle(os.getenv("CONDA_PREFIX") + "/share/mojo-rustls-ffi/librustls.dylib", ffi.RTLD.LAZY) +var _rustls = ffi.DLHandle(os.getenv("CONDA_PREFIX") + "/share/mojo-rustls/librustls.dylib", ffi.RTLD.LAZY) @value struct SliceBytes(): diff --git a/src/test.mojo b/src/test.mojo index bd3cf7c..15ee330 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -22,14 +22,14 @@ import os from sys import exit from gojo.net import dial_tcp -fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: String, path: String) -> None: - var rconn = UnsafePointer[Connection]() - var connection = dial_tcp("tcp", host, port) - - var result = new_client_connection(client_config, host.unsafe_ptr(), UnsafePointer.address_of(rconn)) - if result != 7000: - print("failed to build cert store, Result: ", result) - exit(1) +# fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: String, path: String) -> None: +# var rconn = UnsafePointer[Connection]() +# var connection = dial_tcp("tcp", host, port) + +# var result = new_client_connection(client_config, host.unsafe_ptr(), UnsafePointer.address_of(rconn)) +# if result != 7000: +# print("failed to build cert store, Result: ", result) +# exit(1) # int @@ -82,8 +82,8 @@ fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: St # } # free(conn); # } - return ret; -} +# return ret; +# } fn main(): @@ -134,10 +134,10 @@ fn main(): var host = "www.google.com" var port = "443" var path = "/" - result = do_request(client_config, host, port, path) - if result != 7000: - print("failed to build client config, Result: ", result) - exit(1) + # result = do_request(client_config, host, port, path) + # if result != 7000: + # print("failed to build client config, Result: ", result) + # exit(1) # var client_config = new_client_config() # var rconn = UnsafePointer[Connection]() From 5ea28440738d469a5cc2946ea532de4064020d4a Mon Sep 17 00:00:00 2001 From: Mikhail Tavarez Date: Tue, 17 Sep 2024 12:15:13 -0500 Subject: [PATCH 05/18] update mojoproject.toml --- mojoproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mojoproject.toml b/mojoproject.toml index f92548f..fa028ba 100644 --- a/mojoproject.toml +++ b/mojoproject.toml @@ -1,6 +1,6 @@ [project] authors = ["Mikhail Tavarez "] -channels = ["conda-forge", "https://conda.modular.com/max", "file:////Users/mikhailtavarez/.rattler/output", "https://repo.prefix.dev/mojo-community"] +channels = ["conda-forge", "https://conda.modular.com/max", "https://repo.prefix.dev/mojo-community"] description = "Add a short description here" name = "mojo-rustls" platforms = ["osx-arm64"] @@ -14,5 +14,5 @@ publish = { cmd = "bash scripts/publish.sh", env = { PREFIX_API_KEY = "$PREFIX_A [dependencies] max = ">=24.5.0,<25" -mojo-rustls = ">=0.1.1,<0.2" # self dependency just for local testing +# mojo-rustls = ">=0.1.1,<0.2" # self dependency just for local testing gojo = ">=0.1.9,<0.2" From 1e748859170ee6e4c75bbc479041cdfb00b9dfc8 Mon Sep 17 00:00:00 2001 From: Val Date: Tue, 17 Sep 2024 21:44:21 +0200 Subject: [PATCH 06/18] do request poc --- magic.lock | 48 ++- main.mojo | 152 +++++++ mojoproject.toml | 1 + src/libc.mojo | 838 +++++++++++++++++++++++++++++++++++++++ src/rustls/__init__.mojo | 26 +- src/test.mojo | 83 +++- 6 files changed, 1110 insertions(+), 38 deletions(-) create mode 100644 main.mojo create mode 100644 src/libc.mojo diff --git a/magic.lock b/magic.lock index bc3cd1c..8b5f015 100644 --- a/magic.lock +++ b/magic.lock @@ -4,7 +4,6 @@ environments: channels: - url: https://conda.anaconda.org/conda-forge/ - url: https://conda.modular.com/max/ - - url: file:///Users/mikhailtavarez/.rattler/output/ - url: https://repo.prefix.dev/mojo-community/ packages: osx-arm64: @@ -30,13 +29,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-hfb2fe0b_1.conda + - conda: https://repo.prefix.dev/mojo-community/osx-arm64/lightbug_http-0.1.3-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-18.1.8-hde57baf_1.conda - conda: https://conda.modular.com/max/noarch/max-24.5.0-release.conda - conda: https://conda.modular.com/max/osx-arm64/max-core-24.5.0-release.conda - conda: https://conda.modular.com/max/osx-arm64/max-python-24.5.0-3.12release.conda - conda: https://conda.modular.com/max/noarch/mblack-24.5.0-release.conda - conda: https://conda.modular.com/max/noarch/mojo-jupyter-24.5.0-release.conda - - conda: file:///Users/mikhailtavarez/.rattler/output/osx-arm64/mojo-rustls-0.1.1-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda @@ -50,6 +49,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py312hc6335d2_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-0.1.3-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.1-py312h024a12e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda @@ -416,6 +416,22 @@ packages: license_family: Other size: 46921 timestamp: 1716874262512 +- kind: conda + name: lightbug_http + version: 0.1.3 + build: h60d57d3_0 + subdir: osx-arm64 + url: https://repo.prefix.dev/mojo-community/osx-arm64/lightbug_http-0.1.3-h60d57d3_0.conda + sha256: fbe1defc8a04e34b7a2c3db407b211b06f93dadfc2b2cca22f6e979921007761 + depends: + - max >=24.5.0 + - gojo ==0.1.9 + - small_time ==0.1.3 + arch: arm64 + platform: osx + license: MIT + size: 950241 + timestamp: 1726331679119 - kind: conda name: llvm-openmp version: 18.1.8 @@ -516,19 +532,6 @@ packages: - python size: 21595 timestamp: 1726172475911 -- kind: conda - name: mojo-rustls - version: 0.1.1 - build: h60d57d3_0 - subdir: osx-arm64 - url: file:///Users/mikhailtavarez/.rattler/output/osx-arm64/mojo-rustls-0.1.1-h60d57d3_0.conda - sha256: 0f4c7da11d276305c771fb785eeb658261cc49c03f68644195a20ceb529d8d4d - md5: 261d5199c07bdab2dd688e04a7340d3f - arch: arm64 - platform: osx - license: MIT - size: 1172398 - timestamp: 1726512179540 - kind: conda name: mypy_extensions version: 1.0.0 @@ -637,6 +640,7 @@ packages: depends: - python >=3.8 license: MIT + license_family: MIT size: 20578 timestamp: 1726315538191 - kind: conda @@ -747,6 +751,20 @@ packages: license_family: MIT size: 14259 timestamp: 1620240338595 +- kind: conda + name: small_time + version: 0.1.3 + build: h60d57d3_0 + subdir: osx-arm64 + url: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-0.1.3-h60d57d3_0.conda + sha256: 8f08a189fa15d96e6dc8b0cc49aecaefe9caf5a8209ca3ab5d2da91b7e13a3ba + depends: + - max >=24.5.0,<25 + arch: arm64 + platform: osx + license: MIT + size: 404869 + timestamp: 1726265944269 - kind: conda name: tk version: 8.6.13 diff --git a/main.mojo b/main.mojo new file mode 100644 index 0000000..4b252d9 --- /dev/null +++ b/main.mojo @@ -0,0 +1,152 @@ +from src.rustls import * +from src.libc import * + +fn main(): + var cert_path = to_char_ptr("/etc/ssl/cert.pem") + + var config = RustlsClientConfig() + + var root_cert_store_builder = new_root_cert_store_builder() + var result = load_roots_from_file(root_cert_store_builder, cert_path, False) + + print("Result: ", result) + # const char *hostname = argv[1]; + # const char *port = argv[2]; + # const char *path = argv[3]; + + # /* Set this global variable for logging purposes. */ + # programname = "client"; + + # const struct rustls_crypto_provider *custom_provider = NULL; + # struct rustls_client_config_builder *config_builder = NULL; + # struct rustls_root_cert_store_builder *server_cert_root_store_builder = NULL; + # const struct rustls_root_cert_store *server_cert_root_store = NULL; + # const struct rustls_client_config *client_config = NULL; + # struct rustls_web_pki_server_cert_verifier_builder + # *server_cert_verifier_builder = NULL; + # struct rustls_server_cert_verifier *server_cert_verifier = NULL; + # struct rustls_slice_bytes alpn_http11; + # const struct rustls_certified_key *certified_key = NULL; + + # alpn_http11.data = (unsigned char *)"http/1.1"; + # alpn_http11.len = 8; + + # #ifdef _WIN32 + # WSADATA wsa; + # WSAStartup(MAKEWORD(1, 1), &wsa); + # setmode(STDOUT_FILENO, O_BINARY); + # #endif + + # const char *custom_ciphersuite_name = getenv("RUSTLS_CIPHERSUITE"); + # if(custom_ciphersuite_name != NULL) { + # custom_provider = + # default_provider_with_custom_ciphersuite(custom_ciphersuite_name); + # if(custom_provider == NULL) { + # goto cleanup; + # } + # printf("customized to use ciphersuite: %s\n", custom_ciphersuite_name); + + # result = rustls_client_config_builder_new_custom(custom_provider, + # default_tls_versions, + # default_tls_versions_len, + # &config_builder); + # if(result != RUSTLS_RESULT_OK) { + # print_error("creating client config builder", result); + # goto cleanup; + # } + # } + # else { + # config_builder = rustls_client_config_builder_new(); + # } + + # if(getenv("RUSTLS_PLATFORM_VERIFIER")) { + # result = rustls_platform_server_cert_verifier(&server_cert_verifier); + # if(result != RUSTLS_RESULT_OK) { + # fprintf(stderr, "client: failed to construct platform verifier\n"); + # goto cleanup; + # } + # rustls_client_config_builder_set_server_verifier(config_builder, + # server_cert_verifier); + # } + # else if(getenv("CA_FILE")) { + # server_cert_root_store_builder = rustls_root_cert_store_builder_new(); + # result = rustls_root_cert_store_builder_load_roots_from_file( + # server_cert_root_store_builder, getenv("CA_FILE"), true); + # if(result != RUSTLS_RESULT_OK) { + # print_error("loading trusted certificates", result); + # goto cleanup; + # } + # result = rustls_root_cert_store_builder_build( + # server_cert_root_store_builder, &server_cert_root_store); + # if(result != RUSTLS_RESULT_OK) { + # goto cleanup; + # } + # server_cert_verifier_builder = + # rustls_web_pki_server_cert_verifier_builder_new(server_cert_root_store); + + # result = rustls_web_pki_server_cert_verifier_builder_build( + # server_cert_verifier_builder, &server_cert_verifier); + # if(result != RUSTLS_RESULT_OK) { + # goto cleanup; + # } + # rustls_client_config_builder_set_server_verifier(config_builder, + # server_cert_verifier); + # } + # else if(getenv("NO_CHECK_CERTIFICATE")) { + # rustls_client_config_builder_dangerous_set_certificate_verifier( + # config_builder, verify); + # } + # else { + # fprintf(stderr, + # "client: must set either RUSTLS_PLATFORM_VERIFIER or CA_FILE or " + # "NO_CHECK_CERTIFICATE env var\n"); + # goto cleanup; + # } + + # char *auth_cert = getenv("AUTH_CERT"); + # char *auth_key = getenv("AUTH_KEY"); + # if((auth_cert && !auth_key) || (!auth_cert && auth_key)) { + # fprintf( + # stderr, + # "client: must set both AUTH_CERT and AUTH_KEY env vars, or neither\n"); + # goto cleanup; + # } + # else if(auth_cert && auth_key) { + # certified_key = load_cert_and_key(auth_cert, auth_key); + # if(certified_key == NULL) { + # goto cleanup; + # } + # rustls_client_config_builder_set_certified_key( + # config_builder, &certified_key, 1); + # } + + # rustls_client_config_builder_set_alpn_protocols( + # config_builder, &alpn_http11, 1); + + # result = rustls_client_config_builder_build(config_builder, &client_config); + # if(result != RUSTLS_RESULT_OK) { + # print_error("building client config", result); + # goto cleanup; + # } + + # int i; + # for(i = 0; i < 3; i++) { + # result = do_request(client_config, hostname, port, path); + # if(result != 0) { + # goto cleanup; + # } + # } + + # // Success! + # ret = 0; + + # cleanup: + # rustls_root_cert_store_builder_free(server_cert_root_store_builder); + # rustls_root_cert_store_free(server_cert_root_store); + # rustls_web_pki_server_cert_verifier_builder_free( + # server_cert_verifier_builder); + # rustls_server_cert_verifier_free(server_cert_verifier); + # rustls_certified_key_free(certified_key); + # rustls_client_config_free(client_config); + # rustls_crypto_provider_free(custom_provider); + diff --git a/mojoproject.toml b/mojoproject.toml index fa028ba..8505e9c 100644 --- a/mojoproject.toml +++ b/mojoproject.toml @@ -16,3 +16,4 @@ publish = { cmd = "bash scripts/publish.sh", env = { PREFIX_API_KEY = "$PREFIX_A max = ">=24.5.0,<25" # mojo-rustls = ">=0.1.1,<0.2" # self dependency just for local testing gojo = ">=0.1.9,<0.2" +lightbug_http = "0.1.3" diff --git a/src/libc.mojo b/src/libc.mojo new file mode 100644 index 0000000..24281f8 --- /dev/null +++ b/src/libc.mojo @@ -0,0 +1,838 @@ +from utils import StaticTuple +from sys.ffi import external_call +from sys.info import sizeof +from memory import memcpy +from lightbug_http.io.bytes import Bytes +alias IPPROTO_IPV6 = 41 +alias IPV6_V6ONLY = 26 +alias EPROTONOSUPPORT = 93 + +# Adapted from https://github.com/gabrieldemarmiesse/mojo-stdlib-extensions/ . Huge thanks to Gabriel! + +alias FD_STDIN: c_int = 0 +alias FD_STDOUT: c_int = 1 +alias FD_STDERR: c_int = 2 + +alias SUCCESS = 0 +alias GRND_NONBLOCK: UInt8 = 1 + +alias char_UnsafePointer = UnsafePointer[c_char] + +# Adapted from https://github.com/crisadamo/mojo-Libc . Huge thanks to Cristian! +# C types +alias c_void = UInt8 +alias c_char = UInt8 +alias c_schar = Int8 +alias c_uchar = UInt8 +alias c_short = Int16 +alias c_ushort = UInt16 +alias c_int = Int32 +alias c_uint = UInt32 +alias c_long = Int64 +alias c_ulong = UInt64 +alias c_float = Float32 +alias c_double = Float64 + +# `Int` is known to be machine's width +alias c_size_t = Int +alias c_ssize_t = Int + +alias ptrdiff_t = Int64 +alias intptr_t = Int64 +alias uintptr_t = UInt64 + + +# --- ( error.h Constants )----------------------------------------------------- +alias EPERM = 1 +alias ENOENT = 2 +alias ESRCH = 3 +alias EINTR = 4 +alias EIO = 5 +alias ENXIO = 6 +alias E2BIG = 7 +alias ENOEXEC = 8 +alias EBADF = 9 +alias ECHILD = 10 +alias EAGAIN = 11 +alias ENOMEM = 12 +alias EACCES = 13 +alias EFAULT = 14 +alias ENOTBLK = 15 +alias EBUSY = 16 +alias EEXIST = 17 +alias EXDEV = 18 +alias ENODEV = 19 +alias ENOTDIR = 20 +alias EISDIR = 21 +alias EINVAL = 22 +alias ENFILE = 23 +alias EMFILE = 24 +alias ENOTTY = 25 +alias ETXTBSY = 26 +alias EFBIG = 27 +alias ENOSPC = 28 +alias ESPIPE = 29 +alias EROFS = 30 +alias EMLINK = 31 +alias EPIPE = 32 +alias EDOM = 33 +alias ERANGE = 34 +alias EWOULDBLOCK = EAGAIN + + +fn to_char_ptr(s: String) -> UnsafePointer[c_char]: + """Only ASCII-based strings.""" + var ptr = UnsafePointer[c_char]().alloc(len(s)) + for i in range(len(s)): + ptr[i] = ord(s[i]) + return ptr + +fn to_char_ptr(s: Bytes) -> UnsafePointer[c_char]: + var ptr = UnsafePointer[c_char]().alloc(len(s)) + for i in range(len(s)): + ptr[i] = int(s[i]) + return ptr + +fn c_charptr_to_string(s: UnsafePointer[c_char]) -> String: + return String(s.bitcast[UInt8](), strlen(s)) + + +fn cftob(val: c_int) -> Bool: + """Convert C-like failure (-1) to Bool.""" + return rebind[Bool](val > 0) + + +# --- ( Network Related Constants )--------------------------------------------- +alias sa_family_t = c_ushort +alias socklen_t = c_uint +alias in_addr_t = c_uint +alias in_port_t = c_ushort + +# Address Family Constants +alias AF_UNSPEC = 0 +alias AF_UNIX = 1 +alias AF_LOCAL = AF_UNIX +alias AF_INET = 2 +alias AF_AX25 = 3 +alias AF_IPX = 4 +alias AF_APPLETALK = 5 +alias AF_NETROM = 6 +alias AF_BRIDGE = 7 +alias AF_ATMPVC = 8 +alias AF_X25 = 9 +alias AF_INET6 = 10 +alias AF_ROSE = 11 +alias AF_DECnet = 12 +alias AF_NETBEUI = 13 +alias AF_SECURITY = 14 +alias AF_KEY = 15 +alias AF_NETLINK = 16 +alias AF_ROUTE = AF_NETLINK +alias AF_PACKET = 17 +alias AF_ASH = 18 +alias AF_ECONET = 19 +alias AF_ATMSVC = 20 +alias AF_RDS = 21 +alias AF_SNA = 22 +alias AF_IRDA = 23 +alias AF_PPPOX = 24 +alias AF_WANPIPE = 25 +alias AF_LLC = 26 +alias AF_CAN = 29 +alias AF_TIPC = 30 +alias AF_BLUETOOTH = 31 +alias AF_IUCV = 32 +alias AF_RXRPC = 33 +alias AF_ISDN = 34 +alias AF_PHONET = 35 +alias AF_IEEE802154 = 36 +alias AF_CAIF = 37 +alias AF_ALG = 38 +alias AF_NFC = 39 +alias AF_VSOCK = 40 +alias AF_KCM = 41 +alias AF_QIPCRTR = 42 +alias AF_MAX = 43 + +alias PF_UNSPEC = AF_UNSPEC +alias PF_UNIX = AF_UNIX +alias PF_LOCAL = AF_LOCAL +alias PF_INET = AF_INET +alias PF_AX25 = AF_AX25 +alias PF_IPX = AF_IPX +alias PF_APPLETALK = AF_APPLETALK +alias PF_NETROM = AF_NETROM +alias PF_BRIDGE = AF_BRIDGE +alias PF_ATMPVC = AF_ATMPVC +alias PF_X25 = AF_X25 +alias PF_INET6 = AF_INET6 +alias PF_ROSE = AF_ROSE +alias PF_DECnet = AF_DECnet +alias PF_NETBEUI = AF_NETBEUI +alias PF_SECURITY = AF_SECURITY +alias PF_KEY = AF_KEY +alias PF_NETLINK = AF_NETLINK +alias PF_ROUTE = AF_ROUTE +alias PF_PACKET = AF_PACKET +alias PF_ASH = AF_ASH +alias PF_ECONET = AF_ECONET +alias PF_ATMSVC = AF_ATMSVC +alias PF_RDS = AF_RDS +alias PF_SNA = AF_SNA +alias PF_IRDA = AF_IRDA +alias PF_PPPOX = AF_PPPOX +alias PF_WANPIPE = AF_WANPIPE +alias PF_LLC = AF_LLC +alias PF_CAN = AF_CAN +alias PF_TIPC = AF_TIPC +alias PF_BLUETOOTH = AF_BLUETOOTH +alias PF_IUCV = AF_IUCV +alias PF_RXRPC = AF_RXRPC +alias PF_ISDN = AF_ISDN +alias PF_PHONET = AF_PHONET +alias PF_IEEE802154 = AF_IEEE802154 +alias PF_CAIF = AF_CAIF +alias PF_ALG = AF_ALG +alias PF_NFC = AF_NFC +alias PF_VSOCK = AF_VSOCK +alias PF_KCM = AF_KCM +alias PF_QIPCRTR = AF_QIPCRTR +alias PF_MAX = AF_MAX + +# Socket Type constants +alias SOCK_STREAM = 1 +alias SOCK_DGRAM = 2 +alias SOCK_RAW = 3 +alias SOCK_RDM = 4 +alias SOCK_SEQPACKET = 5 +alias SOCK_DCCP = 6 +alias SOCK_PACKET = 10 +alias SOCK_CLOEXEC = O_CLOEXEC +alias SOCK_NONBLOCK = O_NONBLOCK + +# Address Information +alias AI_PASSIVE = 1 +alias AI_CANONNAME = 2 +alias AI_NUMERICHOST = 4 +alias AI_V4MAPPED = 8 +alias AI_ALL = 16 +alias AI_ADDRCONFIG = 32 +alias AI_IDN = 64 + +alias INET_ADDRSTRLEN = 16 +alias INET6_ADDRSTRLEN = 46 + +alias SHUT_RD = 0 +alias SHUT_WR = 1 +alias SHUT_RDWR = 2 + +alias SOL_SOCKET = 1 + +alias SO_DEBUG = 1 +alias SO_REUSEADDR = 2 +alias SO_TYPE = 3 +alias SO_ERROR = 4 +alias SO_DONTROUTE = 5 +alias SO_BROADCAST = 6 +alias SO_SNDBUF = 7 +alias SO_RCVBUF = 8 +alias SO_KEEPALIVE = 9 +alias SO_OOBINLINE = 10 +alias SO_NO_CHECK = 11 +alias SO_PRIORITY = 12 +alias SO_LINGER = 13 +alias SO_BSDCOMPAT = 14 +alias SO_REUSEPORT = 15 +alias SO_PASSCRED = 16 +alias SO_PEERCRED = 17 +alias SO_RCVLOWAT = 18 +alias SO_SNDLOWAT = 19 +alias SO_RCVTIMEO = 20 +alias SO_SNDTIMEO = 21 +alias SO_RCVTIMEO_OLD = 20 +alias SO_SNDTIMEO_OLD = 21 +alias SO_SECURITY_AUTHENTICATION = 22 +alias SO_SECURITY_ENCRYPTION_TRANSPORT = 23 +alias SO_SECURITY_ENCRYPTION_NETWORK = 24 +alias SO_BINDTODEVICE = 25 +alias SO_ATTACH_FILTER = 26 +alias SO_DETACH_FILTER = 27 +alias SO_GET_FILTER = SO_ATTACH_FILTER +alias SO_PEERNAME = 28 +alias SO_TIMESTAMP = 29 +alias SO_TIMESTAMP_OLD = 29 +alias SO_ACCEPTCONN = 30 +alias SO_PEERSEC = 31 +alias SO_SNDBUFFORCE = 32 +alias SO_RCVBUFFORCE = 33 +alias SO_PASSSEC = 34 +alias SO_TIMESTAMPNS = 35 +alias SO_TIMESTAMPNS_OLD = 35 +alias SO_MARK = 36 +alias SO_TIMESTAMPING = 37 +alias SO_TIMESTAMPING_OLD = 37 +alias SO_PROTOCOL = 38 +alias SO_DOMAIN = 39 +alias SO_RXQ_OVFL = 40 +alias SO_WIFI_STATUS = 41 +alias SCM_WIFI_STATUS = SO_WIFI_STATUS +alias SO_PEEK_OFF = 42 +alias SO_NOFCS = 43 +alias SO_LOCK_FILTER = 44 +alias SO_SELECT_ERR_QUEUE = 45 +alias SO_BUSY_POLL = 46 +alias SO_MAX_PACING_RATE = 47 +alias SO_BPF_EXTENSIONS = 48 +alias SO_INCOMING_CPU = 49 +alias SO_ATTACH_BPF = 50 +alias SO_DETACH_BPF = SO_DETACH_FILTER +alias SO_ATTACH_REUSEPORT_CBPF = 51 +alias SO_ATTACH_REUSEPORT_EBPF = 52 +alias SO_CNX_ADVICE = 53 +alias SCM_TIMESTAMPING_OPT_STATS = 54 +alias SO_MEMINFO = 55 +alias SO_INCOMING_NAPI_ID = 56 +alias SO_COOKIE = 57 +alias SCM_TIMESTAMPING_PKTINFO = 58 +alias SO_PEERGROUPS = 59 +alias SO_ZEROCOPY = 60 +alias SO_TXTIME = 61 +alias SCM_TXTIME = SO_TXTIME +alias SO_BINDTOIFINDEX = 62 +alias SO_TIMESTAMP_NEW = 63 +alias SO_TIMESTAMPNS_NEW = 64 +alias SO_TIMESTAMPING_NEW = 65 +alias SO_RCVTIMEO_NEW = 66 +alias SO_SNDTIMEO_NEW = 67 +alias SO_DETACH_REUSEPORT_BPF = 68 + + +# --- ( Network Related Structs )----------------------------------------------- +@value +@register_passable("trivial") +struct in_addr: + var s_addr: in_addr_t + + +@value +@register_passable("trivial") +struct in6_addr: + var s6_addr: StaticTuple[c_char, 16] + + +@value +@register_passable("trivial") +struct sockaddr: + var sa_family: sa_family_t + var sa_data: StaticTuple[c_char, 14] + + +@value +@register_passable("trivial") +struct sockaddr_in: + var sin_family: sa_family_t + var sin_port: in_port_t + var sin_addr: in_addr + var sin_zero: StaticTuple[c_char, 8] + + +@value +@register_passable("trivial") +struct sockaddr_in6: + var sin6_family: sa_family_t + var sin6_port: in_port_t + var sin6_flowinfo: c_uint + var sin6_addr: in6_addr + var sin6_scope_id: c_uint + + +@value +@register_passable("trivial") +struct addrinfo: + var ai_flags: c_int + var ai_family: c_int + var ai_socktype: c_int + var ai_protocol: c_int + var ai_addrlen: socklen_t + var ai_addr: UnsafePointer[sockaddr] + var ai_canonname: UnsafePointer[c_char] + var ai_next: UnsafePointer[c_void] + + fn __init__(inout self) -> None: + self.ai_flags = 0 + self.ai_family = 0 + self.ai_socktype = 0 + self.ai_protocol = 0 + self.ai_addrlen = 0 + self.ai_addr = UnsafePointer[sockaddr]() + self.ai_canonname = UnsafePointer[c_char]() + self.ai_next = UnsafePointer[c_void]() + + +fn strlen(s: UnsafePointer[c_char]) -> c_size_t: + """Libc POSIX `strlen` function + Reference: https://man7.org/linux/man-pages/man3/strlen.3p.html + Fn signature: size_t strlen(const char *s). + + Args: s: A UnsafePointer to a C string. + Returns: The length of the string. + """ + return external_call["strlen", c_size_t, UnsafePointer[c_char]](s) + + +# --- ( Network Related Syscalls & Structs )------------------------------------ + + +fn htonl(hostlong: c_uint) -> c_uint: + """Libc POSIX `htonl` function + Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html + Fn signature: uint32_t htonl(uint32_t hostlong). + + Args: hostlong: A 32-bit integer in host byte order. + Returns: The value provided in network byte order. + """ + return external_call["htonl", c_uint, c_uint](hostlong) + + +fn htons(hostshort: c_ushort) -> c_ushort: + """Libc POSIX `htons` function + Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html + Fn signature: uint16_t htons(uint16_t hostshort). + + Args: hostshort: A 16-bit integer in host byte order. + Returns: The value provided in network byte order. + """ + return external_call["htons", c_ushort, c_ushort](hostshort) + + +fn ntohl(netlong: c_uint) -> c_uint: + """Libc POSIX `ntohl` function + Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html + Fn signature: uint32_t ntohl(uint32_t netlong). + + Args: netlong: A 32-bit integer in network byte order. + Returns: The value provided in host byte order. + """ + return external_call["ntohl", c_uint, c_uint](netlong) + + +fn ntohs(netshort: c_ushort) -> c_ushort: + """Libc POSIX `ntohs` function + Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html + Fn signature: uint16_t ntohs(uint16_t netshort). + + Args: netshort: A 16-bit integer in network byte order. + Returns: The value provided in host byte order. + """ + return external_call["ntohs", c_ushort, c_ushort](netshort) + + +fn inet_ntop( + af: c_int, src: UnsafePointer[c_void], dst: UnsafePointer[c_char], size: socklen_t +) -> UnsafePointer[c_char]: + """Libc POSIX `inet_ntop` function + Reference: https://man7.org/linux/man-pages/man3/inet_ntop.3p.html. + Fn signature: const char *inet_ntop(int af, const void *restrict src, char *restrict dst, socklen_t size). + + Args: + af: Address Family see AF_ aliases. + src: A UnsafePointer to a binary address. + dst: A UnsafePointer to a buffer to store the result. + size: The size of the buffer. + + Returns: + A UnsafePointer to the buffer containing the result. + """ + return external_call[ + "inet_ntop", + UnsafePointer[c_char], # FnName, RetType + c_int, + UnsafePointer[c_void], + UnsafePointer[c_char], + socklen_t, # Args + ](af, src, dst, size) + + +fn inet_pton(af: c_int, src: UnsafePointer[c_char], dst: UnsafePointer[c_void]) -> c_int: + """Libc POSIX `inet_pton` function + Reference: https://man7.org/linux/man-pages/man3/inet_ntop.3p.html + Fn signature: int inet_pton(int af, const char *restrict src, void *restrict dst). + + Args: af: Address Family see AF_ aliases. + src: A UnsafePointer to a string containing the address. + dst: A UnsafePointer to a buffer to store the result. + Returns: 1 on success, 0 if the input is not a valid address, -1 on error. + """ + return external_call[ + "inet_pton", + c_int, + c_int, + UnsafePointer[c_char], + UnsafePointer[c_void], + ](af, src, dst) + + +fn inet_addr(cp: UnsafePointer[c_char]) -> in_addr_t: + """Libc POSIX `inet_addr` function + Reference: https://man7.org/linux/man-pages/man3/inet_addr.3p.html + Fn signature: in_addr_t inet_addr(const char *cp). + + Args: cp: A UnsafePointer to a string containing the address. + Returns: The address in network byte order. + """ + return external_call["inet_addr", in_addr_t, UnsafePointer[c_char]](cp) + + +fn inet_ntoa(addr: in_addr) -> UnsafePointer[c_char]: + """Libc POSIX `inet_ntoa` function + Reference: https://man7.org/linux/man-pages/man3/inet_addr.3p.html + Fn signature: char *inet_ntoa(struct in_addr in). + + Args: in: A UnsafePointer to a string containing the address. + Returns: The address in network byte order. + """ + return external_call["inet_ntoa", UnsafePointer[c_char], in_addr](addr) + + +fn socket(domain: c_int, type: c_int, protocol: c_int) -> c_int: + """Libc POSIX `socket` function + Reference: https://man7.org/linux/man-pages/man3/socket.3p.html + Fn signature: int socket(int domain, int type, int protocol). + + Args: domain: Address Family see AF_ aliases. + type: Socket Type see SOCK_ aliases. + protocol: The protocol to use. + Returns: A File Descriptor or -1 in case of failure. + """ + return external_call[ + "socket", c_int, c_int, c_int, c_int # FnName, RetType # Args + ](domain, type, protocol) + + +fn setsockopt( + socket: c_int, + level: c_int, + option_name: c_int, + option_value: UnsafePointer[c_void], + option_len: socklen_t, +) -> c_int: + """Libc POSIX `setsockopt` function + Reference: https://man7.org/linux/man-pages/man3/setsockopt.3p.html + Fn signature: int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len). + + Args: socket: A File Descriptor. + level: The protocol level. + option_name: The option to set. + option_value: A UnsafePointer to the value to set. + option_len: The size of the value. + Returns: 0 on success, -1 on error. + """ + return external_call[ + "setsockopt", + c_int, # FnName, RetType + c_int, + c_int, + c_int, + UnsafePointer[c_void], + socklen_t, # Args + ](socket, level, option_name, option_value, option_len) + + +fn getsockname( + socket: c_int, address: UnsafePointer[sockaddr], address_len: UnsafePointer[socklen_t] +) -> c_int: + """Libc POSIX `getsockname` function + Reference: https://man7.org/linux/man-pages/man3/getsockname.3p.html + Fn signature: int getsockname(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len). + + Args: socket: A File Descriptor. + address: A UnsafePointer to a buffer to store the address of the peer. + address_len: A UnsafePointer to the size of the buffer. + Returns: 0 on success, -1 on error. + """ + return external_call[ + "getsockname", + c_int, # FnName, RetType + c_int, + UnsafePointer[sockaddr], + UnsafePointer[socklen_t], # Args + ](socket, address, address_len) + + +fn getpeername( + sockfd: c_int, addr: UnsafePointer[sockaddr], address_len: UnsafePointer[socklen_t] +) -> c_int: + """Libc POSIX `getpeername` function + Reference: https://man7.org/linux/man-pages/man2/getpeername.2.html + Fn signature: int getpeername(int socket, struct sockaddr *restrict addr, socklen_t *restrict address_len). + + Args: sockfd: A File Descriptor. + addr: A UnsafePointer to a buffer to store the address of the peer. + address_len: A UnsafePointer to the size of the buffer. + Returns: 0 on success, -1 on error. + """ + return external_call[ + "getpeername", + c_int, # FnName, RetType + c_int, + UnsafePointer[sockaddr], + UnsafePointer[socklen_t], # Args + ](sockfd, addr, address_len) + + +fn bind(socket: c_int, address: UnsafePointer[sockaddr], address_len: socklen_t) -> c_int: + """Libc POSIX `bind` function + Reference: https://man7.org/linux/man-pages/man3/bind.3p.html + Fn signature: int bind(int socket, const struct sockaddr *address, socklen_t address_len). + """ + return external_call[ + "bind", c_int, c_int, UnsafePointer[sockaddr], socklen_t + ](socket, address, address_len) + + +fn listen(socket: c_int, backlog: c_int) -> c_int: + """Libc POSIX `listen` function + Reference: https://man7.org/linux/man-pages/man3/listen.3p.html + Fn signature: int listen(int socket, int backlog). + + Args: socket: A File Descriptor. + backlog: The maximum length of the queue of pending connections. + Returns: 0 on success, -1 on error. + """ + return external_call["listen", c_int, c_int, c_int](socket, backlog) + + +fn accept( + socket: c_int, address: UnsafePointer[sockaddr], address_len: UnsafePointer[socklen_t] +) -> c_int: + """Libc POSIX `accept` function + Reference: https://man7.org/linux/man-pages/man3/accept.3p.html + Fn signature: int accept(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len). + + Args: socket: A File Descriptor. + address: A UnsafePointer to a buffer to store the address of the peer. + address_len: A UnsafePointer to the size of the buffer. + Returns: A File Descriptor or -1 in case of failure. + """ + return external_call[ + "accept", + c_int, # FnName, RetType + c_int, + UnsafePointer[sockaddr], + UnsafePointer[socklen_t], # Args + ](socket, address, address_len) + + +fn connect(socket: c_int, address: Reference[sockaddr], address_len: socklen_t) -> c_int: + """Libc POSIX `connect` function + Reference: https://man7.org/linux/man-pages/man3/connect.3p.html + Fn signature: int connect(int socket, const struct sockaddr *address, socklen_t address_len). + + Args: socket: A File Descriptor. + address: A UnsafePointer to the address to connect to. + address_len: The size of the address. + Returns: 0 on success, -1 on error. + """ + return external_call[ + "connect", c_int + ](socket, address, address_len) + +fn recv( + socket: c_int, + buffer: UnsafePointer[UInt8], + length: c_size_t, + flags: c_int, +) -> c_ssize_t: + """Libc POSIX `recv` function + Reference: https://man7.org/linux/man-pages/man3/recv.3p.html + Fn signature: ssize_t recv(int socket, void *buffer, size_t length, int flags). + """ + return external_call[ + "recv", + c_ssize_t, # FnName, RetType + c_int, + UnsafePointer[UInt8], + c_size_t, + c_int, # Args + ](socket, buffer, length, flags) + +fn send( + socket: c_int, buffer: UnsafePointer[c_void], length: c_size_t, flags: c_int +) -> c_ssize_t: + """Libc POSIX `send` function + Reference: https://man7.org/linux/man-pages/man3/send.3p.html + Fn signature: ssize_t send(int socket, const void *buffer, size_t length, int flags). + + Args: socket: A File Descriptor. + buffer: A UnsafePointer to the buffer to send. + length: The size of the buffer. + flags: Flags to control the behaviour of the function. + Returns: The number of bytes sent or -1 in case of failure. + """ + return external_call["send", c_ssize_t](socket, buffer, length, flags) + + +fn shutdown(socket: c_int, how: c_int) -> c_int: + """Libc POSIX `shutdown` function + Reference: https://man7.org/linux/man-pages/man3/shutdown.3p.html + Fn signature: int shutdown(int socket, int how). + + Args: socket: A File Descriptor. + how: How to shutdown the socket. + Returns: 0 on success, -1 on error. + """ + return external_call["shutdown", c_int, c_int, c_int]( # FnName, RetType # Args + socket, how + ) + + +fn getaddrinfo( + nodename: UnsafePointer[c_char], + servname: UnsafePointer[c_char], + hints: UnsafePointer[addrinfo], + res: UnsafePointer[UnsafePointer[addrinfo]], +) -> c_int: + """Libc POSIX `getaddrinfo` function + Reference: https://man7.org/linux/man-pages/man3/getaddrinfo.3p.html + Fn signature: int getaddrinfo(const char *restrict nodename, const char *restrict servname, const struct addrinfo *restrict hints, struct addrinfo **restrict res). + """ + return external_call[ + "getaddrinfo", + c_int, # FnName, RetType + UnsafePointer[c_char], + UnsafePointer[c_char], + UnsafePointer[addrinfo], # Args + UnsafePointer[UnsafePointer[addrinfo]], # Args + ](nodename, servname, hints, res) + + +fn gai_strerror(ecode: c_int) -> UnsafePointer[c_char]: + """Libc POSIX `gai_strerror` function + Reference: https://man7.org/linux/man-pages/man3/gai_strerror.3p.html + Fn signature: const char *gai_strerror(int ecode). + + Args: ecode: The error code. + Returns: A UnsafePointer to a string describing the error. + """ + return external_call[ + "gai_strerror", UnsafePointer[c_char], c_int # FnName, RetType # Args + ](ecode) + + +fn inet_pton(address_family: Int, address: String) -> Int: + var ip_buf_size = 4 + if address_family == AF_INET6: + ip_buf_size = 16 + + var ip_buf = UnsafePointer[c_void].alloc(ip_buf_size) + var conv_status = inet_pton( + rebind[c_int](address_family), to_char_ptr(address), ip_buf + ) + return int(ip_buf.bitcast[c_uint]()) + + +# --- ( File Related Syscalls & Structs )--------------------------------------- +alias O_NONBLOCK = 16384 +alias O_ACCMODE = 3 +alias O_CLOEXEC = 524288 + + +fn close(fildes: c_int) -> c_int: + """Libc POSIX `close` function + Reference: https://man7.org/linux/man-pages/man3/close.3p.html + Fn signature: int close(int fildes). + + Args: + fildes: A File Descriptor to close. + + Returns: + Upon successful completion, 0 shall be returned; otherwise, -1 + shall be returned and errno set to indicate the error. + """ + return external_call["close", c_int, c_int](fildes) + + +fn open[*T: AnyType](path: UnsafePointer[c_char], oflag: c_int, *args: *T) -> c_int: + """Libc POSIX `open` function + Reference: https://man7.org/linux/man-pages/man3/open.3p.html + Fn signature: int open(const char *path, int oflag, ...). + + Args: + path: A UnsafePointer to a C string containing the path to open. + oflag: The flags to open the file with. + args: The optional arguments. + Returns: + A File Descriptor or -1 in case of failure + """ + return external_call["open", c_int](path, oflag, args) + + +fn printf[*T: AnyType](format: UnsafePointer[c_char], *args: *T) -> c_int: + """Libc POSIX `printf` function + Reference: https://man7.org/linux/man-pages/man3/fprintf.3p.html + Fn signature: int printf(const char *restrict format, ...). + + Args: format: A UnsafePointer to a C string containing the format. + args: The optional arguments. + Returns: The number of bytes written or -1 in case of failure. + """ + return external_call[ + "printf", + c_int, # FnName, RetType + ](format, args) + + + +fn read(fildes: c_int, buf: UnsafePointer[c_void], nbyte: c_size_t) -> c_int: + """Libc POSIX `read` function + Reference: https://man7.org/linux/man-pages/man3/read.3p.html + Fn signature: sssize_t read(int fildes, void *buf, size_t nbyte). + + Args: fildes: A File Descriptor. + buf: A UnsafePointer to a buffer to store the read data. + nbyte: The number of bytes to read. + Returns: The number of bytes read or -1 in case of failure. + """ + return external_call["read", c_ssize_t, c_int, UnsafePointer[c_void], c_size_t]( + fildes, buf, nbyte + ) + + +fn write(fildes: c_int, buf: UnsafePointer[c_void], nbyte: c_size_t) -> c_int: + """Libc POSIX `write` function + Reference: https://man7.org/linux/man-pages/man3/write.3p.html + Fn signature: ssize_t write(int fildes, const void *buf, size_t nbyte). + + Args: fildes: A File Descriptor. + buf: A UnsafePointer to a buffer to write. + nbyte: The number of bytes to write. + Returns: The number of bytes written or -1 in case of failure. + """ + return external_call["write", c_ssize_t, c_int, UnsafePointer[c_void], c_size_t]( + fildes, buf, nbyte + ) + +fn __test_getaddrinfo__(): + var ip_addr = "127.0.0.1" + var port = 8083 + + var servinfo = UnsafePointer[addrinfo]().alloc(1) + servinfo[0] = addrinfo() + + var hints = addrinfo() + hints.ai_family = AF_INET + hints.ai_socktype = SOCK_STREAM + hints.ai_flags = AI_PASSIVE + + var status = getaddrinfo( + to_char_ptr(ip_addr), + UnsafePointer[UInt8](), + UnsafePointer.address_of(hints), + UnsafePointer.address_of(servinfo), + ) + var msg_ptr = gai_strerror(c_int(status)) + _ = external_call["printf", c_int, UnsafePointer[c_char], UnsafePointer[c_char]]( + to_char_ptr("gai_strerror: %s"), msg_ptr + ) + var msg = c_charptr_to_string(msg_ptr) + print("getaddrinfo satus: " + msg) diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index c26871e..3044392 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -105,6 +105,28 @@ fn build_client_config_builder( ) -> RustlsResult ]("rustls_client_config_builder_build")(builder, config_out) +@value +struct ConnData: + var rconn: UnsafePointer[Connection] + var fd: Int + var verify_arg: String + var data: SliceBytes + +fn rustls_connection_set_userdata(conn: UnsafePointer[Connection], userdata: UnsafePointer[ConnData]) -> None: + return _rustls.get_function[fn (UnsafePointer[Connection], UnsafePointer[ConnData]) -> None]("rustls_connection_set_userdata")( + conn, userdata + ) + +fn rustls_connection_set_log_callback( + conn: UnsafePointer[Connection], + log_callback: fn (userdata: UnsafePointer[UInt8], params: UnsafePointer[LogParams]) -> None, +) -> None: + return _rustls.get_function[ + fn ( + UnsafePointer[Connection], fn (userdata: UnsafePointer[UInt8], params: UnsafePointer[LogParams]) -> None + ) -> None + ]("rustls_connection_set_log_callback")(conn, log_callback) + # Connection @value struct LogParams: @@ -139,11 +161,11 @@ fn new_client_connection( config: UnsafePointer[ClientConfig], server_name: UnsafePointer[UInt8], conn_out: UnsafePointer[UnsafePointer[Connection]], -) -> None: +) -> RustlsResult: return _rustls.get_function[ fn ( UnsafePointer[ClientConfig], UnsafePointer[UInt8], UnsafePointer[UnsafePointer[Connection]] - ) -> None + ) -> RustlsResult ]("rustls_client_connection_new")(config, server_name, conn_out) diff --git a/src/test.mojo b/src/test.mojo index 15ee330..7cd1ab4 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -1,36 +1,73 @@ from rustls import ( + RustlsClientConfig, + Connection, + RootCertStore, + ServerCertVerifier, + ClientConfigBuilder, + ClientConfig, + SliceBytes, + RustlsResult, + ConnData, new_root_cert_store_builder, load_roots_from_file, - RustlsClientConfig, new_client_connection, new_client_config_builder, - Connection, build_root_cert_store_builder, - RootCertStore, new_web_pki_server_cert_verifier_builder, build_web_pki_server_cert_verifier_builder, - ServerCertVerifier, client_config_builder_set_server_verifier, - ClientConfigBuilder, - ClientConfig, client_config_builder_set_alpn_protocols, - SliceBytes, build_client_config_builder, - + rustls_connection_set_userdata, + rustls_connection_set_log_callback, ) import os from sys import exit -from gojo.net import dial_tcp +from memory.memory import memset +from sys.info import sizeof +from sys.ffi import external_call +from lightbug_http.sys.net import create_connection +from libc import AF_INET, SOCK_STREAM, AI_PASSIVE, to_char_ptr, socket -# fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: String, path: String) -> None: -# var rconn = UnsafePointer[Connection]() -# var connection = dial_tcp("tcp", host, port) +fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: String, path: String) raises -> RustlsResult: + var rconn = UnsafePointer[Connection]() + var ret: RustlsResult = 1 + var fd = socket(AF_INET, SOCK_STREAM, 0) + var connection = create_connection(fd, host, atol(port)) + if fd < 0: + print("Failed to create connection") + return ret + + var result = new_client_connection(client_config, host.unsafe_ptr(), UnsafePointer.address_of(rconn)) + if result != 7000: # Assuming 7000 is RUSTLS_RESULT_OK + print("failed to create new client connection, Result: ", result) + return result + + var conn = ConnData(rconn, fd.__int__(), "verify_arg", SliceBytes(UnsafePointer[UInt8](), 0)) + + rustls_connection_set_userdata(rconn, UnsafePointer[ConnData].address_of(conn)) + # rustls_connection_set_log_callback(rconn, log_cb) + + ret = send_request_and_read_response(UnsafePointer[ConnData].address_of(conn), rconn, host, path) + if ret != 7000: + return ret + + # # Cleanup + # external_call["rustls_connection_free"](rconn) + # if fd > 0: + # os.close(fd) + # if conn.data.data != None: + # free(conn.data.data) + + return 7000 # Assuming 7000 is RUSTLS_RESULT_OK + +fn log_cb(level: Int, message: String): + print("Log level:", level, "Message:", message) + +fn send_request_and_read_response(conn: UnsafePointer[ConnData], rconn: UnsafePointer[Connection], hostname: String, path: String) -> RustlsResult: + # Implement this function based on your requirements + return 7000 # Placeholder return value -# var result = new_client_connection(client_config, host.unsafe_ptr(), UnsafePointer.address_of(rconn)) -# if result != 7000: -# print("failed to build cert store, Result: ", result) -# exit(1) - # int # do_request(const struct rustls_client_config *client_config, @@ -134,10 +171,14 @@ fn main(): var host = "www.google.com" var port = "443" var path = "/" - # result = do_request(client_config, host, port, path) - # if result != 7000: - # print("failed to build client config, Result: ", result) - # exit(1) + try: + result = do_request(client_config, host, port, path) + if result != 7000: + print("failed to build client config, Result: ", result) + exit(1) + except e: + print("Error: ", e) + exit(1) # var client_config = new_client_config() # var rconn = UnsafePointer[Connection]() From 84d903ec15740abe65617dce3c14aca667ccbce6 Mon Sep 17 00:00:00 2001 From: Val Date: Wed, 18 Sep 2024 13:13:16 +0200 Subject: [PATCH 07/18] wip send_request_and_read_response --- src/rustls/__init__.mojo | 22 +++ src/test.mojo | 299 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 307 insertions(+), 14 deletions(-) diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index 3044392..8757d0d 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -127,6 +127,28 @@ fn rustls_connection_set_log_callback( ) -> None ]("rustls_connection_set_log_callback")(conn, log_callback) +fn rustls_connection_write( + conn: UnsafePointer[Connection, buf: UnsafePointer[UInt8], len: Int, written: UnsafePointer[Int] +) -> RustlsResult: + return _rustls.get_function[ + fn (UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> RustlsResult + ]("rustls_connection_write")(conn, buf, len, written) + +fn rustls_connection_get_negotiated_ciphersuite( + conn: UnsafePointer[Connection] +) -> RustlsResult: + return _rustls.get_function[ + fn (UnsafePointer[Connection]) -> RustlsResult + ]("rustls_connection_get_negotiated_ciphersuite")(conn) + +fn rustls_connection_get_negotiated_ciphersuite_name( + conn: UnsafePointer[Connection] +) -> RustlsResult: + return _rustls.get_function[ + fn (UnsafePointer[Connection]) -> RustlsResult + ]("rustls_connection_get_negotiated_ciphersuite_name")(conn) + + # Connection @value struct LogParams: diff --git a/src/test.mojo b/src/test.mojo index 7cd1ab4..1ea14b6 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -20,6 +20,9 @@ from rustls import ( build_client_config_builder, rustls_connection_set_userdata, rustls_connection_set_log_callback, + rustls_connection_write, + rustls_connection_get_negotiated_ciphersuite, + rustls_connection_get_negotiated_ciphersuite_name ) import os from sys import exit @@ -39,7 +42,7 @@ fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: St return ret var result = new_client_connection(client_config, host.unsafe_ptr(), UnsafePointer.address_of(rconn)) - if result != 7000: # Assuming 7000 is RUSTLS_RESULT_OK + if result != 7000: print("failed to create new client connection, Result: ", result) return result @@ -48,25 +51,293 @@ fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: St rustls_connection_set_userdata(rconn, UnsafePointer[ConnData].address_of(conn)) # rustls_connection_set_log_callback(rconn, log_cb) - ret = send_request_and_read_response(UnsafePointer[ConnData].address_of(conn), rconn, host, path) + ret = send_request_and_read_response(conn, rconn, host, path) if ret != 7000: return ret - - # # Cleanup - # external_call["rustls_connection_free"](rconn) - # if fd > 0: - # os.close(fd) - # if conn.data.data != None: - # free(conn.data.data) - - return 7000 # Assuming 7000 is RUSTLS_RESULT_OK + + return 7000 fn log_cb(level: Int, message: String): print("Log level:", level, "Message:", message) -fn send_request_and_read_response(conn: UnsafePointer[ConnData], rconn: UnsafePointer[Connection], hostname: String, path: String) -> RustlsResult: - # Implement this function based on your requirements - return 7000 # Placeholder return value +@value +struct FdSet: + var fds: List[Int] + fn clear(inout self): + self.fds = List[Int]() + fn set(inout self, fd: Int): + self.fds.append(fd) + fn is_set(inout self, fd: Int) -> Bool: + return fd in self.fds + fn address(inout self) -> UnsafePointer[Int]: + return self.fds.unsafe_ptr() + +# fn send_request_and_read_response(conn: UnsafePointer[ConnData], rustls_connection: UnsafePointer[Connection], hostname: String, path: String) -> RustlsResult: +fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePointer[Connection], hostname: String, path: String) raises -> RustlsResult: + var sockfd = conn.fd + var ret: RustlsResult = 1 + var err = 1 + var result: UInt32 = 1 + var buf = SliceBytes(UnsafePointer[UInt8](), 0) + var read_fds = FdSet(List[Int]()) + var write_fds = FdSet(List[Int]()) + var n: Int = 0 + var body: String = "" + var content_length: Int = 0 + var headers_len: Int = 0 + + # var version = rustls_version() + var headers = '''GET {path} HTTP/1.1\r\n + Host: {hostname}\r\n + User-Agent: {version}\r\n + Accept: carcinization/inevitable, text/html\r\n + Connection: close\r\n + \r\n''' + var header_bytes = headers.as_bytes_slice().unsafe_ptr() + buf = SliceBytes(header_bytes, len(headers)) + + # Write plaintext to rustls connection + result = rustls_connection_write(rustls_connection, buf.as_bytes(), buf.length(), n.address()) + if result != 7000: + print("Error writing plaintext bytes to rustls_connection") + return ret + if n != len(headers): + print("Short write writing plaintext bytes to rustls_connection") + return ret + + var ciphersuite_id = rustls_connection_get_negotiated_ciphersuite(rustls_connection) + var ciphersuite_name = rustls_connection_get_negotiated_ciphersuite_name(rustls_connection) + print("Negotiated ciphersuite: ", ciphersuite_name) + + while True: + read_fds.clear() + write_fds.clear() + + if rustls_connection_wats_read(rustls_connection): + read_fds.set(sockfd) + if rustls_connection_wants_write(rustls_connection): + write_fds.set(sockfd) + + if not rustls_connection_wants_read(rustls_connection) and not rustls_connection_wants_write(rustls_connection): + print("Rustls wants neither read nor write. Drain plaintext and exit") + break + + let select_result = select(sockfd + 1, read_fds.address(), write_fds.address(), None, None) + if select_result == -1: + print("Client: select error") + return ret + + if read_fds.is_set(sockfd): + while True: + result = do_read(conn, rustls_connection) + if result == DEMO_AGAIN: + break + elif result == DEMO_EOF: + return drain_plaintext(conn) + elif result != DEMO_OK: + return ret + + if headers_len == 0: + body = body_beginning(conn.data) + if body: + headers_len = body.length() + print(f"Body began at {headers_len}") + content_length_str = get_first_header_value(conn.data.data, headers_len, "Content-Length") + if not content_length_str: + print("Content length header not found") + return ret + content_length = int(content_length_str) + print(f"Content length {content_length}") + + if headers_len != 0 and conn.data.len >= headers_len + content_length: + return drain_plaintext(conn) + + if write_fds.is_set(sockfd): + while True: + err = write_tls(rustls_connection, conn, n.address()) + if err != 0: + print(f"Error in rustls_connection_write_tls: errno {err}") + return ret + if result == DEMO_AGAIN: + break + elif n == 0: + print("Write returned 0 from rustls_connection_write_tls") + break + + print("Send_request_and_read_response: loop fell through") + return ret + +fn drain_plaintext(conn: UnsafePointer[ConnData]) raises -> RustlsResult: + let result = copy_plaintext_to_buffer(conn) + if result != DEMO_OK and result != DEMO_EOF: + return 1 + print(f"Writing {conn.data.len} bytes to stdout") + # Note: In Mojo, you might need to use a different method to write to stdout + # This is a placeholder and might need to be adjusted + print(conn.data.data.decode()) + return 0 + +# { +# int sockfd = conn->fd; +# int ret = 1; +# int err = 1; +# unsigned result = 1; +# char buf[2048]; +# fd_set read_fds; +# fd_set write_fds; +# size_t n = 0; +# const char *body; +# const char *content_length_str; +# const char *content_length_end; +# unsigned long content_length = 0; +# size_t headers_len = 0; +# struct rustls_str version; +# int ciphersuite_id; +# struct rustls_str ciphersuite_name; + +# version = rustls_version(); +# memset(buf, '\0', sizeof(buf)); +# snprintf(buf, +# sizeof(buf), +# "GET %s HTTP/1.1\r\n" +# "Host: %s\r\n" +# "User-Agent: %.*s\r\n" +# "Accept: carcinization/inevitable, text/html\r\n" +# "Connection: close\r\n" +# "\r\n", +# path, +# hostname, +# (int)version.len, +# version.data); +# /* First we write the plaintext - the data that we want rustls to encrypt for +# * us- to the rustls connection. */ +# result = rustls_connection_write(rconn, (uint8_t *)buf, strlen(buf), &n); +# if(result != RUSTLS_RESULT_OK) { +# LOG_SIMPLE("error writing plaintext bytes to rustls_connection"); +# goto cleanup; +# } +# if(n != strlen(buf)) { +# LOG_SIMPLE("short write writing plaintext bytes to rustls_connection"); +# goto cleanup; +# } + +# ciphersuite_id = rustls_connection_get_negotiated_ciphersuite(rconn); +# ciphersuite_name = rustls_connection_get_negotiated_ciphersuite_name(rconn); +# LOG("negotiated ciphersuite: %.*s (%#x)", +# (int)ciphersuite_name.len, +# ciphersuite_name.data, +# ciphersuite_id); + +# for(;;) { +# FD_ZERO(&read_fds); +# /* These two calls just inspect the state of the connection - if it's time +# for us to write more, or to read more. */ +# if(rustls_connection_wants_read(rconn)) { +# FD_SET(sockfd, &read_fds); +# } +# FD_ZERO(&write_fds); +# if(rustls_connection_wants_write(rconn)) { +# FD_SET(sockfd, &write_fds); +# } + +# if(!rustls_connection_wants_read(rconn) && +# !rustls_connection_wants_write(rconn)) { +# LOG_SIMPLE( +# "rustls wants neither read nor write. drain plaintext and exit"); +# goto drain_plaintext; +# } + +# int select_result = select(sockfd + 1, &read_fds, &write_fds, NULL, NULL); +# if(select_result == -1) { +# perror("client: select"); +# goto cleanup; +# } + +# if(FD_ISSET(sockfd, &read_fds)) { +# /* Read all bytes until we get EAGAIN. Then loop again to wind up in +# select awaiting the next bit of data. */ +# for(;;) { +# result = do_read(conn, rconn); +# if(result == DEMO_AGAIN) { +# break; +# } +# else if(result == DEMO_EOF) { +# goto drain_plaintext; +# } +# else if(result != DEMO_OK) { +# goto cleanup; +# } +# if(headers_len == 0) { +# body = body_beginning(&conn->data); +# if(body != NULL) { +# headers_len = body - conn->data.data; +# LOG("body began at %zu", headers_len); +# content_length_str = get_first_header_value(conn->data.data, +# headers_len, +# CONTENT_LENGTH, +# strlen(CONTENT_LENGTH), +# &n); +# if(content_length_str == NULL) { +# LOG_SIMPLE("content length header not found"); +# goto cleanup; +# } +# content_length = +# strtoul(content_length_str, (char **)&content_length_end, 10); +# if(content_length_end == content_length_str) { +# LOG("invalid Content-Length '%.*s'", (int)n, content_length_str); +# goto cleanup; +# } +# LOG("content length %lu", content_length); +# } +# } +# if(headers_len != 0 && +# conn->data.len >= headers_len + content_length) { +# goto drain_plaintext; +# } +# } +# } +# if(FD_ISSET(sockfd, &write_fds)) { +# for(;;) { +# /* This invokes rustls_connection_write_tls. We pass a callback to +# * that function. Rustls will pass a buffer to that callback with +# * encrypted bytes, that we will write to `conn`. */ +# err = write_tls(rconn, conn, &n); +# if(err != 0) { +# LOG("error in rustls_connection_write_tls: errno %d", err); +# goto cleanup; +# } +# if(result == DEMO_AGAIN) { +# break; +# } +# else if(n == 0) { +# LOG_SIMPLE("write returned 0 from rustls_connection_write_tls"); +# break; +# } +# } +# } +# } + +# LOG_SIMPLE("send_request_and_read_response: loop fell through"); + +# drain_plaintext: +# result = copy_plaintext_to_buffer(conn); +# if(result != DEMO_OK && result != DEMO_EOF) { +# goto cleanup; +# } +# LOG("writing %zu bytes to stdout", conn->data.len); +# if(write(STDOUT_FILENO, conn->data.data, conn->data.len) < 0) { +# LOG_SIMPLE("error writing to stderr"); +# goto cleanup; +# } +# ret = 0; + +# cleanup: +# if(sockfd > 0) { +# close(sockfd); +# } +# return ret; +# } + # int From d9cad049087f692dd389bf1db8e3a4f044315add Mon Sep 17 00:00:00 2001 From: Val Date: Wed, 18 Sep 2024 16:43:43 +0200 Subject: [PATCH 08/18] reading --- src/libc.mojo | 60 ++++++++++ src/rustls/__init__.mojo | 9 +- src/test.mojo | 233 ++++++++++++++++++++++++++++----------- 3 files changed, 237 insertions(+), 65 deletions(-) diff --git a/src/libc.mojo b/src/libc.mojo index 24281f8..587384e 100644 --- a/src/libc.mojo +++ b/src/libc.mojo @@ -812,6 +812,66 @@ fn write(fildes: c_int, buf: UnsafePointer[c_void], nbyte: c_size_t) -> c_int: fildes, buf, nbyte ) + +struct fd_set: + var fds_bits: StaticTuple[Int64, 16] + + fn __init__(inout self): + self.fds_bits = StaticTuple[Int64, 16]() + for i in range(16): + self.fds_bits[i] = 0 + + fn set(inout self, fd: Int): + var word = fd // 64 + var bit = fd % 64 + self.fds_bits[word] |= (1 << bit) + + fn clear(inout self, fd: Int): + var word = fd // 64 + var bit = fd % 64 + self.fds_bits[word] &= ~(1 << bit) + + fn is_set(self, fd: Int) -> Bool: + var word = fd // 64 + var bit = fd % 64 + return (self.fds_bits[word] & (1 << bit)) != 0 + +struct timeval: + var tv_sec: Int64 + var tv_usec: Int64 + + fn __init__(inout self, seconds: Int64, microseconds: Int64): + self.tv_sec = seconds + self.tv_usec = microseconds + +fn select( + nfds: c_int, + readfds: UnsafePointer[fd_set], + writefds: UnsafePointer[fd_set], + exceptfds: UnsafePointer[fd_set], + timeout: UnsafePointer[timeval], +) -> c_int: + """Libc POSIX `select` function + Reference: https://man7.org/linux + Fn signature: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout). + + Args: nfds: The highest-numbered file descriptor in any of the three sets, plus 1. + readfds: A UnsafePointer to the set of file descriptors to read from. + writefds: A UnsafePointer to the set of file descriptors to write to. + exceptfds: A UnsafePointer to the set of file descriptors to check for exceptions. + timeout: A UnsafePointer to a timeval struct to set a timeout. + Returns: The number of file descriptors in the sets or -1 in case of failure. + """ + return external_call[ + "select", + c_int, # FnName, RetType + c_int, + UnsafePointer[fd_set], + UnsafePointer[fd_set], + UnsafePointer[fd_set], + UnsafePointer[timeval], # Args + ](nfds, readfds, writefds, exceptfds, timeout) + fn __test_getaddrinfo__(): var ip_addr = "127.0.0.1" var port = 8083 diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index 8757d0d..3207cd6 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -128,8 +128,7 @@ fn rustls_connection_set_log_callback( ]("rustls_connection_set_log_callback")(conn, log_callback) fn rustls_connection_write( - conn: UnsafePointer[Connection, buf: UnsafePointer[UInt8], len: Int, written: UnsafePointer[Int] -) -> RustlsResult: + conn: UnsafePointer[Connection], buf: UnsafePointer[UInt8], len: Int, written: UnsafePointer[Int]) -> RustlsResult: return _rustls.get_function[ fn (UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> RustlsResult ]("rustls_connection_write")(conn, buf, len, written) @@ -148,6 +147,12 @@ fn rustls_connection_get_negotiated_ciphersuite_name( fn (UnsafePointer[Connection]) -> RustlsResult ]("rustls_connection_get_negotiated_ciphersuite_name")(conn) +# fn rustls_connection_read_tls( +# conn: UnsafePointer[Connection], buf: UnsafePointer[UInt8], len: Int, read: UnsafePointer[Int] +# ) -> RustlsResult: +# return _rustls.get_function[ +# fn (UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> RustlsResult +# ]("rustls_connection_read_tls")(conn, buf, len, read) # Connection @value diff --git a/src/test.mojo b/src/test.mojo index 1ea14b6..523c289 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -1,4 +1,5 @@ from rustls import ( + _rustls, RustlsClientConfig, Connection, RootCertStore, @@ -22,7 +23,8 @@ from rustls import ( rustls_connection_set_log_callback, rustls_connection_write, rustls_connection_get_negotiated_ciphersuite, - rustls_connection_get_negotiated_ciphersuite_name + rustls_connection_get_negotiated_ciphersuite_name, + # rustls_connection_read_tls, ) import os from sys import exit @@ -30,7 +32,7 @@ from memory.memory import memset from sys.info import sizeof from sys.ffi import external_call from lightbug_http.sys.net import create_connection -from libc import AF_INET, SOCK_STREAM, AI_PASSIVE, to_char_ptr, socket +from libc import fd_set, AF_INET, SOCK_STREAM, AI_PASSIVE, EAGAIN, EWOULDBLOCK, to_char_ptr, socket, select, timeval, read fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: String, path: String) raises -> RustlsResult: var rconn = UnsafePointer[Connection]() @@ -60,18 +62,6 @@ fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: St fn log_cb(level: Int, message: String): print("Log level:", level, "Message:", message) -@value -struct FdSet: - var fds: List[Int] - fn clear(inout self): - self.fds = List[Int]() - fn set(inout self, fd: Int): - self.fds.append(fd) - fn is_set(inout self, fd: Int) -> Bool: - return fd in self.fds - fn address(inout self) -> UnsafePointer[Int]: - return self.fds.unsafe_ptr() - # fn send_request_and_read_response(conn: UnsafePointer[ConnData], rustls_connection: UnsafePointer[Connection], hostname: String, path: String) -> RustlsResult: fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePointer[Connection], hostname: String, path: String) raises -> RustlsResult: var sockfd = conn.fd @@ -79,8 +69,8 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint var err = 1 var result: UInt32 = 1 var buf = SliceBytes(UnsafePointer[UInt8](), 0) - var read_fds = FdSet(List[Int]()) - var write_fds = FdSet(List[Int]()) + var read_fds = fd_set() + var write_fds = fd_set() var n: Int = 0 var body: String = "" var content_length: Int = 0 @@ -97,7 +87,7 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint buf = SliceBytes(header_bytes, len(headers)) # Write plaintext to rustls connection - result = rustls_connection_write(rustls_connection, buf.as_bytes(), buf.length(), n.address()) + result = rustls_connection_write(rustls_connection, buf.data, len(headers), UnsafePointer.address_of(n)) if result != 7000: print("Error writing plaintext bytes to rustls_connection") return ret @@ -110,73 +100,190 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint print("Negotiated ciphersuite: ", ciphersuite_name) while True: - read_fds.clear() - write_fds.clear() + read_fds.clear(sockfd) + write_fds.clear(sockfd) - if rustls_connection_wats_read(rustls_connection): - read_fds.set(sockfd) - if rustls_connection_wants_write(rustls_connection): - write_fds.set(sockfd) + # if rustls_connection_wants_read(rustls_connection): + # read_fds.set(sockfd) + # if rustls_connection_wants_write(rustls_connection): + # write_fds.set(sockfd) - if not rustls_connection_wants_read(rustls_connection) and not rustls_connection_wants_write(rustls_connection): - print("Rustls wants neither read nor write. Drain plaintext and exit") - break + # if not rustls_connection_wants_read(rustls_connection) and not rustls_connection_wants_write(rustls_connection): + # print("Rustls wants neither read nor write. Drain plaintext and exit") + # break + var read_fds_ptr = UnsafePointer[fd_set].address_of(read_fds) + var write_fds_ptr = UnsafePointer[fd_set].address_of(write_fds) - let select_result = select(sockfd + 1, read_fds.address(), write_fds.address(), None, None) + var select_result = select(sockfd + 1, read_fds_ptr, write_fds_ptr, UnsafePointer[fd_set](), UnsafePointer[timeval]()) if select_result == -1: print("Client: select error") return ret if read_fds.is_set(sockfd): while True: - result = do_read(conn, rustls_connection) + var conn_ptr = UnsafePointer[ConnData].address_of(conn) + result = do_read(conn_ptr, rustls_connection) if result == DEMO_AGAIN: break elif result == DEMO_EOF: - return drain_plaintext(conn) + return 0 # drain_plaintext elif result != DEMO_OK: return ret - if headers_len == 0: - body = body_beginning(conn.data) - if body: - headers_len = body.length() - print(f"Body began at {headers_len}") - content_length_str = get_first_header_value(conn.data.data, headers_len, "Content-Length") - if not content_length_str: - print("Content length header not found") - return ret - content_length = int(content_length_str) - print(f"Content length {content_length}") - - if headers_len != 0 and conn.data.len >= headers_len + content_length: - return drain_plaintext(conn) - - if write_fds.is_set(sockfd): - while True: - err = write_tls(rustls_connection, conn, n.address()) - if err != 0: - print(f"Error in rustls_connection_write_tls: errno {err}") - return ret - if result == DEMO_AGAIN: - break - elif n == 0: - print("Write returned 0 from rustls_connection_write_tls") - break + # if headers_len == 0: + # body = body_beginning(conn.data) + # if body: + # headers_len = body.length() + # print(f"Body began at {headers_len}") + # content_length_str = get_first_header_value(conn.data.data, headers_len, "Content-Length") + # if not content_length_str: + # print("Content length header not found") + # return ret + # content_length = int(content_length_str) + # print(f"Content length {content_length}") + + # if headers_len != 0 and conn.data.len >= headers_len + content_length: + # return drain_plaintext(conn) + + # if write_fds.is_set(sockfd): + # while True: + # err = write_tls(rustls_connection, conn, n.address()) + # if err != 0: + # print(f"Error in rustls_connection_write_tls: errno {err}") + # return ret + # if result == DEMO_AGAIN: + # break + # elif n == 0: + # print("Write returned 0 from rustls_connection_write_tls") + # break print("Send_request_and_read_response: loop fell through") return ret -fn drain_plaintext(conn: UnsafePointer[ConnData]) raises -> RustlsResult: - let result = copy_plaintext_to_buffer(conn) - if result != DEMO_OK and result != DEMO_EOF: - return 1 - print(f"Writing {conn.data.len} bytes to stdout") - # Note: In Mojo, you might need to use a different method to write to stdout - # This is a placeholder and might need to be adjusted - print(conn.data.data.decode()) + +alias DEMO_OK = 0 +alias DEMO_AGAIN = 1 +alias DEMO_EOF = 2 +alias DEMO_ERROR = 3 + +alias ReadCallback = fn(UnsafePointer[UInt8], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> Int + +fn read_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int: + var conn = userdata.bitcast[ConnData]()[] + var signed_n = read(conn.fd, buf, len) + print("Read bytes: ", buf) + if signed_n < 0: + # out_n.store(0) + print("Error reading from socket") + # return errno() + # out_n.store(signed_n) return 0 +fn rustls_connection_read_tls(rconn: UnsafePointer[Connection], conn: UnsafePointer[ConnData]) raises -> Int: + var n: Int = 0 + var result = _rustls.get_function[ + fn(UnsafePointer[Connection], ReadCallback, UnsafePointer[ConnData], UnsafePointer[Int]) -> Int + ]("rustls_connection_read_tls")(rconn, read_cb, conn, UnsafePointer.address_of(n)) + return result + +fn do_read(conn: UnsafePointer[ConnData], rconn: UnsafePointer[Connection]) raises -> Int: + """ + Do one read from the socket, process all resulting bytes into the + rustls_connection, then copy all plaintext bytes from the session to stdout. + Returns: + - DEMO_OK for success + - DEMO_AGAIN if we got an EAGAIN or EWOULDBLOCK reading from the socket + - DEMO_EOF if we got EOF + - DEMO_ERROR for other errors. + """ + var err: Int = 1 + var result: UInt32 = 1 + var n: Int = 0 + var n_ptr = UnsafePointer.address_of(n) + + err = rustls_connection_read_tls(rconn, conn) + + if err == EAGAIN or err == EWOULDBLOCK: + print("Reading from socket: EAGAIN or EWOULDBLOCK: {strerror(errno())}") + return DEMO_AGAIN + elif err != 0: + print("Reading from socket: errno {err}") + return DEMO_ERROR + + # result = rustls_connection_process_new_packets(rconn) + # if result != 7000: + # print_error("in process_new_packets", result) + # return DEMO_ERROR + + # result = copy_plaintext_to_buffer(conn) + # if result != DEMO_EOF: + # return result + + # If we got an EOF on the plaintext stream (peer closed connection cleanly), + # verify that the sender then closed the TCP connection. + # var buf = Bytes(1) + # let signed_n = read(conn.fd, buf.data(), 1) + + # if signed_n > 0: + # print(f"Error: read returned {signed_n} bytes after receiving close_notify") + # return DEMO_ERROR + # elif signed_n < 0 and errno() != EWOULDBLOCK: + # print(f"Wrong error after receiving close_notify: {strerror(errno())}") + # return DEMO_ERROR + + return DEMO_EOF + +# fn read_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int: +# let conn = userdata.bitcast[ConnData]() +# let signed_n = read(conn.fd, buf, len) +# if signed_n < 0: +# out_n.store(0) +# return errno() +# out_n.store(signed_n) +# return 0 + +fn print_error(context: String, result: UInt32): + print("Error in {context}: {rustls_error(result)}") + +fn rustls_error(result: UInt32) -> String: + # Implement this function to return a string representation of the rustls error + # You might need to use the rustls API to get the error string + return "Rustls error code: {result}" + +fn strerror(err: Int) -> String: + # Implement this function to return a string representation of the system error + # You might need to use a system API or a lookup table + return "System error code: {err}" + +# fn drain_plaintext(conn: UnsafePointer[ConnData]) raises -> RustlsResult: +# var result = copy_plaintext_to_buffer(conn) +# if result != DEMO_OK and result != DEMO_EOF: +# return 1 +# print(f"Writing {conn.data.len} bytes to stdout") +# print(conn.data.data.decode()) +# return 0 + +# fn copy_plaintext_to_buffer(conn: UnsafePointer[ConnData]) raises -> RustlsResult: +# var buf = String() +# var total_read: Int = 0 + +# while True: +# var n: Int = 0 +# var result = rustls_connection_read(conn.rconn, buf.as_bytes(), buf.length(), n.address()) + +# if result == 7000: +# if n > 0: +# conn.data.append(buf[:n]) +# total_read += n +# else: +# break # No more data to read +# elif result == RUSTLS_RESULT_WOULD_BLOCK: +# break # Would block, try again later +# else: +# return result # Error occurred + +# return RUSTLS_RESULT_OK + # { # int sockfd = conn->fd; # int ret = 1; From 7e5df0f61aa611d7460675eca542c3c27e65deaf Mon Sep 17 00:00:00 2001 From: Val Date: Wed, 18 Sep 2024 17:46:00 +0200 Subject: [PATCH 09/18] fixing select --- src/libc.mojo | 1 + src/test.mojo | 250 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 185 insertions(+), 66 deletions(-) diff --git a/src/libc.mojo b/src/libc.mojo index 587384e..362f096 100644 --- a/src/libc.mojo +++ b/src/libc.mojo @@ -862,6 +862,7 @@ fn select( timeout: A UnsafePointer to a timeval struct to set a timeout. Returns: The number of file descriptors in the sets or -1 in case of failure. """ + print("selecting") return external_call[ "select", c_int, # FnName, RetType diff --git a/src/test.mojo b/src/test.mojo index 523c289..0b794f6 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -63,24 +63,148 @@ fn log_cb(level: Int, message: String): print("Log level:", level, "Message:", message) # fn send_request_and_read_response(conn: UnsafePointer[ConnData], rustls_connection: UnsafePointer[Connection], hostname: String, path: String) -> RustlsResult: +# fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePointer[Connection], hostname: String, path: String) raises -> RustlsResult: +# var sockfd = conn.fd +# var ret: RustlsResult = 1 +# var err = 1 +# var result: UInt32 = 1 +# var buf = SliceBytes(UnsafePointer[UInt8](), 0) +# var read_fds = fd_set() +# var write_fds = fd_set() +# var n: Int = 0 +# var body: String = "" +# var content_length: Int = 0 +# var headers_len: Int = 0 + +# # var version = rustls_version() +# var headers = '''GET {path} HTTP/1.1\r\n +# Host: {hostname}\r\n +# User-Agent: {version}\r\n +# Accept: carcinization/inevitable, text/html\r\n +# Connection: close\r\n +# \r\n''' +# var header_bytes = headers.as_bytes_slice().unsafe_ptr() +# buf = SliceBytes(header_bytes, len(headers)) + +# # Write plaintext to rustls connection +# result = rustls_connection_write(rustls_connection, buf.data, len(headers), UnsafePointer.address_of(n)) +# if result != 7000: +# print("Error writing plaintext bytes to rustls_connection") +# return ret +# if n != len(headers): +# print("Short write writing plaintext bytes to rustls_connection") +# return ret + +# var ciphersuite_id = rustls_connection_get_negotiated_ciphersuite(rustls_connection) +# var ciphersuite_name = rustls_connection_get_negotiated_ciphersuite_name(rustls_connection) +# print("Negotiated ciphersuite: ", ciphersuite_name) +# while True: +# # read_fds.clear() +# # write_fds.clear() +# read_fds.set(sockfd) +# write_fds.set(sockfd) + +# var timeout = timeval(5, 0) # 5 seconds timeout +# var select_result = select(sockfd + 1, read_fds_ptr, write_fds_ptr, fd_set_ptr, UnsafePointer.address_of(timeout)) + +# if select_result == -1: +# print("Select error: ", errno()) +# break +# elif select_result == 0: +# print("Select timeout") +# continue + +# if read_fds.is_set(sockfd): +# # Perform read operation +# # Break if all data has been read + +# if write_fds.is_set(sockfd): +# # Perform write operation +# # Break if all data has been written + +# # Add a condition to break the loop when all operations are complete +# if all_operations_complete: +# break + +# # while True: +# # read_fds.clear(sockfd) +# # write_fds.clear(sockfd) + +# # var read_fds_ptr = UnsafePointer[fd_set].address_of(read_fds) +# # var write_fds_ptr = UnsafePointer[fd_set].address_of(write_fds) + +# # print("going into select") +# # var fd_set_ptr = UnsafePointer[fd_set]() +# # var timeval_ptr = UnsafePointer[timeval]() +# # var select_result = select(sockfd + 1, read_fds_ptr, write_fds_ptr, fd_set_ptr, timeval_ptr) +# # print("select result: ", select_result) +# # if select_result == -1: +# # print("Client: select error") +# # return ret + +# # if read_fds.is_set(sockfd): +# # while True: +# # var conn_ptr = UnsafePointer[ConnData].address_of(conn) +# # print("Reading from socket") +# # result = do_read(conn_ptr, rustls_connection) +# # if result == DEMO_AGAIN: +# # break +# # elif result == DEMO_EOF: +# # return 0 # drain_plaintext +# # elif result != DEMO_OK: +# # return ret + + + + + + + + + +# # if headers_len == 0: +# # body = body_beginning(conn.data) +# # if body: +# # headers_len = body.length() +# # print(f"Body began at {headers_len}") +# # content_length_str = get_first_header_value(conn.data.data, headers_len, "Content-Length") +# # if not content_length_str: +# # print("Content length header not found") +# # return ret +# # content_length = int(content_length_str) +# # print(f"Content length {content_length}") + +# # if headers_len != 0 and conn.data.len >= headers_len + content_length: +# # return drain_plaintext(conn) + +# # if write_fds.is_set(sockfd): +# # while True: +# # err = write_tls(rustls_connection, conn, n.address()) +# # if err != 0: +# # print(f"Error in rustls_connection_write_tls: errno {err}") +# # return ret +# # if result == DEMO_AGAIN: +# # break +# # elif n == 0: +# # print("Write returned 0 from rustls_connection_write_tls") +# # break + +# print("Send_request_and_read_response: loop fell through") +# return ret fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePointer[Connection], hostname: String, path: String) raises -> RustlsResult: var sockfd = conn.fd var ret: RustlsResult = 1 - var err = 1 var result: UInt32 = 1 var buf = SliceBytes(UnsafePointer[UInt8](), 0) var read_fds = fd_set() var write_fds = fd_set() var n: Int = 0 - var body: String = "" - var content_length: Int = 0 - var headers_len: Int = 0 - # var version = rustls_version() + # Prepare the HTTP request var headers = '''GET {path} HTTP/1.1\r\n Host: {hostname}\r\n - User-Agent: {version}\r\n - Accept: carcinization/inevitable, text/html\r\n + User-Agent: Mojo/1.0\r\n + Accept: text/html\r\n Connection: close\r\n \r\n''' var header_bytes = headers.as_bytes_slice().unsafe_ptr() @@ -95,70 +219,62 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint print("Short write writing plaintext bytes to rustls_connection") return ret - var ciphersuite_id = rustls_connection_get_negotiated_ciphersuite(rustls_connection) var ciphersuite_name = rustls_connection_get_negotiated_ciphersuite_name(rustls_connection) print("Negotiated ciphersuite: ", ciphersuite_name) while True: - read_fds.clear(sockfd) - write_fds.clear(sockfd) - - # if rustls_connection_wants_read(rustls_connection): - # read_fds.set(sockfd) - # if rustls_connection_wants_write(rustls_connection): - # write_fds.set(sockfd) - - # if not rustls_connection_wants_read(rustls_connection) and not rustls_connection_wants_write(rustls_connection): - # print("Rustls wants neither read nor write. Drain plaintext and exit") - # break - var read_fds_ptr = UnsafePointer[fd_set].address_of(read_fds) - var write_fds_ptr = UnsafePointer[fd_set].address_of(write_fds) - - var select_result = select(sockfd + 1, read_fds_ptr, write_fds_ptr, UnsafePointer[fd_set](), UnsafePointer[timeval]()) + # read_fds.clear() + # write_fds.clear() + read_fds.set(sockfd) + write_fds.set(sockfd) + + var timeout = timeval(5, 0) # 5 seconds timeout + + print("Going into select") + var select_result = select(sockfd + 1, + UnsafePointer.address_of(read_fds), + UnsafePointer.address_of(write_fds), + UnsafePointer[fd_set](), + UnsafePointer.address_of(timeout)) + print("Select result: ", select_result) + if select_result == -1: - print("Client: select error") - return ret - + print("Select error: ", select_result) + break + elif select_result == 0: + print("Select timeout") + continue + if read_fds.is_set(sockfd): - while True: - var conn_ptr = UnsafePointer[ConnData].address_of(conn) - result = do_read(conn_ptr, rustls_connection) - if result == DEMO_AGAIN: + # Perform read operation + var read_buf = SliceBytes(UnsafePointer[UInt8](), 4096) # Adjust buffer size as needed + var conn_ptr = UnsafePointer[ConnData].address_of(conn) + var bytes_read = rustls_connection_read_tls(rustls_connection, conn_ptr) + if bytes_read == 7000: # RUSTLS_RESULT_OK + if n > 0: + print("Read ", n, " bytes") + # Process the read data here + else: + print("No data read, connection might be closed") break - elif result == DEMO_EOF: - return 0 # drain_plaintext - elif result != DEMO_OK: - return ret - - # if headers_len == 0: - # body = body_beginning(conn.data) - # if body: - # headers_len = body.length() - # print(f"Body began at {headers_len}") - # content_length_str = get_first_header_value(conn.data.data, headers_len, "Content-Length") - # if not content_length_str: - # print("Content length header not found") - # return ret - # content_length = int(content_length_str) - # print(f"Content length {content_length}") - - # if headers_len != 0 and conn.data.len >= headers_len + content_length: - # return drain_plaintext(conn) - - # if write_fds.is_set(sockfd): - # while True: - # err = write_tls(rustls_connection, conn, n.address()) - # if err != 0: - # print(f"Error in rustls_connection_write_tls: errno {err}") - # return ret - # if result == DEMO_AGAIN: - # break - # elif n == 0: - # print("Write returned 0 from rustls_connection_write_tls") - # break - - print("Send_request_and_read_response: loop fell through") - return ret + elif bytes_read == 7001: # RUSTLS_RESULT_WOULD_BLOCK + continue + else: + print("Error reading from connection") + break + + if write_fds.is_set(sockfd): + # Perform write operation if needed + # For now, we'll assume all data was written in the initial request + pass + + # Add a condition to break the loop when all operations are complete + # For example, if you've received a complete HTTP response + # if response_complete: + # break + + return 7000 # RUSTLS_RESULT_OK + alias DEMO_OK = 0 @@ -181,6 +297,7 @@ fn read_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, fn rustls_connection_read_tls(rconn: UnsafePointer[Connection], conn: UnsafePointer[ConnData]) raises -> Int: var n: Int = 0 + print("We are in rustls_connection_read_tls") var result = _rustls.get_function[ fn(UnsafePointer[Connection], ReadCallback, UnsafePointer[ConnData], UnsafePointer[Int]) -> Int ]("rustls_connection_read_tls")(rconn, read_cb, conn, UnsafePointer.address_of(n)) @@ -200,9 +317,10 @@ fn do_read(conn: UnsafePointer[ConnData], rconn: UnsafePointer[Connection]) rais var result: UInt32 = 1 var n: Int = 0 var n_ptr = UnsafePointer.address_of(n) - + + print("going into rustls_connection_read_tls") err = rustls_connection_read_tls(rconn, conn) - + print("coming out of rustls_connection_read_tls") if err == EAGAIN or err == EWOULDBLOCK: print("Reading from socket: EAGAIN or EWOULDBLOCK: {strerror(errno())}") return DEMO_AGAIN From ebcc798b62bb69038701a8dcb76a23853eed1098 Mon Sep 17 00:00:00 2001 From: Val Date: Wed, 18 Sep 2024 18:27:54 +0200 Subject: [PATCH 10/18] wip debugging reads --- src/libc.mojo | 16 +++- src/rustls/__init__.mojo | 12 +-- src/test.mojo | 183 ++++++++++++++------------------------- 3 files changed, 84 insertions(+), 127 deletions(-) diff --git a/src/libc.mojo b/src/libc.mojo index 362f096..5b20fdb 100644 --- a/src/libc.mojo +++ b/src/libc.mojo @@ -812,7 +812,6 @@ fn write(fildes: c_int, buf: UnsafePointer[c_void], nbyte: c_size_t) -> c_int: fildes, buf, nbyte ) - struct fd_set: var fds_bits: StaticTuple[Int64, 16] @@ -825,16 +824,29 @@ struct fd_set: var word = fd // 64 var bit = fd % 64 self.fds_bits[word] |= (1 << bit) + print("Set fd", fd, "word:", word, "bit:", bit) fn clear(inout self, fd: Int): var word = fd // 64 var bit = fd % 64 self.fds_bits[word] &= ~(1 << bit) + print("Cleared fd", fd, "word:", word, "bit:", bit) fn is_set(self, fd: Int) -> Bool: var word = fd // 64 var bit = fd % 64 - return (self.fds_bits[word] & (1 << bit)) != 0 + var result = (self.fds_bits[word] & (1 << bit)) != 0 + print("Checking fd", fd, "word:", word, "bit:", bit, "result:", result) + return result + + fn clear_all(inout self): + for i in range(16): + self.fds_bits[i] = 0 + print("Cleared all fds") + + fn print_bits(self): + for i in range(16): + print("Word", i, ":", bin(self.fds_bits[i])) struct timeval: var tv_sec: Int64 diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index 3207cd6..0c00d8b 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -147,12 +147,12 @@ fn rustls_connection_get_negotiated_ciphersuite_name( fn (UnsafePointer[Connection]) -> RustlsResult ]("rustls_connection_get_negotiated_ciphersuite_name")(conn) -# fn rustls_connection_read_tls( -# conn: UnsafePointer[Connection], buf: UnsafePointer[UInt8], len: Int, read: UnsafePointer[Int] -# ) -> RustlsResult: -# return _rustls.get_function[ -# fn (UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> RustlsResult -# ]("rustls_connection_read_tls")(conn, buf, len, read) +fn rustls_connection_read_tls( + conn: UnsafePointer[Connection], buf: UnsafePointer[UInt8], len: Int, read: UnsafePointer[Int] +) -> RustlsResult: + return _rustls.get_function[ + fn (UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> RustlsResult + ]("rustls_connection_read_tls")(conn, buf, len, read) # Connection @value diff --git a/src/test.mojo b/src/test.mojo index 0b794f6..c83f2d2 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -24,7 +24,7 @@ from rustls import ( rustls_connection_write, rustls_connection_get_negotiated_ciphersuite, rustls_connection_get_negotiated_ciphersuite_name, - # rustls_connection_read_tls, + rustls_connection_read_tls, ) import os from sys import exit @@ -62,25 +62,20 @@ fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: St fn log_cb(level: Int, message: String): print("Log level:", level, "Message:", message) -# fn send_request_and_read_response(conn: UnsafePointer[ConnData], rustls_connection: UnsafePointer[Connection], hostname: String, path: String) -> RustlsResult: # fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePointer[Connection], hostname: String, path: String) raises -> RustlsResult: # var sockfd = conn.fd # var ret: RustlsResult = 1 -# var err = 1 # var result: UInt32 = 1 # var buf = SliceBytes(UnsafePointer[UInt8](), 0) # var read_fds = fd_set() # var write_fds = fd_set() # var n: Int = 0 -# var body: String = "" -# var content_length: Int = 0 -# var headers_len: Int = 0 -# # var version = rustls_version() +# # Prepare the HTTP request # var headers = '''GET {path} HTTP/1.1\r\n # Host: {hostname}\r\n -# User-Agent: {version}\r\n -# Accept: carcinization/inevitable, text/html\r\n +# User-Agent: Mojo/1.0\r\n +# Accept: text/html\r\n # Connection: close\r\n # \r\n''' # var header_bytes = headers.as_bytes_slice().unsafe_ptr() @@ -95,9 +90,9 @@ fn log_cb(level: Int, message: String): # print("Short write writing plaintext bytes to rustls_connection") # return ret -# var ciphersuite_id = rustls_connection_get_negotiated_ciphersuite(rustls_connection) # var ciphersuite_name = rustls_connection_get_negotiated_ciphersuite_name(rustls_connection) # print("Negotiated ciphersuite: ", ciphersuite_name) + # while True: # # read_fds.clear() # # write_fds.clear() @@ -105,10 +100,17 @@ fn log_cb(level: Int, message: String): # write_fds.set(sockfd) # var timeout = timeval(5, 0) # 5 seconds timeout -# var select_result = select(sockfd + 1, read_fds_ptr, write_fds_ptr, fd_set_ptr, UnsafePointer.address_of(timeout)) + +# print("Going into select") +# var select_result = select(sockfd + 1, +# UnsafePointer.address_of(read_fds), +# UnsafePointer.address_of(write_fds), +# UnsafePointer[fd_set](), +# UnsafePointer.address_of(timeout)) +# print("Select result: ", select_result) # if select_result == -1: -# print("Select error: ", errno()) +# print("Select error: ", select_result) # break # elif select_result == 0: # print("Select timeout") @@ -116,81 +118,34 @@ fn log_cb(level: Int, message: String): # if read_fds.is_set(sockfd): # # Perform read operation -# # Break if all data has been read +# var read_buf = SliceBytes(UnsafePointer[UInt8](), 4096) # Adjust buffer size as needed +# var conn_ptr = UnsafePointer[ConnData].address_of(conn) +# var bytes_read = rustls_connection_read_tls(rustls_connection, conn_ptr) +# if bytes_read == 7000: # RUSTLS_RESULT_OK +# if n > 0: +# print("Read ", n, " bytes") +# # Process the read data here +# else: +# print("No data read, connection might be closed") +# break +# elif bytes_read == 7001: # RUSTLS_RESULT_WOULD_BLOCK +# continue +# else: +# print("Error reading from connection") +# break # if write_fds.is_set(sockfd): -# # Perform write operation -# # Break if all data has been written +# # Perform write operation if needed +# # For now, we'll assume all data was written in the initial request +# pass # # Add a condition to break the loop when all operations are complete -# if all_operations_complete: -# break +# # For example, if you've received a complete HTTP response +# # if response_complete: +# # break + +# return 7000 # RUSTLS_RESULT_OK -# # while True: -# # read_fds.clear(sockfd) -# # write_fds.clear(sockfd) - -# # var read_fds_ptr = UnsafePointer[fd_set].address_of(read_fds) -# # var write_fds_ptr = UnsafePointer[fd_set].address_of(write_fds) - -# # print("going into select") -# # var fd_set_ptr = UnsafePointer[fd_set]() -# # var timeval_ptr = UnsafePointer[timeval]() -# # var select_result = select(sockfd + 1, read_fds_ptr, write_fds_ptr, fd_set_ptr, timeval_ptr) -# # print("select result: ", select_result) -# # if select_result == -1: -# # print("Client: select error") -# # return ret - -# # if read_fds.is_set(sockfd): -# # while True: -# # var conn_ptr = UnsafePointer[ConnData].address_of(conn) -# # print("Reading from socket") -# # result = do_read(conn_ptr, rustls_connection) -# # if result == DEMO_AGAIN: -# # break -# # elif result == DEMO_EOF: -# # return 0 # drain_plaintext -# # elif result != DEMO_OK: -# # return ret - - - - - - - - - -# # if headers_len == 0: -# # body = body_beginning(conn.data) -# # if body: -# # headers_len = body.length() -# # print(f"Body began at {headers_len}") -# # content_length_str = get_first_header_value(conn.data.data, headers_len, "Content-Length") -# # if not content_length_str: -# # print("Content length header not found") -# # return ret -# # content_length = int(content_length_str) -# # print(f"Content length {content_length}") - -# # if headers_len != 0 and conn.data.len >= headers_len + content_length: -# # return drain_plaintext(conn) - -# # if write_fds.is_set(sockfd): -# # while True: -# # err = write_tls(rustls_connection, conn, n.address()) -# # if err != 0: -# # print(f"Error in rustls_connection_write_tls: errno {err}") -# # return ret -# # if result == DEMO_AGAIN: -# # break -# # elif n == 0: -# # print("Write returned 0 from rustls_connection_write_tls") -# # break - -# print("Send_request_and_read_response: loop fell through") -# return ret fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePointer[Connection], hostname: String, path: String) raises -> RustlsResult: var sockfd = conn.fd var ret: RustlsResult = 1 @@ -199,6 +154,7 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint var read_fds = fd_set() var write_fds = fd_set() var n: Int = 0 + var response_complete = False # Prepare the HTTP request var headers = '''GET {path} HTTP/1.1\r\n @@ -222,9 +178,9 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint var ciphersuite_name = rustls_connection_get_negotiated_ciphersuite_name(rustls_connection) print("Negotiated ciphersuite: ", ciphersuite_name) - while True: - # read_fds.clear() - # write_fds.clear() + while not response_complete: + read_fds.clear_all() + write_fds.clear_all() read_fds.set(sockfd) write_fds.set(sockfd) @@ -245,37 +201,34 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint print("Select timeout") continue - if read_fds.is_set(sockfd): - # Perform read operation - var read_buf = SliceBytes(UnsafePointer[UInt8](), 4096) # Adjust buffer size as needed - var conn_ptr = UnsafePointer[ConnData].address_of(conn) - var bytes_read = rustls_connection_read_tls(rustls_connection, conn_ptr) - if bytes_read == 7000: # RUSTLS_RESULT_OK - if n > 0: - print("Read ", n, " bytes") - # Process the read data here - else: - print("No data read, connection might be closed") - break - elif bytes_read == 7001: # RUSTLS_RESULT_WOULD_BLOCK - continue - else: - print("Error reading from connection") + # if read_fds.is_set(sockfd): + print("Socket is ready for reading") + var conn_ptr = UnsafePointer[ConnData].address_of(conn) + var read_buf = SliceBytes(UnsafePointer[UInt8](), 4096) + var bytes_read = rustls_connection_read_tls(rustls_connection, read_buf.data, read_buf.len, UnsafePointer.address_of(n)) + print("Bytes read: ", bytes_read) + print("Data: ", read_buf.data) + if bytes_read == 7000: + var plaintext_buf = SliceBytes(UnsafePointer[UInt8](), 4096) + var plaintext_bytes_read = rustls_connection_read_tls(rustls_connection, plaintext_buf.data, plaintext_buf.len, UnsafePointer.address_of(n)) + if plaintext_bytes_read == 7000 and n > 0: + print("Read ", n, " plaintext bytes") + print("Data: ", String(plaintext_buf.data, n)) + if String(plaintext_buf.data, n).find("\r\n\r\n") != -1: + response_complete = True + elif plaintext_bytes_read != 7001: + print("Error reading plaintext from connection") break + elif bytes_read != 7001: # Not RUSTLS_RESULT_WOULD_BLOCK + print("Error reading TLS data from connection") + break if write_fds.is_set(sockfd): + print("Socket is ready for writing") # Perform write operation if needed - # For now, we'll assume all data was written in the initial request pass - - # Add a condition to break the loop when all operations are complete - # For example, if you've received a complete HTTP response - # if response_complete: - # break - - return 7000 # RUSTLS_RESULT_OK - + return 7000 alias DEMO_OK = 0 alias DEMO_AGAIN = 1 @@ -295,14 +248,6 @@ fn read_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, # out_n.store(signed_n) return 0 -fn rustls_connection_read_tls(rconn: UnsafePointer[Connection], conn: UnsafePointer[ConnData]) raises -> Int: - var n: Int = 0 - print("We are in rustls_connection_read_tls") - var result = _rustls.get_function[ - fn(UnsafePointer[Connection], ReadCallback, UnsafePointer[ConnData], UnsafePointer[Int]) -> Int - ]("rustls_connection_read_tls")(rconn, read_cb, conn, UnsafePointer.address_of(n)) - return result - fn do_read(conn: UnsafePointer[ConnData], rconn: UnsafePointer[Connection]) raises -> Int: """ Do one read from the socket, process all resulting bytes into the @@ -319,7 +264,7 @@ fn do_read(conn: UnsafePointer[ConnData], rconn: UnsafePointer[Connection]) rais var n_ptr = UnsafePointer.address_of(n) print("going into rustls_connection_read_tls") - err = rustls_connection_read_tls(rconn, conn) + err = rustls_connection_read_tls(rconn, conn[].data.data, conn[].data.len, n_ptr) print("coming out of rustls_connection_read_tls") if err == EAGAIN or err == EWOULDBLOCK: print("Reading from socket: EAGAIN or EWOULDBLOCK: {strerror(errno())}") From cfc1671bbf2f38cbb28322e56fc6524c9ab40050 Mon Sep 17 00:00:00 2001 From: Val Date: Wed, 18 Sep 2024 19:10:43 +0200 Subject: [PATCH 11/18] use write and read fds --- src/rustls/__init__.mojo | 58 +++-- src/test.mojo | 498 +++++++-------------------------------- 2 files changed, 116 insertions(+), 440 deletions(-) diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index 0c00d8b..a65ec70 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -15,6 +15,32 @@ struct WebPkiServerCertVerifierBuilder: pass +# Connection +@value +struct LogParams: + var level: UInt + var message: String + + +struct RustlsConnection: + pass + + +struct Connection: + var conn: RustlsConnection + var userdata: UnsafePointer[UInt8] + var log_callback: fn (userdata: UnsafePointer[UInt8], params: UnsafePointer[LogParams]) -> None + + +# Client +struct ClientConfig: + pass + +@value +struct ClientConfigBuilder: + pass + + fn new_root_cert_store_builder() -> UnsafePointer[RootCertStoreBuilder]: return _rustls.get_function[fn () -> UnsafePointer[RootCertStoreBuilder]]("rustls_root_cert_store_builder_new")() @@ -154,31 +180,17 @@ fn rustls_connection_read_tls( fn (UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> RustlsResult ]("rustls_connection_read_tls")(conn, buf, len, read) -# Connection -@value -struct LogParams: - var level: UInt - var message: String - - -struct RustlsConnection: - pass - - -struct Connection: - var conn: RustlsConnection - var userdata: UnsafePointer[UInt8] - var log_callback: fn (userdata: UnsafePointer[UInt8], params: UnsafePointer[LogParams]) -> None - - -# Client -struct ClientConfig: - pass +fn rustls_connection_write_tls( + rconn: UnsafePointer[Connection], write_cb: fn (buf: UnsafePointer[UInt8], len: Int) -> RustlsResult, conn: UnsafePointer[ConnData], n: Int) -> RustlsResult: + return _rustls.get_function[ + fn (UnsafePointer[Connection], fn (buf: UnsafePointer[UInt8], len: Int) -> RustlsResult, UnsafePointer[ConnData], Int) -> RustlsResult + ]("rustls_connection_write_tls")(rconn, write_cb, conn, n) -@value -struct ClientConfigBuilder: - pass +fn rustls_connection_wants_read(conn: UnsafePointer[Connection]) -> Bool: + return _rustls.get_function[fn (UnsafePointer[Connection]) -> Bool]("rustls_connection_wants_read")(conn) +fn rustls_connection_wants_write(conn: UnsafePointer[Connection]) -> Bool: + return _rustls.get_function[fn (UnsafePointer[Connection]) -> Bool]("rustls_connection_wants_write")(conn) fn new_client_config_builder() -> UnsafePointer[ClientConfigBuilder]: return _rustls.get_function[fn () -> UnsafePointer[ClientConfigBuilder]]("rustls_client_config_builder_new")() diff --git a/src/test.mojo b/src/test.mojo index c83f2d2..930bd56 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -25,6 +25,9 @@ from rustls import ( rustls_connection_get_negotiated_ciphersuite, rustls_connection_get_negotiated_ciphersuite_name, rustls_connection_read_tls, + rustls_connection_wants_read, + rustls_connection_wants_write, + rustls_connection_write_tls, ) import os from sys import exit @@ -34,6 +37,12 @@ from sys.ffi import external_call from lightbug_http.sys.net import create_connection from libc import fd_set, AF_INET, SOCK_STREAM, AI_PASSIVE, EAGAIN, EWOULDBLOCK, to_char_ptr, socket, select, timeval, read +alias DEMO_OK = 0 +alias DEMO_AGAIN = 1 +alias DEMO_EOF = 2 +alias DEMO_ERROR = 3 + + fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: String, path: String) raises -> RustlsResult: var rconn = UnsafePointer[Connection]() var ret: RustlsResult = 1 @@ -61,110 +70,24 @@ fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: St fn log_cb(level: Int, message: String): print("Log level:", level, "Message:", message) - -# fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePointer[Connection], hostname: String, path: String) raises -> RustlsResult: -# var sockfd = conn.fd -# var ret: RustlsResult = 1 -# var result: UInt32 = 1 -# var buf = SliceBytes(UnsafePointer[UInt8](), 0) -# var read_fds = fd_set() -# var write_fds = fd_set() -# var n: Int = 0 - -# # Prepare the HTTP request -# var headers = '''GET {path} HTTP/1.1\r\n -# Host: {hostname}\r\n -# User-Agent: Mojo/1.0\r\n -# Accept: text/html\r\n -# Connection: close\r\n -# \r\n''' -# var header_bytes = headers.as_bytes_slice().unsafe_ptr() -# buf = SliceBytes(header_bytes, len(headers)) - -# # Write plaintext to rustls connection -# result = rustls_connection_write(rustls_connection, buf.data, len(headers), UnsafePointer.address_of(n)) -# if result != 7000: -# print("Error writing plaintext bytes to rustls_connection") -# return ret -# if n != len(headers): -# print("Short write writing plaintext bytes to rustls_connection") -# return ret - -# var ciphersuite_name = rustls_connection_get_negotiated_ciphersuite_name(rustls_connection) -# print("Negotiated ciphersuite: ", ciphersuite_name) - -# while True: -# # read_fds.clear() -# # write_fds.clear() -# read_fds.set(sockfd) -# write_fds.set(sockfd) - -# var timeout = timeval(5, 0) # 5 seconds timeout - -# print("Going into select") -# var select_result = select(sockfd + 1, -# UnsafePointer.address_of(read_fds), -# UnsafePointer.address_of(write_fds), -# UnsafePointer[fd_set](), -# UnsafePointer.address_of(timeout)) -# print("Select result: ", select_result) - -# if select_result == -1: -# print("Select error: ", select_result) -# break -# elif select_result == 0: -# print("Select timeout") -# continue - -# if read_fds.is_set(sockfd): -# # Perform read operation -# var read_buf = SliceBytes(UnsafePointer[UInt8](), 4096) # Adjust buffer size as needed -# var conn_ptr = UnsafePointer[ConnData].address_of(conn) -# var bytes_read = rustls_connection_read_tls(rustls_connection, conn_ptr) -# if bytes_read == 7000: # RUSTLS_RESULT_OK -# if n > 0: -# print("Read ", n, " bytes") -# # Process the read data here -# else: -# print("No data read, connection might be closed") -# break -# elif bytes_read == 7001: # RUSTLS_RESULT_WOULD_BLOCK -# continue -# else: -# print("Error reading from connection") -# break - -# if write_fds.is_set(sockfd): -# # Perform write operation if needed -# # For now, we'll assume all data was written in the initial request -# pass - -# # Add a condition to break the loop when all operations are complete -# # For example, if you've received a complete HTTP response -# # if response_complete: -# # break - -# return 7000 # RUSTLS_RESULT_OK - fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePointer[Connection], hostname: String, path: String) raises -> RustlsResult: var sockfd = conn.fd var ret: RustlsResult = 1 var result: UInt32 = 1 - var buf = SliceBytes(UnsafePointer[UInt8](), 0) - var read_fds = fd_set() - var write_fds = fd_set() var n: Int = 0 + var headers_len: Int = 0 + var content_length: Int = 0 var response_complete = False # Prepare the HTTP request - var headers = '''GET {path} HTTP/1.1\r\n - Host: {hostname}\r\n - User-Agent: Mojo/1.0\r\n - Accept: text/html\r\n - Connection: close\r\n - \r\n''' + var headers = "GET " + path + " HTTP/1.1\r\n" + + "Host: " + hostname + "\r\n" + + "User-Agent: Mojo\r\n" + + "Accept: carcinization/inevitable, text/html\r\n" + + "Connection: close\r\n" + + "\r\n" var header_bytes = headers.as_bytes_slice().unsafe_ptr() - buf = SliceBytes(header_bytes, len(headers)) + var buf = SliceBytes(header_bytes, len(headers)) # Write plaintext to rustls connection result = rustls_connection_write(rustls_connection, buf.data, len(headers), UnsafePointer.address_of(n)) @@ -178,65 +101,83 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint var ciphersuite_name = rustls_connection_get_negotiated_ciphersuite_name(rustls_connection) print("Negotiated ciphersuite: ", ciphersuite_name) - while not response_complete: + var read_fds = fd_set() + var write_fds = fd_set() + + while True: read_fds.clear_all() write_fds.clear_all() - read_fds.set(sockfd) - write_fds.set(sockfd) - - var timeout = timeval(5, 0) # 5 seconds timeout - - print("Going into select") + + if rustls_connection_wants_read(rustls_connection): + read_fds.set(sockfd) + if rustls_connection_wants_write(rustls_connection): + write_fds.set(sockfd) + + if not rustls_connection_wants_read(rustls_connection) and not rustls_connection_wants_write(rustls_connection): + print("Rustls wants neither read nor write. Drain plaintext and exit") + break + var select_result = select(sockfd + 1, UnsafePointer.address_of(read_fds), UnsafePointer.address_of(write_fds), UnsafePointer[fd_set](), - UnsafePointer.address_of(timeout)) - print("Select result: ", select_result) + UnsafePointer[timeval]()) if select_result == -1: print("Select error: ", select_result) - break - elif select_result == 0: - print("Select timeout") - continue - - # if read_fds.is_set(sockfd): - print("Socket is ready for reading") - var conn_ptr = UnsafePointer[ConnData].address_of(conn) - var read_buf = SliceBytes(UnsafePointer[UInt8](), 4096) - var bytes_read = rustls_connection_read_tls(rustls_connection, read_buf.data, read_buf.len, UnsafePointer.address_of(n)) - print("Bytes read: ", bytes_read) - print("Data: ", read_buf.data) - if bytes_read == 7000: - var plaintext_buf = SliceBytes(UnsafePointer[UInt8](), 4096) - var plaintext_bytes_read = rustls_connection_read_tls(rustls_connection, plaintext_buf.data, plaintext_buf.len, UnsafePointer.address_of(n)) - if plaintext_bytes_read == 7000 and n > 0: - print("Read ", n, " plaintext bytes") - print("Data: ", String(plaintext_buf.data, n)) - if String(plaintext_buf.data, n).find("\r\n\r\n") != -1: + return ret + + if read_fds.is_set(sockfd): + while True: + var read_result = do_read(conn, rustls_connection) + if read_result == DEMO_AGAIN: + break + elif read_result == DEMO_EOF: response_complete = True - elif plaintext_bytes_read != 7001: - print("Error reading plaintext from connection") - break - elif bytes_read != 7001: # Not RUSTLS_RESULT_WOULD_BLOCK - print("Error reading TLS data from connection") - break - + break + elif read_result != DEMO_OK: + return ret + + if headers_len == 0: + var body_start = String(conn.data.data[]).find("\r\n\r\n") + if body_start != -1: + headers_len = body_start + print("Body began at ", headers_len) + var content_length_str = String(conn.data.data[]).find("Content-Length: ") + if content_length_str == -1: + print("Content length header not found") + return ret + content_length = int(String(conn.data.data[])[content_length_str + 16:]) + print("Content length ", content_length) + + if headers_len != 0 and conn.data.len >= headers_len + content_length: + response_complete = True + break + if write_fds.is_set(sockfd): - print("Socket is ready for writing") - # Perform write operation if needed - pass + while True: + var conn_ptr = UnsafePointer[ConnData].address_of(conn) + var write_result = rustls_connection_write_tls(rustls_connection, write_cb, conn_ptr, n) + if write_result != 0: + print("Error in rustls_connection_write_tls: ", write_result) + return ret + if write_result == DEMO_AGAIN: + break + elif n == 0: + print("Write returned 0 from rustls_connection_write_tls") + break + + if response_complete: + break return 7000 -alias DEMO_OK = 0 -alias DEMO_AGAIN = 1 -alias DEMO_EOF = 2 -alias DEMO_ERROR = 3 - alias ReadCallback = fn(UnsafePointer[UInt8], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> Int +fn write_cb(buf: UnsafePointer[UInt8], len: Int) -> RustlsResult: + print("Write bytes: ", buf) + return 0 + fn read_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int: var conn = userdata.bitcast[ConnData]()[] var signed_n = read(conn.fd, buf, len) @@ -248,7 +189,7 @@ fn read_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, # out_n.store(signed_n) return 0 -fn do_read(conn: UnsafePointer[ConnData], rconn: UnsafePointer[Connection]) raises -> Int: +fn do_read(conn: ConnData, rconn: UnsafePointer[Connection]) raises -> Int: """ Do one read from the socket, process all resulting bytes into the rustls_connection, then copy all plaintext bytes from the session to stdout. @@ -264,7 +205,7 @@ fn do_read(conn: UnsafePointer[ConnData], rconn: UnsafePointer[Connection]) rais var n_ptr = UnsafePointer.address_of(n) print("going into rustls_connection_read_tls") - err = rustls_connection_read_tls(rconn, conn[].data.data, conn[].data.len, n_ptr) + err = rustls_connection_read_tls(rconn, conn.data.data, conn.data.len, n_ptr) print("coming out of rustls_connection_read_tls") if err == EAGAIN or err == EWOULDBLOCK: print("Reading from socket: EAGAIN or EWOULDBLOCK: {strerror(errno())}") @@ -296,273 +237,17 @@ fn do_read(conn: UnsafePointer[ConnData], rconn: UnsafePointer[Connection]) rais return DEMO_EOF -# fn read_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int: -# let conn = userdata.bitcast[ConnData]() -# let signed_n = read(conn.fd, buf, len) -# if signed_n < 0: -# out_n.store(0) -# return errno() -# out_n.store(signed_n) -# return 0 - fn print_error(context: String, result: UInt32): print("Error in {context}: {rustls_error(result)}") fn rustls_error(result: UInt32) -> String: # Implement this function to return a string representation of the rustls error - # You might need to use the rustls API to get the error string return "Rustls error code: {result}" fn strerror(err: Int) -> String: # Implement this function to return a string representation of the system error - # You might need to use a system API or a lookup table return "System error code: {err}" -# fn drain_plaintext(conn: UnsafePointer[ConnData]) raises -> RustlsResult: -# var result = copy_plaintext_to_buffer(conn) -# if result != DEMO_OK and result != DEMO_EOF: -# return 1 -# print(f"Writing {conn.data.len} bytes to stdout") -# print(conn.data.data.decode()) -# return 0 - -# fn copy_plaintext_to_buffer(conn: UnsafePointer[ConnData]) raises -> RustlsResult: -# var buf = String() -# var total_read: Int = 0 - -# while True: -# var n: Int = 0 -# var result = rustls_connection_read(conn.rconn, buf.as_bytes(), buf.length(), n.address()) - -# if result == 7000: -# if n > 0: -# conn.data.append(buf[:n]) -# total_read += n -# else: -# break # No more data to read -# elif result == RUSTLS_RESULT_WOULD_BLOCK: -# break # Would block, try again later -# else: -# return result # Error occurred - -# return RUSTLS_RESULT_OK - -# { -# int sockfd = conn->fd; -# int ret = 1; -# int err = 1; -# unsigned result = 1; -# char buf[2048]; -# fd_set read_fds; -# fd_set write_fds; -# size_t n = 0; -# const char *body; -# const char *content_length_str; -# const char *content_length_end; -# unsigned long content_length = 0; -# size_t headers_len = 0; -# struct rustls_str version; -# int ciphersuite_id; -# struct rustls_str ciphersuite_name; - -# version = rustls_version(); -# memset(buf, '\0', sizeof(buf)); -# snprintf(buf, -# sizeof(buf), -# "GET %s HTTP/1.1\r\n" -# "Host: %s\r\n" -# "User-Agent: %.*s\r\n" -# "Accept: carcinization/inevitable, text/html\r\n" -# "Connection: close\r\n" -# "\r\n", -# path, -# hostname, -# (int)version.len, -# version.data); -# /* First we write the plaintext - the data that we want rustls to encrypt for -# * us- to the rustls connection. */ -# result = rustls_connection_write(rconn, (uint8_t *)buf, strlen(buf), &n); -# if(result != RUSTLS_RESULT_OK) { -# LOG_SIMPLE("error writing plaintext bytes to rustls_connection"); -# goto cleanup; -# } -# if(n != strlen(buf)) { -# LOG_SIMPLE("short write writing plaintext bytes to rustls_connection"); -# goto cleanup; -# } - -# ciphersuite_id = rustls_connection_get_negotiated_ciphersuite(rconn); -# ciphersuite_name = rustls_connection_get_negotiated_ciphersuite_name(rconn); -# LOG("negotiated ciphersuite: %.*s (%#x)", -# (int)ciphersuite_name.len, -# ciphersuite_name.data, -# ciphersuite_id); - -# for(;;) { -# FD_ZERO(&read_fds); -# /* These two calls just inspect the state of the connection - if it's time -# for us to write more, or to read more. */ -# if(rustls_connection_wants_read(rconn)) { -# FD_SET(sockfd, &read_fds); -# } -# FD_ZERO(&write_fds); -# if(rustls_connection_wants_write(rconn)) { -# FD_SET(sockfd, &write_fds); -# } - -# if(!rustls_connection_wants_read(rconn) && -# !rustls_connection_wants_write(rconn)) { -# LOG_SIMPLE( -# "rustls wants neither read nor write. drain plaintext and exit"); -# goto drain_plaintext; -# } - -# int select_result = select(sockfd + 1, &read_fds, &write_fds, NULL, NULL); -# if(select_result == -1) { -# perror("client: select"); -# goto cleanup; -# } - -# if(FD_ISSET(sockfd, &read_fds)) { -# /* Read all bytes until we get EAGAIN. Then loop again to wind up in -# select awaiting the next bit of data. */ -# for(;;) { -# result = do_read(conn, rconn); -# if(result == DEMO_AGAIN) { -# break; -# } -# else if(result == DEMO_EOF) { -# goto drain_plaintext; -# } -# else if(result != DEMO_OK) { -# goto cleanup; -# } -# if(headers_len == 0) { -# body = body_beginning(&conn->data); -# if(body != NULL) { -# headers_len = body - conn->data.data; -# LOG("body began at %zu", headers_len); -# content_length_str = get_first_header_value(conn->data.data, -# headers_len, -# CONTENT_LENGTH, -# strlen(CONTENT_LENGTH), -# &n); -# if(content_length_str == NULL) { -# LOG_SIMPLE("content length header not found"); -# goto cleanup; -# } -# content_length = -# strtoul(content_length_str, (char **)&content_length_end, 10); -# if(content_length_end == content_length_str) { -# LOG("invalid Content-Length '%.*s'", (int)n, content_length_str); -# goto cleanup; -# } -# LOG("content length %lu", content_length); -# } -# } -# if(headers_len != 0 && -# conn->data.len >= headers_len + content_length) { -# goto drain_plaintext; -# } -# } -# } -# if(FD_ISSET(sockfd, &write_fds)) { -# for(;;) { -# /* This invokes rustls_connection_write_tls. We pass a callback to -# * that function. Rustls will pass a buffer to that callback with -# * encrypted bytes, that we will write to `conn`. */ -# err = write_tls(rconn, conn, &n); -# if(err != 0) { -# LOG("error in rustls_connection_write_tls: errno %d", err); -# goto cleanup; -# } -# if(result == DEMO_AGAIN) { -# break; -# } -# else if(n == 0) { -# LOG_SIMPLE("write returned 0 from rustls_connection_write_tls"); -# break; -# } -# } -# } -# } - -# LOG_SIMPLE("send_request_and_read_response: loop fell through"); - -# drain_plaintext: -# result = copy_plaintext_to_buffer(conn); -# if(result != DEMO_OK && result != DEMO_EOF) { -# goto cleanup; -# } -# LOG("writing %zu bytes to stdout", conn->data.len); -# if(write(STDOUT_FILENO, conn->data.data, conn->data.len) < 0) { -# LOG_SIMPLE("error writing to stderr"); -# goto cleanup; -# } -# ret = 0; - -# cleanup: -# if(sockfd > 0) { -# close(sockfd); -# } -# return ret; -# } - - - -# int -# do_request(const struct rustls_client_config *client_config, -# const char *hostname, const char *port, -# const char *path) // NOLINT(bugprone-easily-swappable-parameters) -# { -# struct rustls_connection *rconn = NULL; -# struct conndata *conn = NULL; -# int ret = 1; -# int sockfd = make_conn(hostname, port); -# if(sockfd < 0) { -# // No perror because make_conn printed error already. -# goto cleanup; -# } - -# rustls_result result = -# rustls_client_connection_new(client_config, hostname, &rconn); -# if(result != RUSTLS_RESULT_OK) { -# print_error("client_connection_new", result); -# goto cleanup; -# } - -# conn = calloc(1, sizeof(struct conndata)); -# if(conn == NULL) { -# goto cleanup; -# } -# conn->rconn = rconn; -# conn->fd = sockfd; -# conn->verify_arg = "verify_arg"; - -# rustls_connection_set_userdata(rconn, conn); -# rustls_connection_set_log_callback(rconn, log_cb); - -# ret = send_request_and_read_response(conn, rconn, hostname, path); -# if(ret != RUSTLS_RESULT_OK) { -# goto cleanup; -# } - -# ret = 0; - -# cleanup: -# rustls_connection_free(rconn); -# if(sockfd > 0) { -# close(sockfd); -# } -# if(conn != NULL) { -# if(conn->data.data != NULL) { -# free(conn->data.data); -# } -# free(conn); -# } -# return ret; -# } - fn main(): var cert_path = "/etc/ssl/cert.pem" @@ -620,24 +305,3 @@ fn main(): except e: print("Error: ", e) exit(1) - - # var client_config = new_client_config() - # var rconn = UnsafePointer[Connection]() - # var server: String = "www.google.com" - # result = new_client_connection(client_config, server.unsafe_ptr(), UnsafePointer.address_of(rconn)) - # if result != 7000: - # print("Failed to connect to server, Result: ", result) - # exit(1) - - -# struct rustls_connection *rconn = NULL; -# struct conndata *conn = NULL; -# int ret = 1; -# int sockfd = make_conn(hostname, port); -# if(sockfd < 0) { -# // No perror because make_conn printed error already. -# goto cleanup; -# } - -# rustls_result result = -# rustls_client_connection_new(client_config, hostname, &rconn); From d70e4104f15514ecef1238821923bcc68d8cb593 Mon Sep 17 00:00:00 2001 From: Val Date: Wed, 18 Sep 2024 19:19:06 +0200 Subject: [PATCH 12/18] wip write callback --- src/rustls/__init__.mojo | 5 +++-- src/test.mojo | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index a65ec70..72eefcc 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -180,10 +180,11 @@ fn rustls_connection_read_tls( fn (UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> RustlsResult ]("rustls_connection_read_tls")(conn, buf, len, read) +# write_cb signature: userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int] fn rustls_connection_write_tls( - rconn: UnsafePointer[Connection], write_cb: fn (buf: UnsafePointer[UInt8], len: Int) -> RustlsResult, conn: UnsafePointer[ConnData], n: Int) -> RustlsResult: + rconn: UnsafePointer[Connection], write_cb: fn (userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int, conn: UnsafePointer[ConnData], n: Int) -> RustlsResult: return _rustls.get_function[ - fn (UnsafePointer[Connection], fn (buf: UnsafePointer[UInt8], len: Int) -> RustlsResult, UnsafePointer[ConnData], Int) -> RustlsResult + fn (UnsafePointer[Connection], fn (userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int, UnsafePointer[ConnData], Int) -> RustlsResult ]("rustls_connection_write_tls")(rconn, write_cb, conn, n) fn rustls_connection_wants_read(conn: UnsafePointer[Connection]) -> Bool: diff --git a/src/test.mojo b/src/test.mojo index 930bd56..e9cba6a 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -35,7 +35,7 @@ from memory.memory import memset from sys.info import sizeof from sys.ffi import external_call from lightbug_http.sys.net import create_connection -from libc import fd_set, AF_INET, SOCK_STREAM, AI_PASSIVE, EAGAIN, EWOULDBLOCK, to_char_ptr, socket, select, timeval, read +from libc import fd_set, AF_INET, SOCK_STREAM, AI_PASSIVE, EAGAIN, EWOULDBLOCK, to_char_ptr, socket, select, timeval, read, send alias DEMO_OK = 0 alias DEMO_AGAIN = 1 @@ -172,10 +172,14 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint return 7000 -alias ReadCallback = fn(UnsafePointer[UInt8], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> Int - -fn write_cb(buf: UnsafePointer[UInt8], len: Int) -> RustlsResult: - print("Write bytes: ", buf) +fn write_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int: + var conn = userdata.bitcast[ConnData]()[] + print("Writing to socket: ", buf) + var signed_n = send(conn.fd, buf, len, 0) + if signed_n < 0: + print("Error writing to socket, signed_n: ", signed_n) + return 1 + out_n[0] = signed_n return 0 fn read_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int: @@ -183,10 +187,9 @@ fn read_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, var signed_n = read(conn.fd, buf, len) print("Read bytes: ", buf) if signed_n < 0: - # out_n.store(0) + out_n[0] = 0 print("Error reading from socket") - # return errno() - # out_n.store(signed_n) + out_n[0] = signed_n.__int__() return 0 fn do_read(conn: ConnData, rconn: UnsafePointer[Connection]) raises -> Int: From 5532b1152ba2f202d503b7db542cb7c6169faae2 Mon Sep 17 00:00:00 2001 From: Val Date: Wed, 18 Sep 2024 19:26:08 +0200 Subject: [PATCH 13/18] debugging write cb --- src/test.mojo | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test.mojo b/src/test.mojo index e9cba6a..e218330 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -79,7 +79,6 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint var content_length: Int = 0 var response_complete = False - # Prepare the HTTP request var headers = "GET " + path + " HTTP/1.1\r\n" + "Host: " + hostname + "\r\n" + "User-Agent: Mojo\r\n" + @@ -174,8 +173,9 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint fn write_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int: var conn = userdata.bitcast[ConnData]()[] - print("Writing to socket: ", buf) - var signed_n = send(conn.fd, buf, len, 0) + var buf_str = buf[].__str__() + print("Writing to socket: ", buf_str) + var signed_n = send(conn.fd, buf_str.unsafe_ptr(), len, 0) if signed_n < 0: print("Error writing to socket, signed_n: ", signed_n) return 1 From e7dcd10874cc9a386ac3032ed1d6fcc9e373aced Mon Sep 17 00:00:00 2001 From: Val Date: Thu, 19 Sep 2024 22:27:09 +0200 Subject: [PATCH 14/18] add logs --- src/rustls/__init__.mojo | 4 +- src/test.mojo | 104 ++++++++++++++++++++++++--------------- 2 files changed, 66 insertions(+), 42 deletions(-) diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index 72eefcc..743589d 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -180,7 +180,6 @@ fn rustls_connection_read_tls( fn (UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> RustlsResult ]("rustls_connection_read_tls")(conn, buf, len, read) -# write_cb signature: userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int] fn rustls_connection_write_tls( rconn: UnsafePointer[Connection], write_cb: fn (userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int, conn: UnsafePointer[ConnData], n: Int) -> RustlsResult: return _rustls.get_function[ @@ -193,6 +192,9 @@ fn rustls_connection_wants_read(conn: UnsafePointer[Connection]) -> Bool: fn rustls_connection_wants_write(conn: UnsafePointer[Connection]) -> Bool: return _rustls.get_function[fn (UnsafePointer[Connection]) -> Bool]("rustls_connection_wants_write")(conn) +fn rustls_connection_process_new_packets(conn: UnsafePointer[Connection]) -> RustlsResult: + return _rustls.get_function[fn (UnsafePointer[Connection]) -> RustlsResult]("rustls_connection_process_new_packets")(conn) + fn new_client_config_builder() -> UnsafePointer[ClientConfigBuilder]: return _rustls.get_function[fn () -> UnsafePointer[ClientConfigBuilder]]("rustls_client_config_builder_new")() diff --git a/src/test.mojo b/src/test.mojo index e218330..158f99f 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -28,6 +28,7 @@ from rustls import ( rustls_connection_wants_read, rustls_connection_wants_write, rustls_connection_write_tls, + rustls_connection_process_new_packets, ) import os from sys import exit @@ -70,6 +71,7 @@ fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: St fn log_cb(level: Int, message: String): print("Log level:", level, "Message:", message) + fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePointer[Connection], hostname: String, path: String) raises -> RustlsResult: var sockfd = conn.fd var ret: RustlsResult = 1 @@ -108,8 +110,10 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint write_fds.clear_all() if rustls_connection_wants_read(rustls_connection): + print("Rustls wants read") read_fds.set(sockfd) if rustls_connection_wants_write(rustls_connection): + print("Rustls wants write") write_fds.set(sockfd) if not rustls_connection_wants_read(rustls_connection) and not rustls_connection_wants_write(rustls_connection): @@ -125,9 +129,33 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint if select_result == -1: print("Select error: ", select_result) return ret + print("Select result:", select_result) + print("Read fd set:", read_fds.is_set(sockfd)) + print("Write fd set:", write_fds.is_set(sockfd)) + + var counter = 0 + + + if write_fds.is_set(sockfd): + while True: + var conn_ptr = UnsafePointer[ConnData].address_of(conn) + counter += 1 + var write_result = rustls_connection_write_tls(rustls_connection, write_cb, conn_ptr, n) + if write_result != 7000: + print("Error in rustls_connection_write_tls: ", write_result) + return ret + if write_result == DEMO_AGAIN: + break + elif n == 0: + print("Write returned 0 from rustls_connection_write_tls") + break + if counter > 2: + print("Counter exceeded 10") + break - if read_fds.is_set(sockfd): + if read_fds.is_set(sockfd) or True: while True: + print("Reading from socket") var read_result = do_read(conn, rustls_connection) if read_result == DEMO_AGAIN: break @@ -153,19 +181,6 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint response_complete = True break - if write_fds.is_set(sockfd): - while True: - var conn_ptr = UnsafePointer[ConnData].address_of(conn) - var write_result = rustls_connection_write_tls(rustls_connection, write_cb, conn_ptr, n) - if write_result != 0: - print("Error in rustls_connection_write_tls: ", write_result) - return ret - if write_result == DEMO_AGAIN: - break - elif n == 0: - print("Write returned 0 from rustls_connection_write_tls") - break - if response_complete: break @@ -173,17 +188,28 @@ fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePoint fn write_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int: var conn = userdata.bitcast[ConnData]()[] + print("Writing to socket, length:", len) + print("Record type:", buf[0]) + print("TLS version:", buf[1], buf[2]) + print("Length:", (buf[3].__int__() << 8) | buf[4].__int__()) + if len > 5: + print("Handshake type:", buf[5]) + print("Full data:", buf) var buf_str = buf[].__str__() print("Writing to socket: ", buf_str) var signed_n = send(conn.fd, buf_str.unsafe_ptr(), len, 0) + # var signed_n = send(conn.fd, buf, len, 0) if signed_n < 0: - print("Error writing to socket, signed_n: ", signed_n) - return 1 + print("Error writing to socket, signed_n:", signed_n) + return 0 out_n[0] = signed_n - return 0 + return 7000 + fn read_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int: + print("we are in read_cb") var conn = userdata.bitcast[ConnData]()[] + print("Reading from socket") var signed_n = read(conn.fd, buf, len) print("Read bytes: ", buf) if signed_n < 0: @@ -210,46 +236,42 @@ fn do_read(conn: ConnData, rconn: UnsafePointer[Connection]) raises -> Int: print("going into rustls_connection_read_tls") err = rustls_connection_read_tls(rconn, conn.data.data, conn.data.len, n_ptr) print("coming out of rustls_connection_read_tls") - if err == EAGAIN or err == EWOULDBLOCK: - print("Reading from socket: EAGAIN or EWOULDBLOCK: {strerror(errno())}") - return DEMO_AGAIN - elif err != 0: - print("Reading from socket: errno {err}") - return DEMO_ERROR - - # result = rustls_connection_process_new_packets(rconn) - # if result != 7000: - # print_error("in process_new_packets", result) + # if err == EAGAIN or err == EWOULDBLOCK: + # print("Reading from socket: EAGAIN or EWOULDBLOCK: ", err) + # return DEMO_AGAIN + # elif err != 0: + # print("Reading from socket: err ", err) # return DEMO_ERROR - # result = copy_plaintext_to_buffer(conn) - # if result != DEMO_EOF: - # return result + result = rustls_connection_process_new_packets(rconn) + if result != 7000: + print_error("in process_new_packets", result) + return DEMO_ERROR # If we got an EOF on the plaintext stream (peer closed connection cleanly), # verify that the sender then closed the TCP connection. - # var buf = Bytes(1) - # let signed_n = read(conn.fd, buf.data(), 1) + var buf = SliceBytes(UnsafePointer[UInt8](), 1) + var signed_n = read(conn.fd, buf.data, 1) - # if signed_n > 0: - # print(f"Error: read returned {signed_n} bytes after receiving close_notify") - # return DEMO_ERROR - # elif signed_n < 0 and errno() != EWOULDBLOCK: - # print(f"Wrong error after receiving close_notify: {strerror(errno())}") - # return DEMO_ERROR + if signed_n > 0: + print("Error: read returned ", signed_n, " bytes after receiving close_notify") + return DEMO_ERROR + elif signed_n < 0: + print("Wrong error after receiving close_notify: ", signed_n) + return DEMO_ERROR return DEMO_EOF fn print_error(context: String, result: UInt32): - print("Error in {context}: {rustls_error(result)}") + print("Error in ", context, ": ", result) fn rustls_error(result: UInt32) -> String: # Implement this function to return a string representation of the rustls error - return "Rustls error code: {result}" + return "Rustls error code: " + result.__str__() fn strerror(err: Int) -> String: # Implement this function to return a string representation of the system error - return "System error code: {err}" + return "System error code: " + err.__str__() fn main(): From 482c697be8daaa181f7171fe764ba37d3ed7c25c Mon Sep 17 00:00:00 2001 From: Lukas Hermann Date: Sat, 21 Sep 2024 14:30:33 -0700 Subject: [PATCH 15/18] . Signed-off-by: Lukas Hermann --- magic.lock | 2568 ++++++++++++- mojoproject.toml | 6 +- .../work/LICENSE | 21 + .../work/build_env.sh | 52 + .../work/conda_build.sh | 13 + .../work/rustls-ffi | 1 + .../work/LICENSE | 21 + .../work/build_env.sh | 52 + .../work/conda_build.sh | 13 + .../work/rustls-ffi | 1 + .../work/LICENSE | 21 + .../work/build_env.sh | 53 + .../work/conda_build.sh | 13 + .../work/rustls-ffi | 1 + .../work/LICENSE | 21 + .../work/build_env.sh | 53 + .../work/conda_build.sh | 13 + .../work/rustls-ffi | 1 + .../work/LICENSE | 21 + .../work/LICENSE | 21 + .../work/build_env.sh | 52 + .../work/conda_build.sh | 15 + .../work/rustls-ffi | 1 + .../work/LICENSE | 21 + .../work/build_env.sh | 52 + .../work/conda_build.sh | 15 + .../work/rustls-ffi | 1 + output/noarch/repodata.json | 8 + .../mojo-rustls-ffi-0.1.0-h60d57d3_0.conda | Bin 0 -> 1200671 bytes output/osx-arm64/repodata.json | 24 + src/libc.mojo | 73 +- src/rustls/__init__.mojo | 872 ++++- src/rustls/_cffi.mojo | 3301 +++++++++++++++++ src/test.mojo | 636 ++-- 34 files changed, 7400 insertions(+), 637 deletions(-) create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/LICENSE create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/build_env.sh create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/conda_build.sh create mode 160000 output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/rustls-ffi create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/LICENSE create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/build_env.sh create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/conda_build.sh create mode 160000 output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/rustls-ffi create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/LICENSE create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/build_env.sh create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/conda_build.sh create mode 160000 output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/rustls-ffi create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/LICENSE create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/build_env.sh create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/conda_build.sh create mode 160000 output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/rustls-ffi create mode 100644 output/bld/rattler-build_mojo-rustls-ffi_1726516439/work/LICENSE create mode 100644 output/bld/rattler-build_mojo-rustls_1726682138/work/LICENSE create mode 100644 output/bld/rattler-build_mojo-rustls_1726682138/work/build_env.sh create mode 100644 output/bld/rattler-build_mojo-rustls_1726682138/work/conda_build.sh create mode 160000 output/bld/rattler-build_mojo-rustls_1726682138/work/rustls-ffi create mode 100644 output/bld/rattler-build_mojo-rustls_1726683444/work/LICENSE create mode 100644 output/bld/rattler-build_mojo-rustls_1726683444/work/build_env.sh create mode 100644 output/bld/rattler-build_mojo-rustls_1726683444/work/conda_build.sh create mode 160000 output/bld/rattler-build_mojo-rustls_1726683444/work/rustls-ffi create mode 100644 output/noarch/repodata.json create mode 100644 output/osx-arm64/mojo-rustls-ffi-0.1.0-h60d57d3_0.conda create mode 100644 output/osx-arm64/repodata.json create mode 100644 src/rustls/_cffi.mojo diff --git a/magic.lock b/magic.lock index 8b5f015..6ea35b8 100644 --- a/magic.lock +++ b/magic.lock @@ -3,61 +3,639 @@ environments: default: channels: - url: https://conda.anaconda.org/conda-forge/ - - url: https://conda.modular.com/max/ + - url: https://conda.modular.com/max-nightly/ - url: https://repo.prefix.dev/mojo-community/ packages: osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.10.5-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.31-hc27b277_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.7.4-h41dd001_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.28-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.19-h41dd001_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.4.3-h40a8fc1_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.8.10-hf5a2c8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.14.18-hc3cb426_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.10.5-h3acc7b9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.6.6-hd16c091_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.19-h41dd001_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.20-h41dd001_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.28.3-he35ab64_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.407-h0455a66_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.13.0-hd01fc5c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.8.0-h13ea094_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.12.0-hfde595f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.7.0-hcf3b6fd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.11.0-h082e32e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.33.1-hd74edd7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/datasets-2.14.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.6.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.2.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.115.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.4.1-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://repo.prefix.dev/mojo-community/osx-arm64/gojo-0.1.9-h60d57d3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jupyter_core-5.7.2-py312h81bd7bf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-23_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-23_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-18.1.8-h3ed4263_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240116.2-cxx17_h00cdb27_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-17.0.0-hc6a7651_16_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-17.0.0-hf9b8971_16_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-17.0.0-hf9b8971_16_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-17.0.0-hbf8b706_16_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-24_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-24_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.0-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-23_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.29.0-hfa33a2f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.29.0-h90fd6fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.62.2-h9c18a4f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-24_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.27-openmp_h517c56d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-17.0.0-hf0ba9ef_16_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.25.3-hbfab5d5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2023.09.01-h7b2c953_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.20.0-h64651cc_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.7-h01dff8b_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-hfb2fe0b_1.conda - conda: https://repo.prefix.dev/mojo-community/osx-arm64/lightbug_http-0.1.3-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-18.1.8-hde57baf_1.conda - - conda: https://conda.modular.com/max/noarch/max-24.5.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/max-core-24.5.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/max-python-24.5.0-3.12release.conda - - conda: https://conda.modular.com/max/noarch/mblack-24.5.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-jupyter-24.5.0-release.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-2.1.5-py312h024a12e_1.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-24.6.0.dev2024092105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-24.6.0.dev2024092105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-24.6.0.dev2024092105-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-24.6.0.dev2024092105-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-24.6.0.dev2024092105-release.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312h88e9dfa_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multiprocess-0.70.15-py312h02f2b3b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.2-h75dedd0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.2-py312h8ae5369_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-17.0.0-py312ha814d7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-17.0.0-py312he20ac61_1_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.23.4-py312he431725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.6-h739c21a_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-xxhash-3.5.0-py312h024a12e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h024a12e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py312hc6335d2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.09.01-h4cba328_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2024.9.11-py312h024a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.8.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/safetensors-0.4.5-py312he431725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-0.1.3-h60d57d3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-hd02b534_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sse-starlette-2.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.38.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tokenizers-0.19.1-py312hfbf4c0d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.1-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/transformers-4.44.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.12.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.12.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.12.5-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvicorn-0.30.6-py312h81bd7bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xxhash-0.8.2-hb547adb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.9.4-py312h024a12e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h64debc3_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda packages: +- kind: conda + name: aiohappyeyeballs + version: 2.4.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.4.0-pyhd8ed1ab_0.conda + sha256: 5d318408a7ad62c1dbff90060795287f1fd3bdbec13b733bc82f1fadb2c9244e + md5: 0482cd2217e27b3ce47676d570ac3d45 + depends: + - python >=3.8.0 + license: PSF-2.0 + license_family: PSF + size: 17032 + timestamp: 1724167966661 +- kind: conda + name: aiohttp + version: 3.10.5 + build: py312h024a12e_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.10.5-py312h024a12e_1.conda + sha256: ab3a9e482c1e71af35edcb836d52a1a7891e938707a8c4bcef675b620405b6ab + md5: 63ccb4725a185e31d835fd4894de718e + depends: + - __osx >=11.0 + - aiohappyeyeballs >=2.3.0 + - aiosignal >=1.1.2 + - attrs >=17.3.0 + - frozenlist >=1.1.1 + - multidict >=4.5,<7.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - yarl >=1.0,<1.9.5 + license: MIT AND Apache-2.0 + license_family: Apache + size: 798153 + timestamp: 1726063040318 +- kind: conda + name: aiosignal + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2 + sha256: 575c742e14c86575986dc867463582a970463da50b77264cdf54df74f5563783 + md5: d1e1eb7e21a9e2c74279d87dafb68156 + depends: + - frozenlist >=1.1.0 + - python >=3.7 + license: Apache-2.0 + license_family: APACHE + size: 12730 + timestamp: 1667935912504 +- kind: conda + name: annotated-types + version: 0.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda + sha256: 668f0825b6c18e4012ca24a0070562b6ec801ebc7008228a428eb52b4038873f + md5: 7e9f4612544c8edbfd6afad17f1bd045 + depends: + - python >=3.7 + - typing-extensions >=4.0.0 + license: MIT + license_family: MIT + size: 18235 + timestamp: 1716290348421 +- kind: conda + name: anyio + version: 4.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.5.0-pyhd8ed1ab_0.conda + sha256: 6869852cb88d527e7b4c2999cd4cb36eb921d7cde6c75a26a2224a593f666515 + md5: c720e5c85c349c5cbc99d9dfc4b200f8 + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.8 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - trio >=0.26.1 + - uvloop >=0.21.0b1 + license: MIT + license_family: MIT + size: 107387 + timestamp: 1726753494173 +- kind: conda + name: attrs + version: 24.2.0 + build: pyh71513ae_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + sha256: 28dba85a7e0f7fb57d7315e13f603d1e41b83c5b88aa2a602596b52c833a2ff8 + md5: 6732fa52eb8e66e5afeb32db8701a791 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 56048 + timestamp: 1722977241383 +- kind: conda + name: aws-c-auth + version: 0.7.31 + build: hc27b277_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.31-hc27b277_0.conda + sha256: 5a512985e65a0b9b60e54c5aa01bb8b3c4573663b32753d3e63da43eccf638f3 + md5: f22f3582756570df9b0025b2b373b118 + depends: + - __osx >=11.0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.18,<0.14.19.0a0 + - aws-c-sdkutils >=0.1.19,<0.1.20.0a0 + license: Apache-2.0 + license_family: Apache + size: 92974 + timestamp: 1726544484188 +- kind: conda + name: aws-c-cal + version: 0.7.4 + build: h41dd001_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.7.4-h41dd001_1.conda + sha256: 2167b44bc879fb9cb7aaf2ca8418c2f8764c82c8732a41c08616e3f70fc92224 + md5: 3f2c1743ed973b58fd187b0c31861dd8 + depends: + - __osx >=11.0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + - openssl >=3.3.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 39881 + timestamp: 1725829996108 +- kind: conda + name: aws-c-common + version: 0.9.28 + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.28-hd74edd7_0.conda + sha256: 4081ada22148dc500765aac106ed224829810fd5e5d6f942a842b0a40f53783e + md5: 8dc8711c903ab57ead8ce99b65625a95 + depends: + - __osx >=11.0 + license: Apache-2.0 + license_family: Apache + size: 220787 + timestamp: 1725670124570 +- kind: conda + name: aws-c-compression + version: 0.2.19 + build: h41dd001_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.19-h41dd001_1.conda + sha256: d0a4362beb22aa4da126aab5ddadcb4bbde5032f407d7e4b03969a3d7e5f9cb2 + md5: 98e9d9c62300fd87bee44d2a63792ee5 + depends: + - __osx >=11.0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + license: Apache-2.0 + license_family: Apache + size: 17974 + timestamp: 1725830013702 +- kind: conda + name: aws-c-event-stream + version: 0.4.3 + build: h40a8fc1_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.4.3-h40a8fc1_2.conda + sha256: 63c903dc4b708c0054287dbb5411de62067a181886657a515d96c0e6add173c1 + md5: f3d15e195e0b4dc6db749398eb925ffe + depends: + - __osx >=11.0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-io >=0.14.18,<0.14.19.0a0 + - aws-checksums >=0.1.20,<0.1.21.0a0 + - libcxx >=17 + license: Apache-2.0 + license_family: Apache + size: 46887 + timestamp: 1726327307175 +- kind: conda + name: aws-c-http + version: 0.8.10 + build: hf5a2c8c_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.8.10-hf5a2c8c_0.conda + sha256: dfdec013bf7c2e87c49bc61a4cb8b1e3b8bf21e7f592326e958f0bf224de21b7 + md5: e4ba8aa0fb7dac95b0ea398a3229bf56 + depends: + - __osx >=11.0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-compression >=0.2.19,<0.2.20.0a0 + - aws-c-io >=0.14.18,<0.14.19.0a0 + license: Apache-2.0 + license_family: Apache + size: 152450 + timestamp: 1726469199710 +- kind: conda + name: aws-c-io + version: 0.14.18 + build: hc3cb426_9 + build_number: 9 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.14.18-hc3cb426_9.conda + sha256: 7083e61d4cba364b3757cb6cda11a255ac72bded174ecd58b3e0917a4e26efce + md5: e4bec2ed63b5208393a1e7d23e795665 + depends: + - __osx >=11.0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + license: Apache-2.0 + license_family: Apache + size: 138080 + timestamp: 1725843155224 +- kind: conda + name: aws-c-mqtt + version: 0.10.5 + build: h3acc7b9_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.10.5-h3acc7b9_1.conda + sha256: 2210e91e709820fa0efd8b0e780667ca2890dd73907ddecb11cbbc440e72da30 + md5: 3c0448a35267b5a63dcf3c654e621510 + depends: + - __osx >=11.0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.18,<0.14.19.0a0 + license: Apache-2.0 + license_family: Apache + size: 133466 + timestamp: 1726496322703 +- kind: conda + name: aws-c-s3 + version: 0.6.6 + build: hd16c091_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.6.6-hd16c091_0.conda + sha256: 0b3e2a1e4189faea5edaeb480d9ddcf6878efdc06f66ba6910dee4b4fb386b43 + md5: a4406babaa217f4d965c6cc52ef6520f + depends: + - __osx >=11.0 + - aws-c-auth >=0.7.31,<0.7.32.0a0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.18,<0.14.19.0a0 + - aws-checksums >=0.1.20,<0.1.21.0a0 + license: Apache-2.0 + license_family: Apache + size: 96383 + timestamp: 1726722491079 +- kind: conda + name: aws-c-sdkutils + version: 0.1.19 + build: h41dd001_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.19-h41dd001_3.conda + sha256: b320a08973f22468fd816bb957947369381913ae045d33bd872d03ebabaa355f + md5: 53bd7f3e6723288f531387a892d01635 + depends: + - __osx >=11.0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + license: Apache-2.0 + license_family: Apache + size: 49674 + timestamp: 1725836815498 +- kind: conda + name: aws-checksums + version: 0.1.20 + build: h41dd001_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.20-h41dd001_0.conda + sha256: 23c99722a3b3fac35d78c70731d333e85332e86a0ffce8bf48a9223478d5ffea + md5: 7ba57aa81224959beb6235f46bd05338 + depends: + - __osx >=11.0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + license: Apache-2.0 + license_family: Apache + size: 69868 + timestamp: 1726282042057 +- kind: conda + name: aws-crt-cpp + version: 0.28.3 + build: he35ab64_4 + build_number: 4 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.28.3-he35ab64_4.conda + sha256: e87b5b2659a4c9fe6eb77570c70a554b06b5ff970a5c2079ba470d2594f17184 + md5: 9bd22e14efae34b2c1a64159c5578f69 + depends: + - __osx >=11.0 + - aws-c-auth >=0.7.31,<0.7.32.0a0 + - aws-c-cal >=0.7.4,<0.7.5.0a0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-event-stream >=0.4.3,<0.4.4.0a0 + - aws-c-http >=0.8.10,<0.8.11.0a0 + - aws-c-io >=0.14.18,<0.14.19.0a0 + - aws-c-mqtt >=0.10.5,<0.10.6.0a0 + - aws-c-s3 >=0.6.6,<0.6.7.0a0 + - aws-c-sdkutils >=0.1.19,<0.1.20.0a0 + - libcxx >=17 + license: Apache-2.0 + license_family: Apache + size: 231017 + timestamp: 1726749096844 +- kind: conda + name: aws-sdk-cpp + version: 1.11.407 + build: h0455a66_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.407-h0455a66_0.conda + sha256: a753df57869eb6814113fe4ae71b99965acf4f2fafc9237067ba84bb18b39933 + md5: e189085758424fa0222292c98decb68f + depends: + - __osx >=11.0 + - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-event-stream >=0.4.3,<0.4.4.0a0 + - aws-checksums >=0.1.20,<0.1.21.0a0 + - aws-crt-cpp >=0.28.3,<0.28.4.0a0 + - libcurl >=8.10.0,<9.0a0 + - libcxx >=17 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 2704289 + timestamp: 1726638328407 +- kind: conda + name: azure-core-cpp + version: 1.13.0 + build: hd01fc5c_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.13.0-hd01fc5c_0.conda + sha256: aff4af38416cf7a81c79e5a3b071ce5aa13ec48da28db0312bc1ebe62cf7273d + md5: 2083f6313e623079db6ee67af00e6b27 + depends: + - __osx >=11.0 + - libcurl >=8.8.0,<9.0a0 + - libcxx >=16 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + size: 287922 + timestamp: 1720853302106 +- kind: conda + name: azure-identity-cpp + version: 1.8.0 + build: h13ea094_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.8.0-h13ea094_2.conda + sha256: 11b01715cae19390890f29ebb56d36d895feafd787ba929aa10b6ce712f3f4b9 + md5: 383b72f2ee009992b21f4db08a708510 + depends: + - __osx >=11.0 + - azure-core-cpp >=1.13.0,<1.13.1.0a0 + - libcxx >=16 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + size: 142135 + timestamp: 1721777696118 +- kind: conda + name: azure-storage-blobs-cpp + version: 12.12.0 + build: hfde595f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.12.0-hfde595f_0.conda + sha256: f733f4acedd8bf1705c780e0828f0b83242ae7e72963aef60d12a7c5b3a8640d + md5: f2c935764fdacd0fafc05f975fd347e0 + depends: + - __osx >=11.0 + - azure-core-cpp >=1.13.0,<1.13.1.0a0 + - azure-storage-common-cpp >=12.7.0,<12.7.1.0a0 + - libcxx >=16 + license: MIT + license_family: MIT + size: 419976 + timestamp: 1721865180569 +- kind: conda + name: azure-storage-common-cpp + version: 12.7.0 + build: hcf3b6fd_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.7.0-hcf3b6fd_1.conda + sha256: 3fdf9c0337c48706cffe2e4c761cdea4132fb6dbd1f144d969c28afd903cf256 + md5: df7e01bcf8f3a9bfb0ab06778f915f29 + depends: + - __osx >=11.0 + - azure-core-cpp >=1.13.0,<1.13.1.0a0 + - libcxx >=16 + - libxml2 >=2.12.7,<3.0a0 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + size: 119821 + timestamp: 1721832870493 +- kind: conda + name: azure-storage-files-datalake-cpp + version: 12.11.0 + build: h082e32e_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.11.0-h082e32e_1.conda + sha256: 3c288dc1ae6bff9a1e21ab5196d13ab486850f61ec649a743a87bf9726901abf + md5: 16b05d31f626717668f01c01a970115f + depends: + - __osx >=11.0 + - azure-core-cpp >=1.13.0,<1.13.1.0a0 + - azure-storage-blobs-cpp >=12.12.0,<12.12.1.0a0 + - azure-storage-common-cpp >=12.7.0,<12.7.1.0a0 + - libcxx >=16 + license: MIT + license_family: MIT + size: 189065 + timestamp: 1721925275724 +- kind: conda + name: brotli-python + version: 1.1.0 + build: py312hde4cb15_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda + sha256: 254b411fa78ccc226f42daf606772972466f93e9bc6895eabb4cfda22f5178af + md5: a83c2ef76ccb11bc2349f4f17696b15d + depends: + - __osx >=11.0 + - libcxx >=17 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.1.0 hd74edd7_2 + license: MIT + license_family: MIT + size: 339360 + timestamp: 1725268143995 - kind: conda name: bzip2 version: 1.0.8 @@ -73,6 +651,20 @@ packages: license_family: BSD size: 122909 timestamp: 1720974522888 +- kind: conda + name: c-ares + version: 1.33.1 + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.33.1-hd74edd7_0.conda + sha256: ad29a9cffa0504cb4bf7605963816feff3c7833f36b050e1e71912d09c38e3f6 + md5: 5b69c16ee900aeffcf0103268d708518 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 159389 + timestamp: 1724438175204 - kind: conda name: ca-certificates version: 2024.8.30 @@ -84,6 +676,54 @@ packages: license: ISC size: 158482 timestamp: 1725019034582 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + size: 163752 + timestamp: 1725278204397 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 281206 + timestamp: 1725560813378 +- kind: conda + name: charset-normalizer + version: 3.3.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 + md5: 7f4a9e3fcff3f6356ae99244a014da6a + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 46597 + timestamp: 1698833765762 - kind: conda name: click version: 8.1.7 @@ -100,6 +740,256 @@ packages: license_family: BSD size: 84437 timestamp: 1692311973840 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: datasets + version: 2.14.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/datasets-2.14.4-pyhd8ed1ab_0.conda + sha256: 7e09bd083a609138b780fcc4535924cb96814d2c908a36d4c64a2ba9ee3efe7f + md5: 3e087f072ce03c43a9b60522f5d0ca2f + depends: + - aiohttp + - dill >=0.3.0,<0.3.8 + - fsspec >=2021.11.1 + - huggingface_hub >=0.14.0,<1.0.0 + - importlib-metadata + - multiprocess + - numpy >=1.17 + - packaging + - pandas + - pyarrow >=8.0.0 + - python >=3.8.0 + - python-xxhash + - pyyaml >=5.1 + - requests >=2.19.0 + - tqdm >=4.62.1 + license: Apache-2.0 + license_family: Apache + size: 347303 + timestamp: 1691593908658 +- kind: conda + name: dill + version: 0.3.7 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.7-pyhd8ed1ab_0.conda + sha256: 4ff20c6be028be2825235631c45d9e4a75bca1de65f8840c02dfb28ea0137c45 + md5: 5e4f3466526c52bc9af2d2353a1460bd + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 87553 + timestamp: 1690101185422 +- kind: conda + name: dnspython + version: 2.6.1 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.6.1-pyhd8ed1ab_1.conda + sha256: 0d52c878553e569bccfbd96472c1659fb873bc05e95911b457d35982827626fe + md5: 936e6aadb75534384d11d982fab74b61 + depends: + - python >=3.8.0,<4.0.0 + - sniffio + constrains: + - h2 >=4.1.0 + - httpcore >=1.0.0 + - wmi >=1.5.1 + - trio >=0.23 + - aioquic >=0.9.25 + - cryptography >=42 + - idna >=3.6 + - httpx >=0.26.0 + license: ISC + license_family: OTHER + size: 169434 + timestamp: 1709190848615 +- kind: conda + name: email-validator + version: 2.2.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.2.0-pyhd8ed1ab_0.conda + sha256: ea9e936ed7c49ea6d66fa3554afe31ba311f2a3d5e384d8c38925fda9e37bdb9 + md5: 3067adf57ee658ddf5bfad47b0041ce4 + depends: + - dnspython >=2.0.0 + - idna >=2.0.0 + - python >=3.7 + license: Unlicense + size: 44157 + timestamp: 1718984716782 +- kind: conda + name: email_validator + version: 2.2.0 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.2.0-hd8ed1ab_0.conda + sha256: 2cbbbe9e0f3872214227c27b8b775dd2296a435c90ef50a7cc69934c329b6c65 + md5: 0214a004f7cf5ac28fc10a390dfc47ee + depends: + - email-validator >=2.2.0,<2.2.1.0a0 + license: Unlicense + size: 6690 + timestamp: 1718984720419 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: fastapi + version: 0.115.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.115.0-pyhd8ed1ab_0.conda + sha256: e8ebb76be564d31cdc8223edbcef1519ebe2d44876d95db2a87756ee7c9ea19d + md5: fd920ad2645840f5b7b85ab58eadae73 + depends: + - email_validator >=2.0.0 + - fastapi-cli >=0.0.5 + - httpx >=0.23.0 + - jinja2 >=2.11.2 + - pydantic >=1.7.4,!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0 + - python >=3.8 + - python-multipart >=0.0.7 + - starlette >=0.37.2,<0.39.0 + - typing-extensions >=4.8.0 + - uvicorn >=0.12.0 + license: MIT + license_family: MIT + size: 72998 + timestamp: 1726622903716 +- kind: conda + name: fastapi-cli + version: 0.0.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.5-pyhd8ed1ab_0.conda + sha256: 72a8b8f55420207086cacf15066e234556669b4f3d6f5f8555a93a0013ed9bc9 + md5: d50cd55f356225d8440741bb911c2a78 + depends: + - fastapi + - python >=3.8 + - typer >=0.12.3 + - uvicorn >=0.15.0 + license: MIT + license_family: MIT + size: 14405 + timestamp: 1722597753588 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + size: 17357 + timestamp: 1726613593584 +- kind: conda + name: frozenlist + version: 1.4.1 + build: py312h024a12e_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.4.1-py312h024a12e_1.conda + sha256: 26bd6227520e1463fdc5d58fa8f7a4b13b432c9b549ac1c576057add3ec51524 + md5: 36a854ba6031d1b963db6988a561948b + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + size: 52492 + timestamp: 1725395920922 +- kind: conda + name: fsspec + version: 2024.9.0 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.9.0-pyhff2d567_0.conda + sha256: 8f4e9805b4ec223dea0d99f9e7e57c391d9026455eb9f0d6e0784c5d1a1200dc + md5: ace4329fbff4c69ab0309db6da182987 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 134378 + timestamp: 1725543368393 +- kind: conda + name: gflags + version: 2.2.2 + build: hf9b8971_1005 + build_number: 1005 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda + sha256: fd56ed8a1dab72ab90d8a8929b6f916a6d9220ca297ff077f8f04c5ed3408e20 + md5: 57a511a5905caa37540eb914dfcbf1fb + depends: + - __osx >=11.0 + - libcxx >=17 + license: BSD-3-Clause + license_family: BSD + size: 82090 + timestamp: 1726600145480 +- kind: conda + name: glog + version: 0.7.1 + build: heb240a5_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda + sha256: 9fc77de416953aa959039db72bc41bfa4600ae3ff84acad04a7d0c1ab9552602 + md5: fef68d0a95aa5b84b5c1a4f6f3bf40e1 + depends: + - __osx >=11.0 + - gflags >=2.2.2,<2.3.0a0 + - libcxx >=16 + license: BSD-3-Clause + license_family: BSD + size: 112215 + timestamp: 1718284365403 - kind: conda name: gojo version: 0.1.9 @@ -114,6 +1004,160 @@ packages: license: MIT size: 1009999 timestamp: 1726268309700 +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: httpcore + version: 1.0.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda + sha256: 4025644200eefa0598e4600a66fd4804a57d9fd7054a5c8c45e508fd875e0b84 + md5: a6b9a0158301e697e4d0a36a3d60e133 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + size: 45816 + timestamp: 1711597091407 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: huggingface_hub + version: 0.25.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.25.0-pyhd8ed1ab_0.conda + sha256: 2efe1fd3820e6df0e8737a4d8c417efbc59c1b0dc1a338776b77395bff47f327 + md5: 2fae9e530166882772d25b9104eb677d + depends: + - filelock + - fsspec >=2023.5.0 + - packaging >=20.9 + - python >=3.8 + - pyyaml >=5.1 + - requests + - tqdm >=4.42.1 + - typing-extensions >=3.7.4.3 + license: Apache-2.0 + license_family: APACHE + size: 271263 + timestamp: 1726670559987 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + size: 49837 + timestamp: 1726459583613 - kind: conda name: importlib-metadata version: 8.5.0 @@ -131,31 +1175,32 @@ packages: size: 28646 timestamp: 1726082927916 - kind: conda - name: importlib_metadata - version: 8.5.0 - build: hd8ed1ab_0 + name: jinja2 + version: 3.1.4 + build: pyhd8ed1ab_0 subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda - sha256: 313b8a05211bacd6b15ab2621cb73d7f41ea5c6cae98db53367d47833f03fef1 - md5: 2a92e152208121afadf85a5e1f3a5f4d + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + sha256: 27380d870d42d00350d2d52598cddaf02f9505fb24be09488da0c9b8d1428f2d + md5: 7b86ecb7d3557821c649b3c31e3eb9f2 depends: - - importlib-metadata >=8.5.0,<8.5.1.0a0 - license: Apache-2.0 - license_family: APACHE - size: 9385 - timestamp: 1726082930346 + - markupsafe >=2.0 + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 111565 + timestamp: 1715127275924 - kind: conda name: jupyter_client - version: 8.6.2 + version: 8.6.3 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.2-pyhd8ed1ab_0.conda - sha256: 634f065cdd1d0aacd4bb6848ebf240dcebc8578135d65f4ad4aa42b2276c4e0c - md5: 3cdbb2fa84490e5fd44c9f9806c0d292 + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda + sha256: 4419c85e209a715f551a5c9bead746f29ee9d0fc41e772a76db3868622795671 + md5: a14218cfb29662b4a19ceb04e93e298e depends: - - importlib_metadata >=4.8.3 + - importlib-metadata >=4.8.3 - jupyter_core >=4.12,!=5.0.* - python >=3.8 - python-dateutil >=2.8.2 @@ -164,8 +1209,8 @@ packages: - traitlets >=5.3 license: BSD-3-Clause license_family: BSD - size: 106248 - timestamp: 1716472312833 + size: 106055 + timestamp: 1726610805505 - kind: conda name: jupyter_core version: 5.7.2 @@ -200,63 +1245,262 @@ packages: - openssl >=3.3.1,<4.0a0 license: MIT license_family: MIT - size: 1155530 - timestamp: 1719463474401 + size: 1155530 + timestamp: 1719463474401 +- kind: conda + name: libabseil + version: '20240116.2' + build: cxx17_h00cdb27_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240116.2-cxx17_h00cdb27_1.conda + sha256: a9517c8683924f4b3b9380cdaa50fdd2009cd8d5f3918c92f64394238189d3cb + md5: f16963d88aed907af8b90878b8d8a05c + depends: + - __osx >=11.0 + - libcxx >=16 + constrains: + - abseil-cpp =20240116.2 + - libabseil-static =20240116.2=cxx17* + license: Apache-2.0 + license_family: Apache + size: 1136123 + timestamp: 1720857649214 +- kind: conda + name: libarrow + version: 17.0.0 + build: hc6a7651_16_cpu + build_number: 16 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-17.0.0-hc6a7651_16_cpu.conda + sha256: 1facd5aa7140031be0f68733ab5e413ea1505da40548e27a173b2407046f36b5 + md5: 05fecc4ae5930dc548327980a4bc7a83 + depends: + - __osx >=11.0 + - aws-crt-cpp >=0.28.3,<0.28.4.0a0 + - aws-sdk-cpp >=1.11.407,<1.11.408.0a0 + - azure-core-cpp >=1.13.0,<1.13.1.0a0 + - azure-identity-cpp >=1.8.0,<1.8.1.0a0 + - azure-storage-blobs-cpp >=12.12.0,<12.12.1.0a0 + - azure-storage-files-datalake-cpp >=12.11.0,<12.11.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20240116.2,<20240117.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libcxx >=17 + - libgoogle-cloud >=2.29.0,<2.30.0a0 + - libgoogle-cloud-storage >=2.29.0,<2.30.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - orc >=2.0.2,<2.0.3.0a0 + - re2 + - snappy >=1.2.1,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - apache-arrow-proc =*=cpu + - arrow-cpp <0.0a0 + - parquet-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + size: 5318871 + timestamp: 1726669928492 +- kind: conda + name: libarrow-acero + version: 17.0.0 + build: hf9b8971_16_cpu + build_number: 16 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-17.0.0-hf9b8971_16_cpu.conda + sha256: c9ff43babc0acbd864584ed1720cf063715589e31e9e2024b90d2094d4f20d38 + md5: 319bd2a8c30dffa54d6ad69847f16de1 + depends: + - __osx >=11.0 + - libarrow 17.0.0 hc6a7651_16_cpu + - libcxx >=17 + license: Apache-2.0 + license_family: APACHE + size: 483187 + timestamp: 1726670022814 +- kind: conda + name: libarrow-dataset + version: 17.0.0 + build: hf9b8971_16_cpu + build_number: 16 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-17.0.0-hf9b8971_16_cpu.conda + sha256: e77d3c6825384c232f61fd3602a32507b66410dbe8879cd69a89b0fc49489533 + md5: 67ea0ef775de4c394c3c7db991297ffa + depends: + - __osx >=11.0 + - libarrow 17.0.0 hc6a7651_16_cpu + - libarrow-acero 17.0.0 hf9b8971_16_cpu + - libcxx >=17 + - libparquet 17.0.0 hf0ba9ef_16_cpu + license: Apache-2.0 + license_family: APACHE + size: 491606 + timestamp: 1726671006156 +- kind: conda + name: libarrow-substrait + version: 17.0.0 + build: hbf8b706_16_cpu + build_number: 16 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-17.0.0-hbf8b706_16_cpu.conda + sha256: 6880b3c8fb88ee6c0bbae34b0efea86567ccec1b8cd8a3662b8b8c6dfeb5e87a + md5: b739c909163c38f85f40f5650ab2aeb2 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20240116.2,<20240117.0a0 + - libarrow 17.0.0 hc6a7651_16_cpu + - libarrow-acero 17.0.0 hf9b8971_16_cpu + - libarrow-dataset 17.0.0 hf9b8971_16_cpu + - libcxx >=17 + - libprotobuf >=4.25.3,<4.25.4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 472812 + timestamp: 1726671149860 +- kind: conda + name: libblas + version: 3.9.0 + build: 24_osxarm64_openblas + build_number: 24 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-24_osxarm64_openblas.conda + sha256: 4739f7463efb12e6d71536d8b0285a8de5aaadcc442bfedb9d92d1b4cbc47847 + md5: 35cb711e7bc46ee5f3dd67af99ad1986 + depends: + - libopenblas >=0.3.27,<0.3.28.0a0 + - libopenblas >=0.3.27,<1.0a0 + constrains: + - liblapack 3.9.0 24_osxarm64_openblas + - blas * openblas + - liblapacke 3.9.0 24_osxarm64_openblas + - libcblas 3.9.0 24_osxarm64_openblas + license: BSD-3-Clause + license_family: BSD + size: 15144 + timestamp: 1726668802976 +- kind: conda + name: libbrotlicommon + version: 1.1.0 + build: hd74edd7_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda + sha256: 839dacb741bdbb25e58f42088a2001b649f4f12195aeb700b5ddfca3267749e5 + md5: d0bf1dff146b799b319ea0434b93f779 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 68426 + timestamp: 1725267943211 +- kind: conda + name: libbrotlidec + version: 1.1.0 + build: hd74edd7_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda + sha256: 6c6862eb274f21a7c0b60e5345467a12e6dda8b9af4438c66d496a2c1a538264 + md5: 55e66e68ce55523a6811633dd1ac74e2 + depends: + - __osx >=11.0 + - libbrotlicommon 1.1.0 hd74edd7_2 + license: MIT + license_family: MIT + size: 28378 + timestamp: 1725267980316 +- kind: conda + name: libbrotlienc + version: 1.1.0 + build: hd74edd7_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda + sha256: eeb1eb0d58b9d02bc1b98dc0a058f104ab168eb2f7d1c7bfa0570a12cfcdb7b7 + md5: 4f3a434504c67b2c42565c0b85c1885c + depends: + - __osx >=11.0 + - libbrotlicommon 1.1.0 hd74edd7_2 + license: MIT + license_family: MIT + size: 279644 + timestamp: 1725268003553 - kind: conda - name: libblas + name: libcblas version: 3.9.0 - build: 23_osxarm64_openblas - build_number: 23 + build: 24_osxarm64_openblas + build_number: 24 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-23_osxarm64_openblas.conda - sha256: 1c30da861e306a25fac8cd30ce0c1b31c9238d04e7768c381cf4d431b4361e6c - md5: acae9191e8772f5aff48ab5232d4d2a3 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-24_osxarm64_openblas.conda + sha256: 40dc3f7c44af5cd5a2020386cb30f92943a9d8f7f54321b4d6ae32b2e54af9a4 + md5: c8977086a19233153e454bb2b332a920 depends: - - libopenblas >=0.3.27,<0.3.28.0a0 - - libopenblas >=0.3.27,<1.0a0 + - libblas 3.9.0 24_osxarm64_openblas constrains: - - liblapack 3.9.0 23_osxarm64_openblas + - liblapack 3.9.0 24_osxarm64_openblas - blas * openblas - - liblapacke 3.9.0 23_osxarm64_openblas - - libcblas 3.9.0 23_osxarm64_openblas + - liblapacke 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD - size: 15103 - timestamp: 1721688997980 + size: 15062 + timestamp: 1726668809379 - kind: conda - name: libcblas - version: 3.9.0 - build: 23_osxarm64_openblas - build_number: 23 + name: libcrc32c + version: 1.1.2 + build: hbdafb3b_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-23_osxarm64_openblas.conda - sha256: c39d944909d0608bd0333398be5e0051045c9451bfd6cc6320732d33375569c8 - md5: bad6ee9b7d5584efc2bc5266137b5f0d + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + sha256: 58477b67cc719060b5b069ba57161e20ba69b8695d154a719cb4b60caf577929 + md5: 32bd82a6a625ea6ce090a81c3d34edeb depends: - - libblas 3.9.0 23_osxarm64_openblas - constrains: - - liblapack 3.9.0 23_osxarm64_openblas - - liblapacke 3.9.0 23_osxarm64_openblas - - blas * openblas + - libcxx >=11.1.0 license: BSD-3-Clause license_family: BSD - size: 14991 - timestamp: 1721689017803 + size: 18765 + timestamp: 1633683992603 +- kind: conda + name: libcurl + version: 8.10.1 + build: h13a7ad3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda + sha256: 983a977c5627f975a930542c8aabb46089ec6ea72f28d9c4d3ee8eafaf2fc25a + md5: d84030d0863ffe7dea00b9a807fee961 + depends: + - __osx >=11.0 + - krb5 >=1.21.3,<1.22.0a0 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + size: 379948 + timestamp: 1726660033582 - kind: conda name: libcxx - version: 18.1.8 - build: h3ed4263_7 - build_number: 7 + version: 19.1.0 + build: ha82da77_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-18.1.8-h3ed4263_7.conda - sha256: 15b4abaa249f0965ce42aeb4a1a2b1b5df9a1f402e7c5bd8156272fd6cad2878 - md5: e0e7d9a2ec0f9509ffdfd5f48da522fb + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.0-ha82da77_0.conda + sha256: b71167d9b7c8e598b12bbdafefd0139e3c70c6eb258cbda3de3fb422d0098025 + md5: a4c66c0d5b0f268fd27a956145004d27 depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache - size: 436921 - timestamp: 1725403628507 + size: 520766 + timestamp: 1726782571130 - kind: conda name: libedit version: 3.1.20191231 @@ -272,6 +1516,34 @@ packages: license_family: BSD size: 96607 timestamp: 1597616630749 +- kind: conda + name: libev + version: '4.33' + build: h93a5062_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f + md5: 36d33e440c31857372a72137f78bacf5 + license: BSD-2-Clause + license_family: BSD + size: 107458 + timestamp: 1702146414478 +- kind: conda + name: libevent + version: 2.1.12 + build: h2757513_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda + sha256: 8c136d7586259bb5c0d2b913aaadc5b9737787ae4f40e3ad1beaf96c80b919b7 + md5: 1a109764bff3bdc7bdd84088347d71dc + depends: + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 368167 + timestamp: 1685726248899 - kind: conda name: libexpat version: 2.6.3 @@ -333,25 +1605,126 @@ packages: license_family: GPL size: 997381 timestamp: 1707330687590 +- kind: conda + name: libgoogle-cloud + version: 2.29.0 + build: hfa33a2f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.29.0-hfa33a2f_0.conda + sha256: 1f42048702d773a355d276d24313ac63781a331959fc3662c6be36e979d7845c + md5: f78c7bd435ee45f4661daae9e81ddf13 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20240116.2,<20240117.0a0 + - libcurl >=8.9.1,<9.0a0 + - libcxx >=17 + - libgrpc >=1.62.2,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - openssl >=3.3.2,<4.0a0 + constrains: + - libgoogle-cloud 2.29.0 *_0 + license: Apache-2.0 + license_family: Apache + size: 866727 + timestamp: 1725640714587 +- kind: conda + name: libgoogle-cloud-storage + version: 2.29.0 + build: h90fd6fa_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.29.0-h90fd6fa_0.conda + sha256: ec80383fbb6fae95d2ff7d04ba46b282ab48219b7ce85b3cd5ee7d0d8bae74e1 + md5: baee0b9cb1c5319f370a534ca5a16267 + depends: + - __osx >=11.0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libcxx >=17 + - libgoogle-cloud 2.29.0 hfa33a2f_0 + - libzlib >=1.3.1,<2.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + size: 535346 + timestamp: 1725641618955 +- kind: conda + name: libgrpc + version: 1.62.2 + build: h9c18a4f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.62.2-h9c18a4f_0.conda + sha256: d2c5b5a828f6f1242c11e8c91968f48f64446f7dd5cbfa1197545e465eb7d47a + md5: e624fc11026dbb84c549435eccd08623 + depends: + - c-ares >=1.28.1,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcxx >=16 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.62.2 + license: Apache-2.0 + license_family: APACHE + size: 5016525 + timestamp: 1713392846329 +- kind: conda + name: libiconv + version: '1.17' + build: h0d3ecfb_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + sha256: bc7de5097b97bcafcf7deaaed505f7ce02f648aac8eccc0d5a47cc599a1d0304 + md5: 69bda57310071cf6d2b86caf11573d2d + license: LGPL-2.1-only + size: 676469 + timestamp: 1702682458114 - kind: conda name: liblapack version: 3.9.0 - build: 23_osxarm64_openblas - build_number: 23 + build: 24_osxarm64_openblas + build_number: 24 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-23_osxarm64_openblas.conda - sha256: 13799a137ffc80786725e7e2820d37d4c0d59dbb76013a14c21771415b0a4263 - md5: 754ef44f72ab80fd14eaa789ac393a27 + url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-24_osxarm64_openblas.conda + sha256: 67fbfd0466eee443cda9596ed22daabedc96b7b4d1b31f49b1c1b0983dd1dd2c + md5: 49a3241f76cdbe705e346204a328f66c depends: - - libblas 3.9.0 23_osxarm64_openblas + - libblas 3.9.0 24_osxarm64_openblas constrains: - blas * openblas - - liblapacke 3.9.0 23_osxarm64_openblas - - libcblas 3.9.0 23_osxarm64_openblas + - liblapacke 3.9.0 24_osxarm64_openblas + - libcblas 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD - size: 14999 - timestamp: 1721689026268 + size: 15063 + timestamp: 1726668815824 +- kind: conda + name: libnghttp2 + version: 1.58.0 + build: ha4dd798_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda + sha256: fc97aaaf0c6d0f508be313d86c2705b490998d382560df24be918b8e977802cd + md5: 1813e066bfcef82de579a0be8a766df4 + depends: + - __osx >=10.9 + - c-ares >=1.23.0,<2.0a0 + - libcxx >=16.0.6 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.2.0,<4.0a0 + license: MIT + license_family: MIT + size: 565451 + timestamp: 1702130473930 - kind: conda name: libopenblas version: 0.3.27 @@ -372,6 +1745,61 @@ packages: license_family: BSD size: 2925328 timestamp: 1720425811743 +- kind: conda + name: libparquet + version: 17.0.0 + build: hf0ba9ef_16_cpu + build_number: 16 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-17.0.0-hf0ba9ef_16_cpu.conda + sha256: 6ed28f06409b02a9f521ee5e8cf2f4d3fb63a7633c11f2ee7ec2880e78e184e5 + md5: 517ecf2ee0c2822e6120c258f3acd383 + depends: + - __osx >=11.0 + - libarrow 17.0.0 hc6a7651_16_cpu + - libcxx >=17 + - libthrift >=0.20.0,<0.20.1.0a0 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 873007 + timestamp: 1726670938318 +- kind: conda + name: libprotobuf + version: 4.25.3 + build: hbfab5d5_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.25.3-hbfab5d5_0.conda + sha256: d754519abc3ddbdedab2a38d0639170f5347c1573eef80c707f3a8dc5dff706a + md5: 5f70b2b945a9741cba7e6dfe735a02a7 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcxx >=16 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 2154402 + timestamp: 1709514097574 +- kind: conda + name: libre2-11 + version: 2023.09.01 + build: h7b2c953_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2023.09.01-h7b2c953_2.conda + sha256: c8a0a6e7a627dc9c66ffb8858f8f6d499f67fd269b6636b25dc5169760610f05 + md5: 0b7b2ced046d6b5fe6e9d46b1ee0324c + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcxx >=16 + constrains: + - re2 2023.09.01.* + license: BSD-3-Clause + license_family: BSD + size: 171443 + timestamp: 1708947163461 - kind: conda name: libsodium version: 1.0.20 @@ -399,6 +1827,71 @@ packages: license: Unlicense size: 829500 timestamp: 1725353720793 +- kind: conda + name: libssh2 + version: 1.11.0 + build: h7a5bd25_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda + sha256: bb57d0c53289721fff1eeb3103a1c6a988178e88d8a8f4345b0b91a35f0e0015 + md5: 029f7dc931a3b626b94823bc77830b01 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 255610 + timestamp: 1685837894256 +- kind: conda + name: libthrift + version: 0.20.0 + build: h64651cc_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.20.0-h64651cc_1.conda + sha256: b6afcbc934258e0474e0f1059bc7b23865723b902062f2f2910e0370e6495401 + md5: 4cf2e5233320648397184415f380c891 + depends: + - __osx >=11.0 + - libcxx >=17 + - libevent >=2.1.12,<2.1.13.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.1,<4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 315041 + timestamp: 1724657608736 +- kind: conda + name: libutf8proc + version: 2.8.0 + build: h1a8c8d9_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 + sha256: a3faddac08efd930fa3a1cc254b5053b4ed9428c49a888d437bf084d403c931a + md5: f8c9c41a122ab3abdf8943b13f4957ee + license: MIT + license_family: MIT + size: 103492 + timestamp: 1667316405233 +- kind: conda + name: libxml2 + version: 2.12.7 + build: h01dff8b_4 + build_number: 4 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.7-h01dff8b_4.conda + sha256: a9a76cdc6e93c0182bc2ac58b1ea0152be1a16a5d23f4dc7b8df282a7aef8d20 + md5: 1265488dc5035457b729583119ad4a1b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + size: 588990 + timestamp: 1721031045514 - kind: conda name: libzlib version: 1.3.1 @@ -449,62 +1942,116 @@ packages: license_family: APACHE size: 276263 timestamp: 1723605341828 +- kind: conda + name: lz4-c + version: 1.9.4 + build: hb7217d7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_0.conda + sha256: fc343b8c82efe40819b986e29ba748366514e5ab94a1e1138df195af5f45fa24 + md5: 45505bec548634f7d05e02fb25262cb9 + depends: + - libcxx >=14.0.6 + license: BSD-2-Clause + license_family: BSD + size: 141188 + timestamp: 1674727268278 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: markupsafe + version: 2.1.5 + build: py312h024a12e_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-2.1.5-py312h024a12e_1.conda + sha256: 0e337724d82b19510c457246c319b35944580f31b3859359e1e8b9c53a14bc52 + md5: 66ee733dbdf8a9ca670f167bf5ea36b4 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + size: 25840 + timestamp: 1724959900292 - kind: conda name: max - version: 24.5.0 + version: 24.6.0.dev2024092105 build: release subdir: noarch noarch: python - url: https://conda.modular.com/max/noarch/max-24.5.0-release.conda - sha256: 3050d7885a304944afbf93ca9786e56e6df20f0685e1705f88fab045fb5aae70 - md5: 662a61803cd141e857d3b9f821c7bd66 + url: https://conda.modular.com/max-nightly/noarch/max-24.6.0.dev2024092105-release.conda + sha256: 7a4ad33bcafe6b5375550151320f1677c038d9924d77b11722d7b8b67482a0de + md5: 463ca2d71dc506f857909cca3c24d257 depends: - - max-core ==24.5.0 release - - max-python >=24.5.0,<25.0a0 - - mojo-jupyter ==24.5.0 release - - mblack ==24.5.0 release - size: 9642 - timestamp: 1726172475909 + - max-core ==24.6.0.dev2024092105 release + - max-python >=24.6.0.0dev,<25.0a0 + - mojo-jupyter ==24.6.0.dev2024092105 release + - mblack ==24.6.0.dev2024092105 release + size: 9702 + timestamp: 1726896069659 - kind: conda name: max-core - version: 24.5.0 + version: 24.6.0.dev2024092105 build: release subdir: osx-arm64 - url: https://conda.modular.com/max/osx-arm64/max-core-24.5.0-release.conda - sha256: 8848071dde1f98a4da8e39c90f9210098e7c3c4aaddd0e2255fd9fe1f01df0b7 - md5: fba502bf5142da57735a593ccf35a255 + url: https://conda.modular.com/max-nightly/osx-arm64/max-core-24.6.0.dev2024092105-release.conda + sha256: de0f66b421e1e5e05fa03bce9e0f24dda2c0e66f42a3336cb5240b31f090cbf8 + md5: b578301588792c6dcec827c77b5b7f23 depends: - - mblack ==24.5.0 release + - mblack ==24.6.0.dev2024092105 release arch: arm64 platform: osx - size: 244231803 - timestamp: 1726175523753 + size: 246026529 + timestamp: 1726896074380 - kind: conda name: max-python - version: 24.5.0 + version: 24.6.0.dev2024092105 build: 3.12release subdir: osx-arm64 - url: https://conda.modular.com/max/osx-arm64/max-python-24.5.0-3.12release.conda - sha256: e6cdd0477236d49d4f6586d4a66ffe1c5e5cb188535a8ec09ed742eda12cbf5f - md5: f33d8f4cc5c17d893fdb5d6e162c08c6 + url: https://conda.modular.com/max-nightly/osx-arm64/max-python-24.6.0.dev2024092105-3.12release.conda + sha256: f356369ffa55d1894cd7fa08d4286d28710fc1e537a6a58e6633046d1e28b2b8 + md5: 7fb96304f199d70b11bab19bfcd41b3e depends: - - max-core ==24.5.0 release + - max-core ==24.6.0.dev2024092105 release - python 3.12.* - numpy >=1.18,<2.0 + - fastapi + - pydantic-settings + - sse-starlette + - transformers - python_abi 3.12.* *_cp312 arch: arm64 platform: osx - size: 125388933 - timestamp: 1726175523755 + size: 128021057 + timestamp: 1726896074382 - kind: conda name: mblack - version: 24.5.0 + version: 24.6.0.dev2024092105 build: release subdir: noarch noarch: python - url: https://conda.modular.com/max/noarch/mblack-24.5.0-release.conda - sha256: 913881fc3aa19db447ed82e898f261a413be9129dc43b9ea600e06030f76dbd5 - md5: 2bc6ce9f257235686dc1b2509cc7198d + url: https://conda.modular.com/max-nightly/noarch/mblack-24.6.0.dev2024092105-release.conda + sha256: 53346bc25f9ff97f51fdb929ae3aecb61fa71c52d9d9551fa40c41e21adc6ca8 + md5: 1e05b91d8e6bc67224291143abb394ca depends: - python >=3.9,<3.13 - click >=8.0.0 @@ -514,24 +2061,74 @@ packages: - platformdirs >=2 - python license: MIT - size: 130435 - timestamp: 1726172475910 + size: 130476 + timestamp: 1726896069661 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 14680 + timestamp: 1704317789138 - kind: conda name: mojo-jupyter - version: 24.5.0 + version: 24.6.0.dev2024092105 build: release subdir: noarch noarch: python - url: https://conda.modular.com/max/noarch/mojo-jupyter-24.5.0-release.conda - sha256: dff2e857eae32ce92fde12a712756d647f0aa312aeb5d79b350b2acbc71a2f96 - md5: 3b7be5cbff5b8015b095e950506be4b3 + url: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-24.6.0.dev2024092105-release.conda + sha256: 27f668cac397efb5f657d560b2d5fef14549670e32581e39bf6cc085904533de + md5: fdd6f2d1f2ff8994af5020e47ad9464b depends: - - max-core ==24.5.0 release + - max-core ==24.6.0.dev2024092105 release - python >=3.9,<3.13 - jupyter_client >=8.6.2,<8.7 - python - size: 21595 - timestamp: 1726172475911 + size: 21623 + timestamp: 1726896069662 +- kind: conda + name: multidict + version: 6.1.0 + build: py312h88e9dfa_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312h88e9dfa_0.conda + sha256: 52ab4f744001c1935d9b7672f0bec68919206f61606222bb927d1a65fca9fc5c + md5: a52ae7450f215c59694aae591d08616d + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + size: 55862 + timestamp: 1725953843761 +- kind: conda + name: multiprocess + version: 0.70.15 + build: py312h02f2b3b_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/multiprocess-0.70.15-py312h02f2b3b_1.conda + sha256: 8041371e3ec3fbc2ca13c71b0180672896e6382e62892d9f6b11a4c5dd675951 + md5: 910ef2223c71902175418d9163152788 + depends: + - dill >=0.3.6 + - python >=3.12.0rc3,<3.13.0a0 + - python >=3.12.0rc3,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 335147 + timestamp: 1695459275360 - kind: conda name: mypy_extensions version: 1.0.0 @@ -598,6 +2195,27 @@ packages: license_family: Apache size: 2882450 timestamp: 1725410638874 +- kind: conda + name: orc + version: 2.0.2 + build: h75dedd0_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.2-h75dedd0_0.conda + sha256: a23f3a88a6b16363bd13f964b4abd12be1576abac460126f3269cbed12d04840 + md5: 9c89e09cede143716b479c5eacc924fb + depends: + - __osx >=11.0 + - libcxx >=16 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.2.1,<1.3.0a0 + - tzdata + - zstd >=1.5.6,<1.6.0a0 + license: Apache-2.0 + license_family: Apache + size: 436164 + timestamp: 1723760750932 - kind: conda name: packaging version: '24.1' @@ -613,6 +2231,29 @@ packages: license_family: APACHE size: 50290 timestamp: 1718189540074 +- kind: conda + name: pandas + version: 2.2.2 + build: py312h8ae5369_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.2-py312h8ae5369_1.conda + sha256: 664bf370d1e254f29fab3b9834ae5f692a59f7e35c64c61d9a9b9989831fd721 + md5: b38af0cd7ae3616c90a2511272385941 + depends: + - __osx >=11.0 + - libcxx >=16 + - numpy >=1.19,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-dateutil >=2.8.1 + - python-tzdata >=2022a + - python_abi 3.12.* *_cp312 + - pytz >=2020.1 + license: BSD-3-Clause + license_family: BSD + size: 14476760 + timestamp: 1715898136109 - kind: conda name: pathspec version: 0.12.1 @@ -630,19 +2271,167 @@ packages: timestamp: 1702250135032 - kind: conda name: platformdirs - version: 4.3.3 + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 20625 + timestamp: 1726613611845 +- kind: conda + name: pyarrow + version: 17.0.0 + build: py312ha814d7c_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-17.0.0-py312ha814d7c_1.conda + sha256: 1ea696a3c4eb6ad9a12e1ae5f368789bc2cd34519a316f6557abd771f6fa4d9a + md5: 324baefe2624473b422212c2d1db964b + depends: + - libarrow-acero 17.0.0.* + - libarrow-dataset 17.0.0.* + - libarrow-substrait 17.0.0.* + - libparquet 17.0.0.* + - numpy >=1.19,<3 + - pyarrow-core 17.0.0 *_1_* + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + size: 25928 + timestamp: 1722487521448 +- kind: conda + name: pyarrow-core + version: 17.0.0 + build: py312he20ac61_1_cpu + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-17.0.0-py312he20ac61_1_cpu.conda + sha256: 2aa30a7d877a61cce833cc9393a96295a2bdd8da09ae19c6c93dc6be143599d5 + md5: 5741dbf1e41816bc7e52ac5372da021e + depends: + - __osx >=11.0 + - libarrow 17.0.0.* *cpu + - libcxx >=17 + - libzlib >=1.3.1,<2.0a0 + - numpy >=1.19,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 3977905 + timestamp: 1722487471071 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 105098 + timestamp: 1711811634025 +- kind: conda + name: pydantic + version: 2.9.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.9.2-pyhd8ed1ab_0.conda + sha256: 1b7b0dc9f6af4da156bf22b0263be70829364a08145c696d3670facff2f6441a + md5: 1eb533bb8eb2199e3fef3e4aa147319f + depends: + - annotated-types >=0.6.0 + - pydantic-core 2.23.4 + - python >=3.7 + - typing-extensions >=4.6.1 + license: MIT + license_family: MIT + size: 300649 + timestamp: 1726601202431 +- kind: conda + name: pydantic-core + version: 2.23.4 + build: py312he431725_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.23.4-py312he431725_0.conda + sha256: d6edd3d0f9e701c8299519d412ad3dc900c7d893a134f2582203cf43585decca + md5: 3148052477686acc581b20a34b478eeb + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - typing-extensions >=4.6.0,!=4.7.0 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 1431747 + timestamp: 1726525575527 +- kind: conda + name: pydantic-settings + version: 2.5.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.5.2-pyhd8ed1ab_0.conda + sha256: 4017175a64868dbd515a402bf9626ce47f3621054ccf1b6a7fb3c363a79e37e1 + md5: 7ad1384e9e7c9338840533b9a2c413f8 + depends: + - pydantic >=2.7.0 + - python >=3.8 + - python-dotenv >=0.21.0 + license: MIT + license_family: MIT + size: 29217 + timestamp: 1726062669585 +- kind: conda + name: pygments + version: 2.18.0 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.3-pyhd8ed1ab_0.conda - sha256: 30d9448d38392cc6fcf0c1d515c85c75ecf6b4eaed0895efc1cac9e10cb57c51 - md5: 32ecde72bc26b834382b93d454c9a68d + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + size: 879295 + timestamp: 1714846885370 +- kind: conda + name: pysocks + version: 1.7.1 + build: pyha2e5f31_6 + build_number: 6 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 + sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b + md5: 2a7de29fb590ca14b5243c4c812c8025 depends: + - __unix - python >=3.8 - license: MIT - license_family: MIT - size: 20578 - timestamp: 1726315538191 + license: BSD-3-Clause + license_family: BSD + size: 18981 + timestamp: 1661604969727 - kind: conda name: python version: 3.12.6 @@ -685,6 +2474,70 @@ packages: license_family: APACHE size: 222742 timestamp: 1709299922152 +- kind: conda + name: python-dotenv + version: 1.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.0.1-pyhd8ed1ab_0.conda + sha256: 2d4c80364f03315d606a50eddd493dbacc078e21412c2462c0f781eec49b572c + md5: c2997ea9360ac4e015658804a7a84f94 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 24278 + timestamp: 1706018281544 +- kind: conda + name: python-multipart + version: 0.0.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.9-pyhd8ed1ab_0.conda + sha256: 026467128031bd667c4a32555ae07e922d5caed257e4815c44e7338887bbd56a + md5: 0eef653965f0fed2013924d08089f371 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + size: 26439 + timestamp: 1707760278735 +- kind: conda + name: python-tzdata + version: '2024.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda + sha256: 9da9a849d53705dee450b83507df1ca8ffea5f83bd21a215202221f1c492f8ad + md5: 98206ea9954216ee7540f0c773f2104d + depends: + - python >=3.6 + license: Apache-2.0 + license_family: APACHE + size: 144024 + timestamp: 1707747742930 +- kind: conda + name: python-xxhash + version: 3.5.0 + build: py312h024a12e_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-xxhash-3.5.0-py312h024a12e_1.conda + sha256: 28204ef48f028a4d872e22040da0dad7ebd703549b010a1bb511b6dd94cf466d + md5: 266fe1ae54a7bb17990206664d0f0ae4 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - xxhash >=0.8.2,<0.8.3.0a0 + license: BSD-2-Clause + license_family: BSD + size: 21765 + timestamp: 1725272382968 - kind: conda name: python_abi version: '3.12' @@ -700,6 +2553,40 @@ packages: license_family: BSD size: 6278 timestamp: 1723823099686 +- kind: conda + name: pytz + version: '2024.2' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_0.conda + sha256: 81c16d9183bb4a6780366ce874e567ee5fc903722f85b2f8d1d9479ef1dafcc9 + md5: 260009d03c9d5c0f111904d851f053dc + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 186995 + timestamp: 1726055625738 +- kind: conda + name: pyyaml + version: 6.0.2 + build: py312h024a12e_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h024a12e_1.conda + sha256: b06f1c15fb39695bbf707ae8fb554b9a77519af577b5556784534c7db10b52e3 + md5: 1ee23620cf46cb15900f70a1300bae55 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + size: 187143 + timestamp: 1725456547263 - kind: conda name: pyzmq version: 26.2.0 @@ -721,6 +2608,21 @@ packages: license_family: BSD size: 359594 timestamp: 1725449428595 +- kind: conda + name: re2 + version: 2023.09.01 + build: h4cba328_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.09.01-h4cba328_2.conda + sha256: 0e0d44414381c39a7e6f3da442cb41c637df0dcb383a07425f19c19ccffa0118 + md5: 0342882197116478a42fa4ea35af79c1 + depends: + - libre2-11 2023.09.01 h7b2c953_2 + license: BSD-3-Clause + license_family: BSD + size: 26770 + timestamp: 1708947220914 - kind: conda name: readline version: '8.2' @@ -736,6 +2638,96 @@ packages: license_family: GPL size: 250351 timestamp: 1679532511311 +- kind: conda + name: regex + version: 2024.9.11 + build: py312h024a12e_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2024.9.11-py312h024a12e_0.conda + sha256: c4dbb0a7195e3b5ec6059a6d280b44be3905ee8bf0d1622443efd8865dd90cf4 + md5: 796612a39474f5f08f7fc910d161a395 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Python-2.0 + license_family: PSF + size: 366013 + timestamp: 1726095775313 +- kind: conda + name: requests + version: 2.32.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + sha256: 5845ffe82a6fa4d437a2eae1e32a1ad308d7ad349f61e337c0a890fe04c513cc + md5: 5ede4753180c7a550a443c430dc8ab52 + depends: + - certifi >=2017.4.17 + - charset-normalizer >=2,<4 + - idna >=2.5,<4 + - python >=3.8 + - urllib3 >=1.21.1,<3 + constrains: + - chardet >=3.0.2,<6 + license: Apache-2.0 + license_family: APACHE + size: 58810 + timestamp: 1717057174842 +- kind: conda + name: rich + version: 13.8.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.8.1-pyhd8ed1ab_0.conda + sha256: eb7d88222ec1a05c1b333aab5ca9bf486f2005f17c0d86a6b7653da47c6c143b + md5: 748f1807fa7fda73651795c5617b9557 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.7 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + size: 185358 + timestamp: 1726066139954 +- kind: conda + name: safetensors + version: 0.4.5 + build: py312he431725_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/safetensors-0.4.5-py312he431725_0.conda + sha256: 93a085d0d64237db7f4ff395c446f268c575dc2c324d8e3e5c5d7d836896295e + md5: ccb978cf1e3151c25a44c4ae65c1f20e + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + license: Apache-2.0 + license_family: APACHE + size: 353606 + timestamp: 1725632294079 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 14568 + timestamp: 1698144516278 - kind: conda name: six version: 1.16.0 @@ -765,6 +2757,71 @@ packages: license: MIT size: 404869 timestamp: 1726265944269 +- kind: conda + name: snappy + version: 1.2.1 + build: hd02b534_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-hd02b534_0.conda + sha256: cb7a9440241c6092e0f1c795fdca149c4767023e783eaf9cfebc501f906b4897 + md5: 69d0f9694f3294418ee935da3d5f7272 + depends: + - __osx >=11.0 + - libcxx >=16 + license: BSD-3-Clause + license_family: BSD + size: 35708 + timestamp: 1720003794374 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + size: 15064 + timestamp: 1708953086199 +- kind: conda + name: sse-starlette + version: 2.1.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sse-starlette-2.1.3-pyhd8ed1ab_0.conda + sha256: 6d671a66333410ec7e5e7858a252565a9001366726d1fe3c3a506d7156169085 + md5: 3918255c942c242ed5599e10329e8d0e + depends: + - anyio + - python >=3.8 + - starlette + - uvicorn + license: BSD-3-Clause + license_family: BSD + size: 14712 + timestamp: 1722520112550 +- kind: conda + name: starlette + version: 0.38.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/starlette-0.38.5-pyhd8ed1ab_0.conda + sha256: d50621286d729eb1b64242ea8745f09c085af89b0dc6ada16c745807894e5988 + md5: c8aa19153b5af4409fd114732966021e + depends: + - anyio <5,>=3.4.0 + - python >=3.8 + - typing_extensions >=3.10.0 + license: BSD-3-Clause + license_family: BSD + size: 57073 + timestamp: 1725895511527 - kind: conda name: tk version: 8.6.13 @@ -780,6 +2837,26 @@ packages: license_family: BSD size: 3145523 timestamp: 1699202432999 +- kind: conda + name: tokenizers + version: 0.19.1 + build: py312hfbf4c0d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tokenizers-0.19.1-py312hfbf4c0d_0.conda + sha256: c84c7f65ac58c4448ba8a682844b1b5aa54724026039ea655ef774150bfa4ad2 + md5: 560c4039a7f54d6153520a0c029904a3 + depends: + - huggingface_hub >=0.16.4,<1.0 + - libcxx >=16 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + license: Apache-2.0 + license_family: APACHE + size: 1856398 + timestamp: 1713403690405 - kind: conda name: tornado version: 6.4.1 @@ -798,6 +2875,21 @@ packages: license_family: Apache size: 841722 timestamp: 1724956439106 +- kind: conda + name: tqdm + version: 4.66.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda + sha256: f2384902cef72048b0e9bad5c03d7a843de02ba6bc8618a9ecab6ff81a131312 + md5: c6e94fc2b2ec71ea33fe7c7da259acb4 + depends: + - colorama + - python >=3.7 + license: MPL-2.0 or MIT + size: 89519 + timestamp: 1722737568509 - kind: conda name: traitlets version: 5.14.3 @@ -813,6 +2905,116 @@ packages: license_family: BSD size: 110187 timestamp: 1713535244513 +- kind: conda + name: transformers + version: 4.44.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/transformers-4.44.2-pyhd8ed1ab_0.conda + sha256: ff42271f3650525a8c7250618bcf763dd800088eed300baeb0e15c9856131f2a + md5: 00d239b9219b2453736c8b1d816d793a + depends: + - datasets !=2.5.0 + - filelock + - huggingface_hub >=0.23.0,<1.0 + - numpy >=1.17,<2.0 + - packaging >=20.0 + - python >=3.8 + - pyyaml >=5.1 + - regex !=2019.12.17 + - requests + - safetensors >=0.4.1 + - tokenizers >=0.19,<0.20 + - tqdm >=4.27 + license: Apache-2.0 + license_family: APACHE + size: 3424805 + timestamp: 1724403480837 +- kind: conda + name: typer + version: 0.12.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typer-0.12.5-pyhd8ed1ab_0.conda + sha256: da9ff9e27c5fa8268c2d5898335485a897d9496eef3b5b446cd9387a89d168de + md5: be70216cc1a5fe502c849676baabf498 + depends: + - python >=3.7 + - typer-slim-standard 0.12.5 hd8ed1ab_0 + license: MIT + license_family: MIT + size: 53350 + timestamp: 1724613663049 +- kind: conda + name: typer-slim + version: 0.12.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.12.5-pyhd8ed1ab_0.conda + sha256: 7be1876627495047f3f07c52c93ddc2ae2017b93affe58110a5474e5ebcb2662 + md5: a46aa56c0ca7cc2bd38baffc2686f0a6 + depends: + - click >=8.0.0 + - python >=3.7 + - typing_extensions >=3.7.4.3 + constrains: + - rich >=10.11.0 + - typer >=0.12.5,<0.12.6.0a0 + - shellingham >=1.3.0 + license: MIT + license_family: MIT + size: 45641 + timestamp: 1724613646022 +- kind: conda + name: typer-slim-standard + version: 0.12.5 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.12.5-hd8ed1ab_0.conda + sha256: bb298b116159ec1085f6b29eaeb982006651a0997eda08de8b70cfb6177297f3 + md5: 2dc1ee4046de0692077e9aa9ba351d36 + depends: + - rich + - shellingham + - typer-slim 0.12.5 pyhd8ed1ab_0 + license: MIT + license_family: MIT + size: 46817 + timestamp: 1724613648907 +- kind: conda + name: typing-extensions + version: 4.12.2 + build: hd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73 + md5: 52d648bd608f5737b123f510bb5514b5 + depends: + - typing_extensions 4.12.2 pyha770c72_0 + license: PSF-2.0 + license_family: PSF + size: 10097 + timestamp: 1717802659025 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + size: 39888 + timestamp: 1717802653893 - kind: conda name: tzdata version: 2024a @@ -826,6 +3028,55 @@ packages: license: LicenseRef-Public-Domain size: 124164 timestamp: 1724736371498 +- kind: conda + name: urllib3 + version: 2.2.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda + sha256: b6bb34ce41cd93956ad6eeee275ed52390fb3788d6c75e753172ea7ac60b66e5 + md5: 6b55867f385dd762ed99ea687af32a69 + depends: + - brotli-python >=1.0.9 + - h2 >=4,<5 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.8 + - zstandard >=0.18.0 + license: MIT + license_family: MIT + size: 98076 + timestamp: 1726496531769 +- kind: conda + name: uvicorn + version: 0.30.6 + build: py312h81bd7bf_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uvicorn-0.30.6-py312h81bd7bf_0.conda + sha256: 8078e14e9f2a4ef3295825018c41e1d8bde1ac936c48dbcd6b5212d1d9fa2140 + md5: 9059f5a0f4baf1c941a90568e65997e8 + depends: + - click >=7.0 + - h11 >=0.8 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 133290 + timestamp: 1723660236813 +- kind: conda + name: xxhash + version: 0.8.2 + build: hb547adb_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xxhash-0.8.2-hb547adb_0.conda + sha256: a70f59f7221ee72c45b39a6b36a33eb9c717ba01921cce1a3c361a4676979a2e + md5: 144cd3b88706507f332f5eb5fb83a33b + license: BSD-2-Clause + license_family: BSD + size: 97593 + timestamp: 1689951969732 - kind: conda name: xz version: 5.2.6 @@ -837,6 +3088,39 @@ packages: license: LGPL-2.1 and GPL-2.0 size: 235693 timestamp: 1660346961024 +- kind: conda + name: yaml + version: 0.2.5 + build: h3422bc3_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 + sha256: 93181a04ba8cfecfdfb162fc958436d868cc37db504c58078eab4c1a3e57fbb7 + md5: 4bb3f014845110883a3c5ee811fd84b4 + license: MIT + license_family: MIT + size: 88016 + timestamp: 1641347076660 +- kind: conda + name: yarl + version: 1.9.4 + build: py312h024a12e_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.9.4-py312h024a12e_1.conda + sha256: 98d545da627ebac051fead168fe578bf7e0c92c1acace442ea8d47876f8a18e5 + md5: 040cc06ccd7be27f9855e1ce1498ec9c + depends: + - __osx >=11.0 + - idna >=2.0 + - multidict >=4.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + size: 111368 + timestamp: 1726055316146 - kind: conda name: zeromq version: 4.3.5 @@ -870,3 +3154,39 @@ packages: license_family: MIT size: 21409 timestamp: 1726248679175 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 330788 + timestamp: 1725305806565 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 405089 + timestamp: 1714723101397 diff --git a/mojoproject.toml b/mojoproject.toml index 8505e9c..23a6c3f 100644 --- a/mojoproject.toml +++ b/mojoproject.toml @@ -1,6 +1,10 @@ [project] authors = ["Mikhail Tavarez "] -channels = ["conda-forge", "https://conda.modular.com/max", "https://repo.prefix.dev/mojo-community"] +channels = [ + "conda-forge", + "https://conda.modular.com/max-nightly", + "https://repo.prefix.dev/mojo-community", +] description = "Add a short description here" name = "mojo-rustls" platforms = ["osx-arm64"] diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/LICENSE b/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/LICENSE new file mode 100644 index 0000000..e1af563 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Mikhail Tavarez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/build_env.sh b/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/build_env.sh new file mode 100644 index 0000000..6b282cf --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/build_env.sh @@ -0,0 +1,52 @@ +export CONDA_BUILD_STATE="BUILD" +export PKG_CONFIG_PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/lib/pkgconfig" +export CMAKE_GENERATOR="Unix Makefiles" +export PIP_NO_DEPENDENCIES="True" +export MAKE_TERMOUT="1" +export GCC_COLORS="error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01" +export PKG_HASH="h60d57d3" +export PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" +export PKG_NAME="mojo-rustls-ffi" +export CLICOLOR_FORCE="1" +export build_platform="osx-arm64" +export PATH="/Users/lukas/dev/mojo-rustls/.magic/envs/default/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export BUILD="arm64-apple-darwin20.0.0" +export CMAKE_COLOR_DIAGNOSTICS="ON" +export PKG_BUILD_STRING="h60d57d3_0" +export CONDA_BUILD="1" +export PKG_VERSION="0.1.0" +export SUBDIR="osx-arm64" +export SOURCE_DATE_EPOCH="1726516062" +export PYTHONNOUSERSITE="1" +export AM_COLOR_TESTS="always" +export LANG="en_US.UTF-8" +export SHLIB_EXT=".dylib" +export HOME="/Users/lukas" +export PIP_CACHE_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/pip_cache" +export LC_ALL="en_US.UTF-8" +export FORCE_COLOR="1" +export SRC_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work" +export NPY_DISTUTILS_APPEND_FLAGS="1" +export BUILD_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/build_env" +export MAKEFLAGS="" +export PIP_NO_BUILD_ISOLATION="False" +export CPU_COUNT="16" +export PIP_IGNORE_INSTALLED="True" +export OSX_ARCH="arm64" +export target_platform="osx-arm64" +export PIP_NO_INDEX="True" +export SSL_CERT_FILE="" +export CONDA_DEFAULT_ENV="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" +export RECIPE_DIR="/Users/lukas/dev/mojo-rustls/src" +export MACOSX_DEPLOYMENT_TARGET="11.0" +export PYTHON="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin/python" +export PKG_BUILDNUM="0" +export CONDA_BUILD_CROSS_COMPILATION="0" +export BUILD_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062" +export ARCH="arm64" + +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" + +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/build_env/bin:/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/build_env" diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/conda_build.sh b/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/conda_build.sh new file mode 100644 index 0000000..00d24ef --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/conda_build.sh @@ -0,0 +1,13 @@ + +## Start of bash preamble +if [ -z ${CONDA_BUILD+x} ]; then + source /Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/build_env.sh +fi +# enable debug mode for the rest of the script +set -x +## End of preamble + +mkdir -p ${PREFIX}/share/mojo-rustls-ffi +git clone --depth=1 git@github.com:rustls/rustls-ffi.git +cd rustls-ffi && cargo cinstall --library-type=cdylib --destdir=${PREFIX}/share/mojo-rustls-ffi/librustls.dylib +cd .. && rm -R rustls-ffi \ No newline at end of file diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/rustls-ffi b/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/rustls-ffi new file mode 160000 index 0000000..326bb76 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516062/work/rustls-ffi @@ -0,0 +1 @@ +Subproject commit 326bb76f64db954a92663e87fcf620f2a615ec99 diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/LICENSE b/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/LICENSE new file mode 100644 index 0000000..e1af563 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Mikhail Tavarez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/build_env.sh b/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/build_env.sh new file mode 100644 index 0000000..cb5b827 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/build_env.sh @@ -0,0 +1,52 @@ +export SUBDIR="osx-arm64" +export BUILD_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/build_env" +export FORCE_COLOR="1" +export PKG_BUILD_STRING="h60d57d3_0" +export BUILD_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100" +export SSL_CERT_FILE="" +export SOURCE_DATE_EPOCH="1726516100" +export MAKE_TERMOUT="1" +export PIP_NO_BUILD_ISOLATION="False" +export PKG_NAME="mojo-rustls-ffi" +export PKG_HASH="h60d57d3" +export CMAKE_GENERATOR="Unix Makefiles" +export HOME="/Users/lukas" +export MACOSX_DEPLOYMENT_TARGET="11.0" +export CMAKE_COLOR_DIAGNOSTICS="ON" +export PKG_BUILDNUM="0" +export LC_ALL="en_US.UTF-8" +export LANG="en_US.UTF-8" +export SRC_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work" +export CONDA_DEFAULT_ENV="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" +export PATH="/Users/lukas/dev/mojo-rustls/.magic/envs/default/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export RECIPE_DIR="/Users/lukas/dev/mojo-rustls/src" +export CONDA_BUILD_STATE="BUILD" +export PIP_IGNORE_INSTALLED="True" +export CONDA_BUILD="1" +export GCC_COLORS="error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01" +export CONDA_BUILD_CROSS_COMPILATION="0" +export build_platform="osx-arm64" +export PKG_VERSION="0.1.0" +export PIP_NO_INDEX="True" +export NPY_DISTUTILS_APPEND_FLAGS="1" +export BUILD="arm64-apple-darwin20.0.0" +export SHLIB_EXT=".dylib" +export PYTHONNOUSERSITE="1" +export PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" +export CLICOLOR_FORCE="1" +export PKG_CONFIG_PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/lib/pkgconfig" +export OSX_ARCH="arm64" +export ARCH="arm64" +export PYTHON="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin/python" +export PIP_NO_DEPENDENCIES="True" +export CPU_COUNT="16" +export AM_COLOR_TESTS="always" +export MAKEFLAGS="" +export PIP_CACHE_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/pip_cache" +export target_platform="osx-arm64" + +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" + +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/build_env/bin:/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/build_env" diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/conda_build.sh b/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/conda_build.sh new file mode 100644 index 0000000..d07e190 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/conda_build.sh @@ -0,0 +1,13 @@ + +## Start of bash preamble +if [ -z ${CONDA_BUILD+x} ]; then + source /Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/build_env.sh +fi +# enable debug mode for the rest of the script +set -x +## End of preamble + +mkdir -p ${PREFIX}/share/mojo-rustls-ffi +git clone --depth=1 git@github.com:rustls/rustls-ffi.git +cd rustls-ffi && cargo install --library-type=cdylib --destdir=${PREFIX}/share/mojo-rustls-ffi/librustls.dylib +cd .. && rm -R rustls-ffi \ No newline at end of file diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/rustls-ffi b/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/rustls-ffi new file mode 160000 index 0000000..326bb76 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516100/work/rustls-ffi @@ -0,0 +1 @@ +Subproject commit 326bb76f64db954a92663e87fcf620f2a615ec99 diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/LICENSE b/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/LICENSE new file mode 100644 index 0000000..e1af563 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Mikhail Tavarez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/build_env.sh b/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/build_env.sh new file mode 100644 index 0000000..767ee75 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/build_env.sh @@ -0,0 +1,53 @@ +export BUILD="arm64-apple-darwin20.0.0" +export OSX_ARCH="arm64" +export PKG_CONFIG_PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/lib/pkgconfig" +export MAKEFLAGS="" +export PIP_IGNORE_INSTALLED="True" +export PIP_NO_INDEX="True" +export build_platform="osx-arm64" +export CONDA_BUILD="1" +export CONDA_BUILD_STATE="BUILD" +export SHLIB_EXT=".dylib" +export PKG_BUILD_STRING="h60d57d3_0" +export BUILD_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/build_env" +export SUBDIR="osx-arm64" +export PYTHON="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin/python" +export CMAKE_COLOR_DIAGNOSTICS="ON" +export PKG_HASH="h60d57d3" +export CMAKE_GENERATOR="Unix Makefiles" +export PYTHONNOUSERSITE="1" +export RECIPE_DIR="/Users/lukas/dev/mojo-rustls/src" +export AM_COLOR_TESTS="always" +export PKG_VERSION="0.1.0" +export PATH="/Users/lukas/dev/mojo-rustls/.magic/envs/default/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CPU_COUNT="16" +export PIP_NO_DEPENDENCIES="True" +export CLICOLOR_FORCE="1" +export target_platform="osx-arm64" +export SOURCE_DATE_EPOCH="1726516168" +export NPY_DISTUTILS_APPEND_FLAGS="1" +export CONDA_DEFAULT_ENV="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" +export LC_ALL="en_US.UTF-8" +export MAKE_TERMOUT="1" +export FORCE_COLOR="1" +export LANG="en_US.UTF-8" +export ARCH="arm64" +export MACOSX_DEPLOYMENT_TARGET="11.0" +export HOME="/Users/lukas" +export PIP_CACHE_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/pip_cache" +export SRC_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work" +export PIP_NO_BUILD_ISOLATION="False" +export CONDA_BUILD_CROSS_COMPILATION="0" +export PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" +export PKG_BUILDNUM="0" +export BUILD_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168" +export SSL_CERT_FILE="" +export PKG_NAME="mojo-rustls-ffi" +export GCC_COLORS="error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01" + +. "/Users/lukas/dev/mojo-rustls/.magic/envs/default/etc/conda/deactivate.d/libglib_deactivate.sh" +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" + +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/build_env/bin:/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/build_env" diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/conda_build.sh b/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/conda_build.sh new file mode 100644 index 0000000..b7bef3b --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/conda_build.sh @@ -0,0 +1,13 @@ + +## Start of bash preamble +if [ -z ${CONDA_BUILD+x} ]; then + source /Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/build_env.sh +fi +# enable debug mode for the rest of the script +set -x +## End of preamble + +mkdir -p ${PREFIX}/share/mojo-rustls-ffi +git clone --depth=1 git@github.com:rustls/rustls-ffi.git +cd rustls-ffi && cargo cinstall --library-type=cdylib --destdir=${PREFIX}/share/mojo-rustls-ffi/librustls.dylib +cd .. && rm -R rustls-ffi \ No newline at end of file diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/rustls-ffi b/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/rustls-ffi new file mode 160000 index 0000000..326bb76 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516168/work/rustls-ffi @@ -0,0 +1 @@ +Subproject commit 326bb76f64db954a92663e87fcf620f2a615ec99 diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/LICENSE b/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/LICENSE new file mode 100644 index 0000000..e1af563 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Mikhail Tavarez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/build_env.sh b/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/build_env.sh new file mode 100644 index 0000000..3a7b006 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/build_env.sh @@ -0,0 +1,53 @@ +export ARCH="arm64" +export PIP_NO_INDEX="True" +export PKG_BUILD_STRING="h60d57d3_0" +export CONDA_DEFAULT_ENV="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" +export CONDA_BUILD_CROSS_COMPILATION="0" +export CONDA_BUILD_STATE="BUILD" +export MACOSX_DEPLOYMENT_TARGET="11.0" +export HOME="/Users/lukas" +export build_platform="osx-arm64" +export BUILD_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/build_env" +export CONDA_BUILD="1" +export MAKE_TERMOUT="1" +export RECIPE_DIR="/Users/lukas/dev/mojo-rustls/src" +export PIP_NO_BUILD_ISOLATION="False" +export SRC_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work" +export PIP_CACHE_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/pip_cache" +export BUILD_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232" +export FORCE_COLOR="1" +export CLICOLOR_FORCE="1" +export PKG_VERSION="0.1.0" +export target_platform="osx-arm64" +export PIP_IGNORE_INSTALLED="True" +export AM_COLOR_TESTS="always" +export PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" +export PKG_BUILDNUM="0" +export PYTHON="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin/python" +export GCC_COLORS="error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01" +export CMAKE_GENERATOR="Unix Makefiles" +export PKG_CONFIG_PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/lib/pkgconfig" +export SHLIB_EXT=".dylib" +export CPU_COUNT="16" +export MAKEFLAGS="" +export PYTHONNOUSERSITE="1" +export SUBDIR="osx-arm64" +export SOURCE_DATE_EPOCH="1726516232" +export OSX_ARCH="arm64" +export CMAKE_COLOR_DIAGNOSTICS="ON" +export SSL_CERT_FILE="" +export LANG="en_US.UTF-8" +export NPY_DISTUTILS_APPEND_FLAGS="1" +export LC_ALL="en_US.UTF-8" +export PKG_NAME="mojo-rustls-ffi" +export PIP_NO_DEPENDENCIES="True" +export PKG_HASH="h60d57d3" +export PATH="/Users/lukas/dev/mojo-rustls/.magic/envs/default/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export BUILD="arm64-apple-darwin20.0.0" + +. "/Users/lukas/dev/mojo-rustls/.magic/envs/default/etc/conda/deactivate.d/libglib_deactivate.sh" +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place" + +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/build_env/bin:/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_place/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/build_env" diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/conda_build.sh b/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/conda_build.sh new file mode 100644 index 0000000..c3952bb --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/conda_build.sh @@ -0,0 +1,13 @@ + +## Start of bash preamble +if [ -z ${CONDA_BUILD+x} ]; then + source /Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/build_env.sh +fi +# enable debug mode for the rest of the script +set -x +## End of preamble + +mkdir -p ${PREFIX}/share/mojo-rustls-ffi +git clone --depth=1 git@github.com:rustls/rustls-ffi.git +cd rustls-ffi && cargo cinstall --library-type=cdylib --destdir=${PREFIX}/share/mojo-rustls-ffi/librustls.dylib +cd .. && rm -R rustls-ffi \ No newline at end of file diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/rustls-ffi b/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/rustls-ffi new file mode 160000 index 0000000..326bb76 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516232/work/rustls-ffi @@ -0,0 +1 @@ +Subproject commit 326bb76f64db954a92663e87fcf620f2a615ec99 diff --git a/output/bld/rattler-build_mojo-rustls-ffi_1726516439/work/LICENSE b/output/bld/rattler-build_mojo-rustls-ffi_1726516439/work/LICENSE new file mode 100644 index 0000000..e1af563 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls-ffi_1726516439/work/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Mikhail Tavarez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/output/bld/rattler-build_mojo-rustls_1726682138/work/LICENSE b/output/bld/rattler-build_mojo-rustls_1726682138/work/LICENSE new file mode 100644 index 0000000..e1af563 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls_1726682138/work/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Mikhail Tavarez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/output/bld/rattler-build_mojo-rustls_1726682138/work/build_env.sh b/output/bld/rattler-build_mojo-rustls_1726682138/work/build_env.sh new file mode 100644 index 0000000..cffe4b1 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls_1726682138/work/build_env.sh @@ -0,0 +1,52 @@ +export CONDA_BUILD_STATE="BUILD" +export HOME="/Users/lukas" +export CMAKE_COLOR_DIAGNOSTICS="ON" +export MACOSX_DEPLOYMENT_TARGET="11.0" +export BUILD_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/build_env" +export PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold" +export PATH="/Users/lukas/dev/mojo-rustls/.magic/envs/default/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export LC_ALL="en_US.UTF-8" +export CLICOLOR_FORCE="1" +export PKG_NAME="mojo-rustls" +export SUBDIR="osx-arm64" +export PYTHONNOUSERSITE="1" +export AM_COLOR_TESTS="always" +export PIP_IGNORE_INSTALLED="True" +export PKG_VERSION="0.1.1" +export PIP_CACHE_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/pip_cache" +export PYTHON="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/bin/python" +export OSX_ARCH="arm64" +export CONDA_BUILD_CROSS_COMPILATION="0" +export SOURCE_DATE_EPOCH="1726682138" +export ARCH="arm64" +export CONDA_DEFAULT_ENV="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold" +export PKG_BUILD_STRING="h60d57d3_0" +export LANG="en_US.UTF-8" +export CONDA_BUILD="1" +export PKG_HASH="h60d57d3" +export build_platform="osx-arm64" +export BUILD_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138" +export NPY_DISTUTILS_APPEND_FLAGS="1" +export PKG_BUILDNUM="0" +export SHLIB_EXT=".dylib" +export SSL_CERT_FILE="" +export RECIPE_DIR="/Users/lukas/dev/mojo-rustls/src" +export target_platform="osx-arm64" +export PKG_CONFIG_PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/lib/pkgconfig" +export MAKEFLAGS="" +export GCC_COLORS="error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01" +export CPU_COUNT="16" +export PIP_NO_INDEX="True" +export FORCE_COLOR="1" +export BUILD="arm64-apple-darwin20.0.0" +export PIP_NO_DEPENDENCIES="True" +export SRC_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/work" +export PIP_NO_BUILD_ISOLATION="False" +export MAKE_TERMOUT="1" +export CMAKE_GENERATOR="Unix Makefiles" + +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold" + +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/build_env/bin:/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/build_env" diff --git a/output/bld/rattler-build_mojo-rustls_1726682138/work/conda_build.sh b/output/bld/rattler-build_mojo-rustls_1726682138/work/conda_build.sh new file mode 100644 index 0000000..c0ac9fc --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls_1726682138/work/conda_build.sh @@ -0,0 +1,15 @@ + +## Start of bash preamble +if [ -z ${CONDA_BUILD+x} ]; then + source /Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726682138/work/build_env.sh +fi +# enable debug mode for the rest of the script +set -x +## End of preamble + +mkdir -p ${PREFIX}/share/mojo-rustls +git clone --depth=1 git@github.com:rustls/rustls-ffi.git +cd rustls-ffi && cargo cinstall --library-type=cdylib --destdir=./output +ls -la output/usr/local/lib +cp output/usr/local/lib/librustls.dylib ${PREFIX}/share/mojo-rustls/librustls.dylib +cd .. && rm -R rustls-ffi \ No newline at end of file diff --git a/output/bld/rattler-build_mojo-rustls_1726682138/work/rustls-ffi b/output/bld/rattler-build_mojo-rustls_1726682138/work/rustls-ffi new file mode 160000 index 0000000..326bb76 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls_1726682138/work/rustls-ffi @@ -0,0 +1 @@ +Subproject commit 326bb76f64db954a92663e87fcf620f2a615ec99 diff --git a/output/bld/rattler-build_mojo-rustls_1726683444/work/LICENSE b/output/bld/rattler-build_mojo-rustls_1726683444/work/LICENSE new file mode 100644 index 0000000..e1af563 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls_1726683444/work/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Mikhail Tavarez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/output/bld/rattler-build_mojo-rustls_1726683444/work/build_env.sh b/output/bld/rattler-build_mojo-rustls_1726683444/work/build_env.sh new file mode 100644 index 0000000..ff326a3 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls_1726683444/work/build_env.sh @@ -0,0 +1,52 @@ +export CMAKE_GENERATOR="Unix Makefiles" +export OSX_ARCH="arm64" +export PIP_NO_DEPENDENCIES="True" +export CONDA_DEFAULT_ENV="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold" +export SUBDIR="osx-arm64" +export HOME="/Users/lukas" +export CONDA_BUILD_STATE="BUILD" +export PKG_BUILD_STRING="h60d57d3_0" +export GCC_COLORS="error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01" +export PYTHON="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/bin/python" +export PKG_BUILDNUM="0" +export PIP_IGNORE_INSTALLED="True" +export CONDA_BUILD_CROSS_COMPILATION="0" +export AM_COLOR_TESTS="always" +export SSL_CERT_FILE="" +export PKG_NAME="mojo-rustls" +export MACOSX_DEPLOYMENT_TARGET="11.0" +export PKG_HASH="h60d57d3" +export PATH="/Users/lukas/dev/mojo-rustls/.magic/envs/default/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_BUILD="1" +export PYTHONNOUSERSITE="1" +export CMAKE_COLOR_DIAGNOSTICS="ON" +export BUILD="arm64-apple-darwin20.0.0" +export BUILD_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444" +export CLICOLOR_FORCE="1" +export SHLIB_EXT=".dylib" +export ARCH="arm64" +export BUILD_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/build_env" +export MAKE_TERMOUT="1" +export FORCE_COLOR="1" +export SRC_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/work" +export SOURCE_DATE_EPOCH="1726683444" +export CPU_COUNT="16" +export PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold" +export PKG_VERSION="0.1.1" +export target_platform="osx-arm64" +export LANG="en_US.UTF-8" +export PKG_CONFIG_PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/lib/pkgconfig" +export RECIPE_DIR="/Users/lukas/dev/mojo-rustls/src" +export PIP_NO_BUILD_ISOLATION="False" +export PIP_NO_INDEX="True" +export MAKEFLAGS="" +export NPY_DISTUTILS_APPEND_FLAGS="1" +export LC_ALL="en_US.UTF-8" +export PIP_CACHE_DIR="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/pip_cache" +export build_platform="osx-arm64" + +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold" + +export PATH="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/build_env/bin:/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/bin:/Users/lukas/.modular/bin:/nix/var/nix/profiles/default/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_max/bin:/Users/lukas/.bin:/Users/lukas/.cargo/bin:/opt/homebrew/opt/llvm/bin:/Users/lukas/.modular/pkg/packages.modular.com_nightly_mojo/bin:/Users/lukas/.nix-profile/bin:/Users/lukas/.modular/pkg/packages.modular.com_mojo/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/MacGPG2/bin:/Applications/Ghostty.app/Contents/MacOS" +export CONDA_PREFIX="/Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/build_env" diff --git a/output/bld/rattler-build_mojo-rustls_1726683444/work/conda_build.sh b/output/bld/rattler-build_mojo-rustls_1726683444/work/conda_build.sh new file mode 100644 index 0000000..28f9ded --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls_1726683444/work/conda_build.sh @@ -0,0 +1,15 @@ + +## Start of bash preamble +if [ -z ${CONDA_BUILD+x} ]; then + source /Users/lukas/dev/mojo-rustls/output/bld/rattler-build_mojo-rustls_1726683444/work/build_env.sh +fi +# enable debug mode for the rest of the script +set -x +## End of preamble + +mkdir -p ${PREFIX}/share/mojo-rustls +git clone --depth=1 git@github.com:rustls/rustls-ffi.git +cd rustls-ffi && cargo cinstall --library-type=cdylib --destdir=./output +ls -la output/usr/local/lib +cp output/usr/local/lib/librustls.dylib ${PREFIX}/share/mojo-rustls/librustls.dylib +cd .. && rm -R rustls-ffi \ No newline at end of file diff --git a/output/bld/rattler-build_mojo-rustls_1726683444/work/rustls-ffi b/output/bld/rattler-build_mojo-rustls_1726683444/work/rustls-ffi new file mode 160000 index 0000000..326bb76 --- /dev/null +++ b/output/bld/rattler-build_mojo-rustls_1726683444/work/rustls-ffi @@ -0,0 +1 @@ +Subproject commit 326bb76f64db954a92663e87fcf620f2a615ec99 diff --git a/output/noarch/repodata.json b/output/noarch/repodata.json new file mode 100644 index 0000000..39e6e2f --- /dev/null +++ b/output/noarch/repodata.json @@ -0,0 +1,8 @@ +{ + "info": { + "subdir": "noarch" + }, + "packages": {}, + "packages.conda": {}, + "repodata_version": 2 +} \ No newline at end of file diff --git a/output/osx-arm64/mojo-rustls-ffi-0.1.0-h60d57d3_0.conda b/output/osx-arm64/mojo-rustls-ffi-0.1.0-h60d57d3_0.conda new file mode 100644 index 0000000000000000000000000000000000000000..aad0c55d88f3d0ed0268b7ad3e155a0a1c305c41 GIT binary patch literal 1200671 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 {(#`;P)V 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 z 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%0D(SyHM(xFr`; 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

?;?#qotX}N(<1K27#cQ@W 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 z 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Ō=ZCtJ()g2aAhBR* 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%0AU)MK@JxIA_M7sEqn{wNgfw`_Mi-!})@0EL1X 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

W2n@i+X1r>346A2l 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 Go^L1DUmiN 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

;#`l`c0`>K&bFQ6CpLK#f7WZE) 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

8t_h8$td1mlr}v%Qxx8D}_+{_j(^iYK+vp9$ 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

@tk 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

2wc8^9DWq~40Mz+x~LEPDXEV9G-)ss;^@U=Or! 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 z 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

m%zpV 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 UnsafePointer[c_char]: ptr[i] = ord(s[i]) return ptr + fn to_char_ptr(s: Bytes) -> UnsafePointer[c_char]: var ptr = UnsafePointer[c_char]().alloc(len(s)) for i in range(len(s)): ptr[i] = int(s[i]) return ptr + fn c_charptr_to_string(s: UnsafePointer[c_char]) -> String: return String(s.bitcast[UInt8](), strlen(s)) @@ -428,7 +431,10 @@ fn ntohs(netshort: c_ushort) -> c_ushort: fn inet_ntop( - af: c_int, src: UnsafePointer[c_void], dst: UnsafePointer[c_char], size: socklen_t + af: c_int, + src: UnsafePointer[c_void], + dst: UnsafePointer[c_char], + size: socklen_t, ) -> UnsafePointer[c_char]: """Libc POSIX `inet_ntop` function Reference: https://man7.org/linux/man-pages/man3/inet_ntop.3p.html. @@ -453,7 +459,9 @@ fn inet_ntop( ](af, src, dst, size) -fn inet_pton(af: c_int, src: UnsafePointer[c_char], dst: UnsafePointer[c_void]) -> c_int: +fn inet_pton( + af: c_int, src: UnsafePointer[c_char], dst: UnsafePointer[c_void] +) -> c_int: """Libc POSIX `inet_pton` function Reference: https://man7.org/linux/man-pages/man3/inet_ntop.3p.html Fn signature: int inet_pton(int af, const char *restrict src, void *restrict dst). @@ -539,7 +547,9 @@ fn setsockopt( fn getsockname( - socket: c_int, address: UnsafePointer[sockaddr], address_len: UnsafePointer[socklen_t] + socket: c_int, + address: UnsafePointer[sockaddr], + address_len: UnsafePointer[socklen_t], ) -> c_int: """Libc POSIX `getsockname` function Reference: https://man7.org/linux/man-pages/man3/getsockname.3p.html @@ -560,7 +570,9 @@ fn getsockname( fn getpeername( - sockfd: c_int, addr: UnsafePointer[sockaddr], address_len: UnsafePointer[socklen_t] + sockfd: c_int, + addr: UnsafePointer[sockaddr], + address_len: UnsafePointer[socklen_t], ) -> c_int: """Libc POSIX `getpeername` function Reference: https://man7.org/linux/man-pages/man2/getpeername.2.html @@ -580,7 +592,9 @@ fn getpeername( ](sockfd, addr, address_len) -fn bind(socket: c_int, address: UnsafePointer[sockaddr], address_len: socklen_t) -> c_int: +fn bind( + socket: c_int, address: UnsafePointer[sockaddr], address_len: socklen_t +) -> c_int: """Libc POSIX `bind` function Reference: https://man7.org/linux/man-pages/man3/bind.3p.html Fn signature: int bind(int socket, const struct sockaddr *address, socklen_t address_len). @@ -603,7 +617,9 @@ fn listen(socket: c_int, backlog: c_int) -> c_int: fn accept( - socket: c_int, address: UnsafePointer[sockaddr], address_len: UnsafePointer[socklen_t] + socket: c_int, + address: UnsafePointer[sockaddr], + address_len: UnsafePointer[socklen_t], ) -> c_int: """Libc POSIX `accept` function Reference: https://man7.org/linux/man-pages/man3/accept.3p.html @@ -623,7 +639,9 @@ fn accept( ](socket, address, address_len) -fn connect(socket: c_int, address: Reference[sockaddr], address_len: socklen_t) -> c_int: +fn connect( + socket: c_int, address: Reference[sockaddr], address_len: socklen_t +) -> c_int: """Libc POSIX `connect` function Reference: https://man7.org/linux/man-pages/man3/connect.3p.html Fn signature: int connect(int socket, const struct sockaddr *address, socklen_t address_len). @@ -633,9 +651,8 @@ fn connect(socket: c_int, address: Reference[sockaddr], address_len: socklen_t) address_len: The size of the address. Returns: 0 on success, -1 on error. """ - return external_call[ - "connect", c_int - ](socket, address, address_len) + return external_call["connect", c_int](socket, address, address_len) + fn recv( socket: c_int, @@ -656,6 +673,7 @@ fn recv( c_int, # Args ](socket, buffer, length, flags) + fn send( socket: c_int, buffer: UnsafePointer[c_void], length: c_size_t, flags: c_int ) -> c_ssize_t: @@ -681,7 +699,9 @@ fn shutdown(socket: c_int, how: c_int) -> c_int: how: How to shutdown the socket. Returns: 0 on success, -1 on error. """ - return external_call["shutdown", c_int, c_int, c_int]( # FnName, RetType # Args + return external_call[ + "shutdown", c_int, c_int, c_int + ]( # FnName, RetType # Args socket, how ) @@ -752,7 +772,9 @@ fn close(fildes: c_int) -> c_int: return external_call["close", c_int, c_int](fildes) -fn open[*T: AnyType](path: UnsafePointer[c_char], oflag: c_int, *args: *T) -> c_int: +fn open[ + *T: AnyType +](path: UnsafePointer[c_char], oflag: c_int, *args: *T) -> c_int: """Libc POSIX `open` function Reference: https://man7.org/linux/man-pages/man3/open.3p.html Fn signature: int open(const char *path, int oflag, ...). @@ -782,7 +804,6 @@ fn printf[*T: AnyType](format: UnsafePointer[c_char], *args: *T) -> c_int: ](format, args) - fn read(fildes: c_int, buf: UnsafePointer[c_void], nbyte: c_size_t) -> c_int: """Libc POSIX `read` function Reference: https://man7.org/linux/man-pages/man3/read.3p.html @@ -793,9 +814,9 @@ fn read(fildes: c_int, buf: UnsafePointer[c_void], nbyte: c_size_t) -> c_int: nbyte: The number of bytes to read. Returns: The number of bytes read or -1 in case of failure. """ - return external_call["read", c_ssize_t, c_int, UnsafePointer[c_void], c_size_t]( - fildes, buf, nbyte - ) + return external_call[ + "read", c_ssize_t, c_int, UnsafePointer[c_void], c_size_t + ](fildes, buf, nbyte) fn write(fildes: c_int, buf: UnsafePointer[c_void], nbyte: c_size_t) -> c_int: @@ -808,9 +829,10 @@ fn write(fildes: c_int, buf: UnsafePointer[c_void], nbyte: c_size_t) -> c_int: nbyte: The number of bytes to write. Returns: The number of bytes written or -1 in case of failure. """ - return external_call["write", c_ssize_t, c_int, UnsafePointer[c_void], c_size_t]( - fildes, buf, nbyte - ) + return external_call[ + "write", c_ssize_t, c_int, UnsafePointer[c_void], c_size_t + ](fildes, buf, nbyte) + struct fd_set: var fds_bits: StaticTuple[Int64, 16] @@ -823,7 +845,7 @@ struct fd_set: fn set(inout self, fd: Int): var word = fd // 64 var bit = fd % 64 - self.fds_bits[word] |= (1 << bit) + self.fds_bits[word] |= 1 << bit print("Set fd", fd, "word:", word, "bit:", bit) fn clear(inout self, fd: Int): @@ -848,6 +870,7 @@ struct fd_set: for i in range(16): print("Word", i, ":", bin(self.fds_bits[i])) + struct timeval: var tv_sec: Int64 var tv_usec: Int64 @@ -856,6 +879,7 @@ struct timeval: self.tv_sec = seconds self.tv_usec = microseconds + fn select( nfds: c_int, readfds: UnsafePointer[fd_set], @@ -866,7 +890,7 @@ fn select( """Libc POSIX `select` function Reference: https://man7.org/linux Fn signature: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout). - + Args: nfds: The highest-numbered file descriptor in any of the three sets, plus 1. readfds: A UnsafePointer to the set of file descriptors to read from. writefds: A UnsafePointer to the set of file descriptors to write to. @@ -885,6 +909,7 @@ fn select( UnsafePointer[timeval], # Args ](nfds, readfds, writefds, exceptfds, timeout) + fn __test_getaddrinfo__(): var ip_addr = "127.0.0.1" var port = 8083 @@ -904,8 +929,8 @@ fn __test_getaddrinfo__(): UnsafePointer.address_of(servinfo), ) var msg_ptr = gai_strerror(c_int(status)) - _ = external_call["printf", c_int, UnsafePointer[c_char], UnsafePointer[c_char]]( - to_char_ptr("gai_strerror: %s"), msg_ptr - ) + _ = external_call[ + "printf", c_int, UnsafePointer[c_char], UnsafePointer[c_char] + ](to_char_ptr("gai_strerror: %s"), msg_ptr) var msg = c_charptr_to_string(msg_ptr) print("getaddrinfo satus: " + msg) diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index 743589d..7191eee 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -1,218 +1,738 @@ -from sys import ffi -import os +import . _cffi as _c +from pathlib import Path +from os import PathLike +from utils import Span, StaticString, StringSlice +from memory import Arc, UnsafePointer +from ._cffi import TlsVersion, LogLevel -alias RustlsResult = Int -var _rustls = ffi.DLHandle(os.getenv("CONDA_PREFIX") + "/share/mojo-rustls/librustls.dylib", ffi.RTLD.LAZY) -@value -struct SliceBytes(): - var data: UnsafePointer[UInt8] - var len: Int - # var phantom: PhantomData<&'a [u8]>, +struct Accepted: + """ + A parsed ClientHello produced by a rustls_acceptor. + It is used to check server name indication (SNI), ALPN protocols, + signature schemes, and cipher suites. It can be combined with a + `rustls_server_config` to build a `rustls_connection`. + """ + + +struct AcceptedAlert: + """Represents a TLS alert resulting from accepting a client.""" -struct WebPkiServerCertVerifierBuilder: pass -# Connection -@value -struct LogParams: - var level: UInt - var message: String +struct Acceptor: + """ + A buffer and parser for ClientHello bytes. + + This allows reading ClientHello before choosing a rustls_server_config. + + It's useful when the server config will be based on parameters in the + ClientHello: server name indication (SNI), ALPN protocols, signature + schemes, and cipher suites. + + In particular, if a server wants to do some potentially expensive work + to load a certificate for a given hostname, rustls_acceptor allows doing + that asynchronously, as opposed to rustls_server_config_builder_set_hello_callback(), + which doesn't work well for asynchronous I/O. + """ + + var _handle: UnsafePointer[_c.Acceptor] + + fn __init__(inout self): + self._handle = _c.acceptor_new() + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.Acceptor]() + fn __del__(owned self): + _c.acceptor_free(self._handle) + + +struct Certificate: + """ + An X.509 certificate, as used in rustls. + Corresponds to `CertificateDer` in the Rust pki-types API. + + """ -struct RustlsConnection: pass -struct Connection: - var conn: RustlsConnection - var userdata: UnsafePointer[UInt8] - var log_callback: fn (userdata: UnsafePointer[UInt8], params: UnsafePointer[LogParams]) -> None +struct CertifiedKey: + """ + The complete chain of certificates to send during a TLS handshake, + plus a private key that matches the end-entity (leaf) certificate. + + Corresponds to `CertifiedKey` in the Rust API. + + """ + + var _handle: UnsafePointer[_c.CertifiedKey] + + fn __init__( + inout self, cert_chain: Span[UInt8], private_key: Span[UInt8] + ) raises: + self._handle = UnsafePointer[_c.CertifiedKey]() + result = _c.certified_key_build( + cert_chain.unsafe_ptr(), + len(cert_chain), + private_key.unsafe_ptr(), + len(private_key), + UnsafePointer.address_of(self._handle), + ) + if result != _c.Result.ok: + raise Error("failed to create certified key" + str(result.value)) + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.CertifiedKey]() + + fn __del__(owned self): + _c.certified_key_free(self._handle) + + +struct ClientCertVerifier: + """ + A built client certificate verifier that can be provided to a `rustls_server_config_builder` + with `rustls_server_config_builder_set_client_verifier`. + """ + + var _handle: UnsafePointer[_c.ClientCertVerifier] -# Client struct ClientConfig: - pass + """ + A client config that is done being constructed and is now read-only. + + Under the hood, this object corresponds to an `Arc`. + + """ + + var _handle: UnsafePointer[_c.ClientConfig] + + fn __init__(inout self, *, unsafe_ptr: UnsafePointer[_c.ClientConfig]): + self._handle = unsafe_ptr + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.ClientConfig]() + + fn __del__(owned self): + _c.client_config_free(self._handle) + -@value struct ClientConfigBuilder: + """ + A client config being constructed. + + A builder can be modified by, e.g. `rustls_client_config_builder_load_roots_from_file`. + Once you're done configuring settings, call `rustls_client_config_builder_build` + to turn it into a *rustls_client_config. + + Alternatively, if an error occurs or, you don't wish to build a config, + call `rustls_client_config_builder_free` to free the builder directly. + + This object is not safe for concurrent mutation. Under the hood, + it corresponds to a `Box`. + + """ + + var _handle: UnsafePointer[_c.ClientConfigBuilder] + + fn __init__(inout self): + self._handle = _c.client_config_builder_new() + + fn __init__( + inout self, provider: CryptoProvider, tls_versions: Span[UInt16] + ) raises: + self._handle = UnsafePointer[_c.ClientConfigBuilder]() + result = _c.client_config_builder_new_custom( + provider._handle, + tls_versions.unsafe_ptr(), + len(tls_versions), + UnsafePointer.address_of(self._handle), + ) + if result != _c.Result.ok: + raise Error("failed to create crypto provider" + str(result.value)) + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.ClientConfigBuilder]() + + fn __del__(owned self): + _c.client_config_builder_free(self._handle) + + fn set_alpn_protocols[ + lt: ImmutableLifetime + ](inout self, protocols: Span[Span[UInt8, lt]]) raises: + protocols_ = List[_c.SliceBytes](capacity=len(protocols)) + for p in protocols: + protocols_.append(_c.SliceBytes(p[].unsafe_ptr(), len(p[]))) + result = _c.client_config_builder_set_alpn_protocols( + self._handle, protocols_.unsafe_ptr(), len(protocols_) + ) + if result != _c.Result.ok: + raise Error("failed to set alpn protocols" + str(result.value)) + + fn set_server_verifier(inout self, verifier: ServerCertVerifier): + _c.client_config_builder_set_server_verifier( + self._handle, verifier._handle + ) + + fn set_enable_sni(inout self, enable: Bool): + _c.client_config_builder_set_enable_sni(self._handle, enable) + + fn set_certified_key( + inout self, certified_keys: Span[Arc[CertifiedKey]] + ) raises: + keys = List[UnsafePointer[_c.CertifiedKey]]( + capacity=len(certified_keys) + ) + + for k in certified_keys: + keys.append(k[][]._handle) + + result = _c.client_config_builder_set_certified_key( + self._handle, keys.unsafe_ptr(), len(keys) + ) + _ = keys^ + if result != _c.Result.ok: + raise Error("failed to set certified key" + str(result.value)) + + fn build(owned self) raises -> ClientConfig: + config = ClientConfig(unsafe_ptr=UnsafePointer[_c.ClientConfig]()) + result = _c.client_config_builder_build( + self._handle, UnsafePointer.address_of(config._handle) + ) + self._handle = UnsafePointer[_c.ClientConfigBuilder]() + if result != _c.Result.ok: + raise Error("failed to build client config" + str(result.value)) + return config^ + + +struct ClientConnection: + var _handle: UnsafePointer[_c.Connection] + + fn __init__(inout self, config: ClientConfig, server_name: String) raises: + self._handle = UnsafePointer[_c.Connection]() + result = _c.client_connection_new( + config._handle, + server_name.unsafe_cstr_ptr(), + UnsafePointer.address_of(self._handle), + ) + if result != _c.Result.ok: + raise Error( + "failed to build client connection: " + str(result.value) + ) + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.Connection]() + + fn __del__(owned self): + _c.connection_free(self._handle) + + fn set_log_callback[cb: fn (LogLevel, StringSlice) -> None](inout self): + fn log( + userdata: UnsafePointer[NoneType], + params: UnsafePointer[_c.LogParams], + ): + cb( + params[].level, + StaticString(unsafe_from_utf8_strref=params[].message), + ) + + _c.connection_set_log_callback(self._handle, log) + + fn readable(self) -> Bool: + return _c.connection_wants_read(self._handle) + + fn read_tls(inout self, buf: Span[UInt8]) raises: + pass + + fn write_tls_into[ + lifetime: MutableLifetime + ](inout self, buf: Span[UInt8, lifetime]) raises: + pass + + fn writable(self) -> Bool: + return _c.connection_wants_write(self._handle) + + +struct CryptoProvider: + """ + A representation of a Rustls [`CryptoProvider`]. + """ + + var _handle: UnsafePointer[_c.CryptoProvider] + + fn __init__(inout self, *, unsafe_ptr: UnsafePointer[_c.CryptoProvider]): + self._handle = unsafe_ptr + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.CryptoProvider]() + + fn __del__(owned self): + _c.crypto_provider_free(self._handle) + + +struct CryptoProviderBuilder: + """ + A `CryptoProvider` builder. + """ + + var _handle: UnsafePointer[_c.CryptoProviderBuilder] + + fn __init__(inout self) raises: + self._handle = UnsafePointer[_c.CryptoProviderBuilder]() + result = _c.crypto_provider_builder_new_from_default( + UnsafePointer.address_of(self._handle) + ) + if result != _c.Result.ok: + raise Error( + "Failed to build crypto provider builder: " + str(result.value) + ) + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.CryptoProviderBuilder]() + + fn __del__(owned self): + _c.crypto_provider_builder_free(self._handle) + + fn set_cipher_suites( + self, cipher_suites: Span[SupportedCiphersuite] + ) raises: + result = _c.crypto_provider_builder_set_cipher_suites( + self._handle, + UnsafePointer.address_of(cipher_suites).bitcast[ + UnsafePointer[_c.SupportedCiphersuite] + ](), + len(cipher_suites), + ) + if result != _c.Result.ok: + raise Error("Failed to set ciphersuite: " + str(result.value)) + + fn build(owned self) raises -> CryptoProvider: + provider = CryptoProvider(unsafe_ptr=UnsafePointer[_c.CryptoProvider]()) + result = _c.crypto_provider_builder_build( + self._handle, UnsafePointer.address_of(provider._handle) + ) + self._handle = UnsafePointer[_c.CryptoProviderBuilder]() + if result != _c.Result.ok: + raise Error("Failed build crypto provider: " + str(result.value)) + return provider^ + + +struct IoVec: + """ + An alias for `struct iovec` from uio.h (on Unix) or `WSABUF` on Windows. + + You should cast `const struct rustls_iovec *` to `const struct iovec *` on + Unix, or `const *LPWSABUF` on Windows. See [`std::io::IoSlice`] for details + on interoperability with platform specific vectored IO. + """ + pass -fn new_root_cert_store_builder() -> UnsafePointer[RootCertStoreBuilder]: - return _rustls.get_function[fn () -> UnsafePointer[RootCertStoreBuilder]]("rustls_root_cert_store_builder_new")() +struct RootCertStore: + """ + A root certificate store. + + """ + var _handle: UnsafePointer[_c.RootCertStore] -fn load_roots_from_file( - builder: UnsafePointer[RootCertStoreBuilder], file_path: UnsafePointer[UInt8], optional: Bool -) -> RustlsResult: - return _rustls.get_function[fn (UnsafePointer[RootCertStoreBuilder], UnsafePointer[UInt8], Bool) -> RustlsResult]( - "rustls_root_cert_store_builder_load_roots_from_file" - )(builder, file_path, optional) + fn __init__(inout self, *, unsafe_ptr: UnsafePointer[_c.RootCertStore]): + self._handle = unsafe_ptr + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.RootCertStore]() -# Cipher + fn __del__(owned self): + _c.root_cert_store_free(self._handle) struct RootCertStoreBuilder: + """ + A `rustls_root_cert_store` being constructed. + + A builder can be modified by adding trust anchor root certificates with + `rustls_root_cert_store_builder_add_pem`. Once you're done adding root certificates, + call `rustls_root_cert_store_builder_build` to turn it into a `rustls_root_cert_store`. + This object is not safe for concurrent mutation. + """ + + var _handle: UnsafePointer[_c.RootCertStoreBuilder] + + fn __init__(inout self): + self._handle = _c.root_cert_store_builder_new() + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.RootCertStoreBuilder]() + + fn __del__(owned self): + _c.root_cert_store_builder_free(self._handle) + + fn load_roots_from_file[P: PathLike](inout self, file: P) raises: + path = file.__fspath__() + result = _c.root_cert_store_builder_load_roots_from_file( + self._handle, path.unsafe_cstr_ptr(), True + ) + _ = path^ + if result != _c.Result.ok: + raise Error("Failed to load roots from file:" + str(result.value)) + + fn add_pem(inout self, pem: Span[UInt8]) raises: + result = _c.root_cert_store_builder_add_pem( + self._handle, pem.unsafe_ptr(), len(pem), True + ) + if result != _c.Result.ok: + raise Error("Failed to load roots from file:" + str(result.value)) + + fn build(owned self) raises -> RootCertStore: + store = RootCertStore(unsafe_ptr=UnsafePointer[_c.RootCertStore]()) + result = _c.root_cert_store_builder_build( + self._handle, UnsafePointer.address_of(store._handle) + ) + self._handle = UnsafePointer[_c.RootCertStoreBuilder]() + if result != _c.Result.ok: + raise Error("failed to build root cert store: " + str(result.value)) + return store^ + + +struct ServerCertVerifier: + """ + A built server certificate verifier that can be provided to a `rustls_client_config_builder` + with `rustls_client_config_builder_set_server_verifier`. + """ + + var _handle: UnsafePointer[_c.ServerCertVerifier] + + fn __init__( + inout self, *, unsafe_ptr: UnsafePointer[_c.ServerCertVerifier] + ): + self._handle = unsafe_ptr + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.ServerCertVerifier]() + + fn __del__(owned self): + _c.server_cert_verifier_free(self._handle) + + +struct ServerConfig: + """ + A server config that is done being constructed and is now read-only. + + Under the hood, this object corresponds to an `Arc`. + + """ + + var _handle: UnsafePointer[_c.ServerConfig] + + fn __init__(inout self, *, unsafe_ptr: UnsafePointer[_c.ServerConfig]): + self._handle = unsafe_ptr + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.ServerConfig]() + + fn __del__(owned self): + _c.server_config_free(self._handle) + + +struct ServerConfigBuilder: + """ + A server config being constructed. + + A builder can be modified by, + e.g. rustls_server_config_builder_load_native_roots. Once you're + done configuring settings, call rustls_server_config_builder_build + to turn it into a *const rustls_server_config. + + Alternatively, if an error occurs or, you don't wish to build a config, + call `rustls_server_config_builder_free` to free the builder directly. + + This object is not safe for concurrent mutation. + + """ + + var _handle: UnsafePointer[_c.ServerConfigBuilder] + + fn __init__(inout self): + self._handle = _c.server_config_builder_new() + + fn __del__(owned self): + _c.server_config_builder_free(self._handle) + + fn set_client_verifier(inout self, verifier: ClientCertVerifier): + _c.server_config_builder_set_client_verifier( + self._handle, verifier._handle + ) + + fn set_ignore_client_order(inout self, ignore: Bool) raises: + result = _c.server_config_builder_set_ignore_client_order( + self._handle, ignore + ) + if result != _c.Result.ok: + raise Error("failed to set ignore client order" + str(result.value)) + + fn set_alpn_protocols[ + lt: ImmutableLifetime + ](inout self, protocols: Span[Span[UInt8, lt]]) raises: + """ + Set the ALPN protocol list to the given protocols. + + `protocols` must point to a buffer of `rustls_slice_bytes` (built by the caller) + with `len` elements. Each element of the buffer must point to a slice of bytes that + contains a single ALPN protocol from + . + + This function makes a copy of the data in `protocols` and does not retain + any pointers, so the caller can free the pointed-to memory after calling. + + + """ + protocols_ = List[_c.SliceBytes](capacity=len(protocols)) + for p in protocols: + protocols_.append(_c.SliceBytes(p[].unsafe_ptr(), len(p[]))) + result = _c.server_config_builder_set_alpn_protocols( + self._handle, protocols_.unsafe_ptr(), len(protocols_) + ) + _ = protocols_ + if result != _c.Result.ok: + raise Error("failed to set alpn protocol" + str(result.value)) + + fn set_certified_keys( + inout self, certified_keys: Span[Arc[CertifiedKey]] + ) raises: + """ + Provide the configuration a list of certificates where the connection + will select the first one that is compatible with the client's signature + verification capabilities. + + Servers that want to support both ECDSA and RSA certificates will want + the ECSDA to go first in the list. + + The built configuration will keep a reference to all certified keys + provided. The client may `rustls_certified_key_free()` afterwards + without the configuration losing them. The same certified key may also + be used in multiple configs. + + EXPERIMENTAL: installing a client_hello callback will replace any + configured certified keys and vice versa. + """ + keys = List[UnsafePointer[_c.CertifiedKey]]() + for k in certified_keys: + keys.append(k[][]._handle) + result = _c.server_config_builder_set_certified_keys( + self._handle, keys.unsafe_ptr(), len(keys) + ) + _ = keys^ + if result != _c.Result.ok: + raise Error("failed to set certified key" + str(result.value)) + + fn build(owned self) raises -> ServerConfig: + """ + Turn a *rustls_server_config_builder (mutable) into a const *rustls_server_config + (read-only). The constructed `rustls_server_config` will be written to the `config_out` + pointer when this function returns `rustls_result::Ok`. + + This function may return an error if no process default crypto provider has been set + and the builder was constructed using `rustls_server_config_builder_new`, or if no + certificate resolver was set. + """ + config = ServerConfig(unsafe_ptr=UnsafePointer[_c.ServerConfig]()) + result = _c.server_config_builder_build( + self._handle, UnsafePointer.address_of(config._handle) + ) + # Is this right? + self._handle = UnsafePointer[_c.ServerConfigBuilder]() + if result != _c.Result.ok: + raise Error("failed to build server config" + str(result.value)) + return config^ + + +struct SigningKey: + """ + A signing key that can be used to construct a certified key. + """ + pass -struct RootCertStore: +struct SliceSliceBytes: + """ + A read-only view of a slice of Rust byte slices. + + This is used to pass data from rustls-ffi to callback functions provided + by the user of the API. Because Vec and slice are not `#[repr(C)]`, we + provide access via a pointer to an opaque struct and an accessor method + that acts on that struct to get entries of type `rustls_slice_bytes`. + Internally, the pointee is a `&[&[u8]]`. + + The memory exposed is available as specified by the function + using this in its signature. For instance, when this is a parameter to a + callback, the lifetime will usually be the duration of the callback. + Functions that receive one of these must not call its methods beyond the + allowed lifetime. + """ + pass -fn build_root_cert_store_builder( - builder: UnsafePointer[RootCertStoreBuilder], root_cert_store_out: UnsafePointer[UnsafePointer[RootCertStore]] -) -> RustlsResult: - return _rustls.get_function[ - fn ( - builder: UnsafePointer[RootCertStoreBuilder], - root_cert_store_out: UnsafePointer[UnsafePointer[RootCertStore]], - ) -> RustlsResult - ]("rustls_root_cert_store_builder_build")(builder, root_cert_store_out) +struct SliceStr: + """ + A read-only view of a slice of multiple Rust `&str`'s (that is, multiple + strings). + Like `rustls_str`, this guarantees that each string contains + UTF-8 and no NUL bytes. Strings are not NUL-terminated. + + This is used to pass data from rustls-ffi to callback functions provided + by the user of the API. Because Vec and slice are not `#[repr(C)]`, we + can't provide a straightforward `data` and `len` structure. Instead, we + provide access via a pointer to an opaque struct and accessor methods. + Internally, the pointee is a `&[&str]`. + + The memory exposed is available as specified by the function + using this in its signature. For instance, when this is a parameter to a + callback, the lifetime will usually be the duration of the callback. + Functions that receive one of these must not call its methods beyond the + allowed lifetime. + """ -struct ServerCertVerifier: pass -fn new_web_pki_server_cert_verifier_builder( - store: UnsafePointer[RootCertStore], -) -> UnsafePointer[WebPkiServerCertVerifierBuilder]: - return _rustls.get_function[fn (UnsafePointer[RootCertStore]) -> UnsafePointer[WebPkiServerCertVerifierBuilder]]( - "rustls_web_pki_server_cert_verifier_builder_new" - )(store) - - -fn build_web_pki_server_cert_verifier_builder( - builder: UnsafePointer[WebPkiServerCertVerifierBuilder], - verifier_out: UnsafePointer[UnsafePointer[ServerCertVerifier]], -) -> RustlsResult: - return _rustls.get_function[ - fn ( - UnsafePointer[WebPkiServerCertVerifierBuilder], UnsafePointer[UnsafePointer[ServerCertVerifier]] - ) -> RustlsResult - ]("rustls_web_pki_server_cert_verifier_builder_build")(builder, verifier_out) - - -fn client_config_builder_set_server_verifier( - builder: UnsafePointer[ClientConfigBuilder], - verifier: UnsafePointer[ServerCertVerifier], -) -> None: - return _rustls.get_function[ - fn ( - UnsafePointer[ClientConfigBuilder], UnsafePointer[ServerCertVerifier] - ) -> None - ]("rustls_client_config_builder_set_server_verifier")(builder, verifier) - - -fn client_config_builder_set_alpn_protocols( - builder: UnsafePointer[ClientConfigBuilder], - protocols: UnsafePointer[String], - len: UInt, -) -> RustlsResult: - return _rustls.get_function[ - fn ( - UnsafePointer[ClientConfigBuilder], UnsafePointer[String], UInt - ) -> RustlsResult - ]("rustls_client_config_builder_set_alpn_protocols")(builder, protocols, len) - - -fn build_client_config_builder( - builder: UnsafePointer[ClientConfigBuilder], - config_out: UnsafePointer[UnsafePointer[ClientConfig]], -) -> RustlsResult: - return _rustls.get_function[ - fn ( - UnsafePointer[ClientConfigBuilder], UnsafePointer[UnsafePointer[ClientConfig]] - ) -> RustlsResult - ]("rustls_client_config_builder_build")(builder, config_out) +fn default_crypto_provider_ciphersuites() -> SupportedCiphersuitesIterator: + return SupportedCiphersuitesIterator() + @value -struct ConnData: - var rconn: UnsafePointer[Connection] - var fd: Int - var verify_arg: String - var data: SliceBytes - -fn rustls_connection_set_userdata(conn: UnsafePointer[Connection], userdata: UnsafePointer[ConnData]) -> None: - return _rustls.get_function[fn (UnsafePointer[Connection], UnsafePointer[ConnData]) -> None]("rustls_connection_set_userdata")( - conn, userdata - ) - -fn rustls_connection_set_log_callback( - conn: UnsafePointer[Connection], - log_callback: fn (userdata: UnsafePointer[UInt8], params: UnsafePointer[LogParams]) -> None, -) -> None: - return _rustls.get_function[ - fn ( - UnsafePointer[Connection], fn (userdata: UnsafePointer[UInt8], params: UnsafePointer[LogParams]) -> None - ) -> None - ]("rustls_connection_set_log_callback")(conn, log_callback) - -fn rustls_connection_write( - conn: UnsafePointer[Connection], buf: UnsafePointer[UInt8], len: Int, written: UnsafePointer[Int]) -> RustlsResult: - return _rustls.get_function[ - fn (UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> RustlsResult - ]("rustls_connection_write")(conn, buf, len, written) - -fn rustls_connection_get_negotiated_ciphersuite( - conn: UnsafePointer[Connection] -) -> RustlsResult: - return _rustls.get_function[ - fn (UnsafePointer[Connection]) -> RustlsResult - ]("rustls_connection_get_negotiated_ciphersuite")(conn) - -fn rustls_connection_get_negotiated_ciphersuite_name( - conn: UnsafePointer[Connection] -) -> RustlsResult: - return _rustls.get_function[ - fn (UnsafePointer[Connection]) -> RustlsResult - ]("rustls_connection_get_negotiated_ciphersuite_name")(conn) - -fn rustls_connection_read_tls( - conn: UnsafePointer[Connection], buf: UnsafePointer[UInt8], len: Int, read: UnsafePointer[Int] -) -> RustlsResult: - return _rustls.get_function[ - fn (UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int]) -> RustlsResult - ]("rustls_connection_read_tls")(conn, buf, len, read) - -fn rustls_connection_write_tls( - rconn: UnsafePointer[Connection], write_cb: fn (userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int, conn: UnsafePointer[ConnData], n: Int) -> RustlsResult: - return _rustls.get_function[ - fn (UnsafePointer[Connection], fn (userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int, UnsafePointer[ConnData], Int) -> RustlsResult - ]("rustls_connection_write_tls")(rconn, write_cb, conn, n) - -fn rustls_connection_wants_read(conn: UnsafePointer[Connection]) -> Bool: - return _rustls.get_function[fn (UnsafePointer[Connection]) -> Bool]("rustls_connection_wants_read")(conn) - -fn rustls_connection_wants_write(conn: UnsafePointer[Connection]) -> Bool: - return _rustls.get_function[fn (UnsafePointer[Connection]) -> Bool]("rustls_connection_wants_write")(conn) - -fn rustls_connection_process_new_packets(conn: UnsafePointer[Connection]) -> RustlsResult: - return _rustls.get_function[fn (UnsafePointer[Connection]) -> RustlsResult]("rustls_connection_process_new_packets")(conn) - -fn new_client_config_builder() -> UnsafePointer[ClientConfigBuilder]: - return _rustls.get_function[fn () -> UnsafePointer[ClientConfigBuilder]]("rustls_client_config_builder_new")() - - -fn new_client_connection( - config: UnsafePointer[ClientConfig], - server_name: UnsafePointer[UInt8], - conn_out: UnsafePointer[UnsafePointer[Connection]], -) -> RustlsResult: - return _rustls.get_function[ - fn ( - UnsafePointer[ClientConfig], UnsafePointer[UInt8], UnsafePointer[UnsafePointer[Connection]] - ) -> RustlsResult - ]("rustls_client_connection_new")(config, server_name, conn_out) - - -struct RustlsClientConfig: - var _handle: UnsafePointer[ClientConfigBuilder] +struct SupportedCiphersuitesIterator: + """ + An iterator over rustls ciphersuites. + """ + + var index: Int + var len: Int fn __init__(inout self): - self._handle = new_client_config() + self.index = 0 + self.len = _c.default_crypto_provider_ciphersuites_len() + + fn __iter__(self) -> Self: + return self + + fn __next__( + inout self, + ) -> SupportedCiphersuite: + result = SupportedCiphersuite( + unsafe_ptr=_c.default_crypto_provider_ciphersuites_get(self.index) + ) + self.index += 1 + return result + + fn __len__(self) -> Int: + return self.len - self.index + + +struct SupportedCiphersuite: + """ + A cipher suite supported by rustls. + """ + + var _handle: UnsafePointer[_c.SupportedCiphersuite] + + fn __init__( + inout self, *, unsafe_ptr: UnsafePointer[_c.SupportedCiphersuite] + ): + self._handle = unsafe_ptr + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + + fn __copyinit__(inout self, rhs: Self): + self._handle = rhs._handle + + fn __bool__(inout self) -> Bool: + return self._handle + + fn get_suite(self) -> UInt16: + return _c.supported_ciphersuite_get_suite(self._handle) + + fn get_name(self) -> StaticString: + return _c.supported_ciphersuite_get_name(self._handle) + + fn protocol_version(self) -> TlsVersion: + return _c.supported_ciphersuite_protocol_version(self._handle) + + +struct WebPkiClientCertVerifierBuilder: + """ + A client certificate verifier being constructed. + + A builder can be modified by, e.g. `rustls_web_pki_client_cert_verifier_builder_add_crl`. + + Once you're done configuring settings, call `rustls_web_pki_client_cert_verifier_builder_build` + to turn it into a `rustls_client_cert_verifier`. + + This object is not safe for concurrent mutation. + + See + for more information. + """ + + pass + + +struct WebPkiServerCertVerifierBuilder: + """ + A server certificate verifier being constructed. + + A builder can be modified by, e.g. `rustls_web_pki_server_cert_verifier_builder_add_crl`. + + Once you're done configuring settings, call `rustls_web_pki_server_cert_verifier_builder_build` + to turn it into a `rustls_server_cert_verifier`. This object is not safe for concurrent mutation. + + See + for more information. + """ + + var _handle: UnsafePointer[_c.WebPkiServerCertVerifierBuilder] + + fn __init__(inout self, store: RootCertStore): + self._handle = _c.web_pki_server_cert_verifier_builder_new( + store._handle + ) + + fn __moveinit__(inout self, owned rhs: Self): + self._handle = rhs._handle + rhs._handle = UnsafePointer[_c.WebPkiServerCertVerifierBuilder]() + + fn __del__(owned self): + _c.web_pki_server_cert_verifier_builder_free(self._handle) + + fn build(owned self) raises -> ServerCertVerifier: + verifier = ServerCertVerifier( + unsafe_ptr=UnsafePointer[_c.ServerCertVerifier]() + ) + result = _c.web_pki_server_cert_verifier_builder_build( + self._handle, UnsafePointer.address_of(verifier._handle) + ) + self._handle = UnsafePointer[_c.WebPkiServerCertVerifierBuilder]() + if result != _c.Result.ok: + raise Error( + "failed to build server cert verifier " + str(result.value) + ) + return verifier^ diff --git a/src/rustls/_cffi.mojo b/src/rustls/_cffi.mojo new file mode 100644 index 0000000..dfed214 --- /dev/null +++ b/src/rustls/_cffi.mojo @@ -0,0 +1,3301 @@ +from sys import ffi +from utils import StringSlice, StaticString, StringRef + +var _rustls = ffi.DLHandle("/opt/homebrew/lib/librustls.dylib", ffi.RTLD.LAZY) + + +@value +struct Result: + var value: UInt32 + alias ok = Self(7000) + alias io = Self(7001) + alias null_parameter = Self(7002) + alias invalid_dns_name_error = Self(7003) + alias panic = Self(7004) + alias certificate_parse_error = Self(7005) + alias private_key_parse_error = Self(7006) + alias insufficient_size = Self(7007) + alias not_found = Self(7008) + alias invalid_parameter = Self(7009) + alias unexpected_eof = Self(7010) + alias plaintext_empty = Self(7011) + alias acceptor_not_ready = Self(7012) + alias already_used = Self(7013) + alias certificate_revocation_list_parse_error = Self(7014) + alias no_server_cert_verifier = Self(7015) + alias no_default_crypto_provider = Self(7016) + alias get_random_failed = Self(7017) + alias no_certificates_presented = Self(7101) + alias decrypt_error = Self(7102) + alias failed_to_get_current_time = Self(7103) + alias failed_to_get_random_bytes = Self(7113) + alias handshake_not_complete = Self(7104) + alias peer_sent_oversized_record = Self(7105) + alias no_application_protocol = Self(7106) + alias bad_max_fragment_size = Self(7114) + alias unsupported_name_type = Self(7115) + alias encrypt_error = Self(7116) + alias cert_encoding_bad = Self(7121) + alias cert_expired = Self(7122) + alias cert_not_yet_valid = Self(7123) + alias cert_revoked = Self(7124) + alias cert_unhandled_critical_extension = Self(7125) + alias cert_unknown_issuer = Self(7126) + alias cert_bad_signature = Self(7127) + alias cert_not_valid_for_name = Self(7128) + alias cert_invalid_purpose = Self(7129) + alias cert_application_verification_failure = Self(7130) + alias cert_other_error = Self(7131) + alias cert_unknown_revocation_status = Self(7154) + alias message_handshake_payload_too_large = Self(7133) + alias message_invalid_ccs = Self(7134) + alias message_invalid_content_type = Self(7135) + alias message_invalid_cert_status_type = Self(7136) + alias message_invalid_cert_request = Self(7137) + alias message_invalid_dh_params = Self(7138) + alias message_invalid_empty_payload = Self(7139) + alias message_invalid_key_update = Self(7140) + alias message_invalid_server_name = Self(7141) + alias message_too_large = Self(7142) + alias message_too_short = Self(7143) + alias message_missing_data = Self(7144) + alias message_missing_key_exchange = Self(7145) + alias message_no_signature_schemes = Self(7146) + alias message_trailing_data = Self(7147) + alias message_unexpected_message = Self(7148) + alias message_unknown_protocol_version = Self(7149) + alias message_unsupported_compression = Self(7150) + alias message_unsupported_curve_type = Self(7151) + alias message_unsupported_key_exchange_algorithm = Self(7152) + alias message_invalid_other = Self(7153) + alias peer_incompatible_error = Self(7107) + alias peer_misbehaved_error = Self(7108) + alias inappropriate_message = Self(7109) + alias inappropriate_handshake_message = Self(7110) + alias general = Self(7112) + alias alert_close_notify = Self(7200) + alias alert_unexpected_message = Self(7201) + alias alert_bad_record_mac = Self(7202) + alias alert_decryption_failed = Self(7203) + alias alert_record_overflow = Self(7204) + alias alert_decompression_failure = Self(7205) + alias alert_handshake_failure = Self(7206) + alias alert_no_certificate = Self(7207) + alias alert_bad_certificate = Self(7208) + alias alert_unsupported_certificate = Self(7209) + alias alert_certificate_revoked = Self(7210) + alias alert_certificate_expired = Self(7211) + alias alert_certificate_unknown = Self(7212) + alias alert_illegal_parameter = Self(7213) + alias alert_unknown_ca = Self(7214) + alias alert_access_denied = Self(7215) + alias alert_decode_error = Self(7216) + alias alert_decrypt_error = Self(7217) + alias alert_export_restriction = Self(7218) + alias alert_protocol_version = Self(7219) + alias alert_insufficient_security = Self(7220) + alias alert_internal_error = Self(7221) + alias alert_inappropriate_fallback = Self(7222) + alias alert_user_canceled = Self(7223) + alias alert_no_renegotiation = Self(7224) + alias alert_missing_extension = Self(7225) + alias alert_unsupported_extension = Self(7226) + alias alert_certificate_unobtainable = Self(7227) + alias alert_unrecognised_name = Self(7228) + alias alert_bad_certificate_status_response = Self(7229) + alias alert_bad_certificate_hash_value = Self(7230) + alias alert_unknown_psk_identity = Self(7231) + alias alert_certificate_required = Self(7232) + alias alert_no_application_protocol = Self(7233) + alias alert_unknown = Self(7234) + alias cert_revocation_list_bad_signature = Self(7400) + alias cert_revocation_list_invalid_crl_number = Self(7401) + alias cert_revocation_list_invalid_revoked_cert_serial_number = Self(7402) + alias cert_revocation_list_issuer_invalid_for_crl = Self(7403) + alias cert_revocation_list_other_error = Self(7404) + alias cert_revocation_list_parse_error = Self(7405) + alias cert_revocation_list_unsupported_crl_version = Self(7406) + alias cert_revocation_list_unsupported_critical_extension = Self(7407) + alias cert_revocation_list_unsupported_delta_crl = Self(7408) + alias cert_revocation_list_unsupported_indirect_crl = Self(7409) + alias cert_revocation_list_unsupported_revocation_reason = Self(7410) + alias client_cert_verifier_builder_no_root_anchors = Self(7500) + + fn __eq__(self, rhs: Self) -> Bool: + return self.value == rhs.value + + fn __ne__(self, rhs: Self) -> Bool: + return self.value != rhs.value + + +@value +struct TlsVersion: + """ + Definitions of known TLS protocol versions. + """ + + var value: UInt32 + + alias unknown = Self(0) + alias sslv2 = Self(512) + alias sslv3 = Self(768) + alias tlsv1_0 = Self(769) + alias tlsv1_1 = Self(770) + alias tlsv1_2 = Self(771) + alias tlsv1_3 = Self(772) + + fn __eq__(self, rhs: Self) -> Bool: + return self.value == rhs.value + + fn __ne__(self, rhs: Self) -> Bool: + return self.value != rhs.value + + +struct Accepted: + """ + A parsed ClientHello produced by a rustls_acceptor. + + It is used to check server name indication (SNI), ALPN protocols, + signature schemes, and cipher suites. It can be combined with a + `rustls_server_config` to build a `rustls_connection`. + """ + + pass + + +struct AcceptedAlert: + """Represents a TLS alert resulting from accepting a client.""" + + pass + + +struct Acceptor: + """ + A buffer and parser for ClientHello bytes. + + This allows reading ClientHello before choosing a rustls_server_config. + + It's useful when the server config will be based on parameters in the + ClientHello: server name indication (SNI), ALPN protocols, signature + schemes, and cipher suites. + + In particular, if a server wants to do some potentially expensive work + to load a certificate for a given hostname, rustls_acceptor allows doing + that asynchronously, as opposed to rustls_server_config_builder_set_hello_callback(), + which doesn't work well for asynchronous I/O. + + The general flow is: + - rustls_acceptor_new() + - Loop: + - Read bytes from the network it with rustls_acceptor_read_tls(). + - If successful, parse those bytes with rustls_acceptor_accept(). + - If that returns RUSTLS_RESULT_ACCEPTOR_NOT_READY, continue. + - Otherwise, break. + - If rustls_acceptor_accept() returned RUSTLS_RESULT_OK: + - Examine the resulting rustls_accepted. + - Create or select a rustls_server_config. + - Call rustls_accepted_into_connection(). + - Otherwise, there was a problem with the ClientHello data and the + connection should be rejected. + """ + + pass + + +struct Certificate: + """ + An X.509 certificate, as used in rustls. + Corresponds to `CertificateDer` in the Rust pki-types API. + + """ + + pass + + +struct CertifiedKey: + """ + The complete chain of certificates to send during a TLS handshake, + plus a private key that matches the end-entity (leaf) certificate. + + Corresponds to `CertifiedKey` in the Rust API. + + """ + + pass + + +struct ClientCertVerifier: + """ + A built client certificate verifier that can be provided to a `rustls_server_config_builder` + with `rustls_server_config_builder_set_client_verifier`. + """ + + pass + + +struct ClientConfig: + """ + A client config that is done being constructed and is now read-only. + + Under the hood, this object corresponds to an `Arc`. + + """ + + pass + + +struct ClientConfigBuilder: + """ + A client config being constructed. + + A builder can be modified by, e.g. `rustls_client_config_builder_load_roots_from_file`. + Once you're done configuring settings, call `rustls_client_config_builder_build` + to turn it into a *rustls_client_config. + + Alternatively, if an error occurs or, you don't wish to build a config, + call `rustls_client_config_builder_free` to free the builder directly. + + This object is not safe for concurrent mutation. Under the hood, + it corresponds to a `Box`. + + """ + + pass + + +struct Connection: + pass + + +struct CryptoProvider: + """ + A C representation of a Rustls [`CryptoProvider`]. + """ + + pass + + +struct CryptoProviderBuilder: + """ + A `rustls_crypto_provider` builder. + """ + + pass + + +struct IoVec: + """ + An alias for `struct iovec` from uio.h (on Unix) or `WSABUF` on Windows. + + You should cast `const struct rustls_iovec *` to `const struct iovec *` on + Unix, or `const *LPWSABUF` on Windows. See [`std::io::IoSlice`] for details + on interoperability with platform specific vectored IO. + """ + + pass + + +struct RootCertStore: + """ + A root certificate store. + + """ + + pass + + +struct RootCertStoreBuilder: + """ + A `rustls_root_cert_store` being constructed. + + A builder can be modified by adding trust anchor root certificates with + `rustls_root_cert_store_builder_add_pem`. Once you're done adding root certificates, + call `rustls_root_cert_store_builder_build` to turn it into a `rustls_root_cert_store`. + This object is not safe for concurrent mutation. + """ + + pass + + +struct ServerCertVerifier: + """ + A built server certificate verifier that can be provided to a `rustls_client_config_builder` + with `rustls_client_config_builder_set_server_verifier`. + """ + + pass + + +struct ServerConfig: + """ + A server config that is done being constructed and is now read-only. + + Under the hood, this object corresponds to an `Arc`. + + """ + + pass + + +struct ServerConfigBuilder: + """ + A server config being constructed. + + A builder can be modified by, + e.g. rustls_server_config_builder_load_native_roots. Once you're + done configuring settings, call rustls_server_config_builder_build + to turn it into a *const rustls_server_config. + + Alternatively, if an error occurs or, you don't wish to build a config, + call `rustls_server_config_builder_free` to free the builder directly. + + This object is not safe for concurrent mutation. + + """ + + pass + + +struct SigningKey: + """ + A signing key that can be used to construct a certified key. + """ + + pass + + +struct SliceSliceBytes: + """ + A read-only view of a slice of Rust byte slices. + + This is used to pass data from rustls-ffi to callback functions provided + by the user of the API. Because Vec and slice are not `#[repr(C)]`, we + provide access via a pointer to an opaque struct and an accessor method + that acts on that struct to get entries of type `rustls_slice_bytes`. + Internally, the pointee is a `&[&[u8]]`. + + The memory exposed is available as specified by the function + using this in its signature. For instance, when this is a parameter to a + callback, the lifetime will usually be the duration of the callback. + Functions that receive one of these must not call its methods beyond the + allowed lifetime. + """ + + pass + + +struct SliceStr: + """ + A read-only view of a slice of multiple Rust `&str`'s (that is, multiple + strings). + + Like `rustls_str`, this guarantees that each string contains + UTF-8 and no NUL bytes. Strings are not NUL-terminated. + + This is used to pass data from rustls-ffi to callback functions provided + by the user of the API. Because Vec and slice are not `#[repr(C)]`, we + can't provide a straightforward `data` and `len` structure. Instead, we + provide access via a pointer to an opaque struct and accessor methods. + Internally, the pointee is a `&[&str]`. + + The memory exposed is available as specified by the function + using this in its signature. For instance, when this is a parameter to a + callback, the lifetime will usually be the duration of the callback. + Functions that receive one of these must not call its methods beyond the + allowed lifetime. + """ + + pass + + +struct SupportedCiphersuite: + """ + A cipher suite supported by rustls. + """ + + pass + + +struct WebPkiClientCertVerifierBuilder: + """ + A client certificate verifier being constructed. + + A builder can be modified by, e.g. `rustls_web_pki_client_cert_verifier_builder_add_crl`. + + Once you're done configuring settings, call `rustls_web_pki_client_cert_verifier_builder_build` + to turn it into a `rustls_client_cert_verifier`. + + This object is not safe for concurrent mutation. + + See + for more information. + """ + + pass + + +struct WebPkiServerCertVerifierBuilder: + """ + A server certificate verifier being constructed. + + A builder can be modified by, e.g. `rustls_web_pki_server_cert_verifier_builder_add_crl`. + + Once you're done configuring settings, call `rustls_web_pki_server_cert_verifier_builder_build` + to turn it into a `rustls_server_cert_verifier`. This object is not safe for concurrent mutation. + + See + for more information. + """ + + pass + + +alias IoResult = Int32 +""" +A return value for a function that may return either success (0) or a +non-zero value representing an error. + +The values should match socket error numbers for your operating system -- +for example, the integers for `ETIMEDOUT`, `EAGAIN`, or similar. +""" + +alias ReadCallback = fn ( + userdata: UnsafePointer[NoneType], + buf: UnsafePointer[UInt8], + n: Int, + out_n: UnsafePointer[Int], +) -> IoResult +""" +A callback for `rustls_connection_read_tls`. + +An implementation of this callback should attempt to read up to n bytes from the +network, storing them in `buf`. If any bytes were stored, the implementation should +set out_n to the number of bytes stored and return 0. + +If there was an error, the implementation should return a nonzero rustls_io_result, +which will be passed through to the caller. + +On POSIX systems, returning `errno` is convenient. + +On other systems, any appropriate error code works. + +It's best to make one read attempt to the network per call. Additional reads will +be triggered by subsequent calls to one of the `_read_tls` methods. + +`userdata` is set to the value provided to `rustls_connection_set_userdata`. +In most cases that should be a struct that contains, at a minimum, a file descriptor. + +The buf and out_n pointers are borrowed and should not be retained across calls. +""" + + +@value +struct SliceBytes: + """ + A read-only view on a Rust byte slice. + + This is used to pass data from rustls-ffi to callback functions provided + by the user of the API. + `len` indicates the number of bytes than can be safely read. + + The memory exposed is available as specified by the function + using this in its signature. For instance, when this is a parameter to a + callback, the lifetime will usually be the duration of the callback. + Functions that receive one of these must not dereference the data pointer + beyond the allowed lifetime. + """ + + var data: UnsafePointer[UInt8] + var len: Int + + +alias WriteCallback = fn ( + userdata: UnsafePointer[NoneType], + buf: UnsafePointer[UInt8], + n: Int, + out_n: UnsafePointer[Int], +) -> IoResult +""" +A callback for `rustls_connection_write_tls` or `rustls_accepted_alert_write_tls`. + +An implementation of this callback should attempt to write the `n` bytes in buf +to the network. + +If any bytes were written, the implementation should set `out_n` to the number of +bytes stored and return 0. + +If there was an error, the implementation should return a nonzero `rustls_io_result`, +which will be passed through to the caller. + +On POSIX systems, returning `errno` is convenient. + +On other systems, any appropriate error code works. + +It's best to make one write attempt to the network per call. Additional writes will +be triggered by subsequent calls to rustls_connection_write_tls. + +`userdata` is set to the value provided to `rustls_connection_set_userdata`. In most +cases that should be a struct that contains, at a minimum, a file descriptor. + +The buf and out_n pointers are borrowed and should not be retained across calls. +""" + +alias VerifyServerCertUserData = UnsafePointer[NoneType] +""" +User-provided input to a custom certificate verifier callback. + +See `rustls_client_config_builder_dangerous_set_certificate_verifier()`. +""" + + +@value +struct VerifyServerCertParams: + """ + Input to a custom certificate verifier callback. + + See `rustls_client_config_builder_dangerous_set_certificate_verifier()`. + + server_name can contain a hostname, an IPv4 address in textual form, or an + IPv6 address in textual form. + """ + + var end_entity_cert_der: SliceBytes + var intermediate_certs_der: UnsafePointer[SliceSliceBytes] + var server_name: StringRef + var ocsp_response: SliceBytes + + +alias VerifyServerCertCallback = fn ( + userdata: VerifyServerCertUserData, + params: UnsafePointer[VerifyServerCertParams], +) -> UInt32 + +alias LogLevel = Int + + +@value +struct LogParams: + var level: LogLevel + var message: StringRef + + +alias LogCallback = fn ( + UnsafePointer[NoneType], UnsafePointer[LogParams] +) -> None + +alias WriteVectoredCallback = fn ( + UnsafePointer[NoneType], UnsafePointer[IoVec], Int, UnsafePointer[Int] +) -> IoResult +""" +A callback for `rustls_connection_write_tls_vectored`. + +An implementation of this callback should attempt to write the bytes in +the given `count` iovecs to the network. + +If any bytes were written, the implementation should set out_n to the number of +bytes written and return 0. + +If there was an error, the implementation should return a nonzero rustls_io_result, +which will be passed through to the caller. + +On POSIX systems, returning `errno` is convenient. + +On other systems, any appropriate error code works. + +It's best to make one write attempt to the network per call. Additional write will +be triggered by subsequent calls to one of the `_write_tls` methods. + +`userdata` is set to the value provided to `rustls_*_session_set_userdata`. In most +cases that should be a struct that contains, at a minimum, a file descriptor. + +The iov and out_n pointers are borrowed and should not be retained across calls. +""" + +alias ClientHelloUserdata = UnsafePointer[NoneType] +""" +Any context information the callback will receive when invoked. +""" + + +struct SliceU16: + """ + A read-only view on a Rust slice of 16-bit integers in platform endianness. + + This is used to pass data from rustls-ffi to callback functions provided + by the user of the API. + `len` indicates the number of bytes than can be safely read. + + The memory exposed is available as specified by the function + using this in its signature. For instance, when this is a parameter to a + callback, the lifetime will usually be the duration of the callback. + Functions that receive one of these must not dereference the data pointer + beyond the allowed lifetime. + """ + + var data: UnsafePointer[UInt16] + var len: Int + + +struct ClientHello: + """ + The TLS Client Hello information provided to a ClientHelloCallback function. + + `server_name` is the value of the ServerNameIndication extension provided + by the client. If the client did not send an SNI, the length of this + `rustls_string` will be 0. + + `signature_schemes` carries the values supplied by the client or, if the + client did not send this TLS extension, the default schemes in the rustls library. See: + . + + `alpn` carries the list of ALPN protocol names that the client proposed to + the server. Again, the length of this list will be 0 if none were supplied. + + All this data, when passed to a callback function, is only accessible during + the call and may not be modified. Users of this API must copy any values that + they want to access when the callback returned. + + EXPERIMENTAL: this feature of rustls-ffi is likely to change in the future, as + the rustls library is re-evaluating their current approach to client hello handling. + """ + + var server_name: StringRef + var signature_schemes: SliceU16 + var alpn: UnsafePointer[SliceSliceBytes] + + +alias ClientHelloCallback = fn ( + ClientHelloUserdata, UnsafePointer[ClientHello] +) -> UnsafePointer[CertifiedKey] +""" +Prototype of a callback that can be installed by the application at the +`rustls_server_config`. + +This callback will be invoked by a `rustls_connection` once the TLS client +hello message has been received. + +`userdata` will be set based on rustls_connection_set_userdata. + +`hello` gives the value of the available client announcements, as interpreted +by rustls. See the definition of `rustls_client_hello` for details. + +NOTE: +- the passed in `hello` and all its values are only available during the + callback invocations. +- the passed callback function must be safe to call multiple times concurrently + with the same userdata, unless there is only a single config and connection + where it is installed. + +EXPERIMENTAL: this feature of rustls-ffi is likely to change in the future, as +the rustls library is re-evaluating their current approach to client hello handling. +""" + +alias SessionStoreUserdata = UnsafePointer[NoneType] +""" +Any context information the callback will receive when invoked. +""" + +alias SessionStoreGetCallback = fn ( + SessionStoreUserdata, + UnsafePointer[SliceBytes], + Int32, + UnsafePointer[UInt8], + Int, + UnsafePointer[Int], +) -> UInt32 +""" +Prototype of a callback that can be installed by the application at the +`rustls_server_config` or `rustls_client_config`. + +This callback will be invoked by a TLS session when looking up the data +for a TLS session id. + +`userdata` will be supplied based on rustls_{client,server}_session_set_userdata. + +The `buf` points to `count` consecutive bytes where the +callback is expected to copy the result to. The number of copied bytes +needs to be written to `out_n`. The callback should not read any +data from `buf`. + +If the value to copy is larger than `count`, the callback should never +do a partial copy but instead remove the value from its store and +act as if it was never found. + +The callback should return RUSTLS_RESULT_OK to indicate that a value was +retrieved and written in its entirety into `buf`, or RUSTLS_RESULT_NOT_FOUND +if no session was retrieved. + +When `remove_after` is != 0, the returned data needs to be removed +from the store. + +NOTE: the passed in `key` and `buf` are only available during the +callback invocation. +NOTE: callbacks used in several sessions via a common config +must be implemented thread-safe. +""" + +alias SessionStorePutCallback = fn ( + SessionStoreUserdata, UnsafePointer[SliceBytes], UnsafePointer[SliceBytes] +) -> UInt32 +""" +Prototype of a callback that can be installed by the application at the +`rustls_server_config` or `rustls_client_config`. + +This callback will be invoked by a TLS session when a TLS session +been created and an id for later use is handed to the client/has +been received from the server. + +`userdata` will be supplied based on rustls_{client,server}_session_set_userdata. + +The callback should return RUSTLS_RESULT_OK to indicate that a value was +successfully stored, or RUSTLS_RESULT_IO on failure. + +NOTE: the passed in `key` and `val` are only available during the +callback invocation. +NOTE: callbacks used in several sessions via a common config +must be implemented thread-safe. +""" + +var ALL_VERSIONS = _rustls.get_symbol[UInt16]("RUSTLS_ALL_VERSIONS") +""" +Rustls' list of supported protocol versions. The length of the array is +given by `RUSTLS_ALL_VERSIONS_LEN`. +""" + +var ALL_VERSIONS_LEN = _rustls.get_symbol[Int]("RUSTLS_ALL_VERSIONS_LEN")[] +""" +The length of the array `RUSTLS_ALL_VERSIONS`. +""" + + +var DEFAULT_VERSIONS = _rustls.get_symbol[UInt16]("RUSTLS_DEFAULT_VERSIONS") +""" +Rustls' default list of protocol versions. The length of the array is +given by `RUSTLS_DEFAULT_VERSIONS_LEN`. +""" +var DEFAULT_VERSIONS_LEN = _rustls.get_symbol[Int]( + "RUSTLS_DEFAULT_VERSIONS_LEN" +)[] +""" +The length of the array `RUSTLS_DEFAULT_VERSIONS`. +""" + + +fn version() -> StaticString: + """ + Returns a static string containing the rustls-ffi version as well as the + rustls version. The string is alive for the lifetime of the program and does + not need to be freed. + """ + return StaticString( + unsafe_from_utf8_strref=_rustls.get_function[fn () -> StringRef]( + "rustls_version" + )() + ) + + +fn acceptor_new() -> UnsafePointer[Acceptor]: + """ + Create and return a new rustls_acceptor. + + Caller owns the pointed-to memory and must eventually free it with + `rustls_acceptor_free()`. + """ + return _rustls.get_function[fn () -> UnsafePointer[Acceptor]]( + "rustls_acceptor_new" + )() + + +fn acceptor_free(acceptor: UnsafePointer[Acceptor]): + """ + Free a rustls_acceptor. + + Arguments: + + acceptor: The rustls_acceptor to free. + + Calling with NULL is fine. Must not be called twice with the same value. + """ + _rustls.get_function[fn (UnsafePointer[Acceptor]) -> None]( + "rustls_acceptor_free" + )(acceptor) + + +fn acceptor_read_tls( + acceptor: UnsafePointer[Acceptor], + callback: ReadCallback, + userdata: UnsafePointer[NoneType], + out_n: UnsafePointer[Int], +) -> IoResult: + """ + Read some TLS bytes from the network into internal buffers. + + The actual network I/O is performed by `callback`, which you provide. + Rustls will invoke your callback with a suitable buffer to store the + read bytes into. You don't have to fill it up, just fill with as many + bytes as you get in one syscall. + + Arguments: + + acceptor: The rustls_acceptor to read bytes into. + callback: A function that will perform the actual network I/O. + Must be valid to call with the given userdata parameter until + this function call returns. + userdata: An opaque parameter to be passed directly to `callback`. + Note: this is distinct from the `userdata` parameter set with + `rustls_connection_set_userdata`. + out_n: An output parameter. This will be passed through to `callback`, + which should use it to store the number of bytes written. + + Returns: + + - 0: Success. You should call `rustls_acceptor_accept()` next. + - Any non-zero value: error. + + This function passes through return values from `callback`. Typically + `callback` should return an errno value. See `rustls_read_callback()` for + more details. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[Acceptor], + ReadCallback, + UnsafePointer[NoneType], + UnsafePointer[Int], + ) -> IoResult + ]("rustls_acceptor_read_tls")(acceptor, callback, userdata, out_n) + + +fn acceptor_accept( + acceptor: UnsafePointer[Acceptor], + out_accepted: UnsafePointer[UnsafePointer[Accepted]], + out_alert: UnsafePointer[UnsafePointer[AcceptedAlert]], +) -> Result: + """ + Parse all TLS bytes read so far. + + If those bytes make up a ClientHello, create a rustls_accepted from them. + + Arguments: + + acceptor: The rustls_acceptor to access. + out_accepted: An output parameter. The pointed-to pointer will be set + to a new rustls_accepted only when the function returns + RUSTLS_RESULT_OK. The memory is owned by the caller and must eventually + be freed + out_alert: An output parameter. The pointed-to pointer will be set + to a new rustls_accepted_alert only when the function returns + a non-OK result. The memory is owned by the caller and must eventually + be freed with rustls_accepted_alert_free. The caller should call + rustls_accepted_alert_write_tls to write the alert bytes to the TLS + connection before freeing the rustls_accepted_alert. + + At most one of out_accepted or out_alert will be set. + + Returns: + + - RUSTLS_RESULT_OK: a ClientHello has successfully been parsed. + A pointer to a newly allocated rustls_accepted has been written to + *out_accepted. + - RUSTLS_RESULT_ACCEPTOR_NOT_READY: a full ClientHello has not yet been read. + Read more TLS bytes to continue. + - Any other rustls_result: the TLS bytes read so far cannot be parsed + as a ClientHello, and reading additional bytes won't help. + + Memory and lifetimes: + + After this method returns RUSTLS_RESULT_OK, `acceptor` is + still allocated and valid. It needs to be freed regardless of success + or failure of this function. + + Calling `rustls_acceptor_accept()` multiple times on the same + `rustls_acceptor` is acceptable from a memory perspective but pointless + from a protocol perspective. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[Acceptor], + UnsafePointer[UnsafePointer[Accepted]], + UnsafePointer[UnsafePointer[AcceptedAlert]], + ) -> UInt32 + ]("rustls_acceptor_accept")(acceptor, out_accepted, out_alert) + + +fn accepted_server_name(accepted: UnsafePointer[Accepted]) -> StringRef: + """ + Get the server name indication (SNI) from the ClientHello. + + Arguments: + + accepted: The rustls_accepted to access. + + Returns: + + A rustls_str containing the SNI field. + + The returned value is valid until rustls_accepted_into_connection or + rustls_accepted_free is called on the same `accepted`. It is not owned + by the caller and does not need to be freed. + + This will be a zero-length rustls_str in these error cases: + + - The SNI contains a NUL byte. + - The `accepted` parameter was NULL. + - The `accepted` parameter was already transformed into a connection + with rustls_accepted_into_connection. + """ + return _rustls.get_function[fn (UnsafePointer[Accepted]) -> StringRef]( + "rustls_accepted_server_name" + )(accepted) + + +fn accepted_signature_scheme( + accepted: UnsafePointer[Accepted], i: Int +) -> UInt16: + """ + Get the i'th in the list of signature schemes offered in the ClientHello. + + This is useful in selecting a server certificate when there are multiple + available for the same server name, for instance when selecting + between an RSA and an ECDSA certificate. + + Arguments: + + accepted: The rustls_accepted to access. + i: Fetch the signature scheme at this offset. + + Returns: + + A TLS Signature Scheme from + + This will be 0 in these cases: + - i is greater than the number of available cipher suites. + - accepted is NULL. + - rustls_accepted_into_connection has already been called with `accepted`. + """ + return _rustls.get_function[fn (UnsafePointer[Accepted], Int) -> UInt16]( + "rustls_accepted_signature_scheme" + )(accepted, i) + + +fn accepted_cipher_suite(accepted: UnsafePointer[Accepted], i: Int) -> UInt16: + """ + Get the i'th in the list of cipher suites offered in the ClientHello. + + Arguments: + + accepted: The rustls_accepted to access. + i: Fetch the cipher suite at this offset. + + Returns: + + A cipher suite value from + + This will be 0 in these cases: + - i is greater than the number of available cipher suites. + - accepted is NULL. + - rustls_accepted_into_connection has already been called with `accepted`. + + Note that 0 is technically a valid cipher suite "TLS_NULL_WITH_NULL_NULL", + but this library will never support null ciphers. + """ + return _rustls.get_function[fn (UnsafePointer[Accepted], Int) -> UInt16]( + "rustls_accepted_cipher_suite" + )(accepted, i) + + +fn accepted_alpn(accepted: UnsafePointer[Accepted], i: Int) -> SliceBytes: + """ + Get the i'th in the list of ALPN protocols requested in the ClientHello. + + accepted: The rustls_accepted to access. + i: Fetch the ALPN value at this offset. + + Returns: + + A rustls_slice_bytes containing the i'th ALPN protocol. This may + contain internal NUL bytes and is not guaranteed to contain valid + UTF-8. + + This will be a zero-length rustls_slice bytes in these cases: + - i is greater than the number of offered ALPN protocols. + - The client did not offer the ALPN extension. + - The `accepted` parameter was already transformed into a connection + with rustls_accepted_into_connection. + + The returned value is valid until rustls_accepted_into_connection or + rustls_accepted_free is called on the same `accepted`. It is not owned + by the caller and does not need to be freed. + + If you are calling this from Rust, note that the `'static` lifetime + in the return signature is fake and must not be relied upon. + """ + return _rustls.get_function[ + fn (UnsafePointer[Accepted], Int) -> SliceBytes + ]("")(accepted, i) + + +fn accepted_into_connection( + accepted: UnsafePointer[Accepted], + config: UnsafePointer[ServerConfig], + out_conn: UnsafePointer[UnsafePointer[Connection]], + out_alert: UnsafePointer[UnsafePointer[AcceptedAlert]], +) -> Result: + """ + Turn a rustls_accepted into a rustls_connection, given the provided + rustls_server_config. + + Arguments: + + accepted: The rustls_accepted to transform. + config: The configuration with which to create this connection. + out_conn: An output parameter. The pointed-to pointer will be set + to a new rustls_connection only when the function returns + RUSTLS_RESULT_OK. + out_alert: An output parameter. The pointed-to pointer will be set + to a new rustls_accepted_alert when, and only when, the function returns + a non-OK result. The memory is owned by the caller and must eventually + be freed with rustls_accepted_alert_free. The caller should call + rustls_accepted_alert_write_tls to write the alert bytes to + the TLS connection before freeing the rustls_accepted_alert. + + At most one of out_conn or out_alert will be set. + + Returns: + + - RUSTLS_RESULT_OK: The `accepted` parameter was successfully + transformed into a rustls_connection, and *out_conn was written to. + - RUSTLS_RESULT_ALREADY_USED: This function was called twice on the + same rustls_connection. + - RUSTLS_RESULT_NULL_PARAMETER: One of the input parameters was NULL. + + Memory and lifetimes: + + In both success and failure cases, this consumes the contents of + `accepted` but does not free its allocated memory. In either case, + call rustls_accepted_free to avoid a memory leak. + + Calling accessor methods on an `accepted` after consuming it will + return zero or default values. + + The rustls_connection emitted by this function in the success case + is owned by the caller and must eventually be freed. + + This function does not take ownership of `config`. It does increment + `config`'s internal reference count, indicating that the + rustls_connection may hold a reference to it until it is done. + See the documentation for rustls_connection for details. + """ + return _rustls.get_function[fn () -> Result]( + "rustls_accepted_into_connection" + )() + + +fn accepted_free(accepted: UnsafePointer[Accepted]): + """ + Free a rustls_accepted. + + Arguments: + + accepted: The rustls_accepted to free. + + Calling with NULL is fine. Must not be called twice with the same value. + """ + pass + + +fn accepted_alert_write_tls( + accepted_alert: UnsafePointer[AcceptedAlert], + callback: WriteCallback, + userdata: UnsafePointer[NoneType], + out_n: UnsafePointer[Int], +) -> IoResult: + """ + Write some TLS bytes (an alert) to the network. + + The actual network I/O is performed by `callback`, which you provide. + Rustls will invoke your callback with a suitable buffer containing TLS + bytes to send. You don't have to write them all, just as many as you can + in one syscall. + + The `userdata` parameter is passed through directly to `callback`. Note that + this is distinct from the `userdata` parameter set with + `rustls_connection_set_userdata`. + + Returns 0 for success, or an errno value on error. Passes through return values + from callback. See [`rustls_write_callback`] or [`AcceptedAlert`] for + more details. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[AcceptedAlert], + WriteCallback, + UnsafePointer[NoneType], + UnsafePointer[Int], + ) -> IoResult + ]("rustls_accepted_alert_write_tls")( + accepted_alert, callback, userdata, out_n + ) + + +fn accepted_alert_free(accepted_alert: UnsafePointer[AcceptedAlert]): + """ + Free a rustls_accepted_alert. + + Arguments: + + accepted_alert: The rustls_accepted_alert to free. + + Calling with NULL is fine. Must not be called twice with the same value. + """ + _rustls.get_function[fn (UnsafePointer[AcceptedAlert]) -> None]( + "rustls_accepted_alert_free" + )(accepted_alert) + + +fn certificate_get_der( + cert: UnsafePointer[Certificate], + out_der_data: UnsafePointer[UnsafePointer[UInt8]], + out_der_len: UnsafePointer[Int], +) -> Result: + """ + Get the DER data of the certificate itself. + The data is owned by the certificate and has the same lifetime. + """ + return _rustls.get_function[fn () -> Result]("rustls_certificate_get_der")() + + +fn supported_ciphersuite_get_suite( + supported_ciphersuite: UnsafePointer[SupportedCiphersuite], +) -> UInt16: + """ + Return a 16-bit unsigned integer corresponding to this cipher suite's assignment from + . + + The bytes from the assignment are interpreted in network order. + """ + return _rustls.get_function[ + fn (UnsafePointer[SupportedCiphersuite]) -> UInt16 + ]("rustls_supported_ciphersuite_get_suite")(supported_ciphersuite) + + +fn supported_ciphersuite_get_name( + supported_ciphersuite: UnsafePointer[SupportedCiphersuite], +) -> StaticString: + """ + Returns the name of the ciphersuite as a `rustls_str`. + + If the provided ciphersuite is invalid, the `rustls_str` will contain the + empty string. The lifetime of the `rustls_str` is the lifetime of the program, + it does not need to be freed. + """ + return StaticString( + unsafe_from_utf8_strref=_rustls.get_function[ + fn (UnsafePointer[SupportedCiphersuite]) -> StringRef + ]("rustls_supported_ciphersuite_get_name")(supported_ciphersuite) + ) + + +fn supported_ciphersuite_protocol_version( + supported_ciphersuite: UnsafePointer[SupportedCiphersuite], +) -> TlsVersion: + """ + Returns the `rustls_tls_version` of the ciphersuite. + + See also `RUSTLS_ALL_VERSIONS`. + """ + return _rustls.get_function[ + fn (UnsafePointer[SupportedCiphersuite]) -> TlsVersion + ]("rustls_supported_ciphersuite_protocol_version")(supported_ciphersuite) + + +fn certified_key_build( + cert_chain: UnsafePointer[UInt8], + cert_chain_len: Int, + private_key: UnsafePointer[UInt8], + private_key_len: Int, + certified_key_out: UnsafePointer[UnsafePointer[CertifiedKey]], +) -> Result: + """ + Build a `rustls_certified_key` from a certificate chain and a private key + and the default process-wide crypto provider. + + `cert_chain` must point to a buffer of `cert_chain_len` bytes, containing + a series of PEM-encoded certificates, with the end-entity (leaf) + certificate first. + + `private_key` must point to a buffer of `private_key_len` bytes, containing + a PEM-encoded private key in either PKCS#1, PKCS#8 or SEC#1 format when + using `aws-lc-rs` as the crypto provider. Supported formats may vary by + provider. + + On success, this writes a pointer to the newly created + `rustls_certified_key` in `certified_key_out`. That pointer must later + be freed with `rustls_certified_key_free` to avoid memory leaks. Note that + internally, this is an atomically reference-counted pointer, so even after + the original caller has called `rustls_certified_key_free`, other objects + may retain a pointer to the object. The memory will be freed when all + references are gone. + + This function does not take ownership of any of its input pointers. It + parses the pointed-to data and makes a copy of the result. You may + free the cert_chain and private_key pointers after calling it. + + Typically, you will build a `rustls_certified_key`, use it to create a + `rustls_server_config` (which increments the reference count), and then + immediately call `rustls_certified_key_free`. That leaves the + `rustls_server_config` in possession of the sole reference, so the + `rustls_certified_key`'s memory will automatically be released when + the `rustls_server_config` is freed. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[UInt8], + Int, + UnsafePointer[UInt8], + Int, + UnsafePointer[UnsafePointer[CertifiedKey]], + ) -> UInt32 + ]("rustls_certified_key_build")( + cert_chain, + cert_chain_len, + private_key, + private_key_len, + certified_key_out, + ) + + +fn certified_key_build_with_signing_key( + cert_chain: UnsafePointer[UInt8], + cert_chain_len: Int, + signing_key: UnsafePointer[SigningKey], + certified_key: UnsafePointer[UnsafePointer[CertifiedKey]], +) -> Result: + """ + Build a `rustls_certified_key` from a certificate chain and a + `rustls_signing_key`. + + `cert_chain` must point to a buffer of `cert_chain_len` bytes, containing + a series of PEM-encoded certificates, with the end-entity (leaf) + certificate first. + + `signing_key` must point to a `rustls_signing_key` loaded using a + `rustls_crypto_provider` and `rustls_crypto_provider_load_key()`. + + On success, this writes a pointer to the newly created + `rustls_certified_key` in `certified_key_out`. That pointer must later + be freed with `rustls_certified_key_free` to avoid memory leaks. Note that + internally, this is an atomically reference-counted pointer, so even after + the original caller has called `rustls_certified_key_free`, other objects + may retain a pointer to the object. The memory will be freed when all + references are gone. + + This function does not take ownership of any of its input pointers. It + parses the pointed-to data and makes a copy of the result. You may + free the cert_chain and private_key pointers after calling it. + + Typically, you will build a `rustls_certified_key`, use it to create a + `rustls_server_config` (which increments the reference count), and then + immediately call `rustls_certified_key_free`. That leaves the + `rustls_server_config` in possession of the sole reference, so the + `rustls_certified_key`'s memory will automatically be released when + the `rustls_server_config` is freed. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[UInt8], + Int, + UnsafePointer[SigningKey], + UnsafePointer[UnsafePointer[CertifiedKey]], + ) -> UInt32 + ]("rustls_certified_key_build_with_signing_key")( + cert_chain, cert_chain_len, signing_key, certified_key + ) + + +fn certified_key_get_certificate( + certified_key: UnsafePointer[CertifiedKey], i: Int +) -> UnsafePointer[Certificate]: + """ + Return the i-th rustls_certificate in the rustls_certified_key. + + 0 gives the end-entity certificate. 1 and higher give certificates from the chain. + + Indexes higher than the last available certificate return NULL. + + The returned certificate is valid until the rustls_certified_key is freed. + """ + return _rustls.get_function[ + fn (UnsafePointer[CertifiedKey], Int) -> UnsafePointer[Certificate] + ]("rustls_certified_key_get_certificate")(certified_key, i) + + +fn certified_key_clone_with_ocsp( + certified_key: UnsafePointer[CertifiedKey], + ocsp_response: UnsafePointer[SliceBytes], + cloned_key_out: UnsafePointer[UnsafePointer[CertifiedKey]], +) -> Result: + """ + Create a copy of the rustls_certified_key with the given OCSP response data + as DER encoded bytes. + + The OCSP response may be given as NULL to clear any possibly present OCSP + data from the cloned key. + + The cloned key is independent from its original and needs to be freed + by the application. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[CertifiedKey], + UnsafePointer[SliceBytes], + UnsafePointer[UnsafePointer[CertifiedKey]], + ) -> UInt32 + ]("rustls_certified_key_clone_with_ocsp")( + certified_key, ocsp_response, cloned_key_out + ) + + +fn certified_key_free(key: UnsafePointer[CertifiedKey]): + """ + "Free" a certified_key previously returned from `rustls_certified_key_build`. + + Since certified_key is actually an atomically reference-counted pointer, + extant certified_key may still hold an internal reference to the Rust object. + + However, C code must consider this pointer unusable after "free"ing it. + + Calling with NULL is fine. Must not be called twice with the same value. + """ + return _rustls.get_function[fn (UnsafePointer[CertifiedKey]) -> None]( + "rustls_certified_key_free" + )(key) + + +fn root_cert_store_builder_new() -> UnsafePointer[RootCertStoreBuilder]: + """ + Create a `rustls_root_cert_store_builder`. + + Caller owns the memory and may free it with `rustls_root_cert_store_free`, regardless of + whether `rustls_root_cert_store_builder_build` was called. + + If you wish to abandon the builder without calling `rustls_root_cert_store_builder_build`, + it must be freed with `rustls_root_cert_store_builder_free`. + """ + return _rustls.get_function[fn () -> UnsafePointer[RootCertStoreBuilder]]( + "rustls_root_cert_store_builder_new" + )() + + +fn root_cert_store_builder_add_pem( + builder: UnsafePointer[RootCertStoreBuilder], + pem: UnsafePointer[UInt8], + pem_len: Int, + strict: Bool, +) -> Result: + """ + Add one or more certificates to the root cert store builder using PEM + encoded data. + + When `strict` is true an error will return a `CertificateParseError` + result. So will an attempt to parse data that has zero certificates. + + When `strict` is false, unparseable root certificates will be ignored. + This may be useful on systems that have syntactically invalid root + certificates. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[RootCertStoreBuilder], UnsafePointer[UInt8], Int, Bool + ) -> UInt32 + ]("rustls_root_cert_store_builder_add_pem")(builder, pem, pem_len, strict) + + +fn root_cert_store_builder_load_roots_from_file( + builder: UnsafePointer[RootCertStoreBuilder], + filename: UnsafePointer[Int8], + strict: Bool, +) -> Result: + """ + Add one or more certificates to the root cert store builder using PEM + encoded data read from the named file. + + When `strict` is true an error will return a `CertificateParseError` + result. So will an attempt to parse data that has zero certificates. + + When `strict` is false, unparseable root certificates will be ignored. + This may be useful on systems that have syntactically invalid root + certificates. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[RootCertStoreBuilder], + UnsafePointer[Int8], + Bool, + ) -> UInt32 + ]("rustls_root_cert_store_builder_load_roots_from_file")( + builder, filename, strict + ) + + +fn root_cert_store_builder_build( + builder: UnsafePointer[RootCertStoreBuilder], + root_cert_store_out: UnsafePointer[UnsafePointer[RootCertStore]], +) -> Result: + """ + Create a new `rustls_root_cert_store` from the builder. + + The builder is consumed and cannot be used again, but must still be freed. + + The root cert store can be used in several `rustls_web_pki_client_cert_verifier_builder_new` + instances and must be freed by the application when no longer needed. See the documentation of + `rustls_root_cert_store_free` for details about lifetime. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[RootCertStoreBuilder], + UnsafePointer[UnsafePointer[RootCertStore]], + ) -> UInt32 + ]("rustls_root_cert_store_builder_build")(builder, root_cert_store_out) + + +fn root_cert_store_builder_free( + builder: UnsafePointer[RootCertStoreBuilder], +): + """ + Free a `rustls_root_cert_store_builder` previously returned from + `rustls_root_cert_store_builder_new`. + + Calling with NULL is fine. Must not be called twice with the same value. + """ + _rustls.get_function[fn (UnsafePointer[RootCertStoreBuilder]) -> None]( + "rustls_root_cert_store_builder_free" + )(builder) + + +fn root_cert_store_free(store: UnsafePointer[RootCertStore]): + """ + Free a rustls_root_cert_store previously returned from rustls_root_cert_store_builder_build. + + Calling with NULL is fine. Must not be called twice with the same value. + """ + _rustls.get_function[fn (UnsafePointer[RootCertStore]) -> None]( + "rustls_root_cert_store_free" + )(store) + + +fn client_cert_verifier_free( + verifier: UnsafePointer[ClientCertVerifier], +): + """ + Free a `rustls_client_cert_verifier` previously returned from + `rustls_client_cert_verifier_builder_build`. Calling with NULL is fine. Must not be + called twice with the same value. + """ + _rustls.get_function[fn (UnsafePointer[ClientCertVerifier]) -> None]( + "rustls_client_cert_verifier_free" + )(verifier) + + +fn web_pki_client_cert_verifier_builder_new( + store: UnsafePointer[RootCertStore], +) -> UnsafePointer[WebPkiClientCertVerifierBuilder]: + """ + Create a `rustls_web_pki_client_cert_verifier_builder` using the process-wide default + cryptography provider. + + Caller owns the memory and may eventually call `rustls_web_pki_client_cert_verifier_builder_free` + to free it, whether or not `rustls_web_pki_client_cert_verifier_builder_build` was called. + + Without further modification the builder will produce a client certificate verifier that + will require a client present a client certificate that chains to one of the trust anchors + in the provided `rustls_root_cert_store`. The root cert store must not be empty. + + Revocation checking will not be performed unless + `rustls_web_pki_client_cert_verifier_builder_add_crl` is used to add certificate revocation + lists (CRLs) to the builder. If CRLs are added, revocation checking will be performed + for the entire certificate chain unless + `rustls_web_pki_client_cert_verifier_only_check_end_entity_revocation` is used. Unknown + revocation status for certificates considered for revocation status will be treated as + an error unless `rustls_web_pki_client_cert_verifier_allow_unknown_revocation_status` is + used. + + Unauthenticated clients will not be permitted unless + `rustls_web_pki_client_cert_verifier_builder_allow_unauthenticated` is used. + + This copies the contents of the `rustls_root_cert_store`. It does not take + ownership of the pointed-to data. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[RootCertStore], + ) -> UnsafePointer[WebPkiClientCertVerifierBuilder] + ]("rustls_web_pki_client_cert_verifier_builder_new")(store) + + +fn web_pki_client_cert_verifier_builder_new_with_provider( + provider: UnsafePointer[CryptoProvider], store: UnsafePointer[RootCertStore] +) -> UnsafePointer[WebPkiClientCertVerifierBuilder]: + """ + Create a `rustls_web_pki_client_cert_verifier_builder` using the specified + cryptography provider. + + Caller owns the memory and may eventually call + `rustls_web_pki_client_cert_verifier_builder_free` to free it, whether or + not `rustls_web_pki_client_cert_verifier_builder_build` was called. + + Without further modification the builder will produce a client certificate verifier that + will require a client present a client certificate that chains to one of the trust anchors + in the provided `rustls_root_cert_store`. The root cert store must not be empty. + + Revocation checking will not be performed unless + `rustls_web_pki_client_cert_verifier_builder_add_crl` is used to add certificate revocation + lists (CRLs) to the builder. If CRLs are added, revocation checking will be performed + for the entire certificate chain unless + `rustls_web_pki_client_cert_verifier_only_check_end_entity_revocation` is used. Unknown + revocation status for certificates considered for revocation status will be treated as + an error unless `rustls_web_pki_client_cert_verifier_allow_unknown_revocation_status` is + used. + + Unauthenticated clients will not be permitted unless + `rustls_web_pki_client_cert_verifier_builder_allow_unauthenticated` is used. + + This copies the contents of the `rustls_root_cert_store`. It does not take + ownership of the pointed-to data. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[CryptoProvider], UnsafePointer[RootCertStore] + ) -> UnsafePointer[WebPkiClientCertVerifierBuilder] + ]("rustls_web_pki_client_cert_verifier_builder_new_with_provider")( + provider, store + ) + + +fn web_pki_client_cert_verifier_builder_add_crl( + builder: UnsafePointer[WebPkiClientCertVerifierBuilder], + crl_pem: UnsafePointer[UInt8], + crl_pem_len: Int, +) -> Result: + """ + Add one or more certificate revocation lists (CRLs) to the client certificate verifier + builder by reading the CRL content from the provided buffer of PEM encoded content. + + By default revocation checking will be performed on the entire certificate chain. To only + check the revocation status of the end entity certificate, use + `rustls_web_pki_client_cert_verifier_only_check_end_entity_revocation`. + + This function returns an error if the provided buffer is not valid PEM encoded content. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[WebPkiClientCertVerifierBuilder], + UnsafePointer[UInt8], + Int, + ) -> UInt32 + ]("rustls_web_pki_client_cert_verifier_builder_add_crl")( + builder, crl_pem, crl_pem_len + ) + + +fn web_pki_client_cert_verifier_only_check_end_entity_revocation( + builder: UnsafePointer[WebPkiClientCertVerifierBuilder], +) -> Result: + """ + When CRLs are provided with `rustls_web_pki_client_cert_verifier_builder_add_crl`, only + check the revocation status of end entity certificates, ignoring any intermediate certificates + in the chain. + """ + return _rustls.get_function[ + fn (UnsafePointer[WebPkiClientCertVerifierBuilder],) -> UInt32 + ]("rustls_web_pki_client_cert_verifier_only_check_end_entity_revocation")( + builder + ) + + +fn web_pki_client_cert_verifier_allow_unknown_revocation_status( + builder: UnsafePointer[WebPkiClientCertVerifierBuilder], +) -> Result: + """ + When CRLs are provided with `rustls_web_pki_client_cert_verifier_builder_add_crl`, and it + isn't possible to determine the revocation status of a considered certificate, do not treat + it as an error condition. + + Overrides the default behavior where unknown revocation status is considered an error. + """ + return _rustls.get_function[fn () -> Result]( + "rustls_web_pki_client_cert_verifier_allow_unknown_revocation_status" + )() + + +fn web_pki_client_cert_verifier_builder_allow_unauthenticated( + builder: UnsafePointer[WebPkiClientCertVerifierBuilder], +) -> Result: + """ + Allow unauthenticated anonymous clients in addition to those that present a client + certificate that chains to one of the verifier's configured trust anchors. + """ + return _rustls.get_function[ + fn (UnsafePointer[WebPkiClientCertVerifierBuilder]) -> UInt32 + ]("rustls_web_pki_client_cert_verifier_builder_allow_unauthenticated")( + builder + ) + + +fn web_pki_client_cert_verifier_clear_root_hint_subjects( + builder: UnsafePointer[WebPkiClientCertVerifierBuilder], +) -> Result: + """ + Clear the list of trust anchor hint subjects. + + By default, the client cert verifier will use the subjects provided by the root cert + store configured for client authentication. Calling this function will remove these + hint subjects, indicating the client should make a free choice of which certificate + to send. + """ + return _rustls.get_function[ + fn (UnsafePointer[WebPkiClientCertVerifierBuilder],) -> UInt32 + ]("rustls_web_pki_client_cert_verifier_clear_root_hint_subjects")(builder) + + +fn web_pki_client_cert_verifier_add_root_hint_subjects( + builder: UnsafePointer[WebPkiClientCertVerifierBuilder], + store: UnsafePointer[RootCertStore], +) -> Result: + """ + Add additional distinguished names to the list of trust anchor hint subjects. + + By default, the client cert verifier will use the subjects provided by the root cert + store configured for client authentication. Calling this function will add to these + existing hint subjects. Calling this function with an empty `store` will have no + effect, use `rustls_web_pki_client_cert_verifier_clear_root_hint_subjects` to clear + the subject hints. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[WebPkiClientCertVerifierBuilder], + UnsafePointer[RootCertStore], + ) -> UInt32 + ]("rustls_web_pki_client_cert_verifier_add_root_hint_subjects")( + builder, store + ) + + +fn web_pki_client_cert_verifier_builder_build( + builder: UnsafePointer[WebPkiClientCertVerifierBuilder], + verifier_out: UnsafePointer[UnsafePointer[ClientCertVerifier]], +) -> Result: + """ + Create a new client certificate verifier from the builder. + + The builder is consumed and cannot be used again, but must still be freed. + + The verifier can be used in several `rustls_server_config` instances and must be + freed by the application when no longer needed. See the documentation of + `rustls_web_pki_client_cert_verifier_builder_free` for details about lifetime. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[WebPkiClientCertVerifierBuilder], + UnsafePointer[UnsafePointer[ClientCertVerifier]], + ) -> UInt32 + ]("rustls_web_pki_client_cert_verifier_builder_build")( + builder, verifier_out + ) + + +fn web_pki_client_cert_verifier_builder_free( + builder: UnsafePointer[WebPkiClientCertVerifierBuilder], +): + """ + Free a `rustls_client_cert_verifier_builder` previously returned from + `rustls_client_cert_verifier_builder_new`. + + Calling with NULL is fine. Must not be called twice with the same value. + """ + _rustls.get_function[ + fn (UnsafePointer[WebPkiClientCertVerifierBuilder]) -> None + ]("rustls_web_pki_client_cert_verifier_builder_free")(builder) + + +fn web_pki_server_cert_verifier_builder_new( + store: UnsafePointer[RootCertStore], +) -> UnsafePointer[WebPkiServerCertVerifierBuilder]: + """ + Create a `rustls_web_pki_server_cert_verifier_builder` using the process-wide default + crypto provider. Caller owns the memory and may free it with + + Caller owns the memory and may free it with `rustls_web_pki_server_cert_verifier_builder_free`, + regardless of whether `rustls_web_pki_server_cert_verifier_builder_build` was called. + + Without further modification the builder will produce a server certificate verifier that + will require a server present a certificate that chains to one of the trust anchors + in the provided `rustls_root_cert_store`. The root cert store must not be empty. + + Revocation checking will not be performed unless + `rustls_web_pki_server_cert_verifier_builder_add_crl` is used to add certificate revocation + lists (CRLs) to the builder. If CRLs are added, revocation checking will be performed + for the entire certificate chain unless + `rustls_web_pki_server_cert_verifier_only_check_end_entity_revocation` is used. Unknown + revocation status for certificates considered for revocation status will be treated as + an error unless `rustls_web_pki_server_cert_verifier_allow_unknown_revocation_status` is + used. + + This copies the contents of the `rustls_root_cert_store`. It does not take + ownership of the pointed-to data. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[RootCertStore], + ) -> UnsafePointer[WebPkiServerCertVerifierBuilder] + ]("rustls_web_pki_server_cert_verifier_builder_new")(store) + + +fn web_pki_server_cert_verifier_builder_new_with_provider( + provider: UnsafePointer[CryptoProvider], store: UnsafePointer[RootCertStore] +) -> UnsafePointer[WebPkiServerCertVerifierBuilder]: + """ + Create a `rustls_web_pki_server_cert_verifier_builder` using the specified + crypto provider. Caller owns the memory and may free it with + `rustls_web_pki_server_cert_verifier_builder_free`, regardless of whether + `rustls_web_pki_server_cert_verifier_builder_build` was called. + + Without further modification the builder will produce a server certificate verifier that + will require a server present a certificate that chains to one of the trust anchors + in the provided `rustls_root_cert_store`. The root cert store must not be empty. + + Revocation checking will not be performed unless + `rustls_web_pki_server_cert_verifier_builder_add_crl` is used to add certificate revocation + lists (CRLs) to the builder. If CRLs are added, revocation checking will be performed + for the entire certificate chain unless + `rustls_web_pki_server_cert_verifier_only_check_end_entity_revocation` is used. Unknown + revocation status for certificates considered for revocation status will be treated as + an error unless `rustls_web_pki_server_cert_verifier_allow_unknown_revocation_status` is + used. + + This copies the contents of the `rustls_root_cert_store`. It does not take + ownership of the pointed-to data. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[CryptoProvider], UnsafePointer[RootCertStore] + ) -> UnsafePointer[WebPkiServerCertVerifierBuilder] + ]("rustls_web_pki_server_cert_verifier_builder_new_with_provider")( + provider, store + ) + + +fn web_pki_server_cert_verifier_builder_add_crl( + builder: UnsafePointer[WebPkiServerCertVerifierBuilder], + crl_pem: UnsafePointer[UInt8], + crl_pem_len: Int, +) -> Result: + """ + Add one or more certificate revocation lists (CRLs) to the server certificate verifier + builder by reading the CRL content from the provided buffer of PEM encoded content. + + By default revocation checking will be performed on the entire certificate chain. To only + check the revocation status of the end entity certificate, use + `rustls_web_pki_server_cert_verifier_only_check_end_entity_revocation`. + + This function returns an error if the provided buffer is not valid PEM encoded content. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[WebPkiServerCertVerifierBuilder], + UnsafePointer[UInt8], + Int, + ) -> UInt32 + ]("rustls_web_pki_server_cert_verifier_builder_add_crl")( + builder, crl_pem, crl_pem_len + ) + + +fn web_pki_server_cert_verifier_only_check_end_entity_revocation( + builder: UnsafePointer[WebPkiServerCertVerifierBuilder], +) -> Result: + """ + When CRLs are provided with `rustls_web_pki_server_cert_verifier_builder_add_crl`, only + check the revocation status of end entity certificates, ignoring any intermediate certificates + in the chain. + """ + return _rustls.get_function[ + fn (UnsafePointer[WebPkiServerCertVerifierBuilder]) -> UInt32 + ]("rustls_web_pki_server_cert_verifier_only_check_end_entity_revocation")( + builder + ) + + +fn web_pki_server_cert_verifier_allow_unknown_revocation_status( + builder: UnsafePointer[WebPkiServerCertVerifierBuilder], +) -> Result: + """ + When CRLs are provided with `rustls_web_pki_server_cert_verifier_builder_add_crl`, and it + isn't possible to determine the revocation status of a considered certificate, do not treat + it as an error condition. + + Overrides the default behavior where unknown revocation status is considered an error. + """ + return _rustls.get_function[ + fn (UnsafePointer[WebPkiServerCertVerifierBuilder]) -> UInt32 + ]("rustls_web_pki_server_cert_verifier_allow_unknown_revocation_status")( + builder + ) + + +fn web_pki_server_cert_verifier_builder_build( + builder: UnsafePointer[WebPkiServerCertVerifierBuilder], + verifier_out: UnsafePointer[UnsafePointer[ServerCertVerifier]], +) -> Result: + """ + Create a new server certificate verifier from the builder. + + The builder is consumed and cannot be used again, but must still be freed. + + The verifier can be used in several `rustls_client_config` instances and must be + freed by the application when no longer needed. See the documentation of + `rustls_web_pki_server_cert_verifier_builder_free` for details about lifetime. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[WebPkiServerCertVerifierBuilder], + UnsafePointer[UnsafePointer[ServerCertVerifier]], + ) -> UInt32 + ]("rustls_web_pki_server_cert_verifier_builder_build")( + builder, verifier_out + ) + + +fn web_pki_server_cert_verifier_builder_free( + builder: UnsafePointer[WebPkiServerCertVerifierBuilder], +): + """ + Free a `rustls_server_cert_verifier_builder` previously returned from + `rustls_server_cert_verifier_builder_new`. + + Calling with NULL is fine. Must not be called twice with the same value. + """ + _rustls.get_function[ + fn (UnsafePointer[WebPkiServerCertVerifierBuilder]) -> None + ]("rustls_web_pki_server_cert_verifier_builder_free")(builder) + + +fn platform_server_cert_verifier( + verifier_out: UnsafePointer[UnsafePointer[ServerCertVerifier]], +) -> Result: + """ + Create a verifier that uses the default behavior for the current platform. + + This uses [`rustls-platform-verifier`][]. + + The verifier can be used in several `rustls_client_config` instances and must be freed by + the application using `rustls_server_cert_verifier_free` when no longer needed. + + [`rustls-platform-verifier`]: https://github.com/rustls/rustls-platform-verifier + """ + return _rustls.get_function[ + fn (UnsafePointer[UnsafePointer[ServerCertVerifier]],) -> UInt32 + ]("rustls_platform_server_cert_verifier")(verifier_out) + + +fn platform_server_cert_verifier_with_provider( + provider: UnsafePointer[CryptoProvider], +) -> UnsafePointer[ServerCertVerifier]: + """ + Create a verifier that uses the default behavior for the current platform. + + This uses [`rustls-platform-verifier`][] and the specified crypto provider. + + The verifier can be used in several `rustls_client_config` instances and must be freed by + the application using `rustls_server_cert_verifier_free` when no longer needed. + + [`rustls-platform-verifier`]: https://github.com/rustls/rustls-platform-verifier + """ + return _rustls.get_function[ + fn (UnsafePointer[CryptoProvider]) -> UnsafePointer[ServerCertVerifier] + ]("rustls_platform_server_cert_verifier_with_provider")(provider) + + +fn server_cert_verifier_free( + verifier: UnsafePointer[ServerCertVerifier], +): + """ + Free a `rustls_server_cert_verifier` previously returned from + `rustls_server_cert_verifier_builder_build` or `rustls_platform_server_cert_verifier`. + + Calling with NULL is fine. Must not be called twice with the same value. + """ + _rustls.get_function[fn (UnsafePointer[ServerCertVerifier]) -> None]( + "rustls_server_cert_verifier_free" + )(verifier) + + +fn client_config_builder_new() -> UnsafePointer[ClientConfigBuilder]: + """ + Create a rustls_client_config_builder using the process default crypto provider. + + Caller owns the memory and must eventually call `rustls_client_config_builder_build`, + then free the resulting `rustls_client_config`. + + Alternatively, if an error occurs or, you don't wish to build a config, + call `rustls_client_config_builder_free` to free the builder directly. + + This uses the process default provider's values for the cipher suites and key + exchange groups, as well as safe defaults for protocol versions. + + This starts out with no trusted roots. Caller must add roots with + rustls_client_config_builder_load_roots_from_file or provide a custom verifier. + """ + return _rustls.get_function[fn () -> UnsafePointer[ClientConfigBuilder]]( + "rustls_client_config_builder_new" + )() + + +fn client_config_builder_new_custom( + provider: UnsafePointer[CryptoProvider], + tls_versions: UnsafePointer[UInt16], + tls_versions_len: Int, + builder_out: UnsafePointer[UnsafePointer[ClientConfigBuilder]], +) -> Result: + """ + Create a rustls_client_config_builder using the specified crypto provider. + + Caller owns the memory and must eventually call `rustls_client_config_builder_build`, + then free the resulting `rustls_client_config`. + + Alternatively, if an error occurs or, you don't wish to build a config, + call `rustls_client_config_builder_free` to free the builder directly. + + `tls_version` sets the TLS protocol versions to use when negotiating a TLS session. + `tls_version` is the version of the protocol, as defined in rfc8446, + ch. 4.2.1 and end of ch. 5.1. Some values are defined in + `rustls_tls_version` for convenience, and the arrays + RUSTLS_DEFAULT_VERSIONS or RUSTLS_ALL_VERSIONS can be used directly. + + `tls_versions` will only be used during the call and the application retains + ownership. `tls_versions_len` is the number of consecutive `uint16_t` + pointed to by `tls_versions`. + + Ciphersuites are configured separately via the crypto provider. See + `rustls_crypto_provider_builder_set_cipher_suites` for more information. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[CryptoProvider], + UnsafePointer[UInt16], + Int, + UnsafePointer[UnsafePointer[ClientConfigBuilder]], + ) -> UInt32 + ]("rustls_client_config_builder_new_custom")( + provider, tls_versions, tls_versions_len, builder_out + ) + + +fn client_config_builder_dangerous_set_certificate_verifier( + config_builder: UnsafePointer[ClientConfigBuilder], + callback: VerifyServerCertCallback, +) -> Result: + """ + Set a custom server certificate verifier using the builder crypto provider. + Returns rustls_result::NoDefaultCryptoProvider if no process default crypto + provider has been set, and the builder was not constructed with an explicit + provider choice. + + The callback must not capture any of the pointers in its + rustls_verify_server_cert_params. + If `userdata` has been set with rustls_connection_set_userdata, it + will be passed to the callback. Otherwise the userdata param passed to + the callback will be NULL. + + The callback must be safe to call on any thread at any time, including + multiple concurrent calls. So, for instance, if the callback mutates + userdata (or other shared state), it must use synchronization primitives + to make such mutation safe. + + The callback receives certificate chain information as raw bytes. + Currently this library offers no functions to parse the certificates, + so you'll need to bring your own certificate parsing library + if you need to parse them. + + If the custom verifier accepts the certificate, it should return + RUSTLS_RESULT_OK. Otherwise, it may return any other rustls_result error. + Feel free to use an appropriate error from the RUSTLS_RESULT_CERT_* + section. + + + """ + return _rustls.get_function[ + fn ( + UnsafePointer[ClientConfigBuilder], + VerifyServerCertCallback, + ) -> UInt32 + ]("rustls_client_config_builder_dangerous_set_certificate_verifier")( + config_builder, callback + ) + + +fn client_config_builder_set_server_verifier( + builder: UnsafePointer[ClientConfigBuilder], + verifier: UnsafePointer[ServerCertVerifier], +): + """ + Configure the server certificate verifier. + + This increases the reference count of `verifier` and does not take ownership. + """ + _rustls.get_function[ + fn ( + UnsafePointer[ClientConfigBuilder], + UnsafePointer[ServerCertVerifier], + ) -> None + ]("rustls_client_config_builder_set_server_verifier")(builder, verifier) + + +fn client_config_builder_set_alpn_protocols( + builder: UnsafePointer[ClientConfigBuilder], + protocol: UnsafePointer[SliceBytes], + len: Int, +) -> Result: + """ + Set the ALPN protocol list to the given protocols. + + `protocols` must point to a buffer of `rustls_slice_bytes` (built by the caller) with `len` + elements. + + Each element of the buffer must be a rustls_slice_bytes whose + data field points to a single ALPN protocol ID. + + Standard ALPN protocol IDs are defined at + . + + This function makes a copy of the data in `protocols` and does not retain + any pointers, so the caller can free the pointed-to memory after calling. + + + """ + return _rustls.get_function[ + fn ( + UnsafePointer[ClientConfigBuilder], + UnsafePointer[SliceBytes], + Int, + ) -> UInt32 + ]("rustls_client_config_builder_set_alpn_protocols")(builder, protocol, len) + + +fn client_config_builder_set_enable_sni( + builder: UnsafePointer[ClientConfigBuilder], enable: Bool +): + """ + Enable or disable SNI. + + """ + _rustls.get_function[fn (UnsafePointer[ClientConfigBuilder], Bool) -> None]( + "rustls_client_config_builder_set_enable_sni" + )(builder, enable) + + +fn client_config_builder_set_certified_key( + builder: UnsafePointer[ClientConfigBuilder], + certified_keys: UnsafePointer[UnsafePointer[CertifiedKey]], + certified_keys_len: Int, +) -> Result: + """ + Provide the configuration a list of certificates where the connection + will select the first one that is compatible with the server's signature + verification capabilities. + + Clients that want to support both ECDSA and RSA certificates will want the + ECSDA to go first in the list. + + The built configuration will keep a reference to all certified keys + provided. The client may `rustls_certified_key_free()` afterwards + without the configuration losing them. The same certified key may also + be used in multiple configs. + + EXPERIMENTAL: installing a client authentication callback will replace any + configured certified keys and vice versa. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[ClientConfigBuilder], + UnsafePointer[UnsafePointer[CertifiedKey]], + Int, + ) -> UInt32 + ]("rustls_client_config_builder_set_certified_key")( + builder, certified_keys, certified_keys_len + ) + + +fn client_config_builder_build( + builder: UnsafePointer[ClientConfigBuilder], + config_out: UnsafePointer[UnsafePointer[ClientConfig]], +) -> Result: + """ + Turn a *rustls_client_config_builder (mutable) into a const *rustls_client_config + (read-only). + """ + return _rustls.get_function[ + fn ( + UnsafePointer[ClientConfigBuilder], + UnsafePointer[UnsafePointer[ClientConfig]], + ) -> UInt32 + ]("rustls_client_config_builder_build")(builder, config_out) + + +fn client_config_builder_free( + builder: UnsafePointer[ClientConfigBuilder], +): + """ + "Free" a client_config_builder without building it into a rustls_client_config. + + Normally builders are built into rustls_client_config via `rustls_client_config_builder_build` + and may not be free'd or otherwise used afterwards. + + Use free only when the building of a config has to be aborted before a config + was created. + """ + _rustls.get_function[fn (UnsafePointer[ClientConfigBuilder]) -> None]( + "rustls_client_config_builder_free" + )(builder) + + +fn client_config_free(config: UnsafePointer[ClientConfig]): + """ + "Free" a `rustls_client_config` previously returned from + `rustls_client_config_builder_build`. + + Since `rustls_client_config` is actually an atomically reference-counted pointer, + extant client connections may still hold an internal reference to the Rust object. + + However, C code must consider this pointer unusable after "free"ing it. + + Calling with NULL is fine. Must not be called twice with the same value. + """ + _rustls.get_function[fn (UnsafePointer[ClientConfig]) -> None]( + "rustls_client_config_free" + )(config) + + +fn client_connection_new( + config: UnsafePointer[ClientConfig], + server_name: UnsafePointer[Int8], + conn_out: UnsafePointer[UnsafePointer[Connection]], +) -> Result: + """ + Create a new rustls_connection containing a client connection and return + it in the output parameter `conn_out`. + + If this returns an error code, the memory pointed to by `conn_out` remains + unchanged. + + If this returns a non-error, the memory pointed to by `conn_out` + is modified to point at a valid `rustls_connection`. The caller now owns + the `rustls_connection` and must call `rustls_connection_free` when done with it. + + The server_name parameter can contain a hostname or an IP address in + textual form (IPv4 or IPv6). This function will return an error if it + cannot be parsed as one of those types. + """ + return _rustls.get_function[fn () -> Result]( + "rustls_client_connection_new" + )() + + +fn connection_set_userdata( + conn: UnsafePointer[Connection], userdata: UnsafePointer[NoneType] +): + """ + Set the userdata pointer associated with this connection. This will be passed + to any callbacks invoked by the connection, if you've set up callbacks in the config. + The pointed-to data must outlive the connection. + """ + _rustls.get_function[ + fn (UnsafePointer[Connection], UnsafePointer[NoneType]) -> None + ]("rustls_connection_set_userdata")(conn, userdata) + + +fn connection_set_log_callback( + conn: UnsafePointer[Connection], cb: LogCallback +): + """ + Set the logging callback for this connection. The log callback will be invoked + with the userdata parameter previously set by rustls_connection_set_userdata, or + NULL if no userdata was set. + """ + _rustls.get_function[fn (UnsafePointer[Connection], LogCallback) -> None]( + "rustls_connection_set_log_callback" + )(conn, cb) + + +fn connection_read_tls( + conn: UnsafePointer[Connection], + callback: ReadCallback, + userdata: UnsafePointer[NoneType], + out_n: UnsafePointer[Int], +) -> IoResult: + """ + Read some TLS bytes from the network into internal buffers. The actual network + I/O is performed by `callback`, which you provide. Rustls will invoke your + callback with a suitable buffer to store the read bytes into. You don't have + to fill it up, just fill with as many bytes as you get in one syscall. + The `userdata` parameter is passed through directly to `callback`. Note that + this is distinct from the `userdata` parameter set with + `rustls_connection_set_userdata`. + Returns 0 for success, or an errno value on error. Passes through return values + from callback. See rustls_read_callback for more details. + + """ + return _rustls.get_function[ + fn ( + UnsafePointer[Connection], + ReadCallback, + UnsafePointer[NoneType], + UnsafePointer[Int], + ) -> IoResult + ]("rustls_connection_read_tls")(conn, callback, userdata, out_n) + + +fn connection_write_tls( + conn: UnsafePointer[Connection], + callback: WriteCallback, + userdata: UnsafePointer[NoneType], + out_n: UnsafePointer[Int], +) -> IoResult: + """ + Write some TLS bytes to the network. The actual network I/O is performed by + `callback`, which you provide. Rustls will invoke your callback with a + suitable buffer containing TLS bytes to send. You don't have to write them + all, just as many as you can in one syscall. + The `userdata` parameter is passed through directly to `callback`. Note that + this is distinct from the `userdata` parameter set with + `rustls_connection_set_userdata`. + Returns 0 for success, or an errno value on error. Passes through return values + from callback. See rustls_write_callback for more details. + + """ + return _rustls.get_function[ + fn ( + UnsafePointer[Connection], + WriteCallback, + UnsafePointer[NoneType], + UnsafePointer[Int], + ) -> IoResult + ]("rustls_connection_write_tls")(conn, callback, userdata, out_n) + + +fn connection_write_tls_vectored( + conn: UnsafePointer[Connection], + callback: WriteVectoredCallback, + userdata: UnsafePointer[NoneType], + out_n: UnsafePointer[Int], +) -> IoResult: + """ + Write all available TLS bytes to the network. The actual network I/O is performed by + `callback`, which you provide. Rustls will invoke your callback with an array + of rustls_slice_bytes, each containing a buffer with TLS bytes to send. + You don't have to write them all, just as many as you are willing. + The `userdata` parameter is passed through directly to `callback`. Note that + this is distinct from the `userdata` parameter set with + `rustls_connection_set_userdata`. + Returns 0 for success, or an errno value on error. Passes through return values + from callback. See rustls_write_callback for more details. + + """ + return _rustls.get_function[ + fn ( + UnsafePointer[Connection], + WriteVectoredCallback, + UnsafePointer[NoneType], + UnsafePointer[Int], + ) -> IoResult + ]("rustls_connection_write_tls_vectored")(conn, callback, userdata, out_n) + + +fn connection_process_new_packets(conn: UnsafePointer[Connection]) -> Result: + """ + Decrypt any available ciphertext from the internal buffer and put it + into the internal plaintext buffer, potentially making bytes available + for rustls_connection_read(). + + """ + return _rustls.get_function[fn (UnsafePointer[Connection]) -> Result]( + "rustls_connection_process_new_packets" + )(conn) + + +fn connection_wants_read(conn: UnsafePointer[Connection]) -> Bool: + """ + """ + return _rustls.get_function[fn (UnsafePointer[Connection]) -> Bool]( + "rustls_connection_wants_read" + )(conn) + + +fn connection_wants_write(conn: UnsafePointer[Connection]) -> Bool: + """ + """ + return _rustls.get_function[fn (UnsafePointer[Connection]) -> Bool]( + "rustls_connection_wants_write" + )(conn) + + +fn connection_is_handshaking(conn: UnsafePointer[Connection]) -> Bool: + """ + Returns true if the connection is currently performing the TLS handshake. + + Note: This may return `false` while there are still handshake packets waiting + to be extracted and transmitted with `rustls_connection_write_tls()`. + + See the rustls documentation for more information. + + + """ + return _rustls.get_function[fn (UnsafePointer[Connection]) -> Bool]( + "rustls_connection_is_handshaking" + )(conn) + + +fn connection_set_buffer_limit(conn: UnsafePointer[Connection], n: Int): + """ + Sets a limit on the internal buffers used to buffer unsent plaintext (prior + to completing the TLS handshake) and unsent TLS records. By default, there + is no limit. The limit can be set at any time, even if the current buffer + use is higher. + + """ + _rustls.get_function[fn (UnsafePointer[Connection], Int) -> None]( + "rustls_connection_set_buffer_limit" + )(conn, n) + + +fn connection_send_close_notify(conn: UnsafePointer[Connection]): + """ + Queues a close_notify fatal alert to be sent in the next write_tls call. + + """ + _rustls.get_function[fn (UnsafePointer[Connection]) -> None]( + "rustls_connection_send_close_notify" + )(conn) + + +fn connection_get_peer_certificate( + conn: UnsafePointer[Connection], i: Int +) -> UnsafePointer[Certificate]: + """ + Return the i-th certificate provided by the peer. + Index 0 is the end entity certificate. Higher indexes are certificates + in the chain. Requesting an index higher than what is available returns + NULL. + The returned pointer is valid until the next mutating function call + affecting the connection. A mutating function call is one where the + first argument has type `struct rustls_connection *` (as opposed to + `const struct rustls_connection *`). + + """ + return _rustls.get_function[ + fn (UnsafePointer[Connection], Int) -> UnsafePointer[Certificate] + ]("rustls_connection_get_peer_certificate")(conn, i) + + +fn connection_get_alpn_protocol( + conn: UnsafePointer[Connection], + protocol_out: UnsafePointer[UnsafePointer[UInt8]], + protocol_out_len: UnsafePointer[Int], +): + """ + Get the ALPN protocol that was negotiated, if any. Stores a pointer to a + borrowed buffer of bytes, and that buffer's len, in the output parameters. + The borrow lives as long as the connection. + If the connection is still handshaking, or no ALPN protocol was negotiated, + stores NULL and 0 in the output parameters. + The provided pointer is valid until the next mutating function call + affecting the connection. A mutating function call is one where the + first argument has type `struct rustls_connection *` (as opposed to + `const struct rustls_connection *`). + + + """ + _rustls.get_function[ + fn ( + UnsafePointer[Connection], + UnsafePointer[UnsafePointer[UInt8]], + UnsafePointer[Int], + ) -> None + ]("rustls_connection_get_alpn_protocol")( + conn, protocol_out, protocol_out_len + ) + + +fn connection_get_protocol_version( + conn: UnsafePointer[Connection], +) -> UInt16: + """ + Return the TLS protocol version that has been negotiated. Before this + has been decided during the handshake, this will return 0. Otherwise, + the u16 version number as defined in the relevant RFC is returned. + + + """ + return _rustls.get_function[fn (UnsafePointer[Connection]) -> UInt16]( + "rustls_connection_get_protocol_version" + )(conn) + + +fn connection_get_negotiated_ciphersuite( + conn: UnsafePointer[Connection], +) -> UInt16: + """ + Retrieves the [IANA registered cipher suite identifier][IANA] agreed with the peer. + + This returns `TLS_NULL_WITH_NULL_NULL` (0x0000) until the ciphersuite is agreed. + + [IANA]: + """ + return _rustls.get_function[fn (UnsafePointer[Connection]) -> UInt16]( + "rustls_connection_get_negotiated_ciphersuite" + )(conn) + + +fn connection_get_negotiated_ciphersuite_name( + conn: UnsafePointer[Connection], +) -> StringRef: + """ + Retrieves the cipher suite name agreed with the peer. + + This returns "" until the ciphersuite is agreed. + + The lifetime of the `rustls_str` is the lifetime of the program, it does not + need to be freed. + + + """ + return _rustls.get_function[fn (UnsafePointer[Connection]) -> StringRef]( + "rustls_connection_get_negotiated_ciphersuite_name" + )(conn) + + +fn connection_write( + conn: UnsafePointer[Connection], + buf: UnsafePointer[UInt8], + count: Int, + out_n: UnsafePointer[Int], +) -> Result: + """ + Write up to `count` plaintext bytes from `buf` into the `rustls_connection`. + This will increase the number of output bytes available to + `rustls_connection_write_tls`. + On success, store the number of bytes actually written in *out_n + (this may be less than `count`). + + """ + return _rustls.get_function[ + fn ( + UnsafePointer[Connection], + UnsafePointer[UInt8], + Int, + UnsafePointer[Int], + ) -> UInt32 + ]("rustls_connection_write")(conn, buf, count, out_n) + + +fn connection_read( + conn: UnsafePointer[Connection], + buf: UnsafePointer[UInt8], + count: Int, + out_n: UnsafePointer[Int], +) -> Result: + """ + Read up to `count` plaintext bytes from the `rustls_connection` into `buf`. + On success, store the number of bytes read in *out_n (this may be less + than `count`). A success with *out_n set to 0 means "all bytes currently + available have been read, but more bytes may become available after + subsequent calls to rustls_connection_read_tls and + rustls_connection_process_new_packets." + + Subtle note: Even though this function only writes to `buf` and does not + read from it, the memory in `buf` must be initialized before the call (for + Rust-internal reasons). Initializing a buffer once and then using it + multiple times without zeroizing before each call is fine. + + """ + return _rustls.get_function[ + fn ( + UnsafePointer[Connection], + UnsafePointer[UInt8], + Int, + UnsafePointer[Int], + ) -> UInt32 + ]("rustls_connection_read")(conn, buf, count, out_n) + + +fn connection_free(conn: UnsafePointer[Connection]): + """ + Free a rustls_connection. Calling with NULL is fine. + Must not be called twice with the same value. + """ + _rustls.get_function[fn (UnsafePointer[Connection]) -> None]( + "rustls_connection_free" + )(conn) + + +fn crypto_provider_builder_new_from_default( + builder_out: UnsafePointer[UnsafePointer[CryptoProviderBuilder]], +) -> Result: + """ + Constructs a new `rustls_crypto_provider_builder` using the process-wide default crypto + provider as the base crypto provider to be customized. + + When this function returns `rustls_result::Ok` a pointer to the `rustls_crypto_provider_builder` + is written to `builder_out`. It returns `rustls_result::NoDefaultCryptoProvider` if no default + provider has been registered. + + The caller owns the returned `rustls_crypto_provider_builder` and must free it using + `rustls_crypto_provider_builder_free`. + + This function is typically used for customizing the default crypto provider for specific + connections. For example, a typical workflow might be to: + + * Either: + * Use the default `aws-lc-rs` or `*ring*` provider that rustls-ffi is built with based on + the `CRYPTO_PROVIDER` build variable. + * Call `rustls_crypto_provider_builder_new_with_base` with the desired provider, and + then install it as the process default with + `rustls_crypto_provider_builder_build_as_default`. + * Afterward, as required for customization: + * Use `rustls_crypto_provider_builder_new_from_default` to get a builder backed by the + default crypto provider. + * Use `rustls_crypto_provider_builder_set_cipher_suites` to customize the supported + ciphersuites. + * Use `rustls_crypto_provider_builder_build` to build a customized provider. + * Provide that customized provider to client or server configuration builders. + """ + res = _rustls.get_function[ + fn (UnsafePointer[UnsafePointer[CryptoProviderBuilder]]) -> UInt32 + ]("rustls_crypto_provider_builder_new_from_default")(builder_out) + return res + + +fn crypto_provider_builder_new_with_base( + base: UnsafePointer[CryptoProvider], +) -> UnsafePointer[CryptoProviderBuilder]: + """ + Constructs a new `rustls_crypto_provider_builder` using the given `rustls_crypto_provider` + as the base crypto provider to be customized. + + The caller owns the returned `rustls_crypto_provider_builder` and must free it using + `rustls_crypto_provider_builder_free`. + + This function can be used for setting the default process wide crypto provider, + or for constructing a custom crypto provider for a specific connection. A typical + workflow could be to: + + * Call `rustls_crypto_provider_builder_new_with_base` with a custom provider + * Install the custom provider as the process-wide default with + `rustls_crypto_provider_builder_build_as_default`. + + Or, for per-connection customization: + + * Call `rustls_crypto_provider_builder_new_with_base` with a custom provider + * Use `rustls_crypto_provider_builder_set_cipher_suites` to customize the supported + ciphersuites. + * Use `rustls_crypto_provider_builder_build` to build a customized provider. + * Provide that customized provider to client or server configuration builders. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[CryptoProvider], + ) -> UnsafePointer[CryptoProviderBuilder] + ]("rustls_crypto_provider_builder_new_with_base")(base) + + +fn crypto_provider_builder_set_cipher_suites( + builder: UnsafePointer[CryptoProviderBuilder], + cipher_suites: UnsafePointer[UnsafePointer[SupportedCiphersuite]], + cipher_suites_len: Int, +) -> Result: + """ + Customize the supported ciphersuites of the `rustls_crypto_provider_builder`. + + Returns an error if the builder has already been built. Overwrites any previously + set ciphersuites. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[CryptoProviderBuilder], + UnsafePointer[UnsafePointer[SupportedCiphersuite]], + Int, + ) -> UInt32 + ]("rustls_crypto_provider_builder_set_cipher_suites")( + builder, cipher_suites, cipher_suites_len + ) + + +fn crypto_provider_builder_build( + builder: UnsafePointer[CryptoProviderBuilder], + provider_out: UnsafePointer[UnsafePointer[CryptoProvider]], +) -> Result: + """ + Builds a `rustls_crypto_provider` from the builder and returns it. Returns an error if the + builder has already been built. + + The `rustls_crypto_provider_builder` builder is consumed and should not be used + for further calls, except to `rustls_crypto_provider_builder_free`. The caller must + still free the builder after a successful build. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[CryptoProviderBuilder], + UnsafePointer[UnsafePointer[CryptoProvider]], + ) -> UInt32 + ]("rustls_crypto_provider_builder_build")(builder, provider_out) + + +fn crypto_provider_builder_build_as_default( + builder: UnsafePointer[CryptoProviderBuilder], +) -> Result: + """ + Builds a `rustls_crypto_provider` from the builder and sets it as the + process-wide default crypto provider. + + Afterward, the default provider can be retrieved using `rustls_crypto_provider_default`. + + This can only be done once per process, and will return an error if a + default provider has already been set, or if the builder has already been built. + + The `rustls_crypto_provider_builder` builder is consumed and should not be used + for further calls, except to `rustls_crypto_provider_builder_free`. The caller must + still free the builder after a successful build. + """ + return _rustls.get_function[ + fn (UnsafePointer[CryptoProviderBuilder]) -> UInt32 + ]("rustls_crypto_provider_builder_build_as_default")(builder) + + +fn crypto_provider_builder_free( + builder: UnsafePointer[CryptoProviderBuilder], +): + """ + Free the `rustls_crypto_provider_builder`. + + Calling with `NULL` is fine. + Must not be called twice with the same value. + """ + _rustls.get_function[fn (UnsafePointer[CryptoProviderBuilder]) -> None]( + "rustls_crypto_provider_builder_free" + )(builder) + + +fn ring_crypto_provider() -> UnsafePointer[CryptoProvider]: + """ + Return the `rustls_crypto_provider` backed by the `*ring*` cryptography library. + + The caller owns the returned `rustls_crypto_provider` and must free it using + `rustls_crypto_provider_free`. + """ + return _rustls.get_function[fn () -> UnsafePointer[CryptoProvider]]( + "rustls_ring_crypto_provider" + )() + + +fn aws_lc_rs_crypto_provider() -> UnsafePointer[CryptoProvider]: + """ + Return the `rustls_crypto_provider` backed by the `aws-lc-rs` cryptography library. + + The caller owns the returned `rustls_crypto_provider` and must free it using + `rustls_crypto_provider_free`. + """ + return _rustls.get_function[fn () -> UnsafePointer[CryptoProvider]]( + "rustls_aws_lc_rs_crypto_provider" + )() + + +fn crypto_provider_default() -> UnsafePointer[CryptoProvider]: + """ + Retrieve a pointer to the process default `rustls_crypto_provider`. + + This may return `NULL` if no process default provider has been set using + `rustls_crypto_provider_builder_build_default`. + + Caller owns the returned `rustls_crypto_provider` and must free it w/ `rustls_crypto_provider_free`. + """ + return _rustls.get_function[fn () -> UnsafePointer[CryptoProvider]]( + "rustls_crypto_provider_default" + )() + + +fn crypto_provider_ciphersuites_len( + provider: UnsafePointer[CryptoProvider], +) -> Int: + """ + Returns the number of ciphersuites the `rustls_crypto_provider` supports. + + You can use this to know the maximum allowed index for use with + `rustls_crypto_provider_ciphersuites_get`. + + This function will return 0 if the `provider` is NULL. + """ + return _rustls.get_function[fn (UnsafePointer[CryptoProvider]) -> Int]( + "rustls_crypto_provider_ciphersuites_len" + )(provider) + + +fn crypto_provider_ciphersuites_get( + provider: UnsafePointer[CryptoProvider], index: Int +) -> UnsafePointer[SupportedCiphersuite]: + """ + Retrieve a pointer to a supported ciphersuite of the `rustls_crypto_provider`. + + This function will return NULL if the `provider` is NULL, or if the index is out of bounds + with respect to `rustls_crypto_provider_ciphersuites_len`. + + The lifetime of the returned `rustls_supported_ciphersuite` is equal to the lifetime of the + `provider` and should not be used after the `provider` is freed. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[CryptoProvider], Int + ) -> UnsafePointer[SupportedCiphersuite] + ]("rustls_supported_ciphersuite")(provider, index) + + +fn crypto_provider_load_key( + provider: UnsafePointer[CryptoProvider], + private_key: UnsafePointer[UInt8], + private_key_len: Int, + signing_key_out: UnsafePointer[UnsafePointer[SigningKey]], +) -> Result: + """ + Load a private key from the provided PEM content using the crypto provider. + + `private_key` must point to a buffer of `private_key_len` bytes, containing + a PEM-encoded private key. The exact formats supported will differ based on + the crypto provider in use. The default providers support PKCS#1, PKCS#8 or + SEC1 formats. + + When this function returns `rustls_result::Ok` a pointer to a `rustls_signing_key` + is written to `signing_key_out`. The caller owns the returned `rustls_signing_key` + and must free it with `rustls_signing_key_free`. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[CryptoProvider], + UnsafePointer[UInt8], + Int, + UnsafePointer[UnsafePointer[SigningKey]], + ) -> UInt32 + ]("rustls_crypto_provider_load_key")( + provider, private_key, private_key_len, signing_key_out + ) + + +fn crypto_provider_random( + provider: UnsafePointer[CryptoProvider], + buff: UnsafePointer[UInt8], + len: Int, +) -> Result: + """ + Write `len` bytes of cryptographically secure random data to `buff` using the crypto provider. + + `buff` must point to a buffer of at least `len` bytes. The caller maintains ownership + of the buffer. + + Returns `RUSTLS_RESULT_OK` on success, or `RUSTLS_RESULT_GET_RANDOM_FAILED` on failure. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[CryptoProvider], + UnsafePointer[UInt8], + Int, + ) -> UInt32 + ]("rustls_crypto_provider_random")(provider, buff, len) + + +fn crypto_provider_free(provider: UnsafePointer[CryptoProvider]): + """ + Frees the `rustls_crypto_provider`. + + Calling with `NULL` is fine. + Must not be called twice with the same value. + """ + _rustls.get_function[fn (UnsafePointer[CryptoProvider]) -> None]( + "rustls_crypto_provider_free" + )(provider) + + +fn default_crypto_provider_ciphersuites_len() -> Int: + """ + Returns the number of ciphersuites the default process-wide crypto provider supports. + + You can use this to know the maximum allowed index for use with + `rustls_default_crypto_provider_ciphersuites_get`. + + This function will return 0 if no process-wide default `rustls_crypto_provider` is available. + """ + return _rustls.get_function[fn () -> Int]( + "rustls_default_crypto_provider_ciphersuites_len" + )() + + +fn default_crypto_provider_ciphersuites_get( + index: Int, +) -> UnsafePointer[SupportedCiphersuite]: + """ + Retrieve a pointer to a supported ciphersuite of the default process-wide crypto provider. + + This function will return NULL if the `provider` is NULL, or if the index is out of bounds + with respect to `rustls_default_crypto_provider_ciphersuites_len`. + + The lifetime of the returned `rustls_supported_ciphersuite` is static, as the process-wide + default provider lives for as long as the process. + """ + return _rustls.get_function[ + fn (Int) -> UnsafePointer[SupportedCiphersuite] + ]("rustls_default_crypto_provider_ciphersuites_get")(index) + + +fn default_crypto_provider_random( + buff: UnsafePointer[UInt8], len: Int +) -> Result: + """ + Write `len` bytes of cryptographically secure random data to `buff` using the process-wide + default crypto provider. + + `buff` must point to a buffer of at least `len` bytes. The caller maintains ownership + of the buffer. + + Returns `RUSTLS_RESULT_OK` on success, and one of `RUSTLS_RESULT_NO_DEFAULT_CRYPTO_PROVIDER` + or `RUSTLS_RESULT_GET_RANDOM_FAILED` on failure. + """ + return _rustls.get_function[fn (UnsafePointer[UInt8], Int) -> Result]( + "rustls_default_crypto_provider_random" + )(buff, len) + + +fn signing_key_free(signing_key: UnsafePointer[SigningKey]): + """ + Frees the `rustls_signing_key`. This is safe to call with a `NULL` argument, but + must not be called twice with the same value. + """ + _rustls.get_function[fn (UnsafePointer[SigningKey]) -> None]( + "rustls_signing_key_free" + )(signing_key) + + +fn error( + result: UInt32, + buf: UnsafePointer[Int8], + len: Int, + out_n: UnsafePointer[Int], +): + """ + After a rustls function returns an error, you may call + this to get a pointer to a buffer containing a detailed error + message. + + The contents of the error buffer will be out_n bytes long, + UTF-8 encoded, and not NUL-terminated. + """ + _rustls.get_function[ + fn (UInt32, UnsafePointer[Int8], Int, UnsafePointer[Int]) -> None + ]("rustls_error")(result, buf, len, out_n) + + +fn result_is_cert_error(result: UInt32) -> Bool: + return _rustls.get_function[fn (UInt32) -> Bool]( + "rustls_result_is_cert_error" + )(result) + + +fn log_level_str(level: LogLevel) -> StringRef: + """ + Return a rustls_str containing the stringified version of a log level. + """ + return _rustls.get_function[fn (LogLevel) -> StringRef]( + "rustls_log_level_str" + )(level) + + +fn slice_slice_bytes_len(input: UnsafePointer[SliceSliceBytes]) -> Int: + """ + Return the length of the outer slice. If the input pointer is NULL, + returns 0. + """ + return _rustls.get_function[fn (UnsafePointer[SliceSliceBytes]) -> Int]( + "rustls_slice_slice_bytes_len" + )(input) + + +fn slice_slice_bytes_get( + input: UnsafePointer[SliceSliceBytes], n: Int +) -> SliceBytes: + """ + Retrieve the nth element from the input slice of slices. + + If the input pointer is NULL, or n is greater than the length + of the `rustls_slice_slice_bytes`, returns rustls_slice_bytes{NULL, 0}. + """ + return _rustls.get_function[ + fn (UnsafePointer[SliceSliceBytes], Int) -> SliceBytes + ]("rustls_slice_slice_bytes_get")(input, n) + + +fn slice_str_len(input: UnsafePointer[SliceStr]) -> Int: + """ + Return the length of the outer slice. + + If the input pointer is NULL, returns 0. + """ + return _rustls.get_function[fn (UnsafePointer[SliceStr]) -> Int]( + "rustls_slice_str_len" + )(input) + + +fn slice_str_get(input: UnsafePointer[SliceStr], n: Int) -> StringRef: + """ + Retrieve the nth element from the input slice of `&str`s. + + If the input pointer is NULL, or n is greater than the length of the + rustls_slice_str, returns rustls_str{NULL, 0}. + """ + return _rustls.get_function[fn (UnsafePointer[SliceStr], Int) -> StringRef]( + "rustls_slice_str_get" + )(input, n) + + +fn server_config_builder_new() -> UnsafePointer[ServerConfigBuilder]: + """ + Create a rustls_server_config_builder using the process default crypto provider. + + Caller owns the memory and must eventually call rustls_server_config_builder_build, + then free the resulting rustls_server_config. + + Alternatively, if an error occurs or, you don't wish to build a config, call + `rustls_server_config_builder_free` to free the builder directly. + + This uses the process default provider's values for the cipher suites and key exchange + groups, as well as safe defaults for protocol versions. + """ + return _rustls.get_function[fn () -> UnsafePointer[ServerConfigBuilder]]( + "rustls_server_config_builder_new" + )() + + +fn server_config_builder_new_custom( + provider: UnsafePointer[CryptoProvider], + versions: UnsafePointer[UInt16], + tls_versions_len: Int, + builder_out: UnsafePointer[UnsafePointer[ServerConfigBuilder]], +) -> Result: + """ + Create a rustls_server_config_builder using the specified crypto provider. + + Caller owns the memory and must eventually call rustls_server_config_builder_build, + then free the resulting rustls_server_config. + + Alternatively, if an error occurs or, you don't wish to build a config, call + `rustls_server_config_builder_free` to free the builder directly. + + `tls_versions` set the TLS protocol versions to use when negotiating a TLS session. + + `tls_versions` is the version of the protocol, as defined in rfc8446, + ch. 4.2.1 and end of ch. 5.1. Some values are defined in + `rustls_tls_version` for convenience. + + `tls_versions` will only be used during the call and the application retains + ownership. `tls_versions_len` is the number of consecutive `uint16_t` pointed + to by `tls_versions`. + + Ciphersuites are configured separately via the crypto provider. See + `rustls_crypto_provider_builder_set_cipher_suites` for more information. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[CryptoProvider], + UnsafePointer[UInt16], + Int, + UnsafePointer[UnsafePointer[ServerConfigBuilder]], + ) -> UInt32 + ]("rustls_server_config_builder_new_custom")( + provider, versions, tls_versions_len, builder_out + ) + + +fn server_config_builder_set_client_verifier( + builder: UnsafePointer[ServerConfigBuilder], + verifier: UnsafePointer[ClientCertVerifier], +): + """ + Create a rustls_server_config_builder for TLS sessions that may verify client + certificates. + + This increases the refcount of `verifier` and doesn't take ownership. + """ + _rustls.get_function[ + fn ( + UnsafePointer[ServerConfigBuilder], + UnsafePointer[ClientCertVerifier], + ) -> None + ]("rustls_server_config_builder_set_client_verifier")(builder, verifier) + + +fn server_config_builder_free( + config: UnsafePointer[ServerConfigBuilder], +): + """ + "Free" a server_config_builder without building it into a rustls_server_config. + + Normally builders are built into rustls_server_configs via `rustls_server_config_builder_build` + and may not be free'd or otherwise used afterwards. + + Use free only when the building of a config has to be aborted before a config + was created. + """ + return _rustls.get_function[ + fn (UnsafePointer[ServerConfigBuilder]) -> None + ]("rustls_server_config_builder_free")(config) + + +fn server_config_builder_set_ignore_client_order( + builder: UnsafePointer[ServerConfigBuilder], ignore: Bool +) -> Result: + """ + With `ignore` != 0, the server will ignore the client ordering of cipher + suites, aka preference, during handshake and respect its own ordering + as configured. + + """ + return _rustls.get_function[ + fn (UnsafePointer[ServerConfigBuilder], Bool) -> UInt32 + ]("rustls_server_config_builder_set_ignore_client_order")(builder, ignore) + + +fn server_config_builder_set_alpn_protocols( + builder: UnsafePointer[ServerConfigBuilder], + protocols: UnsafePointer[SliceBytes], + len: Int, +) -> Result: + """ + Set the ALPN protocol list to the given protocols. + + `protocols` must point to a buffer of `rustls_slice_bytes` (built by the caller) + with `len` elements. Each element of the buffer must point to a slice of bytes that + contains a single ALPN protocol from + . + + This function makes a copy of the data in `protocols` and does not retain + any pointers, so the caller can free the pointed-to memory after calling. + + + """ + return _rustls.get_function[ + fn ( + UnsafePointer[ServerConfigBuilder], UnsafePointer[SliceBytes], Int + ) -> UInt32 + ]("rustls_server_config_builder_set_alpn_protocols")( + builder, protocols, len + ) + + +fn server_config_builder_set_certified_keys( + builder: UnsafePointer[ServerConfigBuilder], + certified_keys: UnsafePointer[UnsafePointer[CertifiedKey]], + certified_keys_len: Int, +) -> Result: + """ + Provide the configuration a list of certificates where the connection + will select the first one that is compatible with the client's signature + verification capabilities. + + Servers that want to support both ECDSA and RSA certificates will want + the ECSDA to go first in the list. + + The built configuration will keep a reference to all certified keys + provided. The client may `rustls_certified_key_free()` afterwards + without the configuration losing them. The same certified key may also + be used in multiple configs. + + EXPERIMENTAL: installing a client_hello callback will replace any + configured certified keys and vice versa. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[ServerConfigBuilder], + UnsafePointer[UnsafePointer[CertifiedKey]], + Int, + ) -> UInt32 + ]("rustls_server_config_builder_set_certified_keys")( + builder, certified_keys, certified_keys_len + ) + + +fn server_config_builder_build( + builder: UnsafePointer[ServerConfigBuilder], + config_out: UnsafePointer[UnsafePointer[ServerConfig]], +) -> Result: + """ + Turn a *rustls_server_config_builder (mutable) into a const *rustls_server_config + (read-only). The constructed `rustls_server_config` will be written to the `config_out` + pointer when this function returns `rustls_result::Ok`. + + This function may return an error if no process default crypto provider has been set + and the builder was constructed using `rustls_server_config_builder_new`, or if no + certificate resolver was set. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[ServerConfigBuilder], + UnsafePointer[UnsafePointer[ServerConfig]], + ) -> UInt32 + ]("rustls_server_config_builder_build")(builder, config_out) + + +fn server_config_free(config: UnsafePointer[ServerConfig]): + """ + "Free" a rustls_server_config previously returned from + rustls_server_config_builder_build. + + Since rustls_server_config is actually an + atomically reference-counted pointer, extant server connections may still + hold an internal reference to the Rust object. However, C code must + consider this pointer unusable after "free"ing it. + Calling with NULL is fine. Must not be called twice with the same value. + """ + return _rustls.get_function[fn (UnsafePointer[ServerConfig]) -> None]( + "rustls_server_config_free" + )(config) + + +fn server_connection_new( + config: UnsafePointer[ServerConfig], + conn_out: UnsafePointer[UnsafePointer[Connection]], +) -> Result: + """ + Create a new rustls_connection containing a server connection, and return it. + + It is returned in the output parameter `conn_out`. + + If this returns an error code, the memory pointed to by `conn_out` remains unchanged. + + If this returns a non-error, the memory pointed to by `conn_out` is modified to point + at a valid rustls_connection + + The caller now owns the rustls_connection and must call `rustls_connection_free` when + done with it. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[ServerConfig], + UnsafePointer[UnsafePointer[Connection]], + ) -> UInt32 + ]("rustls_server_connection_new")(config, conn_out) + + +fn server_connection_get_server_name( + conn: UnsafePointer[Connection], + buf: UnsafePointer[UInt8], + count: Int, + out_n: UnsafePointer[Int], +) -> Result: + """ + Copy the server name from the server name indication (SNI) extension to `buf`. + + `buf` can hold up to `count` bytes, and the length of that server name in `out_n`. + + The string is stored in UTF-8 with no terminating NUL byte. + + Returns RUSTLS_RESULT_INSUFFICIENT_SIZE if the SNI hostname is longer than `count`. + + Returns Ok with *out_n == 0 if there is no SNI hostname available on this connection + because it hasn't been processed yet, or because the client did not send SNI. + + """ + return _rustls.get_function[ + fn ( + UnsafePointer[Connection], + UnsafePointer[UInt8], + Int, + UnsafePointer[Int], + ) -> UInt32 + ]("rustls_server_connection_get_server_name")(conn, buf, count, out_n) + + +fn server_config_builder_set_hello_callback( + builder: UnsafePointer[ServerConfigBuilder], callback: ClientHelloCallback +) -> Result: + """ + Register a callback to be invoked when a connection created from this config + sees a TLS ClientHello message. If `userdata` has been set with + rustls_connection_set_userdata, it will be passed to the callback. + Otherwise the userdata param passed to the callback will be NULL. + + Any existing `ResolvesServerCert` implementation currently installed in the + `rustls_server_config` will be replaced. This also means registering twice + will overwrite the first registration. It is not permitted to pass a NULL + value for `callback`. + + EXPERIMENTAL: this feature of rustls-ffi is likely to change in the future, as + the rustls library is re-evaluating their current approach to client hello handling. + Installing a client_hello callback will replace any configured certified keys + and vice versa. Same holds true for the set_certified_keys variant. + """ + return _rustls.get_function[ + fn (UnsafePointer[ServerConfigBuilder], ClientHelloCallback) -> UInt32 + ]("rustls_server_config_builder_set_hello_callback")(builder, callback) + + +fn client_hello_select_certified_key( + hello: UnsafePointer[ClientHello], + certified_keys: UnsafePointer[UnsafePointer[CertifiedKey]], + certified_keys_len: Int, + out_key: UnsafePointer[UnsafePointer[CertifiedKey]], +) -> Result: + """ + Select a `rustls_certified_key` from the list that matches the cryptographic + parameters of a TLS client hello. + + Note that this does not do any SNI matching. The input certificates should + already have been filtered to ones matching the SNI from the client hello. + + This is intended for servers that are configured with several keys for the + same domain name(s), for example ECDSA and RSA types. The presented keys are + inspected in the order given and keys first in the list are given preference, + all else being equal. However rustls is free to choose whichever it considers + to be the best key with its knowledge about security issues and possible future + extensions of the protocol. + + Return RUSTLS_RESULT_OK if a key was selected and RUSTLS_RESULT_NOT_FOUND + if none was suitable. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[ClientHello], + UnsafePointer[UnsafePointer[CertifiedKey]], + Int, + UnsafePointer[UnsafePointer[CertifiedKey]], + ) -> UInt32 + ]("rustls_client_hello_select_certified_key")( + hello, certified_keys, certified_keys_len, out_key + ) + + +fn server_config_builder_set_persistence( + builder: UnsafePointer[ServerConfigBuilder], + get_cb: SessionStoreGetCallback, + put_cb: SessionStorePutCallback, +) -> Result: + """ + Register callbacks for persistence of TLS session IDs and secrets. Both + keys and values are highly sensitive data, containing enough information + to break the security of the connections involved. + + If `userdata` has been set with rustls_connection_set_userdata, it + will be passed to the callbacks. Otherwise the userdata param passed to + the callbacks will be NULL. + """ + return _rustls.get_function[ + fn ( + UnsafePointer[ServerConfigBuilder], + SessionStoreGetCallback, + SessionStorePutCallback, + ) -> UInt32 + ]("rustls_server_config_builder_set_persistence")(builder, get_cb, put_cb) diff --git a/src/test.mojo b/src/test.mojo index 158f99f..e268955 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -1,42 +1,8 @@ -from rustls import ( - _rustls, - RustlsClientConfig, - Connection, - RootCertStore, - ServerCertVerifier, - ClientConfigBuilder, - ClientConfig, - SliceBytes, - RustlsResult, - ConnData, - new_root_cert_store_builder, - load_roots_from_file, - new_client_connection, - new_client_config_builder, - build_root_cert_store_builder, - new_web_pki_server_cert_verifier_builder, - build_web_pki_server_cert_verifier_builder, - client_config_builder_set_server_verifier, - client_config_builder_set_alpn_protocols, - build_client_config_builder, - rustls_connection_set_userdata, - rustls_connection_set_log_callback, - rustls_connection_write, - rustls_connection_get_negotiated_ciphersuite, - rustls_connection_get_negotiated_ciphersuite_name, - rustls_connection_read_tls, - rustls_connection_wants_read, - rustls_connection_wants_write, - rustls_connection_write_tls, - rustls_connection_process_new_packets, -) +import rustls as rls import os -from sys import exit -from memory.memory import memset -from sys.info import sizeof -from sys.ffi import external_call -from lightbug_http.sys.net import create_connection -from libc import fd_set, AF_INET, SOCK_STREAM, AI_PASSIVE, EAGAIN, EWOULDBLOCK, to_char_ptr, socket, select, timeval, read, send +from utils import StringSlice, Span +from collections import Optional, InlineArray +from memory import Arc alias DEMO_OK = 0 alias DEMO_AGAIN = 1 @@ -44,289 +10,335 @@ alias DEMO_EOF = 2 alias DEMO_ERROR = 3 -fn do_request(client_config: UnsafePointer[ClientConfig], host: String, port: String, path: String) raises -> RustlsResult: - var rconn = UnsafePointer[Connection]() - var ret: RustlsResult = 1 - var fd = socket(AF_INET, SOCK_STREAM, 0) - var connection = create_connection(fd, host, atol(port)) - if fd < 0: - print("Failed to create connection") - return ret +@value +struct ConnData: + var fd: Int + var verify_arg: String + var data: List[UInt8] - var result = new_client_connection(client_config, host.unsafe_ptr(), UnsafePointer.address_of(rconn)) - if result != 7000: - print("failed to create new client connection, Result: ", result) - return result - var conn = ConnData(rconn, fd.__int__(), "verify_arg", SliceBytes(UnsafePointer[UInt8](), 0)) +fn do_request( + client_config: rls.ClientConfig, + host: String, + port: String, + path: String, +) raises: + # var fd = socket(AF_INET, SOCK_STREAM, 0) + # var connection = create_connection(fd, host, atol(port)) + # if fd < 0: + # print("Failed to create connection") + # return ret - rustls_connection_set_userdata(rconn, UnsafePointer[ConnData].address_of(conn)) - # rustls_connection_set_log_callback(rconn, log_cb) + conn = rls.ClientConnection(client_config, host) - ret = send_request_and_read_response(conn, rconn, host, path) - if ret != 7000: - return ret - - return 7000 + # var conn = ConnData( + # rconn, fd.__int__(), "verify_arg", SliceBytes(UnsafePointer[UInt8](), 0) + # ) -fn log_cb(level: Int, message: String): + # rustls_connection_set_userdata( + # rconn, UnsafePointer[ConnData].address_of(conn) + # ) + # conn.set_log_callback[log_cb]() + + # send_request_and_read_response(conn, rconn, host, path) + + +fn log_cb(level: Int, message: StringSlice): print("Log level:", level, "Message:", message) -fn send_request_and_read_response(conn: ConnData, rustls_connection: UnsafePointer[Connection], hostname: String, path: String) raises -> RustlsResult: - var sockfd = conn.fd - var ret: RustlsResult = 1 - var result: UInt32 = 1 - var n: Int = 0 - var headers_len: Int = 0 - var content_length: Int = 0 - var response_complete = False - - var headers = "GET " + path + " HTTP/1.1\r\n" + - "Host: " + hostname + "\r\n" + - "User-Agent: Mojo\r\n" + - "Accept: carcinization/inevitable, text/html\r\n" + - "Connection: close\r\n" + - "\r\n" - var header_bytes = headers.as_bytes_slice().unsafe_ptr() - var buf = SliceBytes(header_bytes, len(headers)) + +fn send_request_and_read_response( + # conn: ConnData, + conn: rls.ClientConnection, + hostname: String, + path: String, +) raises: + # var sockfd = conn.fd + + # var ret: RustlsResult = 1 + # var result: UInt32 = 1 + # var n: Int = 0 + # var headers_len: Int = 0 + # var content_length: Int = 0 + # var response_complete = False + + headers = ( + "GET " + + path + + " HTTP/1.1\r\n" + + "Host: " + + hostname + + "\r\n" + + "User-Agent: Mojo\r\n" + + "Accept: carcinization/inevitable, text/html\r\n" + + "Connection: close\r\n" + + "\r\n" + ) + + header_bytes = headers.as_bytes_slice() # Write plaintext to rustls connection - result = rustls_connection_write(rustls_connection, buf.data, len(headers), UnsafePointer.address_of(n)) - if result != 7000: - print("Error writing plaintext bytes to rustls_connection") - return ret - if n != len(headers): - print("Short write writing plaintext bytes to rustls_connection") - return ret - - var ciphersuite_name = rustls_connection_get_negotiated_ciphersuite_name(rustls_connection) - print("Negotiated ciphersuite: ", ciphersuite_name) - - var read_fds = fd_set() - var write_fds = fd_set() - - while True: - read_fds.clear_all() - write_fds.clear_all() - - if rustls_connection_wants_read(rustls_connection): - print("Rustls wants read") - read_fds.set(sockfd) - if rustls_connection_wants_write(rustls_connection): - print("Rustls wants write") - write_fds.set(sockfd) - - if not rustls_connection_wants_read(rustls_connection) and not rustls_connection_wants_write(rustls_connection): - print("Rustls wants neither read nor write. Drain plaintext and exit") - break - - var select_result = select(sockfd + 1, - UnsafePointer.address_of(read_fds), - UnsafePointer.address_of(write_fds), - UnsafePointer[fd_set](), - UnsafePointer[timeval]()) - - if select_result == -1: - print("Select error: ", select_result) - return ret - print("Select result:", select_result) - print("Read fd set:", read_fds.is_set(sockfd)) - print("Write fd set:", write_fds.is_set(sockfd)) - - var counter = 0 - - - if write_fds.is_set(sockfd): - while True: - var conn_ptr = UnsafePointer[ConnData].address_of(conn) - counter += 1 - var write_result = rustls_connection_write_tls(rustls_connection, write_cb, conn_ptr, n) - if write_result != 7000: - print("Error in rustls_connection_write_tls: ", write_result) - return ret - if write_result == DEMO_AGAIN: - break - elif n == 0: - print("Write returned 0 from rustls_connection_write_tls") - break - if counter > 2: - print("Counter exceeded 10") - break - - if read_fds.is_set(sockfd) or True: - while True: - print("Reading from socket") - var read_result = do_read(conn, rustls_connection) - if read_result == DEMO_AGAIN: - break - elif read_result == DEMO_EOF: - response_complete = True - break - elif read_result != DEMO_OK: - return ret - - if headers_len == 0: - var body_start = String(conn.data.data[]).find("\r\n\r\n") - if body_start != -1: - headers_len = body_start - print("Body began at ", headers_len) - var content_length_str = String(conn.data.data[]).find("Content-Length: ") - if content_length_str == -1: - print("Content length header not found") - return ret - content_length = int(String(conn.data.data[])[content_length_str + 16:]) - print("Content length ", content_length) - - if headers_len != 0 and conn.data.len >= headers_len + content_length: - response_complete = True - break - - if response_complete: - break - - return 7000 - -fn write_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int: - var conn = userdata.bitcast[ConnData]()[] - print("Writing to socket, length:", len) - print("Record type:", buf[0]) - print("TLS version:", buf[1], buf[2]) - print("Length:", (buf[3].__int__() << 8) | buf[4].__int__()) - if len > 5: - print("Handshake type:", buf[5]) - print("Full data:", buf) - var buf_str = buf[].__str__() - print("Writing to socket: ", buf_str) - var signed_n = send(conn.fd, buf_str.unsafe_ptr(), len, 0) - # var signed_n = send(conn.fd, buf, len, 0) - if signed_n < 0: - print("Error writing to socket, signed_n:", signed_n) - return 0 - out_n[0] = signed_n - return 7000 - - -fn read_cb(userdata: UnsafePointer[UInt8], buf: UnsafePointer[UInt8], len: Int, out_n: UnsafePointer[Int]) -> Int: - print("we are in read_cb") - var conn = userdata.bitcast[ConnData]()[] - print("Reading from socket") - var signed_n = read(conn.fd, buf, len) - print("Read bytes: ", buf) - if signed_n < 0: - out_n[0] = 0 - print("Error reading from socket") - out_n[0] = signed_n.__int__() - return 0 - -fn do_read(conn: ConnData, rconn: UnsafePointer[Connection]) raises -> Int: - """ - Do one read from the socket, process all resulting bytes into the - rustls_connection, then copy all plaintext bytes from the session to stdout. - Returns: - - DEMO_OK for success - - DEMO_AGAIN if we got an EAGAIN or EWOULDBLOCK reading from the socket - - DEMO_EOF if we got EOF - - DEMO_ERROR for other errors. - """ - var err: Int = 1 - var result: UInt32 = 1 - var n: Int = 0 - var n_ptr = UnsafePointer.address_of(n) - - print("going into rustls_connection_read_tls") - err = rustls_connection_read_tls(rconn, conn.data.data, conn.data.len, n_ptr) - print("coming out of rustls_connection_read_tls") - # if err == EAGAIN or err == EWOULDBLOCK: - # print("Reading from socket: EAGAIN or EWOULDBLOCK: ", err) - # return DEMO_AGAIN - # elif err != 0: - # print("Reading from socket: err ", err) - # return DEMO_ERROR - - result = rustls_connection_process_new_packets(rconn) - if result != 7000: - print_error("in process_new_packets", result) - return DEMO_ERROR - - # If we got an EOF on the plaintext stream (peer closed connection cleanly), - # verify that the sender then closed the TCP connection. - var buf = SliceBytes(UnsafePointer[UInt8](), 1) - var signed_n = read(conn.fd, buf.data, 1) - - if signed_n > 0: - print("Error: read returned ", signed_n, " bytes after receiving close_notify") - return DEMO_ERROR - elif signed_n < 0: - print("Wrong error after receiving close_notify: ", signed_n) - return DEMO_ERROR - - return DEMO_EOF - -fn print_error(context: String, result: UInt32): - print("Error in ", context, ": ", result) - -fn rustls_error(result: UInt32) -> String: - # Implement this function to return a string representation of the rustls error - return "Rustls error code: " + result.__str__() - -fn strerror(err: Int) -> String: - # Implement this function to return a string representation of the system error - return "System error code: " + err.__str__() - - -fn main(): + + +# result = rustls_connection_write( +# rustls_connection, buf.data, len(headers), UnsafePointer.address_of(n) +# ) +# if result != 7000: +# print("Error writing plaintext bytes to rustls_connection") +# return ret +# if n != len(headers): +# print("Short write writing plaintext bytes to rustls_connection") +# return ret + +# var ciphersuite_name = rustls_connection_get_negotiated_ciphersuite_name( +# rustls_connection +# ) +# print("Negotiated ciphersuite: ", ciphersuite_name) + +# var read_fds = fd_set() +# var write_fds = fd_set() + +# while True: +# read_fds.clear_all() +# write_fds.clear_all() + +# if rustls_connection_wants_read(rustls_connection): +# print("Rustls wants read") +# read_fds.set(sockfd) +# if rustls_connection_wants_write(rustls_connection): +# print("Rustls wants write") +# write_fds.set(sockfd) + +# if not rustls_connection_wants_read( +# rustls_connection +# ) and not rustls_connection_wants_write(rustls_connection): +# print( +# "Rustls wants neither read nor write. Drain plaintext and exit" +# ) +# break + +# var select_result = select( +# sockfd + 1, +# UnsafePointer.address_of(read_fds), +# UnsafePointer.address_of(write_fds), +# UnsafePointer[fd_set](), +# UnsafePointer[timeval](), +# ) + +# if select_result == -1: +# print("Select error: ", select_result) +# return ret +# print("Select result:", select_result) +# print("Read fd set:", read_fds.is_set(sockfd)) +# print("Write fd set:", write_fds.is_set(sockfd)) + +# var counter = 0 + +# if write_fds.is_set(sockfd): +# while True: +# var conn_ptr = UnsafePointer[ConnData].address_of(conn) +# counter += 1 +# var write_result = rustls_connection_write_tls( +# rustls_connection, write_cb, conn_ptr, n +# ) +# if write_result != 7000: +# print( +# "Error in rustls_connection_write_tls: ", write_result +# ) +# return ret +# if write_result == DEMO_AGAIN: +# break +# elif n == 0: +# print("Write returned 0 from rustls_connection_write_tls") +# break +# if counter > 2: +# print("Counter exceeded 10") +# break + +# if read_fds.is_set(sockfd) or True: +# while True: +# print("Reading from socket") +# var read_result = do_read(conn, rustls_connection) +# if read_result == DEMO_AGAIN: +# break +# elif read_result == DEMO_EOF: +# response_complete = True +# break +# elif read_result != DEMO_OK: +# return ret + +# if headers_len == 0: +# var body_start = String(conn.data.data[]).find("\r\n\r\n") +# if body_start != -1: +# headers_len = body_start +# print("Body began at ", headers_len) +# var content_length_str = String(conn.data.data[]).find( +# "Content-Length: " +# ) +# if content_length_str == -1: +# print("Content length header not found") +# return ret +# content_length = int( +# String(conn.data.data[])[content_length_str + 16 :] +# ) +# print("Content length ", content_length) + +# if ( +# headers_len != 0 +# and conn.data.len >= headers_len + content_length +# ): +# response_complete = True +# break + +# if response_complete: +# break + +# return 7000 + + +# fn write_cb( +# userdata: UnsafePointer[UInt8], +# buf: UnsafePointer[UInt8], +# len: Int, +# out_n: UnsafePointer[Int], +# ) -> Int: +# var conn = userdata.bitcast[ConnData]()[] +# print("Writing to socket, length:", len) +# print("Record type:", buf[0]) +# print("TLS version:", buf[1], buf[2]) +# print("Length:", (buf[3].__int__() << 8) | buf[4].__int__()) +# if len > 5: +# print("Handshake type:", buf[5]) +# print("Full data:", buf) +# var buf_str = buf[].__str__() +# print("Writing to socket: ", buf_str) +# var signed_n = send(conn.fd, buf_str.unsafe_ptr(), len, 0) +# # var signed_n = send(conn.fd, buf, len, 0) +# if signed_n < 0: +# print("Error writing to socket, signed_n:", signed_n) +# return 0 +# out_n[0] = signed_n +# return 7000 + + +# fn read_cb( +# userdata: UnsafePointer[UInt8], +# buf: UnsafePointer[UInt8], +# len: Int, +# out_n: UnsafePointer[Int], +# ) -> Int: +# print("we are in read_cb") +# var conn = userdata.bitcast[ConnData]()[] +# print("Reading from socket") +# var signed_n = read(conn.fd, buf, len) +# print("signed_n", signed_n) +# for i in range(signed_n): +# print(chr(int(buf[i])), end="") +# print() +# if signed_n < 0: +# out_n[0] = 0 +# print("Error reading from socket") +# out_n[0] = signed_n.__int__() +# return 0 + + +# fn do_read(conn: ConnData, rconn: UnsafePointer[Connection]) raises -> Int: +# """ +# Do one read from the socket, process all resulting bytes into the +# rustls_connection, then copy all plaintext bytes from the session to stdout. +# Returns: +# - DEMO_OK for success +# - DEMO_AGAIN if we got an EAGAIN or EWOULDBLOCK reading from the socket +# - DEMO_EOF if we got EOF +# - DEMO_ERROR for other errors. +# """ +# var err: Int = 1 +# var result: UInt32 = 1 +# var n: Int = 0 +# var n_ptr = UnsafePointer.address_of(n) + +# print("going into rustls_connection_read_tls") +# err = rustls_connection_read_tls( +# rconn, read_cb, UnsafePointer.address_of(conn).bitcast[UInt8](), n_ptr +# ) +# _ = n +# print("coming out of rustls_connection_read_tls") +# # if err == EAGAIN or err == EWOULDBLOCK: +# # print("Reading from socket: EAGAIN or EWOULDBLOCK: ", err) +# # return DEMO_AGAIN +# # elif err != 0: +# # print("Reading from socket: err ", err) +# # return DEMO_ERROR + +# result = rustls_connection_process_new_packets(rconn) +# if result != 7000: +# print_error("in process_new_packets", result) +# return DEMO_ERROR + +# # If we got an EOF on the plaintext stream (peer closed connection cleanly), +# # verify that the sender then closed the TCP connection. +# var buf = SliceBytes(UnsafePointer[UInt8](), 1) +# var signed_n = read(conn.fd, buf.data, 1) + +# if signed_n > 0: +# print( +# "Error: read returned ", +# signed_n, +# " bytes after receiving close_notify", +# ) +# return DEMO_ERROR +# elif signed_n < 0: +# print("Wrong error after receiving close_notify: ", signed_n) +# return DEMO_ERROR + +# return DEMO_EOF + + +fn default_provider_with_custom_ciphersuite( + custom_ciphersuite_name: StringSlice, +) raises -> rls.CryptoProvider: + custom_ciphersuite = Optional[rls.SupportedCiphersuite]() + for suite in rls.default_crypto_provider_ciphersuites(): + if not suite: + raise Error("failed to get ciphersuite") + if suite.get_name() == custom_ciphersuite_name: + custom_ciphersuite = suite + + if not custom_ciphersuite: + raise Error( + "failed to select custom ciphersuite: " + + str(custom_ciphersuite_name) + ) + + provider_builder = rls.CryptoProviderBuilder() + providers = List(custom_ciphersuite.value()) + provider_builder.set_cipher_suites(providers) + + return provider_builder^.build() + + +fn main() raises: var cert_path = "/etc/ssl/cert.pem" if not os.setenv("CA_FILE", cert_path): - print("Failed to set CA_FILE environment variable") - exit(1) - - # var config = RustlsClientConfig() - var config_builder = new_client_config_builder() - - var server_cert_root_store_builder = new_root_cert_store_builder() - var result = load_roots_from_file(server_cert_root_store_builder, cert_path.unsafe_ptr(), False) - if result != 7000: - print("failed to load roots from file, Result: ", result) - exit(1) - - var server_cert_root_store = UnsafePointer[RootCertStore]() - result = build_root_cert_store_builder(server_cert_root_store_builder, UnsafePointer.address_of(server_cert_root_store)) - if result != 7000: - print("failed to build cert store, Result: ", result) - exit(1) - - var server_cert_verifier_builder = new_web_pki_server_cert_verifier_builder(server_cert_root_store) - var server_cert_verifier = UnsafePointer[ServerCertVerifier]() - result = build_web_pki_server_cert_verifier_builder( - server_cert_verifier_builder, UnsafePointer.address_of(server_cert_verifier) + raise Error("Failed to set CA_FILE environment variable") + + custom_provider = default_provider_with_custom_ciphersuite( + "TLS13_CHACHA20_POLY1305_SHA256" + ) + tls_versions = List[UInt16](0x0303, 0x0304) + config_builder = rls.ClientConfigBuilder(custom_provider, tls_versions) + server_cert_root_store_builder = rls.RootCertStoreBuilder() + server_cert_root_store_builder.load_roots_from_file(cert_path) + server_root_cert_store = server_cert_root_store_builder^.build() + server_cert_verifier_builder = rls.WebPkiServerCertVerifierBuilder( + server_root_cert_store ) - if result != 7000: - print("failed to build cert store, Result: ", result) - exit(1) - - client_config_builder_set_server_verifier(config_builder, server_cert_verifier) - - # var config_builder = new_client_config_builder() - var alpn_http11 = String("http/1.1") - result = client_config_builder_set_alpn_protocols(config_builder, UnsafePointer.address_of(alpn_http11), 1) - if result != 7000: - print("failed to set alpn protocol, Result: ", result) - exit(1) - - var client_config = UnsafePointer[ClientConfig]() - result = build_client_config_builder(config_builder, UnsafePointer.address_of(client_config)) - if result != 7000: - print("failed to build client config, Result: ", result) - exit(1) - - var host = "www.google.com" - var port = "443" - var path = "/" - try: - result = do_request(client_config, host, port, path) - if result != 7000: - print("failed to build client config, Result: ", result) - exit(1) - except e: - print("Error: ", e) - exit(1) + server_cert_verifier = server_cert_verifier_builder^.build() + config_builder.set_server_verifier(server_cert_verifier) + alpn = List[Span[UInt8, ImmutableAnyLifetime]]("http/1.1".as_bytes_slice()) + config_builder.set_alpn_protocols(alpn) + client_config = config_builder^.build() + host = "www.google.com" + port = "443" + path = "/" + # result = do_request(client_config, host, port, path) From 127606e688ba15303ce0553aa59fd41420f62305 Mon Sep 17 00:00:00 2001 From: Val Date: Mon, 6 Jan 2025 13:49:01 +0100 Subject: [PATCH 16/18] bump to 24 6 --- magic.lock | 3462 +++++++++++++++++++++++--------------- mojoproject.toml | 4 +- src/libc.mojo | 1702 +++++++++++++------ src/rustls/__init__.mojo | 13 +- src/rustls/_cffi.mojo | 162 +- src/test.mojo | 47 +- src/utilss.mojo | 178 ++ 7 files changed, 3572 insertions(+), 1996 deletions(-) create mode 100644 src/utilss.mojo diff --git a/magic.lock b/magic.lock index 6ea35b8..3ce03dc 100644 --- a/magic.lock +++ b/magic.lock @@ -3,208 +3,245 @@ environments: default: channels: - url: https://conda.anaconda.org/conda-forge/ - - url: https://conda.modular.com/max-nightly/ + - url: https://conda.modular.com/max/ - url: https://repo.prefix.dev/mojo-community/ packages: osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.10.5-py312h024a12e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.31-hc27b277_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.7.4-h41dd001_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.28-hd74edd7_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.19-h41dd001_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.4.3-h40a8fc1_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.8.10-hf5a2c8c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.14.18-hc3cb426_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.10.5-h3acc7b9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.6.6-hd16c091_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.19-h41dd001_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.20-h41dd001_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.28.3-he35ab64_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.407-h0455a66_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.13.0-hd01fc5c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.8.0-h13ea094_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.12.0-hfde595f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.7.0-hcf3b6fd_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.11.0-h082e32e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.4.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.11.11-py312h998013c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.0-h54f970a_11.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.9.2-h96aa502_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.33.1-hd74edd7_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/datasets-2.14.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.15-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.6.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.2.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.115.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.4.1-py312h024a12e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.9.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.7.0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.2.0-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.115.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.5.0-py312h0bf5046_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - - conda: https://repo.prefix.dev/mojo-community/osx-arm64/gojo-0.1.9-h60d57d3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.25.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://repo.prefix.dev/mojo-community/osx-arm64/gojo-0.1.13-h60d57d3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.66.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.7-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/httptools-0.6.4-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.26.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jupyter_core-5.7.2-py312h81bd7bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240116.2-cxx17_h00cdb27_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-17.0.0-hc6a7651_16_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-17.0.0-hf9b8971_16_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-17.0.0-hf9b8971_16_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-17.0.0-hbf8b706_16_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-24_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-24_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.0-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.29.0-hfa33a2f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.29.0-h90fd6fa_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.62.2-h9c18a4f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.33.0-hdbe95d5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.33.0-h7081f7f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.67.1-h0a426d6_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-24_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.27-openmp_h517c56d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-17.0.0-hf0ba9ef_16_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.25.3-hbfab5d5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2023.09.01-h7b2c953_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.20.0-h64651cc_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.7-h01dff8b_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-hfb2fe0b_1.conda - - conda: https://repo.prefix.dev/mojo-community/osx-arm64/lightbug_http-0.1.3-h60d57d3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-18.1.8-hde57baf_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-2.1.5-py312h024a12e_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-24.6.0.dev2024092105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-24.6.0.dev2024092105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-24.6.0.dev2024092105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-24.6.0.dev2024092105-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-24.6.0.dev2024092105-release.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312h88e9dfa_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://repo.prefix.dev/mojo-community/osx-arm64/lightbug_http-0.1.6-h60d57d3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda + - conda: https://conda.modular.com/max/noarch/max-24.6.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/max-core-24.6.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/max-python-24.6.0-3.12release.conda + - conda: https://conda.modular.com/max/noarch/mblack-24.6.0-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.modular.com/max/noarch/mojo-jupyter-24.6.0-release.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312hdb8e49c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multiprocess-0.70.15-py312h02f2b3b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.2-h75dedd0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.2-py312h8ae5369_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-17.0.0-py312ha814d7c_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-17.0.0-py312he20ac61_1_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.9.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.23.4-py312he431725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.6-h739c21a_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-api-1.29.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-common-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-http-1.29.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-prometheus-1.12.0rc1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-proto-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-sdk-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-semantic-conventions-0.50b0-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.3-h0ff2369_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcd31e36_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.1.0-py312h50aef2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/propcache-0.2.1-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/protobuf-5.28.3-py312hd8f9ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-18.1.0-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-18.1.0-py312hc40f475_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.4-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.27.2-py312hcd83bfe_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.7.1-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyinstrument-5.0.0-py312h0bf5046_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.20-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-xxhash-3.5.0-py312h024a12e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h024a12e_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py312hc6335d2_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.09.01-h4cba328_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py312hf8a1cbd_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2024.9.11-py312h024a12e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.8.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/safetensors-0.4.5-py312he431725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2024.11.6-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.11.3-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/safetensors-0.5.0-py312hcd83bfe_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-0.1.3-h60d57d3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-hd02b534_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sse-starlette-2.1.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.38.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sse-starlette-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.41.3-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tokenizers-0.19.1-py312hfbf4c0d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.1-py312h024a12e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/transformers-4.44.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.12.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.12.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.12.5-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvicorn-0.30.6-py312h81bd7bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tokenizers-0.21.0-py312hf3e4074_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/transformers-4.47.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.21.0-py312h0bf5046_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.3-py312hcd83bfe_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-14.1-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xxhash-0.8.2-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.9.4-py312h024a12e_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h64debc3_5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.18.3-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-hc1bb282_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda packages: - kind: conda name: aiohappyeyeballs - version: 2.4.0 - build: pyhd8ed1ab_0 + version: 2.4.4 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.4.0-pyhd8ed1ab_0.conda - sha256: 5d318408a7ad62c1dbff90060795287f1fd3bdbec13b733bc82f1fadb2c9244e - md5: 0482cd2217e27b3ce47676d570ac3d45 + url: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.4.4-pyhd8ed1ab_1.conda + sha256: 95d4713e49ea92ae50cf42393683ede706b7875af5f7cb14c253438180afa732 + md5: 296b403617bafa89df4971567af79013 depends: - - python >=3.8.0 + - python >=3.9 license: PSF-2.0 license_family: PSF - size: 17032 - timestamp: 1724167966661 + size: 19351 + timestamp: 1733332029649 - kind: conda name: aiohttp - version: 3.10.5 - build: py312h024a12e_1 - build_number: 1 + version: 3.11.11 + build: py312h998013c_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.10.5-py312h024a12e_1.conda - sha256: ab3a9e482c1e71af35edcb836d52a1a7891e938707a8c4bcef675b620405b6ab - md5: 63ccb4725a185e31d835fd4894de718e + url: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.11.11-py312h998013c_0.conda + sha256: 446f078e7a7b892894d7f4851a278b7834ffb4f5632313646a55c3abe13690d4 + md5: c69c904691364cfb27d15aa7153e9c29 depends: - __osx >=11.0 - aiohappyeyeballs >=2.3.0 @@ -212,409 +249,431 @@ packages: - attrs >=17.3.0 - frozenlist >=1.1.1 - multidict >=4.5,<7.0 + - propcache >=0.2.0 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 - - yarl >=1.0,<1.9.5 + - yarl >=1.17.0,<2.0 license: MIT AND Apache-2.0 license_family: Apache - size: 798153 - timestamp: 1726063040318 + size: 875711 + timestamp: 1734597277258 - kind: conda name: aiosignal - version: 1.3.1 + version: 1.3.2 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2 - sha256: 575c742e14c86575986dc867463582a970463da50b77264cdf54df74f5563783 - md5: d1e1eb7e21a9e2c74279d87dafb68156 + url: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.2-pyhd8ed1ab_0.conda + sha256: 7de8ced1918bbdadecf8e1c1c68237fe5709c097bd9e0d254f4cad118f4345d0 + md5: 1a3981115a398535dbe3f6d5faae3d36 depends: - frozenlist >=1.1.0 - - python >=3.7 + - python >=3.9 license: Apache-2.0 license_family: APACHE - size: 12730 - timestamp: 1667935912504 + size: 13229 + timestamp: 1734342253061 - kind: conda name: annotated-types version: 0.7.0 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda - sha256: 668f0825b6c18e4012ca24a0070562b6ec801ebc7008228a428eb52b4038873f - md5: 7e9f4612544c8edbfd6afad17f1bd045 + url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 + md5: 2934f256a8acfe48f6ebb4fce6cde29c depends: - - python >=3.7 + - python >=3.9 - typing-extensions >=4.0.0 license: MIT license_family: MIT - size: 18235 - timestamp: 1716290348421 + size: 18074 + timestamp: 1733247158254 - kind: conda name: anyio - version: 4.5.0 + version: 4.7.0 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.5.0-pyhd8ed1ab_0.conda - sha256: 6869852cb88d527e7b4c2999cd4cb36eb921d7cde6c75a26a2224a593f666515 - md5: c720e5c85c349c5cbc99d9dfc4b200f8 + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.7.0-pyhd8ed1ab_0.conda + sha256: 687537ee3af30f8784986bf40cac30e88138770b16e51ca9850c9c23c09aeba1 + md5: c88107912954a983c2caf25f7fd55158 depends: - exceptiongroup >=1.0.2 - idna >=2.8 - - python >=3.8 + - python >=3.9 - sniffio >=1.1 - - typing_extensions >=4.1 + - typing_extensions >=4.5 constrains: - trio >=0.26.1 - - uvloop >=0.21.0b1 + - uvloop >=0.21 license: MIT license_family: MIT - size: 107387 - timestamp: 1726753494173 + size: 112730 + timestamp: 1733532678437 - kind: conda name: attrs - version: 24.2.0 + version: 24.3.0 build: pyh71513ae_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda - sha256: 28dba85a7e0f7fb57d7315e13f603d1e41b83c5b88aa2a602596b52c833a2ff8 - md5: 6732fa52eb8e66e5afeb32db8701a791 + url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda + sha256: 750186af694a7130eaf7119fbb56db0d2326d8995ad5b8eae23c622b85fea29a + md5: 356927ace43302bf6f5926e2a58dae6a depends: - - python >=3.7 + - python >=3.9 license: MIT license_family: MIT - size: 56048 - timestamp: 1722977241383 + size: 56354 + timestamp: 1734348889193 - kind: conda name: aws-c-auth - version: 0.7.31 - build: hc27b277_0 + version: 0.8.0 + build: h8bc59a9_15 + build_number: 15 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.31-hc27b277_0.conda - sha256: 5a512985e65a0b9b60e54c5aa01bb8b3c4573663b32753d3e63da43eccf638f3 - md5: f22f3582756570df9b0025b2b373b118 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda + sha256: 0e41e56b662e76e024182adebcd91d09a4d38a83b35217c84e4967354dfff9a2 + md5: f688b8893c20ad9477a19e7ce614014a depends: - __osx >=11.0 - - aws-c-cal >=0.7.4,<0.7.5.0a0 - - aws-c-common >=0.9.28,<0.9.29.0a0 - - aws-c-http >=0.8.10,<0.8.11.0a0 - - aws-c-io >=0.14.18,<0.14.19.0a0 - - aws-c-sdkutils >=0.1.19,<0.1.20.0a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 license: Apache-2.0 license_family: Apache - size: 92974 - timestamp: 1726544484188 + size: 92507 + timestamp: 1734021831330 - kind: conda name: aws-c-cal - version: 0.7.4 - build: h41dd001_1 - build_number: 1 + version: 0.8.1 + build: hc8a0bd2_3 + build_number: 3 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.7.4-h41dd001_1.conda - sha256: 2167b44bc879fb9cb7aaf2ca8418c2f8764c82c8732a41c08616e3f70fc92224 - md5: 3f2c1743ed973b58fd187b0c31861dd8 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda + sha256: 1f44be36e1daa17b4b081debb8aee492d13571084f38b503ad13e869fef24fe4 + md5: 8b0ce61384e5a33d2b301a64f3d22ac5 depends: - __osx >=11.0 - - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 - openssl >=3.3.1,<4.0a0 license: Apache-2.0 license_family: Apache - size: 39881 - timestamp: 1725829996108 + size: 39925 + timestamp: 1733991649383 - kind: conda name: aws-c-common - version: 0.9.28 - build: hd74edd7_0 + version: 0.10.6 + build: h5505292_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.28-hd74edd7_0.conda - sha256: 4081ada22148dc500765aac106ed224829810fd5e5d6f942a842b0a40f53783e - md5: 8dc8711c903ab57ead8ce99b65625a95 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda + sha256: 3bde135c8e74987c0f79ecd4fa17ec9cff0d658b3090168727ca1af3815ae57a + md5: 145e5b4c9702ed279d7d68aaf096f77d depends: - __osx >=11.0 license: Apache-2.0 license_family: Apache - size: 220787 - timestamp: 1725670124570 + size: 221863 + timestamp: 1733975576886 - kind: conda name: aws-c-compression - version: 0.2.19 - build: h41dd001_1 - build_number: 1 + version: 0.3.0 + build: hc8a0bd2_5 + build_number: 5 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.19-h41dd001_1.conda - sha256: d0a4362beb22aa4da126aab5ddadcb4bbde5032f407d7e4b03969a3d7e5f9cb2 - md5: 98e9d9c62300fd87bee44d2a63792ee5 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda + sha256: 47b2813f652ce7e64ac442f771b2a5f7d4af4ad0d07ff51f6075ea80ed2e3f09 + md5: a8b6c17732d14ed49d0e9b59c43186bc depends: - __osx >=11.0 - - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 license: Apache-2.0 license_family: Apache - size: 17974 - timestamp: 1725830013702 + size: 18068 + timestamp: 1733991869211 - kind: conda name: aws-c-event-stream - version: 0.4.3 - build: h40a8fc1_2 - build_number: 2 + version: 0.5.0 + build: h54f970a_11 + build_number: 11 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.4.3-h40a8fc1_2.conda - sha256: 63c903dc4b708c0054287dbb5411de62067a181886657a515d96c0e6add173c1 - md5: f3d15e195e0b4dc6db749398eb925ffe + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.0-h54f970a_11.conda + sha256: f0667935f4e0d4c25e0e51da035640310b5ceeb8f723156734439bde8b848d7d + md5: ba41238f8e653998d7d2f42e3a8db054 depends: - __osx >=11.0 - - aws-c-common >=0.9.28,<0.9.29.0a0 - - aws-c-io >=0.14.18,<0.14.19.0a0 - - aws-checksums >=0.1.20,<0.1.21.0a0 - - libcxx >=17 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 + - libcxx >=18 license: Apache-2.0 license_family: Apache - size: 46887 - timestamp: 1726327307175 + size: 47078 + timestamp: 1734024749727 - kind: conda name: aws-c-http - version: 0.8.10 - build: hf5a2c8c_0 + version: 0.9.2 + build: h96aa502_4 + build_number: 4 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.8.10-hf5a2c8c_0.conda - sha256: dfdec013bf7c2e87c49bc61a4cb8b1e3b8bf21e7f592326e958f0bf224de21b7 - md5: e4ba8aa0fb7dac95b0ea398a3229bf56 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.9.2-h96aa502_4.conda + sha256: 22e4737c8a885995b7c1ae1d79c1f6e78d489e16ec079615980fdde067aeaf76 + md5: 495c93a4f08b17deb3c04894512330e6 depends: - __osx >=11.0 - - aws-c-cal >=0.7.4,<0.7.5.0a0 - - aws-c-common >=0.9.28,<0.9.29.0a0 - - aws-c-compression >=0.2.19,<0.2.20.0a0 - - aws-c-io >=0.14.18,<0.14.19.0a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-compression >=0.3.0,<0.3.1.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 license: Apache-2.0 license_family: Apache - size: 152450 - timestamp: 1726469199710 + size: 152983 + timestamp: 1734008451473 - kind: conda name: aws-c-io - version: 0.14.18 - build: hc3cb426_9 - build_number: 9 + version: 0.15.3 + build: haba67d1_5 + build_number: 5 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.14.18-hc3cb426_9.conda - sha256: 7083e61d4cba364b3757cb6cda11a255ac72bded174ecd58b3e0917a4e26efce - md5: e4bec2ed63b5208393a1e7d23e795665 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda + sha256: c0a1a2b0750225ac3dc07fd258c88c2be866bf8ac67ba3d50bb4ecec852ff8ee + md5: 4c5ff4134e76426a75b8c548984fa933 depends: - __osx >=11.0 - - aws-c-cal >=0.7.4,<0.7.5.0a0 - - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 license: Apache-2.0 license_family: Apache - size: 138080 - timestamp: 1725843155224 + size: 135729 + timestamp: 1734433832730 - kind: conda name: aws-c-mqtt - version: 0.10.5 - build: h3acc7b9_1 - build_number: 1 + version: 0.11.0 + build: h24f418c_12 + build_number: 12 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.10.5-h3acc7b9_1.conda - sha256: 2210e91e709820fa0efd8b0e780667ca2890dd73907ddecb11cbbc440e72da30 - md5: 3c0448a35267b5a63dcf3c654e621510 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda + sha256: 96575ea1dd2a9ea94763882e40a66dcbff9c41f702bf37c9514c4c719b3c11dd + md5: c072045a6206f88015d02fcba1705ea1 depends: - __osx >=11.0 - - aws-c-common >=0.9.28,<0.9.29.0a0 - - aws-c-http >=0.8.10,<0.8.11.0a0 - - aws-c-io >=0.14.18,<0.14.19.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 license: Apache-2.0 license_family: Apache - size: 133466 - timestamp: 1726496322703 + size: 134371 + timestamp: 1734025379525 - kind: conda name: aws-c-s3 - version: 0.6.6 - build: hd16c091_0 + version: 0.7.7 + build: h1be5864_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.6.6-hd16c091_0.conda - sha256: 0b3e2a1e4189faea5edaeb480d9ddcf6878efdc06f66ba6910dee4b4fb386b43 - md5: a4406babaa217f4d965c6cc52ef6520f + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda + sha256: 22966164d63808689fffd35945f57756c95337327e28099b5d77b29fc6a56ecc + md5: a37bba7acb62dd70492ee01eacca3b8f depends: - __osx >=11.0 - - aws-c-auth >=0.7.31,<0.7.32.0a0 - - aws-c-cal >=0.7.4,<0.7.5.0a0 - - aws-c-common >=0.9.28,<0.9.29.0a0 - - aws-c-http >=0.8.10,<0.8.11.0a0 - - aws-c-io >=0.14.18,<0.14.19.0a0 - - aws-checksums >=0.1.20,<0.1.21.0a0 + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 license: Apache-2.0 license_family: Apache - size: 96383 - timestamp: 1726722491079 + size: 97598 + timestamp: 1734146239038 - kind: conda name: aws-c-sdkutils - version: 0.1.19 - build: h41dd001_3 - build_number: 3 + version: 0.2.1 + build: hc8a0bd2_4 + build_number: 4 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.19-h41dd001_3.conda - sha256: b320a08973f22468fd816bb957947369381913ae045d33bd872d03ebabaa355f - md5: 53bd7f3e6723288f531387a892d01635 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda + sha256: de98343ce42d2e569b3380292d20f47bf39bda08aadabcbb8e650d3f38fd742f + md5: 22f72f8cd7ead211304ac17d337d96e0 depends: - __osx >=11.0 - - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 license: Apache-2.0 license_family: Apache - size: 49674 - timestamp: 1725836815498 + size: 49664 + timestamp: 1733994553014 - kind: conda name: aws-checksums - version: 0.1.20 - build: h41dd001_0 + version: 0.2.2 + build: hc8a0bd2_4 + build_number: 4 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.20-h41dd001_0.conda - sha256: 23c99722a3b3fac35d78c70731d333e85332e86a0ffce8bf48a9223478d5ffea - md5: 7ba57aa81224959beb6235f46bd05338 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda + sha256: 215086d95e8ff1d3fcb0197ada116cc9d7db1fdae7573f5e810d20fa9215b47c + md5: e70e88a357a3749b67679c0788c5b08a depends: - __osx >=11.0 - - aws-c-common >=0.9.28,<0.9.29.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 license: Apache-2.0 license_family: Apache - size: 69868 - timestamp: 1726282042057 + size: 70186 + timestamp: 1733994496998 - kind: conda name: aws-crt-cpp - version: 0.28.3 - build: he35ab64_4 - build_number: 4 + version: 0.29.7 + build: h19a973c_7 + build_number: 7 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.28.3-he35ab64_4.conda - sha256: e87b5b2659a4c9fe6eb77570c70a554b06b5ff970a5c2079ba470d2594f17184 - md5: 9bd22e14efae34b2c1a64159c5578f69 - depends: - - __osx >=11.0 - - aws-c-auth >=0.7.31,<0.7.32.0a0 - - aws-c-cal >=0.7.4,<0.7.5.0a0 - - aws-c-common >=0.9.28,<0.9.29.0a0 - - aws-c-event-stream >=0.4.3,<0.4.4.0a0 - - aws-c-http >=0.8.10,<0.8.11.0a0 - - aws-c-io >=0.14.18,<0.14.19.0a0 - - aws-c-mqtt >=0.10.5,<0.10.6.0a0 - - aws-c-s3 >=0.6.6,<0.6.7.0a0 - - aws-c-sdkutils >=0.1.19,<0.1.20.0a0 - - libcxx >=17 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda + sha256: 8269e6746eb3a5d15b732a3983888bf98dfc1f6594e95250fc8d16b43cfd5ff9 + md5: 95714136bef3e917bd5a2942d4682b20 + depends: + - __osx >=11.0 + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-c-mqtt >=0.11.0,<0.11.1.0a0 + - aws-c-s3 >=0.7.7,<0.7.8.0a0 + - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - libcxx >=18 license: Apache-2.0 license_family: Apache - size: 231017 - timestamp: 1726749096844 + size: 236249 + timestamp: 1734178020924 - kind: conda name: aws-sdk-cpp - version: 1.11.407 - build: h0455a66_0 + version: 1.11.458 + build: he0ff2e4_4 + build_number: 4 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.407-h0455a66_0.conda - sha256: a753df57869eb6814113fe4ae71b99965acf4f2fafc9237067ba84bb18b39933 - md5: e189085758424fa0222292c98decb68f + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda + sha256: 535b970aaa13be45f8cab8205c59f044b17364111c41a227f061775a5c834e18 + md5: 0981ed87098b149bdb7d99a4a3fd0e58 depends: - __osx >=11.0 - - aws-c-common >=0.9.28,<0.9.29.0a0 - - aws-c-event-stream >=0.4.3,<0.4.4.0a0 - - aws-checksums >=0.1.20,<0.1.21.0a0 - - aws-crt-cpp >=0.28.3,<0.28.4.0a0 - - libcurl >=8.10.0,<9.0a0 - - libcxx >=17 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 + - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - libcurl >=8.11.1,<9.0a0 + - libcxx >=18 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 + - openssl >=3.4.0,<4.0a0 license: Apache-2.0 license_family: Apache - size: 2704289 - timestamp: 1726638328407 + size: 2826534 + timestamp: 1734094018287 - kind: conda name: azure-core-cpp - version: 1.13.0 - build: hd01fc5c_0 + version: 1.14.0 + build: hd50102c_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.13.0-hd01fc5c_0.conda - sha256: aff4af38416cf7a81c79e5a3b071ce5aa13ec48da28db0312bc1ebe62cf7273d - md5: 2083f6313e623079db6ee67af00e6b27 + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda + sha256: f5b91329ed59ffc0be8747784c6e4cc7e56250c54032883a83bc11808ef6a87e + md5: f093a11dcf3cdcca010b20a818fcc6dc depends: - __osx >=11.0 - - libcurl >=8.8.0,<9.0a0 - - libcxx >=16 - - openssl >=3.3.1,<4.0a0 + - libcurl >=8.10.1,<9.0a0 + - libcxx >=17 + - openssl >=3.3.2,<4.0a0 license: MIT license_family: MIT - size: 287922 - timestamp: 1720853302106 + size: 294299 + timestamp: 1728054014060 - kind: conda name: azure-identity-cpp - version: 1.8.0 - build: h13ea094_2 - build_number: 2 + version: 1.10.0 + build: hc602bab_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.8.0-h13ea094_2.conda - sha256: 11b01715cae19390890f29ebb56d36d895feafd787ba929aa10b6ce712f3f4b9 - md5: 383b72f2ee009992b21f4db08a708510 + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda + sha256: bde446b916fff5150606f8ed3e6058ffc55a3aa72381e46f1ab346590b1ae40a + md5: d7b71593a937459f2d4b67e1a4727dc2 depends: - __osx >=11.0 - - azure-core-cpp >=1.13.0,<1.13.1.0a0 - - libcxx >=16 - - openssl >=3.3.1,<4.0a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libcxx >=17 + - openssl >=3.3.2,<4.0a0 license: MIT license_family: MIT - size: 142135 - timestamp: 1721777696118 + size: 166907 + timestamp: 1728486882502 - kind: conda name: azure-storage-blobs-cpp - version: 12.12.0 - build: hfde595f_0 + version: 12.13.0 + build: h7585a09_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.12.0-hfde595f_0.conda - sha256: f733f4acedd8bf1705c780e0828f0b83242ae7e72963aef60d12a7c5b3a8640d - md5: f2c935764fdacd0fafc05f975fd347e0 + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda + sha256: 08d52d130addc0fb55d5ba10d9fa483e39be25d69bac7f4c676c2c3069207590 + md5: 704238ef05d46144dae2e6b5853df8bc depends: - __osx >=11.0 - - azure-core-cpp >=1.13.0,<1.13.1.0a0 - - azure-storage-common-cpp >=12.7.0,<12.7.1.0a0 - - libcxx >=16 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 + - libcxx >=17 license: MIT license_family: MIT - size: 419976 - timestamp: 1721865180569 + size: 438636 + timestamp: 1728578216193 - kind: conda name: azure-storage-common-cpp - version: 12.7.0 - build: hcf3b6fd_1 + version: 12.8.0 + build: h9ca1f76_1 build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.7.0-hcf3b6fd_1.conda - sha256: 3fdf9c0337c48706cffe2e4c761cdea4132fb6dbd1f144d969c28afd903cf256 - md5: df7e01bcf8f3a9bfb0ab06778f915f29 + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda + sha256: 77ab04e8fe5636a2de9c718f72a43645f7502cd208868c8a91ffba385547d585 + md5: 7a187cd7b1445afc80253bb186a607cc depends: - __osx >=11.0 - - azure-core-cpp >=1.13.0,<1.13.1.0a0 - - libcxx >=16 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libcxx >=17 - libxml2 >=2.12.7,<3.0a0 - - openssl >=3.3.1,<4.0a0 + - openssl >=3.3.2,<4.0a0 license: MIT license_family: MIT - size: 119821 - timestamp: 1721832870493 + size: 121278 + timestamp: 1728563418777 - kind: conda name: azure-storage-files-datalake-cpp - version: 12.11.0 - build: h082e32e_1 + version: 12.12.0 + build: hcdd55da_1 build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.11.0-h082e32e_1.conda - sha256: 3c288dc1ae6bff9a1e21ab5196d13ab486850f61ec649a743a87bf9726901abf - md5: 16b05d31f626717668f01c01a970115f + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda + sha256: f48523f8aa0b5b80f45a92f0556b388dd96f44ac2dc2f44a01d08c1822eec97d + md5: c49fbc5233fcbaa86391162ff1adef38 depends: - __osx >=11.0 - - azure-core-cpp >=1.13.0,<1.13.1.0a0 - - azure-storage-blobs-cpp >=12.12.0,<12.12.1.0a0 - - azure-storage-common-cpp >=12.7.0,<12.7.1.0a0 - - libcxx >=16 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 + - libcxx >=17 + license: MIT + license_family: MIT + size: 196032 + timestamp: 1728729672889 +- kind: conda + name: backoff + version: 2.2.1 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda + sha256: f334115c6b0c6c2cd0d28595365f205ec7eaa60bcc5ff91a75d7245f728be820 + md5: a38b801f2bcc12af80c2e02a9e4ce7d9 + depends: + - python >=3.9 license: MIT license_family: MIT - size: 189065 - timestamp: 1721925275724 + size: 18816 + timestamp: 1733771192649 - kind: conda name: brotli-python version: 1.1.0 @@ -653,43 +712,43 @@ packages: timestamp: 1720974522888 - kind: conda name: c-ares - version: 1.33.1 - build: hd74edd7_0 + version: 1.34.4 + build: h5505292_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.33.1-hd74edd7_0.conda - sha256: ad29a9cffa0504cb4bf7605963816feff3c7833f36b050e1e71912d09c38e3f6 - md5: 5b69c16ee900aeffcf0103268d708518 + url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda + sha256: 09c0c8476e50b2955f474a4a1c17c4c047dd52993b5366b6ea8e968e583b921f + md5: c1c999a38a4303b29d75c636eaa13cf9 depends: - __osx >=11.0 license: MIT license_family: MIT - size: 159389 - timestamp: 1724438175204 + size: 179496 + timestamp: 1734208291879 - kind: conda name: ca-certificates - version: 2024.8.30 + version: 2024.12.14 build: hf0a4a13_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda - sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 - md5: 40dec13fd8348dbe303e57be74bd3d35 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda + sha256: 256be633fd0882ccc1a7a32bc278547e1703f85082c0789a87a603ee3ab8fb82 + md5: 7cb381a6783d91902638e4ed1ebd478e license: ISC - size: 158482 - timestamp: 1725019034582 + size: 157091 + timestamp: 1734208344343 - kind: conda name: certifi - version: 2024.8.30 + version: 2024.12.14 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda - sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f - md5: 12f7d00853807b0531775e9be891cb11 + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda + sha256: 048c16a9cbcb1fbad02083414d3bc7c1d0eea4b39aee6aa6bf8d1d5089ca8bad + md5: 6feb87357ecd66733be3279f16a8c400 depends: - - python >=3.7 + - python >=3.9 license: ISC - size: 163752 - timestamp: 1725278204397 + size: 161642 + timestamp: 1734380604767 - kind: conda name: cffi version: 1.17.1 @@ -711,50 +770,51 @@ packages: timestamp: 1725560813378 - kind: conda name: charset-normalizer - version: 3.3.2 + version: 3.4.1 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda - sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 - md5: 7f4a9e3fcff3f6356ae99244a014da6a + url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + sha256: 4e0ee91b97e5de3e74567bdacea27f0139709fceca4db8adffbe24deffccb09b + md5: e83a31202d1c0a000fce3e9cf3825875 depends: - - python >=3.7 + - python >=3.9 license: MIT license_family: MIT - size: 46597 - timestamp: 1698833765762 + size: 47438 + timestamp: 1735929811779 - kind: conda name: click - version: 8.1.7 - build: unix_pyh707e725_0 + version: 8.1.8 + build: pyh707e725_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec - md5: f3ad426304898027fc619827ff428eca + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + sha256: c920d23cd1fcf565031c679adb62d848af60d6fbb0edc2d50ba475cea4f0d8ab + md5: f22f4d4970e09d68a10b922cbb0408d3 depends: - __unix - - python >=3.8 + - python >=3.9 license: BSD-3-Clause license_family: BSD - size: 84437 - timestamp: 1692311973840 + size: 84705 + timestamp: 1734858922844 - kind: conda name: colorama version: 0.4.6 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 - md5: 3faab06a954c2a04039983f2c4a50d99 + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 depends: - - python >=3.7 + - python >=3.9 license: BSD-3-Clause license_family: BSD - size: 25170 - timestamp: 1666700778190 + size: 27011 + timestamp: 1733218222191 - kind: conda name: datasets version: 2.14.4 @@ -784,6 +844,23 @@ packages: license_family: Apache size: 347303 timestamp: 1691593908658 +- kind: conda + name: deprecated + version: 1.2.15 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.15-pyhd8ed1ab_1.conda + sha256: a20ebf2c9b02a6eb32412ceb5c4cffaae49417db7e75414a76417538293a9402 + md5: eaef2e94d5bd76f758545d172c1fda67 + depends: + - python >=3.9 + - wrapt <2,>=1.10 + license: MIT + license_family: MIT + size: 14297 + timestamp: 1733662697343 - kind: conda name: dill version: 0.3.7 @@ -801,139 +878,157 @@ packages: timestamp: 1690101185422 - kind: conda name: dnspython - version: 2.6.1 - build: pyhd8ed1ab_1 + version: 2.7.0 + build: pyhff2d567_1 build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.6.1-pyhd8ed1ab_1.conda - sha256: 0d52c878553e569bccfbd96472c1659fb873bc05e95911b457d35982827626fe - md5: 936e6aadb75534384d11d982fab74b61 + url: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.7.0-pyhff2d567_1.conda + sha256: 3ec40ccf63f2450c5e6c7dd579e42fc2e97caf0d8cd4ba24aa434e6fc264eda0 + md5: 5fbd60d61d21b4bd2f9d7a48fe100418 depends: - - python >=3.8.0,<4.0.0 + - python >=3.9,<4.0.0 - sniffio constrains: - - h2 >=4.1.0 - - httpcore >=1.0.0 + - aioquic >=1.0.0 - wmi >=1.5.1 - - trio >=0.23 - - aioquic >=0.9.25 - - cryptography >=42 - - idna >=3.6 - httpx >=0.26.0 + - trio >=0.23 + - cryptography >=43 + - httpcore >=1.0.0 + - idna >=3.7 + - h2 >=4.1.0 license: ISC license_family: OTHER - size: 169434 - timestamp: 1709190848615 + size: 172172 + timestamp: 1733256829961 - kind: conda name: email-validator version: 2.2.0 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.2.0-pyhd8ed1ab_0.conda - sha256: ea9e936ed7c49ea6d66fa3554afe31ba311f2a3d5e384d8c38925fda9e37bdb9 - md5: 3067adf57ee658ddf5bfad47b0041ce4 + url: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.2.0-pyhd8ed1ab_1.conda + sha256: b91a19eb78edfc2dbb36de9a67f74ee2416f1b5273dd7327abe53f2dbf864736 + md5: da16dd3b0b71339060cd44cb7110ddf9 depends: - dnspython >=2.0.0 - idna >=2.0.0 - - python >=3.7 + - python >=3.9 license: Unlicense - size: 44157 - timestamp: 1718984716782 + size: 44401 + timestamp: 1733300827551 - kind: conda name: email_validator version: 2.2.0 - build: hd8ed1ab_0 + build: hd8ed1ab_1 + build_number: 1 subdir: noarch noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.2.0-hd8ed1ab_0.conda - sha256: 2cbbbe9e0f3872214227c27b8b775dd2296a435c90ef50a7cc69934c329b6c65 - md5: 0214a004f7cf5ac28fc10a390dfc47ee + url: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.2.0-hd8ed1ab_1.conda + sha256: e0d0fdf587aa0ed0ff08b2bce3ab355f46687b87b0775bfba01cc80a859ee6a2 + md5: 0794f8807ff2c6f020422cacb1bd7bfa depends: - email-validator >=2.2.0,<2.2.1.0a0 license: Unlicense - size: 6690 - timestamp: 1718984720419 + size: 6552 + timestamp: 1733300828176 - kind: conda name: exceptiongroup version: 1.2.2 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 - md5: d02ae936e42063ca46af6cdad2dbd1e0 + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701 + md5: a16662747cdeb9abbac74d0057cc976e depends: - - python >=3.7 + - python >=3.9 license: MIT and PSF-2.0 - size: 20418 - timestamp: 1720869435725 + size: 20486 + timestamp: 1733208916977 - kind: conda name: fastapi - version: 0.115.0 + version: 0.115.6 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.115.0-pyhd8ed1ab_0.conda - sha256: e8ebb76be564d31cdc8223edbcef1519ebe2d44876d95db2a87756ee7c9ea19d - md5: fd920ad2645840f5b7b85ab58eadae73 + url: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.115.6-pyhd8ed1ab_0.conda + sha256: d7826d537c667093c9de96411a09585a8d620c84a830a0195e58e9a0df45f018 + md5: 1b1e0c97830cdf75f1f371bd467ab657 depends: - email_validator >=2.0.0 - fastapi-cli >=0.0.5 - httpx >=0.23.0 - jinja2 >=2.11.2 - pydantic >=1.7.4,!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0 - - python >=3.8 + - python >=3.9 - python-multipart >=0.0.7 - - starlette >=0.37.2,<0.39.0 - - typing-extensions >=4.8.0 - - uvicorn >=0.12.0 + - starlette >=0.40.0,<0.42.0 + - typing_extensions >=4.8.0 + - uvicorn-standard >=0.12.0 license: MIT license_family: MIT - size: 72998 - timestamp: 1726622903716 + size: 73084 + timestamp: 1733362427885 - kind: conda name: fastapi-cli - version: 0.0.5 + version: 0.0.7 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.5-pyhd8ed1ab_0.conda - sha256: 72a8b8f55420207086cacf15066e234556669b4f3d6f5f8555a93a0013ed9bc9 - md5: d50cd55f356225d8440741bb911c2a78 + url: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.7-pyhd8ed1ab_0.conda + sha256: 300683731013b7221922339cd40430bb3c2ddeeb658fd7e37f5099ffe64e4db0 + md5: d960e0ea9e1c561aa928f6c4439f04c7 depends: - - fastapi - - python >=3.8 + - python >=3.9 + - rich-toolkit >=0.11.1 - typer >=0.12.3 - - uvicorn >=0.15.0 + - uvicorn-standard >=0.15.0 license: MIT license_family: MIT - size: 14405 - timestamp: 1722597753588 + size: 15546 + timestamp: 1734302408607 - kind: conda name: filelock version: 3.16.1 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda - sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 - md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda + sha256: 18dca6e2194732df7ebf824abaefe999e4765ebe8e8a061269406ab88fc418b9 + md5: d692e9ba6f92dc51484bf3477e36ce7c depends: - - python >=3.7 + - python >=3.9 license: Unlicense - size: 17357 - timestamp: 1726613593584 + size: 17441 + timestamp: 1733240909987 +- kind: conda + name: freetype + version: 2.12.1 + build: hadb7bae_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + sha256: 791673127e037a2dc0eebe122dc4f904cb3f6e635bb888f42cbe1a76b48748d9 + md5: e6085e516a3e304ce41a8ee08b9b89ad + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + size: 596430 + timestamp: 1694616332835 - kind: conda name: frozenlist - version: 1.4.1 - build: py312h024a12e_1 - build_number: 1 + version: 1.5.0 + build: py312h0bf5046_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.4.1-py312h024a12e_1.conda - sha256: 26bd6227520e1463fdc5d58fa8f7a4b13b432c9b549ac1c576057add3ec51524 - md5: 36a854ba6031d1b963db6988a561948b + url: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.5.0-py312h0bf5046_0.conda + sha256: 44d6d6b332421e621c029fb149f12dba1ccb5ed6ac632e2e807a9d92d6cb2864 + md5: 7960352935cc95ac23883c9b8c97f2ff depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -941,23 +1036,23 @@ packages: - python_abi 3.12.* *_cp312 license: Apache-2.0 license_family: APACHE - size: 52492 - timestamp: 1725395920922 + size: 53366 + timestamp: 1729699762631 - kind: conda name: fsspec - version: 2024.9.0 - build: pyhff2d567_0 + version: 2024.12.0 + build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.9.0-pyhff2d567_0.conda - sha256: 8f4e9805b4ec223dea0d99f9e7e57c391d9026455eb9f0d6e0784c5d1a1200dc - md5: ace4329fbff4c69ab0309db6da182987 + url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda + sha256: 3320970c4604989eadf908397a9475f9e6a96a773c185915111399cbfbe47817 + md5: e041ad4c43ab5e10c74587f95378ebc7 depends: - - python >=3.8 + - python >=3.9 license: BSD-3-Clause license_family: BSD - size: 134378 - timestamp: 1725543368393 + size: 137756 + timestamp: 1734650349242 - kind: conda name: gflags version: 2.2.2 @@ -992,143 +1087,182 @@ packages: timestamp: 1718284365403 - kind: conda name: gojo - version: 0.1.9 + version: 0.1.13 build: h60d57d3_0 subdir: osx-arm64 - url: https://repo.prefix.dev/mojo-community/osx-arm64/gojo-0.1.9-h60d57d3_0.conda - sha256: 4c268d0d8d5f1b78a547e78a3db9e8037143918cd1d696f5adb5db55942cef5e + url: https://repo.prefix.dev/mojo-community/osx-arm64/gojo-0.1.13-h60d57d3_0.conda + sha256: 06475a69ac426781b628a3aefcf115dc8e7df0064637a04d6d039031a6e539f7 depends: - - max >=24.5.0,<24.6.0 + - max >=24.5.0,<25 arch: arm64 platform: osx license: MIT - size: 1009999 - timestamp: 1726268309700 + size: 999737 + timestamp: 1728268347402 +- kind: conda + name: googleapis-common-protos + version: 1.66.0 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.66.0-pyhff2d567_0.conda + sha256: d8d19575a827f2c62500949b9536efdd6b5406c9f546a73b6a87ac90b03a5875 + md5: 4861e30ff0cd566ea6fb4593e3b7c22a + depends: + - protobuf >=3.20.2,<6.0.0.dev0,!=3.20.0,!=3.20.1,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5 + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 116522 + timestamp: 1731459019854 - kind: conda name: h11 version: 0.14.0 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 - md5: b21ed0883505ba1910994f1df031a428 + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda + sha256: 622516185a7c740d5c7f27016d0c15b45782c1501e5611deec63fd70344ce7c8 + md5: 7ee49e89531c0dcbba9466f6d115d585 depends: - - python >=3 + - python >=3.9 - typing_extensions license: MIT license_family: MIT - size: 48251 - timestamp: 1664132995560 + size: 51846 + timestamp: 1733327599467 - kind: conda name: h2 version: 4.1.0 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 - sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a - md5: b748fbf7060927a6e82df7cb5ee8f097 + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda + sha256: 843ddad410c370672a8250470697027618f104153612439076d4d7b91eeb7b5c + md5: 825927dc7b0f287ef8d4d0011bb113b1 depends: - hpack >=4.0,<5 - hyperframe >=6.0,<7 - - python >=3.6.1 + - python >=3.9 license: MIT license_family: MIT - size: 46754 - timestamp: 1634280590080 + size: 52000 + timestamp: 1733298867359 - kind: conda name: hpack version: 4.0.0 - build: pyh9f0ad1d_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 - sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 - md5: 914d6646c4dbb1fd3ff539830a12fd71 + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda + sha256: ec89b7e5b8aa2f0219f666084446e1fb7b54545861e9caa892acb24d125761b5 + md5: 2aa5ff7fa34a81b9196532c84c10d865 depends: - - python + - python >=3.9 license: MIT license_family: MIT - size: 25341 - timestamp: 1598856368685 + size: 29412 + timestamp: 1733299296857 - kind: conda name: httpcore - version: 1.0.5 - build: pyhd8ed1ab_0 + version: 1.0.7 + build: pyh29332c3_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda - sha256: 4025644200eefa0598e4600a66fd4804a57d9fd7054a5c8c45e508fd875e0b84 - md5: a6b9a0158301e697e4d0a36a3d60e133 + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.7-pyh29332c3_1.conda + sha256: c84d012a245171f3ed666a8bf9319580c269b7843ffa79f26468842da3abd5df + md5: 2ca8e6dbc86525c8b95e3c0ffa26442e depends: - - anyio >=3.0,<5.0 - - certifi + - python >=3.8 - h11 >=0.13,<0.15 - h2 >=3,<5 - - python >=3.8 - sniffio 1.* + - anyio >=3.0,<5.0 + - certifi license: BSD-3-Clause license_family: BSD - size: 45816 - timestamp: 1711597091407 + size: 48959 + timestamp: 1731707562362 +- kind: conda + name: httptools + version: 0.6.4 + build: py312hea69d52_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/httptools-0.6.4-py312hea69d52_0.conda + sha256: 5e93cda79e32e8c0039e05ea1939e688da336187dab025f699b42ef529e848be + md5: e1747a8e8d2aca5499aaea9993bf31ff + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 85623 + timestamp: 1732707871414 - kind: conda name: httpx - version: 0.27.2 + version: 0.28.1 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda - sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 - md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 + md5: d6989ead454181f4f9bc987d3dc4e285 depends: - anyio - certifi - httpcore 1.* - idna - - python >=3.8 - - sniffio + - python >=3.9 license: BSD-3-Clause license_family: BSD - size: 65085 - timestamp: 1724778453275 + size: 63082 + timestamp: 1733663449209 - kind: conda name: huggingface_hub - version: 0.25.0 - build: pyhd8ed1ab_0 + version: 0.26.5 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.25.0-pyhd8ed1ab_0.conda - sha256: 2efe1fd3820e6df0e8737a4d8c417efbc59c1b0dc1a338776b77395bff47f327 - md5: 2fae9e530166882772d25b9104eb677d + url: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.26.5-pyhd8ed1ab_1.conda + sha256: 0c75532d914a04c73222be298ed2c6868739dd475b1b1a9137c52abe79873952 + md5: 73937038e21117fe401f8ea64fbaeacc depends: - filelock - fsspec >=2023.5.0 - packaging >=20.9 - - python >=3.8 + - python >=3.9 - pyyaml >=5.1 - requests - tqdm >=4.42.1 - typing-extensions >=3.7.4.3 + - typing_extensions >=3.7.4.3 license: Apache-2.0 license_family: APACHE - size: 271263 - timestamp: 1726670559987 + size: 275466 + timestamp: 1733852454004 - kind: conda name: hyperframe version: 6.0.1 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 - sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 - md5: 9f765cbfab6870c8435b9eefecd7a1f4 + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + sha256: e91c6ef09d076e1d9a02819cd00fa7ee18ecf30cdd667605c853980216584d1b + md5: 566e75c90c1d0c8c459eb0ad9833dc7a depends: - - python >=3.6 + - python >=3.9 license: MIT license_family: MIT - size: 14646 - timestamp: 1619110249723 + size: 17239 + timestamp: 1733298862681 - kind: conda name: icu version: '75.1' @@ -1146,89 +1280,93 @@ packages: - kind: conda name: idna version: '3.10' - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda - sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 - md5: 7ba2ede0e7c795ff95088daf0dc59753 + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 + md5: 39a4f67be3286c86d696df570b1201b7 depends: - - python >=3.6 + - python >=3.9 license: BSD-3-Clause license_family: BSD - size: 49837 - timestamp: 1726459583613 + size: 49765 + timestamp: 1733211921194 - kind: conda name: importlib-metadata version: 8.5.0 - build: pyha770c72_0 + build: pyha770c72_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c - md5: 54198435fce4d64d8a89af22573012a8 + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda + sha256: 13766b88fc5b23581530d3a0287c0c58ad82f60401afefab283bf158d2be55a9 + md5: 315607a3030ad5d5227e76e0733798ff depends: - - python >=3.8 + - python >=3.9 - zipp >=0.5 license: Apache-2.0 license_family: APACHE - size: 28646 - timestamp: 1726082927916 + size: 28623 + timestamp: 1733223207185 - kind: conda name: jinja2 - version: 3.1.4 + version: 3.1.5 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda - sha256: 27380d870d42d00350d2d52598cddaf02f9505fb24be09488da0c9b8d1428f2d - md5: 7b86ecb7d3557821c649b3c31e3eb9f2 + url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda + sha256: 98977694b9ecaa3218662f843425f39501f81973c450f995eec68f1803ed71c3 + md5: 2752a6ed44105bfb18c9bef1177d9dcd depends: - markupsafe >=2.0 - - python >=3.7 + - python >=3.9 license: BSD-3-Clause license_family: BSD - size: 111565 - timestamp: 1715127275924 + size: 112561 + timestamp: 1734824044952 - kind: conda name: jupyter_client version: 8.6.3 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda - sha256: 4419c85e209a715f551a5c9bead746f29ee9d0fc41e772a76db3868622795671 - md5: a14218cfb29662b4a19ceb04e93e298e + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + sha256: 19d8bd5bb2fde910ec59e081eeb59529491995ce0d653a5209366611023a0b3a + md5: 4ebae00eae9705b0c3d6d1018a81d047 depends: - importlib-metadata >=4.8.3 - jupyter_core >=4.12,!=5.0.* - - python >=3.8 + - python >=3.9 - python-dateutil >=2.8.2 - pyzmq >=23.0 - tornado >=6.2 - traitlets >=5.3 license: BSD-3-Clause license_family: BSD - size: 106055 - timestamp: 1726610805505 + size: 106342 + timestamp: 1733441040958 - kind: conda name: jupyter_core version: 5.7.2 - build: py312h81bd7bf_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/jupyter_core-5.7.2-py312h81bd7bf_0.conda - sha256: 5ab0e75a30915d34ae27b4a76f1241c2f4cc4419b6b1c838cc1160b9ec8bfaf5 - md5: 209b9cb7159212afce5e16d7a3ee3b47 + build: pyh31011fe_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd + md5: 0a2980dada0dd7fd0998f0342308b1b1 depends: + - __unix - platformdirs >=2.5 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 + - python >=3.8 - traitlets >=5.3 license: BSD-3-Clause license_family: BSD - size: 93829 - timestamp: 1710257916303 + size: 57671 + timestamp: 1727163547058 - kind: conda name: krb5 version: 1.21.3 @@ -1247,146 +1385,175 @@ packages: license_family: MIT size: 1155530 timestamp: 1719463474401 +- kind: conda + name: lcms2 + version: '2.16' + build: ha0e7c42_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + sha256: 151e0c84feb7e0747fabcc85006b8973b22f5abbc3af76a9add0b0ef0320ebe4 + md5: 66f6c134e76fe13cce8a9ea5814b5dd5 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + size: 211959 + timestamp: 1701647962657 +- kind: conda + name: lerc + version: 4.0.0 + build: h9a09cb3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 + md5: de462d5aacda3b30721b512c5da4e742 + depends: + - libcxx >=13.0.1 + license: Apache-2.0 + license_family: Apache + size: 215721 + timestamp: 1657977558796 - kind: conda name: libabseil - version: '20240116.2' - build: cxx17_h00cdb27_1 - build_number: 1 + version: '20240722.0' + build: cxx17_h07bc746_4 + build_number: 4 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240116.2-cxx17_h00cdb27_1.conda - sha256: a9517c8683924f4b3b9380cdaa50fdd2009cd8d5f3918c92f64394238189d3cb - md5: f16963d88aed907af8b90878b8d8a05c + url: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda + sha256: 05fa5e5e908962b9c5aba95f962e2ca81d9599c4715aebe5e4ddb72b309d1770 + md5: c2d95bd7aa8d564a9bd7eca5e571a5b3 depends: - __osx >=11.0 - - libcxx >=16 + - libcxx >=18 constrains: - - abseil-cpp =20240116.2 - - libabseil-static =20240116.2=cxx17* + - libabseil-static =20240722.0=cxx17* + - abseil-cpp =20240722.0 license: Apache-2.0 license_family: Apache - size: 1136123 - timestamp: 1720857649214 + size: 1178260 + timestamp: 1736008642885 - kind: conda name: libarrow - version: 17.0.0 - build: hc6a7651_16_cpu - build_number: 16 + version: 18.1.0 + build: h0ad35bc_7_cpu + build_number: 7 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-17.0.0-hc6a7651_16_cpu.conda - sha256: 1facd5aa7140031be0f68733ab5e413ea1505da40548e27a173b2407046f36b5 - md5: 05fecc4ae5930dc548327980a4bc7a83 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda + sha256: 4fbdd8bb89d912bf03f10f9373a8d96a1cdd7a7851e107393418a3d2715bc27e + md5: 4ba2173203f44bbf03d19aaba6ed07d3 depends: - __osx >=11.0 - - aws-crt-cpp >=0.28.3,<0.28.4.0a0 - - aws-sdk-cpp >=1.11.407,<1.11.408.0a0 - - azure-core-cpp >=1.13.0,<1.13.1.0a0 - - azure-identity-cpp >=1.8.0,<1.8.1.0a0 - - azure-storage-blobs-cpp >=12.12.0,<12.12.1.0a0 - - azure-storage-files-datalake-cpp >=12.11.0,<12.11.1.0a0 + - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-identity-cpp >=1.10.0,<1.10.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 - bzip2 >=1.0.8,<2.0a0 - glog >=0.7.1,<0.8.0a0 - libabseil * cxx17* - - libabseil >=20240116.2,<20240117.0a0 + - libabseil >=20240722.0,<20240723.0a0 - libbrotlidec >=1.1.0,<1.2.0a0 - libbrotlienc >=1.1.0,<1.2.0a0 - - libcxx >=17 - - libgoogle-cloud >=2.29.0,<2.30.0a0 - - libgoogle-cloud-storage >=2.29.0,<2.30.0a0 - - libre2-11 >=2023.9.1,<2024.0a0 - - libutf8proc >=2.8.0,<3.0a0 + - libcxx >=18 + - libgoogle-cloud >=2.33.0,<2.34.0a0 + - libgoogle-cloud-storage >=2.33.0,<2.34.0a0 + - libre2-11 >=2024.7.2 + - libutf8proc >=2.9.0,<2.10.0a0 - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - orc >=2.0.2,<2.0.3.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - orc >=2.0.3,<2.0.4.0a0 - re2 - snappy >=1.2.1,<1.3.0a0 - zstd >=1.5.6,<1.6.0a0 constrains: - - apache-arrow-proc =*=cpu - arrow-cpp <0.0a0 - parquet-cpp <0.0a0 + - apache-arrow-proc =*=cpu license: Apache-2.0 license_family: APACHE - size: 5318871 - timestamp: 1726669928492 + size: 5506699 + timestamp: 1735682962976 - kind: conda name: libarrow-acero - version: 17.0.0 - build: hf9b8971_16_cpu - build_number: 16 + version: 18.1.0 + build: hf07054f_7_cpu + build_number: 7 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-17.0.0-hf9b8971_16_cpu.conda - sha256: c9ff43babc0acbd864584ed1720cf063715589e31e9e2024b90d2094d4f20d38 - md5: 319bd2a8c30dffa54d6ad69847f16de1 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda + sha256: 86e20cebfdb4f335e98265c1b88f5053bf3e3648768a317856295846bfdbf2b4 + md5: 3eaf71fe987de13061db795e03bb1a1c depends: - __osx >=11.0 - - libarrow 17.0.0 hc6a7651_16_cpu - - libcxx >=17 + - libarrow 18.1.0 h0ad35bc_7_cpu + - libcxx >=18 license: Apache-2.0 license_family: APACHE - size: 483187 - timestamp: 1726670022814 + size: 485185 + timestamp: 1735683071232 - kind: conda name: libarrow-dataset - version: 17.0.0 - build: hf9b8971_16_cpu - build_number: 16 + version: 18.1.0 + build: hf07054f_7_cpu + build_number: 7 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-17.0.0-hf9b8971_16_cpu.conda - sha256: e77d3c6825384c232f61fd3602a32507b66410dbe8879cd69a89b0fc49489533 - md5: 67ea0ef775de4c394c3c7db991297ffa + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda + sha256: 52c5c4e9cd5f2ac91dcebb6a920ab2536febcea116ff8767e5439329d7da820b + md5: 97a2d3606682d94f7d73112e9ad684ae depends: - __osx >=11.0 - - libarrow 17.0.0 hc6a7651_16_cpu - - libarrow-acero 17.0.0 hf9b8971_16_cpu - - libcxx >=17 - - libparquet 17.0.0 hf0ba9ef_16_cpu + - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow-acero 18.1.0 hf07054f_7_cpu + - libcxx >=18 + - libparquet 18.1.0 h636d7b7_7_cpu license: Apache-2.0 license_family: APACHE - size: 491606 - timestamp: 1726671006156 + size: 491237 + timestamp: 1735684688308 - kind: conda name: libarrow-substrait - version: 17.0.0 - build: hbf8b706_16_cpu - build_number: 16 + version: 18.1.0 + build: h4239455_7_cpu + build_number: 7 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-17.0.0-hbf8b706_16_cpu.conda - sha256: 6880b3c8fb88ee6c0bbae34b0efea86567ccec1b8cd8a3662b8b8c6dfeb5e87a - md5: b739c909163c38f85f40f5650ab2aeb2 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda + sha256: a45bbdd6932aed972d6c6ce30a7439aa8ec9d9b8ee5affb350d41e50abdc0127 + md5: 91927747173f65695e441346c7145e26 depends: - __osx >=11.0 - libabseil * cxx17* - - libabseil >=20240116.2,<20240117.0a0 - - libarrow 17.0.0 hc6a7651_16_cpu - - libarrow-acero 17.0.0 hf9b8971_16_cpu - - libarrow-dataset 17.0.0 hf9b8971_16_cpu - - libcxx >=17 - - libprotobuf >=4.25.3,<4.25.4.0a0 + - libabseil >=20240722.0,<20240723.0a0 + - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow-acero 18.1.0 hf07054f_7_cpu + - libarrow-dataset 18.1.0 hf07054f_7_cpu + - libcxx >=18 + - libprotobuf >=5.28.3,<5.28.4.0a0 license: Apache-2.0 license_family: APACHE - size: 472812 - timestamp: 1726671149860 + size: 452385 + timestamp: 1735684993831 - kind: conda name: libblas version: 3.9.0 - build: 24_osxarm64_openblas - build_number: 24 + build: 26_osxarm64_openblas + build_number: 26 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-24_osxarm64_openblas.conda - sha256: 4739f7463efb12e6d71536d8b0285a8de5aaadcc442bfedb9d92d1b4cbc47847 - md5: 35cb711e7bc46ee5f3dd67af99ad1986 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda + sha256: 597f9c3779caa979c8c6abbb3ba8c7191b84e1a910d6b0d10e5faf35284c450c + md5: 21be102c9ae80a67ba7de23b129aa7f6 depends: - - libopenblas >=0.3.27,<0.3.28.0a0 - - libopenblas >=0.3.27,<1.0a0 + - libopenblas >=0.3.28,<0.3.29.0a0 + - libopenblas >=0.3.28,<1.0a0 constrains: - - liblapack 3.9.0 24_osxarm64_openblas + - liblapack 3.9.0 26_osxarm64_openblas + - liblapacke 3.9.0 26_osxarm64_openblas + - libcblas 3.9.0 26_osxarm64_openblas - blas * openblas - - liblapacke 3.9.0 24_osxarm64_openblas - - libcblas 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD - size: 15144 - timestamp: 1726668802976 + size: 16714 + timestamp: 1734433054681 - kind: conda name: libbrotlicommon version: 1.1.0 @@ -1437,22 +1604,22 @@ packages: - kind: conda name: libcblas version: 3.9.0 - build: 24_osxarm64_openblas - build_number: 24 + build: 26_osxarm64_openblas + build_number: 26 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-24_osxarm64_openblas.conda - sha256: 40dc3f7c44af5cd5a2020386cb30f92943a9d8f7f54321b4d6ae32b2e54af9a4 - md5: c8977086a19233153e454bb2b332a920 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda + sha256: 27a29ef6b2fd2179bc3a0bb9db351f078ba140ca10485dca147c399639f84c93 + md5: a0e9980fe12d42f6d0c0ec009f67e948 depends: - - libblas 3.9.0 24_osxarm64_openblas + - libblas 3.9.0 26_osxarm64_openblas constrains: - - liblapack 3.9.0 24_osxarm64_openblas + - liblapack 3.9.0 26_osxarm64_openblas + - liblapacke 3.9.0 26_osxarm64_openblas - blas * openblas - - liblapacke 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD - size: 15062 - timestamp: 1726668809379 + size: 16628 + timestamp: 1734433061517 - kind: conda name: libcrc32c version: 1.1.2 @@ -1469,38 +1636,53 @@ packages: timestamp: 1633683992603 - kind: conda name: libcurl - version: 8.10.1 - build: h13a7ad3_0 + version: 8.11.1 + build: h73640d1_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda - sha256: 983a977c5627f975a930542c8aabb46089ec6ea72f28d9c4d3ee8eafaf2fc25a - md5: d84030d0863ffe7dea00b9a807fee961 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda + sha256: f47c35938144c23278987c7d12096f6a42d7c850ffc277222b032073412383b6 + md5: 46d7524cabfdd199bffe63f8f19a552b depends: - __osx >=11.0 - krb5 >=1.21.3,<1.22.0a0 - - libnghttp2 >=1.58.0,<2.0a0 - - libssh2 >=1.11.0,<2.0a0 + - libnghttp2 >=1.64.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 + - openssl >=3.4.0,<4.0a0 - zstd >=1.5.6,<1.6.0a0 license: curl license_family: MIT - size: 379948 - timestamp: 1726660033582 + size: 385098 + timestamp: 1734000160270 - kind: conda name: libcxx - version: 19.1.0 - build: ha82da77_0 + version: 19.1.6 + build: ha82da77_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.0-ha82da77_0.conda - sha256: b71167d9b7c8e598b12bbdafefd0139e3c70c6eb258cbda3de3fb422d0098025 - md5: a4c66c0d5b0f268fd27a956145004d27 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + sha256: 2b2443404503cd862385fd2f2a2c73f9624686fd1e5a45050b4034cfc06904ec + md5: ce5252d8db110cdb4ae4173d0a63c7c5 depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache - size: 520766 - timestamp: 1726782571130 + size: 520992 + timestamp: 1734494699681 +- kind: conda + name: libdeflate + version: '1.23' + build: hec38601_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda + sha256: 887c02deaed6d583459eba6367023e36d8761085b2f7126e389424f57155da53 + md5: 1d8b9588be14e71df38c525767a1ac30 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 54132 + timestamp: 1734373971372 - kind: conda name: libedit version: 3.1.20191231 @@ -1546,20 +1728,20 @@ packages: timestamp: 1685726248899 - kind: conda name: libexpat - version: 2.6.3 - build: hf9b8971_0 + version: 2.6.4 + build: h286801f_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a - md5: 5f22f07c2ab2dea8c66fe9585a062c96 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda + sha256: e42ab5ace927ee7c84e3f0f7d813671e1cf3529f5f06ee5899606630498c2745 + md5: 38d2656dd914feb0cab8c629370768bf depends: - __osx >=11.0 constrains: - - expat 2.6.3.* + - expat 2.6.4.* license: MIT license_family: MIT - size: 63895 - timestamp: 1725568783033 + size: 64693 + timestamp: 1730967175868 - kind: conda name: libffi version: 3.4.2 @@ -1607,72 +1789,76 @@ packages: timestamp: 1707330687590 - kind: conda name: libgoogle-cloud - version: 2.29.0 - build: hfa33a2f_0 + version: 2.33.0 + build: hdbe95d5_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.29.0-hfa33a2f_0.conda - sha256: 1f42048702d773a355d276d24313ac63781a331959fc3662c6be36e979d7845c - md5: f78c7bd435ee45f4661daae9e81ddf13 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.33.0-hdbe95d5_1.conda + sha256: ce95aca02451694a4154c7770b6addf4fb859abf17912de6ec947da8469a56ce + md5: 91de1fbab8610974c0094c266bc63435 depends: - __osx >=11.0 - libabseil * cxx17* - - libabseil >=20240116.2,<20240117.0a0 - - libcurl >=8.9.1,<9.0a0 - - libcxx >=17 - - libgrpc >=1.62.2,<1.63.0a0 - - libprotobuf >=4.25.3,<4.25.4.0a0 - - openssl >=3.3.2,<4.0a0 + - libabseil >=20240722.0,<20240723.0a0 + - libcurl >=8.11.1,<9.0a0 + - libcxx >=18 + - libgrpc >=1.67.1,<1.68.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - openssl >=3.4.0,<4.0a0 constrains: - - libgoogle-cloud 2.29.0 *_0 + - libgoogle-cloud 2.33.0 *_1 license: Apache-2.0 license_family: Apache - size: 866727 - timestamp: 1725640714587 + size: 877594 + timestamp: 1735648230965 - kind: conda name: libgoogle-cloud-storage - version: 2.29.0 - build: h90fd6fa_0 + version: 2.33.0 + build: h7081f7f_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.29.0-h90fd6fa_0.conda - sha256: ec80383fbb6fae95d2ff7d04ba46b282ab48219b7ce85b3cd5ee7d0d8bae74e1 - md5: baee0b9cb1c5319f370a534ca5a16267 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.33.0-h7081f7f_1.conda + sha256: c0524a22064bc17f5c037da09ba54cc9e767741ef645178e499750c44bec2531 + md5: af8e51382464d4cc2d0054977c40a732 depends: - __osx >=11.0 - libabseil - libcrc32c >=1.1.2,<1.2.0a0 - libcurl - - libcxx >=17 - - libgoogle-cloud 2.29.0 hfa33a2f_0 + - libcxx >=18 + - libgoogle-cloud 2.33.0 hdbe95d5_1 - libzlib >=1.3.1,<2.0a0 - openssl license: Apache-2.0 license_family: Apache - size: 535346 - timestamp: 1725641618955 + size: 526963 + timestamp: 1735649222088 - kind: conda name: libgrpc - version: 1.62.2 - build: h9c18a4f_0 + version: 1.67.1 + build: h0a426d6_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.62.2-h9c18a4f_0.conda - sha256: d2c5b5a828f6f1242c11e8c91968f48f64446f7dd5cbfa1197545e465eb7d47a - md5: e624fc11026dbb84c549435eccd08623 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.67.1-h0a426d6_1.conda + sha256: 630edf63981818ff590367cb95fddbed0f5a390464d0952c90ec81de899e84a6 + md5: 8a3cba079d6ac985e7d73c76a678fbb4 depends: - - c-ares >=1.28.1,<2.0a0 + - __osx >=11.0 + - c-ares >=1.34.4,<2.0a0 - libabseil * cxx17* - - libabseil >=20240116.1,<20240117.0a0 - - libcxx >=16 - - libprotobuf >=4.25.3,<4.25.4.0a0 - - libre2-11 >=2023.9.1,<2024.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.2.1,<4.0a0 + - libabseil >=20240722.0,<20240723.0a0 + - libcxx >=18 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - libre2-11 >=2024.7.2 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 - re2 constrains: - - grpc-cpp =1.62.2 + - grpc-cpp =1.67.1 license: Apache-2.0 license_family: APACHE - size: 5016525 - timestamp: 1713392846329 + size: 5311706 + timestamp: 1735585137716 - kind: conda name: libiconv version: '1.17' @@ -1685,121 +1871,165 @@ packages: license: LGPL-2.1-only size: 676469 timestamp: 1702682458114 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hb547adb_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + sha256: a42054eaa38e84fc1e5ab443facac4bbc9d1b6b6f23f54b7bf4f1eb687e1d993 + md5: 3ff1e053dc3a2b8e36b9bfa4256a58d1 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + size: 547541 + timestamp: 1694475104253 - kind: conda name: liblapack version: 3.9.0 - build: 24_osxarm64_openblas - build_number: 24 + build: 26_osxarm64_openblas + build_number: 26 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-24_osxarm64_openblas.conda - sha256: 67fbfd0466eee443cda9596ed22daabedc96b7b4d1b31f49b1c1b0983dd1dd2c - md5: 49a3241f76cdbe705e346204a328f66c + url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda + sha256: dd6d9a21e672aee4332f019c8229ce70cf5eaf6c2f4cbd1443b105fb66c00dc5 + md5: cebad79038a75cfd28fa90d147a2d34d depends: - - libblas 3.9.0 24_osxarm64_openblas + - libblas 3.9.0 26_osxarm64_openblas constrains: + - liblapacke 3.9.0 26_osxarm64_openblas + - libcblas 3.9.0 26_osxarm64_openblas - blas * openblas - - liblapacke 3.9.0 24_osxarm64_openblas - - libcblas 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD - size: 15063 - timestamp: 1726668815824 + size: 16624 + timestamp: 1734433068120 - kind: conda - name: libnghttp2 - version: 1.58.0 - build: ha4dd798_1 + name: liblzma + version: 5.6.3 + build: h39f12f2_1 build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda - sha256: fc97aaaf0c6d0f508be313d86c2705b490998d382560df24be918b8e977802cd - md5: 1813e066bfcef82de579a0be8a766df4 + url: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda + sha256: d863b8257406918ffdc50ae65502f2b2d6cede29404d09a094f59509d6a0aaf1 + md5: b2553114a7f5e20ccd02378a77d836aa + depends: + - __osx >=11.0 + license: 0BSD + size: 99129 + timestamp: 1733407496073 +- kind: conda + name: libnghttp2 + version: 1.64.0 + build: h6d7220d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda + sha256: 00cc685824f39f51be5233b54e19f45abd60de5d8847f1a56906f8936648b72f + md5: 3408c02539cee5f1141f9f11450b6a51 depends: - - __osx >=10.9 - - c-ares >=1.23.0,<2.0a0 - - libcxx >=16.0.6 + - __osx >=11.0 + - c-ares >=1.34.2,<2.0a0 + - libcxx >=17 - libev >=4.33,<4.34.0a0 - libev >=4.33,<5.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.2.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 license: MIT license_family: MIT - size: 565451 - timestamp: 1702130473930 + size: 566719 + timestamp: 1729572385640 - kind: conda name: libopenblas - version: 0.3.27 - build: openmp_h517c56d_1 + version: 0.3.28 + build: openmp_hf332438_1 build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.27-openmp_h517c56d_1.conda - sha256: 46cfcc592b5255262f567cd098be3c61da6bca6c24d640e878dc8342b0f6d069 - md5: 71b8a34d70aa567a990162f327e81505 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda + sha256: 62bb669c37a845129096f73d446cdb6bb170e4927f2fea2b661329680dbbc373 + md5: 40803a48d947c8639da6704e9a44d3ce depends: - __osx >=11.0 - libgfortran 5.* - - libgfortran5 >=12.3.0 - - llvm-openmp >=16.0.6 + - libgfortran5 >=13.2.0 + - llvm-openmp >=18.1.8 constrains: - - openblas >=0.3.27,<0.3.28.0a0 + - openblas >=0.3.28,<0.3.29.0a0 license: BSD-3-Clause license_family: BSD - size: 2925328 - timestamp: 1720425811743 + size: 4165774 + timestamp: 1730772154295 - kind: conda name: libparquet - version: 17.0.0 - build: hf0ba9ef_16_cpu - build_number: 16 + version: 18.1.0 + build: h636d7b7_7_cpu + build_number: 7 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-17.0.0-hf0ba9ef_16_cpu.conda - sha256: 6ed28f06409b02a9f521ee5e8cf2f4d3fb63a7633c11f2ee7ec2880e78e184e5 - md5: 517ecf2ee0c2822e6120c258f3acd383 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda + sha256: bf42e43542a90edd86ba5aa5fd4543671625f1bc35f62be32688f00e18bae990 + md5: 93de9ba66a20db32a2646d313794b3a8 depends: - __osx >=11.0 - - libarrow 17.0.0 hc6a7651_16_cpu - - libcxx >=17 - - libthrift >=0.20.0,<0.20.1.0a0 - - openssl >=3.3.2,<4.0a0 + - libarrow 18.1.0 h0ad35bc_7_cpu + - libcxx >=18 + - libthrift >=0.21.0,<0.21.1.0a0 + - openssl >=3.4.0,<4.0a0 license: Apache-2.0 license_family: APACHE - size: 873007 - timestamp: 1726670938318 + size: 873251 + timestamp: 1735684582558 +- kind: conda + name: libpng + version: 1.6.44 + build: hc14010f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + sha256: 38f8759a3eb8060deabd4db41f0f023514d853e46ddcbd0ba21768fc4e563bb1 + md5: fb36e93f0ea6a6f5d2b99984f34b049e + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + size: 263385 + timestamp: 1726234714421 - kind: conda name: libprotobuf - version: 4.25.3 - build: hbfab5d5_0 + version: 5.28.3 + build: h3bd63a1_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.25.3-hbfab5d5_0.conda - sha256: d754519abc3ddbdedab2a38d0639170f5347c1573eef80c707f3a8dc5dff706a - md5: 5f70b2b945a9741cba7e6dfe735a02a7 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda + sha256: f58a16b13ad53346903c833e266f83c3d770a43a432659b98710aed85ca885e7 + md5: bdbfea4cf45ae36652c6bbcc2e7ebe91 depends: + - __osx >=11.0 - libabseil * cxx17* - - libabseil >=20240116.1,<20240117.0a0 - - libcxx >=16 - - libzlib >=1.2.13,<2.0.0a0 + - libabseil >=20240722.0,<20240723.0a0 + - libcxx >=18 + - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD - size: 2154402 - timestamp: 1709514097574 + size: 2271580 + timestamp: 1735576361997 - kind: conda name: libre2-11 - version: 2023.09.01 - build: h7b2c953_2 + version: 2024.07.02 + build: h07bc746_2 build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2023.09.01-h7b2c953_2.conda - sha256: c8a0a6e7a627dc9c66ffb8858f8f6d499f67fd269b6636b25dc5169760610f05 - md5: 0b7b2ced046d6b5fe6e9d46b1ee0324c + url: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda + sha256: 112a73ad483353751d4c5d63648c69a4d6fcebf5e1b698a860a3f5124fc3db96 + md5: 6b1e3624d3488016ca4f1ca0c412efaa depends: + - __osx >=11.0 - libabseil * cxx17* - - libabseil >=20240116.1,<20240117.0a0 - - libcxx >=16 + - libabseil >=20240722.0,<20240723.0a0 + - libcxx >=18 constrains: - - re2 2023.09.01.* + - re2 2024.07.02.* license: BSD-3-Clause license_family: BSD - size: 171443 - timestamp: 1708947163461 + size: 167155 + timestamp: 1735541067807 - kind: conda name: libsodium version: 1.0.20 @@ -1815,172 +2045,244 @@ packages: timestamp: 1716828607917 - kind: conda name: libsqlite - version: 3.46.1 - build: hc14010f_0 + version: 3.47.2 + build: h3f77e49_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda - sha256: 3725f962f490c5d44dae326d5f5b2e3c97f71a6322d914ccc85b5ddc2e50d120 - md5: 58050ec1724e58668d0126a1615553fa + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda + sha256: f192f3c8973de9ec4c214990715f13b781965247a5cedf9162e7f9e699cfc3c4 + md5: 122d6f29470f1a991e85608e77e56a8a depends: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 license: Unlicense - size: 829500 - timestamp: 1725353720793 + size: 850553 + timestamp: 1733762057506 - kind: conda name: libssh2 - version: 1.11.0 - build: h7a5bd25_0 + version: 1.11.1 + build: h9cc3647_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda - sha256: bb57d0c53289721fff1eeb3103a1c6a988178e88d8a8f4345b0b91a35f0e0015 - md5: 029f7dc931a3b626b94823bc77830b01 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda + sha256: f7047c6ed44bcaeb04432e8c74da87591940d091b0a3940c0d884b7faa8062e9 + md5: ddc7194676c285513706e5fc64f214d7 depends: - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 license: BSD-3-Clause license_family: BSD - size: 255610 - timestamp: 1685837894256 + size: 279028 + timestamp: 1732349599461 - kind: conda name: libthrift - version: 0.20.0 - build: h64651cc_1 - build_number: 1 + version: 0.21.0 + build: h64651cc_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.20.0-h64651cc_1.conda - sha256: b6afcbc934258e0474e0f1059bc7b23865723b902062f2f2910e0370e6495401 - md5: 4cf2e5233320648397184415f380c891 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda + sha256: 7a6c7d5f58cbbc2ccd6493b4b821639fdb0701b9b04c737a949e8cb6adf1c9ad + md5: 7ce2bd2f650f8c31ad7ba4c7bfea61b7 depends: - __osx >=11.0 - libcxx >=17 - libevent >=2.1.12,<2.1.13.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.1,<4.0a0 + - openssl >=3.3.2,<4.0a0 license: Apache-2.0 license_family: APACHE - size: 315041 - timestamp: 1724657608736 + size: 324342 + timestamp: 1727206096912 +- kind: conda + name: libtiff + version: 4.7.0 + build: h551f018_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda + sha256: 91417846157e04992801438a496b151df89604b2e7c6775d6f701fcd0cbed5ae + md5: a5d084a957563e614ec0c0196d890654 + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=18 + - libdeflate >=1.23,<1.24.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - liblzma >=5.6.3,<6.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + size: 370600 + timestamp: 1734398863052 - kind: conda name: libutf8proc - version: 2.8.0 - build: h1a8c8d9_0 + version: 2.9.0 + build: h5505292_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 - sha256: a3faddac08efd930fa3a1cc254b5053b4ed9428c49a888d437bf084d403c931a - md5: f8c9c41a122ab3abdf8943b13f4957ee + url: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda + sha256: ea88f06e97ef8fa2490f7594f8885bb542577226edf8abba3144302d951a53c2 + md5: f777470d31c78cd0abe1903a2fda436f + depends: + - __osx >=11.0 license: MIT license_family: MIT - size: 103492 - timestamp: 1667316405233 + size: 83000 + timestamp: 1732868631531 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libwebp-base + version: 1.5.0 + build: h2471fea_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + sha256: f8bdb876b4bc8cb5df47c28af29188de8911c3fea4b799a33743500149de3f4a + md5: 569466afeb84f90d5bb88c11cc23d746 + depends: + - __osx >=11.0 + constrains: + - libwebp 1.5.0 + license: BSD-3-Clause + license_family: BSD + size: 290013 + timestamp: 1734777593617 +- kind: conda + name: libxcb + version: 1.17.0 + build: hdb1d25a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 + md5: af523aae2eca6dfa1c8eec693f5b9a79 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + size: 323658 + timestamp: 1727278733917 - kind: conda name: libxml2 - version: 2.12.7 - build: h01dff8b_4 - build_number: 4 + version: 2.13.5 + build: h178c5d8_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.7-h01dff8b_4.conda - sha256: a9a76cdc6e93c0182bc2ac58b1ea0152be1a16a5d23f4dc7b8df282a7aef8d20 - md5: 1265488dc5035457b729583119ad4a1b + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda + sha256: d7af3f25a4cece170502acd38f2dafbea4521f373f46dcb28a37fbe6ac2da544 + md5: 3dc3cff0eca1640a6acbbfab2f78139e depends: - __osx >=11.0 - icu >=75.1,<76.0a0 - libiconv >=1.17,<2.0a0 + - liblzma >=5.6.3,<6.0a0 - libzlib >=1.3.1,<2.0a0 - - xz >=5.2.6,<6.0a0 license: MIT license_family: MIT - size: 588990 - timestamp: 1721031045514 + size: 582898 + timestamp: 1733443841584 - kind: conda name: libzlib version: 1.3.1 - build: hfb2fe0b_1 - build_number: 1 + build: h8359307_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-hfb2fe0b_1.conda - sha256: c34365dd37b0eab27b9693af32a1f7f284955517c2cc91f1b88a7ef4738ff03e - md5: 636077128927cf79fd933276dc3aed47 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 depends: - __osx >=11.0 constrains: - - zlib 1.3.1 *_1 + - zlib 1.3.1 *_2 license: Zlib license_family: Other - size: 46921 - timestamp: 1716874262512 + size: 46438 + timestamp: 1727963202283 - kind: conda name: lightbug_http - version: 0.1.3 + version: 0.1.6 build: h60d57d3_0 subdir: osx-arm64 - url: https://repo.prefix.dev/mojo-community/osx-arm64/lightbug_http-0.1.3-h60d57d3_0.conda - sha256: fbe1defc8a04e34b7a2c3db407b211b06f93dadfc2b2cca22f6e979921007761 + url: https://repo.prefix.dev/mojo-community/osx-arm64/lightbug_http-0.1.6-h60d57d3_0.conda + sha256: 3d22b064d795a652eb257afb21266f470557eb6ece805981373775e3abd7a0f0 depends: - max >=24.5.0 - - gojo ==0.1.9 - small_time ==0.1.3 arch: arm64 platform: osx license: MIT - size: 950241 - timestamp: 1726331679119 + size: 972065 + timestamp: 1735496636396 - kind: conda name: llvm-openmp - version: 18.1.8 - build: hde57baf_1 - build_number: 1 + version: 19.1.6 + build: hdb05f8b_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-18.1.8-hde57baf_1.conda - sha256: 7a76e2932ac77e6314bfa1c4ff83f617c8260313bfed1b8401b508ed3e9d70ba - md5: fe89757e3cd14bb1c6ebd68dac591363 + url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda + sha256: a0f3e9139ab16f0a67b9d2bbabc15b78977168f4a5b5503fed4962dcb9a96102 + md5: 34fdeffa0555a1a56f38839415cc066c depends: - __osx >=11.0 constrains: - - openmp 18.1.8|18.1.8.* + - openmp 19.1.6|19.1.6.* license: Apache-2.0 WITH LLVM-exception license_family: APACHE - size: 276263 - timestamp: 1723605341828 + size: 281251 + timestamp: 1734520462311 - kind: conda name: lz4-c - version: 1.9.4 - build: hb7217d7_0 + version: 1.10.0 + build: h286801f_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_0.conda - sha256: fc343b8c82efe40819b986e29ba748366514e5ab94a1e1138df195af5f45fa24 - md5: 45505bec548634f7d05e02fb25262cb9 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + sha256: 94d3e2a485dab8bdfdd4837880bde3dd0d701e2b97d6134b8806b7c8e69c8652 + md5: 01511afc6cc1909c5303cf31be17b44f depends: - - libcxx >=14.0.6 + - __osx >=11.0 + - libcxx >=18 license: BSD-2-Clause license_family: BSD - size: 141188 - timestamp: 1674727268278 + size: 148824 + timestamp: 1733741047892 - kind: conda name: markdown-it-py version: 3.0.0 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 - md5: 93a8e71256479c62074356ef6ebf501b + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + sha256: 0fbacdfb31e55964152b24d5567e9a9996e1e7902fb08eb7d91b5fd6ce60803a + md5: fee3164ac23dfca50cfcc8b85ddefb81 depends: - mdurl >=0.1,<1 - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT - size: 64356 - timestamp: 1686175179621 + size: 64430 + timestamp: 1733250550053 - kind: conda name: markupsafe - version: 2.1.5 - build: py312h024a12e_1 + version: 3.0.2 + build: py312h998013c_1 build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-2.1.5-py312h024a12e_1.conda - sha256: 0e337724d82b19510c457246c319b35944580f31b3859359e1e8b9c53a14bc52 - md5: 66ee733dbdf8a9ca670f167bf5ea36b4 + url: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda + sha256: 4aa997b244014d3707eeef54ab0ee497d12c0d0d184018960cce096169758283 + md5: 46e547061080fddf9cf95a0327e8aba6 depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -1990,68 +2292,83 @@ packages: - jinja2 >=3.0.0 license: BSD-3-Clause license_family: BSD - size: 25840 - timestamp: 1724959900292 + size: 24048 + timestamp: 1733219945697 - kind: conda name: max - version: 24.6.0.dev2024092105 + version: 24.6.0 build: release subdir: noarch noarch: python - url: https://conda.modular.com/max-nightly/noarch/max-24.6.0.dev2024092105-release.conda - sha256: 7a4ad33bcafe6b5375550151320f1677c038d9924d77b11722d7b8b67482a0de - md5: 463ca2d71dc506f857909cca3c24d257 + url: https://conda.modular.com/max/noarch/max-24.6.0-release.conda + sha256: 0e3c1984ac7476550fd8fa5921bf1ca58950219b84ae21ecd861f650e45382ac + md5: e04b1405f630c9bb7d4cb5559840e902 depends: - - max-core ==24.6.0.dev2024092105 release - - max-python >=24.6.0.0dev,<25.0a0 - - mojo-jupyter ==24.6.0.dev2024092105 release - - mblack ==24.6.0.dev2024092105 release - size: 9702 - timestamp: 1726896069659 + - max-core ==24.6.0 release + - max-python >=24.6.0,<25.0a0 + - mojo-jupyter ==24.6.0 release + - mblack ==24.6.0 release + license: LicenseRef-Modular-Proprietary + size: 9851 + timestamp: 1734039439696 - kind: conda name: max-core - version: 24.6.0.dev2024092105 + version: 24.6.0 build: release subdir: osx-arm64 - url: https://conda.modular.com/max-nightly/osx-arm64/max-core-24.6.0.dev2024092105-release.conda - sha256: de0f66b421e1e5e05fa03bce9e0f24dda2c0e66f42a3336cb5240b31f090cbf8 - md5: b578301588792c6dcec827c77b5b7f23 + url: https://conda.modular.com/max/osx-arm64/max-core-24.6.0-release.conda + sha256: 434c29e35067e296db55525cd5cf38bb013a1f7a7bfa99845bf6c317de6cdc12 + md5: 4a2ead0a9010c36b6193ea32f583e996 depends: - - mblack ==24.6.0.dev2024092105 release + - mblack ==24.6.0 release arch: arm64 platform: osx - size: 246026529 - timestamp: 1726896074380 + license: LicenseRef-Modular-Proprietary + size: 212001240 + timestamp: 1734039726703 - kind: conda name: max-python - version: 24.6.0.dev2024092105 + version: 24.6.0 build: 3.12release subdir: osx-arm64 - url: https://conda.modular.com/max-nightly/osx-arm64/max-python-24.6.0.dev2024092105-3.12release.conda - sha256: f356369ffa55d1894cd7fa08d4286d28710fc1e537a6a58e6633046d1e28b2b8 - md5: 7fb96304f199d70b11bab19bfcd41b3e + url: https://conda.modular.com/max/osx-arm64/max-python-24.6.0-3.12release.conda + sha256: c888b58cfc7c767d40aa100ff2bccf5c3ab11d58d897a6accb749e6b5b7014ea + md5: 62a92bfab3b5c85c2d246672bbb8bc8d depends: - - max-core ==24.6.0.dev2024092105 release + - max-core ==24.6.0 release - python 3.12.* - - numpy >=1.18,<2.0 - fastapi - - pydantic-settings - - sse-starlette + - httpx + - huggingface_hub + - numpy >=1.18,<2.0 + - opentelemetry-api + - opentelemetry-exporter-otlp-proto-http >=1.27.0 + - opentelemetry-exporter-prometheus >=0.48b0 + - opentelemetry-sdk >=1.27.0 + - pillow + - pydantic-settings >=2.4.0,<3 + - pydantic >=2.4.0,<3 + - pyinstrument + - python-json-logger + - sse-starlette >=2.1.3,<3 - transformers + - typing_extensions + - uvicorn - python_abi 3.12.* *_cp312 arch: arm64 platform: osx - size: 128021057 - timestamp: 1726896074382 + license: LicenseRef-Modular-Proprietary + size: 112484803 + timestamp: 1734039726707 - kind: conda name: mblack - version: 24.6.0.dev2024092105 + version: 24.6.0 build: release subdir: noarch noarch: python - url: https://conda.modular.com/max-nightly/noarch/mblack-24.6.0.dev2024092105-release.conda - sha256: 53346bc25f9ff97f51fdb929ae3aecb61fa71c52d9d9551fa40c41e21adc6ca8 - md5: 1e05b91d8e6bc67224291143abb394ca + url: https://conda.modular.com/max/noarch/mblack-24.6.0-release.conda + sha256: f135164020478078f4681aa77e7f6ca9f68b8e7ee02604b85342bbaf2f706f0d + md5: 77367aff981ba391ab5c047ba33ec978 depends: - python >=3.9,<3.13 - click >=8.0.0 @@ -2061,47 +2378,50 @@ packages: - platformdirs >=2 - python license: MIT - size: 130476 - timestamp: 1726896069661 + size: 130668 + timestamp: 1734039439700 - kind: conda name: mdurl version: 0.1.2 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 - md5: 776a8dd9e824f77abac30e6ef43a8f7a + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 + md5: 592132998493b3ff25fd7479396e8351 depends: - - python >=3.6 + - python >=3.9 license: MIT license_family: MIT - size: 14680 - timestamp: 1704317789138 + size: 14465 + timestamp: 1733255681319 - kind: conda name: mojo-jupyter - version: 24.6.0.dev2024092105 + version: 24.6.0 build: release subdir: noarch noarch: python - url: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-24.6.0.dev2024092105-release.conda - sha256: 27f668cac397efb5f657d560b2d5fef14549670e32581e39bf6cc085904533de - md5: fdd6f2d1f2ff8994af5020e47ad9464b + url: https://conda.modular.com/max/noarch/mojo-jupyter-24.6.0-release.conda + sha256: 2fe043d98ea77f8f165b39bd252cd04942216c8533f0291c49d87d6cfd8673df + md5: b17127f3ca2cef0976496407e1cd4081 depends: - - max-core ==24.6.0.dev2024092105 release + - max-core ==24.6.0 release - python >=3.9,<3.13 - jupyter_client >=8.6.2,<8.7 - python - size: 21623 - timestamp: 1726896069662 + license: LicenseRef-Modular-Proprietary + size: 22990 + timestamp: 1734039439702 - kind: conda name: multidict version: 6.1.0 - build: py312h88e9dfa_0 + build: py312hdb8e49c_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312h88e9dfa_0.conda - sha256: 52ab4f744001c1935d9b7672f0bec68919206f61606222bb927d1a65fca9fc5c - md5: a52ae7450f215c59694aae591d08616d + url: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312hdb8e49c_1.conda + sha256: 482fd09fb798090dc8cce2285fa69f43b1459099122eac2fb112d9b922b9f916 + md5: 0048335516fed938e4dd2c457b4c5b9b depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -2109,8 +2429,8 @@ packages: - python_abi 3.12.* *_cp312 license: Apache-2.0 license_family: APACHE - size: 55862 - timestamp: 1725953843761 + size: 55968 + timestamp: 1729065664275 - kind: conda name: multiprocess version: 0.70.15 @@ -2132,18 +2452,19 @@ packages: - kind: conda name: mypy_extensions version: 1.0.0 - build: pyha770c72_0 + build: pyha770c72_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - sha256: f240217476e148e825420c6bc3a0c0efb08c0718b7042fae960400c02af858a3 - md5: 4eccaeba205f0aed9ac3a9ea58568ca3 + url: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda + sha256: 1895f47b7d68581a6facde5cb13ab8c2764c2e53a76bd746f8f98910dc4e08fe + md5: 29097e7ea634a45cc5386b95cac6568f depends: - - python >=3.5 + - python >=3.9 license: MIT license_family: MIT - size: 10492 - timestamp: 1675543414256 + size: 10854 + timestamp: 1733230986902 - kind: conda name: ncurses version: '6.5' @@ -2180,197 +2501,441 @@ packages: license_family: BSD size: 6073136 timestamp: 1707226249608 +- kind: conda + name: openjpeg + version: 2.5.3 + build: h8a3d83b_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda + sha256: 1d59bc72ca7faac06d349c1a280f5cfb8a57ee5896f1e24225a997189d7418c7 + md5: 4b71d78648dbcf68ce8bf22bb07ff838 + depends: + - __osx >=11.0 + - libcxx >=18 + - libpng >=1.6.44,<1.7.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + size: 319362 + timestamp: 1733816781741 - kind: conda name: openssl - version: 3.3.2 - build: h8359307_0 + version: 3.4.0 + build: h81ee809_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda - sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 - md5: 1773ebccdc13ec603356e8ff1db9e958 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + sha256: 97772762abc70b3a537683ca9fc3ff3d6099eb64e4aba3b9c99e6fce48422d21 + md5: 22f971393637480bda8c679f374d8861 depends: - __osx >=11.0 - ca-certificates license: Apache-2.0 license_family: Apache - size: 2882450 - timestamp: 1725410638874 + size: 2936415 + timestamp: 1736086108693 +- kind: conda + name: opentelemetry-api + version: 1.29.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-api-1.29.0-pyhd8ed1ab_1.conda + sha256: 296280c8ace35c0a1cf72bed1077f248b3af903c3bf92332f1783a207cb5abdb + md5: 307b05402c1a382f2f09426492dee8f8 + depends: + - deprecated >=1.2.6 + - importlib-metadata >=6.0,<=8.5.0 + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 44166 + timestamp: 1734132973331 +- kind: conda + name: opentelemetry-exporter-otlp-proto-common + version: 1.29.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-common-1.29.0-pyhd8ed1ab_0.conda + sha256: ae9776efe52564e0d6711cfcee7c54439273e57a3999f7f796f66e862f58aae9 + md5: 0c02e74d26bce3fec93b227cf7ea6e6b + depends: + - backoff >=1.10.0,<3.0.0 + - opentelemetry-proto 1.29.0 + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 18922 + timestamp: 1734310457116 +- kind: conda + name: opentelemetry-exporter-otlp-proto-http + version: 1.29.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-http-1.29.0-pyhd8ed1ab_1.conda + sha256: 5d61db9d5b4f91b3932f5f2348920d5b7fdaa09e52c8ea054cf7bf3f21677c9c + md5: 223f4e56a29601c887f0dc467034af5b + depends: + - deprecated >=1.2.6 + - googleapis-common-protos >=1.52,<2.dev0 + - opentelemetry-api >=1.15,<2.dev0 + - opentelemetry-exporter-otlp-proto-common 1.29.0 + - opentelemetry-proto 1.29.0 + - opentelemetry-sdk 1.29.0 + - python >=3.9 + - requests >=2.7,<3.dev0 + license: Apache-2.0 + license_family: APACHE + size: 17147 + timestamp: 1734345675510 +- kind: conda + name: opentelemetry-exporter-prometheus + version: 1.12.0rc1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-prometheus-1.12.0rc1-pyhd8ed1ab_0.conda + sha256: b8239230dbbdb491401e41b53bd9f21d60551cedef1a8d5807fca1bf9bdd331c + md5: 1ddc95052b31147d1e10d818cf519cf5 + depends: + - opentelemetry-api >=1.10.0 + - opentelemetry-sdk >=1.10.0 + - prometheus_client >=0.5.0,<1.0.0 + - python >=3.6 + license: Apache-2.0 + license_family: APACHE + size: 14721 + timestamp: 1695214221489 +- kind: conda + name: opentelemetry-proto + version: 1.29.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-proto-1.29.0-pyhd8ed1ab_0.conda + sha256: 200a7cb8acc8a0ddd6ef55c5460cec871b6a265929b240a0296c0ccb9c8d9758 + md5: e2a6d2ad10b813c7fdc1c64aac376128 + depends: + - protobuf <6.0,>=5.0 + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 37235 + timestamp: 1734291034372 +- kind: conda + name: opentelemetry-sdk + version: 1.29.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-sdk-1.29.0-pyhd8ed1ab_0.conda + sha256: 7b36629d8b8be8a019fcfd1518d7b7f862dd25de96f8adcadb93e4fd12cf9bd6 + md5: 2a8893f06e6ebda4bfa78875bc923ea4 + depends: + - opentelemetry-api 1.29.0 + - opentelemetry-semantic-conventions 0.50b0 + - python >=3.9 + - typing-extensions >=3.7.4 + - typing_extensions >=3.7.4 + license: Apache-2.0 + license_family: APACHE + size: 77645 + timestamp: 1734297838999 +- kind: conda + name: opentelemetry-semantic-conventions + version: 0.50b0 + build: pyh3cfb1c2_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-semantic-conventions-0.50b0-pyh3cfb1c2_0.conda + sha256: 6526e70368d5bf66ef0eaa51fb800d53782dde71a24bd38f40139919a6f784dc + md5: f7111fa4188d646c8108e232d024cb99 + depends: + - deprecated >=1.2.6 + - opentelemetry-api 1.29.0 + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 86084 + timestamp: 1734208980168 - kind: conda name: orc - version: 2.0.2 - build: h75dedd0_0 + version: 2.0.3 + build: h0ff2369_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.2-h75dedd0_0.conda - sha256: a23f3a88a6b16363bd13f964b4abd12be1576abac460126f3269cbed12d04840 - md5: 9c89e09cede143716b479c5eacc924fb + url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.3-h0ff2369_2.conda + sha256: cca330695f3bdb8c0e46350c29cd4af3345865544e36f1d7c9ba9190ad22f5f4 + md5: 24b1897c0d24afbb70704ba998793b78 depends: - __osx >=11.0 - - libcxx >=16 - - libprotobuf >=4.25.3,<4.25.4.0a0 + - libcxx >=18 + - libprotobuf >=5.28.3,<5.28.4.0a0 - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.9.3,<1.10.0a0 + - lz4-c >=1.10.0,<1.11.0a0 - snappy >=1.2.1,<1.3.0a0 - tzdata - zstd >=1.5.6,<1.6.0a0 license: Apache-2.0 license_family: Apache - size: 436164 - timestamp: 1723760750932 + size: 438520 + timestamp: 1735630624140 - kind: conda name: packaging - version: '24.1' - build: pyhd8ed1ab_0 + version: '24.2' + build: pyhd8ed1ab_2 + build_number: 2 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 - md5: cbe1bb1f21567018ce595d9c2be0f0db + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1 + md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa depends: - python >=3.8 license: Apache-2.0 license_family: APACHE - size: 50290 - timestamp: 1718189540074 + size: 60164 + timestamp: 1733203368787 - kind: conda name: pandas - version: 2.2.2 - build: py312h8ae5369_1 + version: 2.2.3 + build: py312hcd31e36_1 build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.2-py312h8ae5369_1.conda - sha256: 664bf370d1e254f29fab3b9834ae5f692a59f7e35c64c61d9a9b9989831fd721 - md5: b38af0cd7ae3616c90a2511272385941 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcd31e36_1.conda + sha256: ff0cb54b5d058c7987b4a0984066e893642d1865a7bb695294b6172e2fcdc457 + md5: c68bfa69e6086c381c74e16fd72613a8 depends: - __osx >=11.0 - - libcxx >=16 + - libcxx >=17 - numpy >=1.19,<3 + - numpy >=1.22.4 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python-dateutil >=2.8.1 - python-tzdata >=2022a - python_abi 3.12.* *_cp312 - - pytz >=2020.1 + - pytz >=2020.1,<2024.2 license: BSD-3-Clause license_family: BSD - size: 14476760 - timestamp: 1715898136109 + size: 14470437 + timestamp: 1726878887799 - kind: conda name: pathspec version: 0.12.1 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d - md5: 17064acba08d3686f1135b5ec1b32b12 + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + sha256: 9f64009cdf5b8e529995f18e03665b03f5d07c0b17445b8badef45bde76249ee + md5: 617f15191456cc6a13db418a275435e5 depends: - - python >=3.7 + - python >=3.9 license: MPL-2.0 license_family: MOZILLA - size: 41173 - timestamp: 1702250135032 + size: 41075 + timestamp: 1733233471940 +- kind: conda + name: pillow + version: 11.1.0 + build: py312h50aef2c_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.1.0-py312h50aef2c_0.conda + sha256: b29b7c915053e06a7a5b4118760202c572c9c35d23bd6ce8e73270b6a50e50ee + md5: 94d6ba8cd468668a9fb04193b0f4b36e + depends: + - __osx >=11.0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.5.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.3,<3.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + size: 42852329 + timestamp: 1735930118976 - kind: conda name: platformdirs version: 4.3.6 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f - md5: fd8f2b18b65bbf62e8f653100690c8d2 + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda + sha256: bb50f6499e8bc1d1a26f17716c97984671121608dc0c3ecd34858112bce59a27 + md5: 577852c7e53901ddccc7e6a9959ddebe depends: - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT - size: 20625 - timestamp: 1726613611845 + size: 20448 + timestamp: 1733232756001 - kind: conda - name: pyarrow - version: 17.0.0 - build: py312ha814d7c_1 - build_number: 1 + name: prometheus_client + version: 0.21.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab + md5: 3e01e386307acc60b2f89af0b2e161aa + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + size: 49002 + timestamp: 1733327434163 +- kind: conda + name: propcache + version: 0.2.1 + build: py312hea69d52_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-17.0.0-py312ha814d7c_1.conda - sha256: 1ea696a3c4eb6ad9a12e1ae5f368789bc2cd34519a316f6557abd771f6fa4d9a - md5: 324baefe2624473b422212c2d1db964b + url: https://conda.anaconda.org/conda-forge/osx-arm64/propcache-0.2.1-py312hea69d52_0.conda + sha256: f8c266c494aa1e4cfb8bf0b6fca060044b2f3d65afe4c5062ebeea382e77aa6d + md5: c84e3dd97fe25a17322c4a0f670c6750 depends: - - libarrow-acero 17.0.0.* - - libarrow-dataset 17.0.0.* - - libarrow-substrait 17.0.0.* - - libparquet 17.0.0.* - - numpy >=1.19,<3 - - pyarrow-core 17.0.0 *_1_* + - __osx >=11.0 - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: Apache-2.0 license_family: APACHE - size: 25928 - timestamp: 1722487521448 + size: 48225 + timestamp: 1733392308901 +- kind: conda + name: protobuf + version: 5.28.3 + build: py312hd8f9ff3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/protobuf-5.28.3-py312hd8f9ff3_0.conda + sha256: 9d572a97419bdace14d7c7cc8cc8c4bf2dcb22b56965dac87a27fbdb5061b926 + md5: 5afbe52a59f04dd1fe566d0d17590d7e + depends: + - __osx >=11.0 + - libcxx >=18 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - libprotobuf 5.28.3 + license: BSD-3-Clause + license_family: BSD + size: 448803 + timestamp: 1731367010746 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hd74edd7_1002 + build_number: 1002 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 8381 + timestamp: 1726802424786 +- kind: conda + name: pyarrow + version: 18.1.0 + build: py312h1f38498_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-18.1.0-py312h1f38498_0.conda + sha256: 06c0e208d5bf15051874097366c8e8e5db176dffba38526f227a34e80cc8e9bc + md5: 3710616b880b31d0c8afd8ae7e12392a + depends: + - libarrow-acero 18.1.0.* + - libarrow-dataset 18.1.0.* + - libarrow-substrait 18.1.0.* + - libparquet 18.1.0.* + - pyarrow-core 18.1.0 *_0_* + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: APACHE + size: 25375 + timestamp: 1732610892198 - kind: conda name: pyarrow-core - version: 17.0.0 - build: py312he20ac61_1_cpu - build_number: 1 + version: 18.1.0 + build: py312hc40f475_0_cpu subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-17.0.0-py312he20ac61_1_cpu.conda - sha256: 2aa30a7d877a61cce833cc9393a96295a2bdd8da09ae19c6c93dc6be143599d5 - md5: 5741dbf1e41816bc7e52ac5372da021e + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-18.1.0-py312hc40f475_0_cpu.conda + sha256: 063eb168a29d4ce6d9ed865e9e1ad3b6e141712189955a79e06b24ddc0cbbc9c + md5: 9859e7c4b94bbf69772dbf0511101cec depends: - __osx >=11.0 - - libarrow 17.0.0.* *cpu - - libcxx >=17 + - libarrow 18.1.0.* *cpu + - libcxx >=18 - libzlib >=1.3.1,<2.0a0 - - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 constrains: + - numpy >=1.21,<3 - apache-arrow-proc =*=cpu license: Apache-2.0 license_family: APACHE - size: 3977905 - timestamp: 1722487471071 + size: 3909116 + timestamp: 1732610863261 - kind: conda name: pycparser version: '2.22' - build: pyhd8ed1ab_0 + build: pyh29332c3_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 - md5: 844d9eb3b43095b031874477f7d70088 + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 + md5: 12c566707c80111f9799308d9e265aef depends: - - python >=3.8 + - python >=3.9 + - python license: BSD-3-Clause license_family: BSD - size: 105098 - timestamp: 1711811634025 + size: 110100 + timestamp: 1733195786147 - kind: conda name: pydantic - version: 2.9.2 - build: pyhd8ed1ab_0 + version: 2.10.4 + build: pyh3cfb1c2_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.9.2-pyhd8ed1ab_0.conda - sha256: 1b7b0dc9f6af4da156bf22b0263be70829364a08145c696d3670facff2f6441a - md5: 1eb533bb8eb2199e3fef3e4aa147319f + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.4-pyh3cfb1c2_0.conda + sha256: e68400714532a33f34b44ddaee3e27e8dd6c83c3f31c7892ec10b84d13aa8b59 + md5: 93bccf4d7a58c9140d59491de21e044b depends: - annotated-types >=0.6.0 - - pydantic-core 2.23.4 - - python >=3.7 + - pydantic-core 2.27.2 + - python >=3.9 - typing-extensions >=4.6.1 + - typing_extensions >=4.12.2 license: MIT license_family: MIT - size: 300649 - timestamp: 1726601202431 + size: 296557 + timestamp: 1734609427697 - kind: conda name: pydantic-core - version: 2.23.4 - build: py312he431725_0 + version: 2.27.2 + build: py312hcd83bfe_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.23.4-py312he431725_0.conda - sha256: d6edd3d0f9e701c8299519d412ad3dc900c7d893a134f2582203cf43585decca - md5: 3148052477686acc581b20a34b478eeb + url: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.27.2-py312hcd83bfe_0.conda + sha256: cfa7201f890d5d08ce29ff70e65a96787d5793a1718776733666b44bbd4a1205 + md5: dcb307e02f17d38c6e1cbfbf8c602852 depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -2381,144 +2946,181 @@ packages: - __osx >=11.0 license: MIT license_family: MIT - size: 1431747 - timestamp: 1726525575527 + size: 1593461 + timestamp: 1734571986644 - kind: conda name: pydantic-settings - version: 2.5.2 - build: pyhd8ed1ab_0 + version: 2.7.1 + build: pyh3cfb1c2_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.5.2-pyhd8ed1ab_0.conda - sha256: 4017175a64868dbd515a402bf9626ce47f3621054ccf1b6a7fb3c363a79e37e1 - md5: 7ad1384e9e7c9338840533b9a2c413f8 + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.7.1-pyh3cfb1c2_0.conda + sha256: 082fb1ec29917d2c9ed6a862cb8eb9beb88c208ea62c9fef1aeb5f4f3e0e0b06 + md5: d71d76b62bed332b037d7adfc0f3989a depends: - pydantic >=2.7.0 - - python >=3.8 + - python >=3.9 - python-dotenv >=0.21.0 license: MIT license_family: MIT - size: 29217 - timestamp: 1726062669585 + size: 31822 + timestamp: 1735650532951 - kind: conda name: pygments version: 2.18.0 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b - md5: b7f5c092b8f9800150d998a71b76d5a1 + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_1.conda + sha256: 0d6133545f268b2b89c2617c196fc791f365b538d4057ecd636d658c3b1e885d + md5: b38dc0206e2a530e5c2cf11dc086b31a depends: - - python >=3.8 + - python >=3.9 license: BSD-2-Clause license_family: BSD - size: 879295 - timestamp: 1714846885370 + size: 876700 + timestamp: 1733221731178 +- kind: conda + name: pyinstrument + version: 5.0.0 + build: py312h0bf5046_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyinstrument-5.0.0-py312h0bf5046_0.conda + sha256: 6879d52fb0ec2258e2850476786a652c394220d53883c53691ed5390183ae925 + md5: f0e4a98d54477083ddc9d2f33507f848 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 181512 + timestamp: 1728714205508 - kind: conda name: pysocks version: 1.7.1 - build: pyha2e5f31_6 - build_number: 6 + build: pyha55dd90_7 + build_number: 7 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 - sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b - md5: 2a7de29fb590ca14b5243c4c812c8025 + url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 + md5: 461219d1a5bd61342293efa2c0c90eac depends: - __unix - - python >=3.8 + - python >=3.9 license: BSD-3-Clause license_family: BSD - size: 18981 - timestamp: 1661604969727 + size: 21085 + timestamp: 1733217331982 - kind: conda name: python - version: 3.12.6 - build: h739c21a_0_cpython + version: 3.12.8 + build: hc22306f_1_cpython + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.6-h739c21a_0_cpython.conda - sha256: 7dc75f4a7f800426e39ba219a1202c00b002cd0c792e34e077d3d7c145ef0199 - md5: 1d0f564edfc8121b35a4dc2d25b62863 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda + sha256: 7586a711b1b08a9df8864e26efdc06980bdfb0e18d5ac4651d0fee30a8d3e3a0 + md5: 54ca5b5d92ef3a3ba61e195ee882a518 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.6.3,<3.0a0 + - libexpat >=2.6.4,<3.0a0 - libffi >=3.4,<4.0a0 - - libsqlite >=3.46.1,<4.0a0 + - liblzma >=5.6.3,<6.0a0 + - libsqlite >=3.47.0,<4.0a0 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.3.2,<4.0a0 + - openssl >=3.4.0,<4.0a0 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - - xz >=5.2.6,<6.0a0 constrains: - python_abi 3.12.* *_cp312 license: Python-2.0 - size: 12877861 - timestamp: 1726030796871 + size: 12998673 + timestamp: 1733408900971 - kind: conda name: python-dateutil - version: 2.9.0 - build: pyhd8ed1ab_0 + version: 2.9.0.post0 + build: pyhff2d567_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 - md5: 2cf4264fffb9e6eff6031c5b6884d61c + url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + sha256: a50052536f1ef8516ed11a844f9413661829aa083304dc624c5925298d078d79 + md5: 5ba79d7c71f03c678c8ead841f347d6e depends: - - python >=3.7 + - python >=3.9 - six >=1.5 license: Apache-2.0 license_family: APACHE - size: 222742 - timestamp: 1709299922152 + size: 222505 + timestamp: 1733215763718 - kind: conda name: python-dotenv version: 1.0.1 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.0.1-pyhd8ed1ab_0.conda - sha256: 2d4c80364f03315d606a50eddd493dbacc078e21412c2462c0f781eec49b572c - md5: c2997ea9360ac4e015658804a7a84f94 + url: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.0.1-pyhd8ed1ab_1.conda + sha256: 99713f6b534fef94995c6c16fd21d59f3548784e9111775d692bdc7c44678f02 + md5: e5c6ed218664802d305e79cc2d4491de depends: - - python >=3.8 + - python >=3.9 license: BSD-3-Clause license_family: BSD - size: 24278 - timestamp: 1706018281544 + size: 24215 + timestamp: 1733243277223 - kind: conda - name: python-multipart - version: 0.0.9 + name: python-json-logger + version: 2.0.7 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.9-pyhd8ed1ab_0.conda - sha256: 026467128031bd667c4a32555ae07e922d5caed257e4815c44e7338887bbd56a - md5: 0eef653965f0fed2013924d08089f371 + url: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + sha256: 4790787fe1f4e8da616edca4acf6a4f8ed4e7c6967aa31b920208fc8f95efcca + md5: a61bf9ec79426938ff785eb69dbb1960 depends: - - python >=3.7 + - python >=3.6 + license: BSD-2-Clause + license_family: BSD + size: 13383 + timestamp: 1677079727691 +- kind: conda + name: python-multipart + version: 0.0.20 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.20-pyhff2d567_0.conda + sha256: 1b03678d145b1675b757cba165a0d9803885807792f7eb4495e48a38858c3cca + md5: a28c984e0429aff3ab7386f7de56de6f + depends: + - python >=3.9 license: Apache-2.0 license_family: Apache - size: 26439 - timestamp: 1707760278735 + size: 27913 + timestamp: 1734420869885 - kind: conda name: python-tzdata - version: '2024.1' - build: pyhd8ed1ab_0 + version: '2024.2' + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda - sha256: 9da9a849d53705dee450b83507df1ca8ffea5f83bd21a215202221f1c492f8ad - md5: 98206ea9954216ee7540f0c773f2104d + url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda + sha256: 57c9a02ec25926fb48edca59b9ede107823e5d5c473b94a0e05cc0b9a193a642 + md5: c0def296b2f6d2dd7b030c2a7f66bb1f depends: - - python >=3.6 + - python >=3.9 license: Apache-2.0 license_family: APACHE - size: 144024 - timestamp: 1707747742930 + size: 142235 + timestamp: 1733235414217 - kind: conda name: python-xxhash version: 3.5.0 @@ -2555,19 +3157,19 @@ packages: timestamp: 1723823099686 - kind: conda name: pytz - version: '2024.2' + version: '2024.1' build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_0.conda - sha256: 81c16d9183bb4a6780366ce874e567ee5fc903722f85b2f8d1d9479ef1dafcc9 - md5: 260009d03c9d5c0f111904d851f053dc + url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 + md5: 3eeeeb9e4827ace8c0c1419c85d590ad depends: - python >=3.7 license: MIT license_family: MIT - size: 186995 - timestamp: 1726055625738 + size: 188538 + timestamp: 1706886944988 - kind: conda name: pyyaml version: 6.0.2 @@ -2590,12 +3192,12 @@ packages: - kind: conda name: pyzmq version: 26.2.0 - build: py312hc6335d2_2 - build_number: 2 + build: py312hf8a1cbd_3 + build_number: 3 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py312hc6335d2_2.conda - sha256: 8d46c0f1af50989f308b9da68e6123bc3560f3a3a741b4e7cb8867c603b5a9f1 - md5: ca61d76f24d66c2938af62e882c9a02d + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py312hf8a1cbd_3.conda + sha256: 2e0ca1bb9ab3af5d1f9b38548d65be7097ba0246e7e63c908c9b1323df3f45b5 + md5: 7bdaa4c2a84b744ef26c8b2ba65c3d0e depends: - __osx >=11.0 - libcxx >=17 @@ -2606,23 +3208,23 @@ packages: - zeromq >=4.3.5,<4.4.0a0 license: BSD-3-Clause license_family: BSD - size: 359594 - timestamp: 1725449428595 + size: 361674 + timestamp: 1728642457661 - kind: conda name: re2 - version: 2023.09.01 - build: h4cba328_2 + version: 2024.07.02 + build: h6589ca4_2 build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.09.01-h4cba328_2.conda - sha256: 0e0d44414381c39a7e6f3da442cb41c637df0dcb383a07425f19c19ccffa0118 - md5: 0342882197116478a42fa4ea35af79c1 + url: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda + sha256: 4d3799c05f8f662922a0acd129d119774760a3281b883603678e128d1cb307fb + md5: 7a8b4ad8c58a3408ca89d78788c78178 depends: - - libre2-11 2023.09.01 h7b2c953_2 + - libre2-11 2024.07.02 h07bc746_2 license: BSD-3-Clause license_family: BSD - size: 26770 - timestamp: 1708947220914 + size: 26861 + timestamp: 1735541088455 - kind: conda name: readline version: '8.2' @@ -2640,12 +3242,12 @@ packages: timestamp: 1679532511311 - kind: conda name: regex - version: 2024.9.11 - build: py312h024a12e_0 + version: 2024.11.6 + build: py312hea69d52_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2024.9.11-py312h024a12e_0.conda - sha256: c4dbb0a7195e3b5ec6059a6d280b44be3905ee8bf0d1622443efd8865dd90cf4 - md5: 796612a39474f5f08f7fc910d161a395 + url: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2024.11.6-py312hea69d52_0.conda + sha256: dcdec32f2c7dd37986baa692bedf9db126ad34e92e5e9b64f707cba3d04d2525 + md5: e73cda1f18846b608284bd784f061eac depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -2653,55 +3255,76 @@ packages: - python_abi 3.12.* *_cp312 license: Python-2.0 license_family: PSF - size: 366013 - timestamp: 1726095775313 + size: 366374 + timestamp: 1730952427552 - kind: conda name: requests version: 2.32.3 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - sha256: 5845ffe82a6fa4d437a2eae1e32a1ad308d7ad349f61e337c0a890fe04c513cc - md5: 5ede4753180c7a550a443c430dc8ab52 + url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad + md5: a9b9368f3701a417eac9edbcae7cb737 depends: - certifi >=2017.4.17 - charset-normalizer >=2,<4 - idna >=2.5,<4 - - python >=3.8 + - python >=3.9 - urllib3 >=1.21.1,<3 constrains: - chardet >=3.0.2,<6 license: Apache-2.0 license_family: APACHE - size: 58810 - timestamp: 1717057174842 + size: 58723 + timestamp: 1733217126197 - kind: conda name: rich - version: 13.8.1 - build: pyhd8ed1ab_0 + version: 13.9.4 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/rich-13.8.1-pyhd8ed1ab_0.conda - sha256: eb7d88222ec1a05c1b333aab5ca9bf486f2005f17c0d86a6b7653da47c6c143b - md5: 748f1807fa7fda73651795c5617b9557 + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_1.conda + sha256: 06a760c5ae572e72e865d5a87e9fe3cc171e1a9c996e63daf3db52ff1a0b4457 + md5: 7aed65d4ff222bfb7335997aa40b7da5 depends: - markdown-it-py >=2.2.0 - pygments >=2.13.0,<3.0.0 - - python >=3.7 + - python >=3.9 - typing_extensions >=4.0.0,<5.0.0 license: MIT license_family: MIT - size: 185358 - timestamp: 1726066139954 + size: 185646 + timestamp: 1733342347277 +- kind: conda + name: rich-toolkit + version: 0.11.3 + build: pyh29332c3_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.11.3-pyh29332c3_0.conda + sha256: e558f8c254a9ff9164d069110da162fc79497d70c60f2c09a5d3d0d7101c5628 + md5: 4ba15ae9388b67d09782798347481f69 + depends: + - python >=3.9 + - rich >=13.7.1 + - click >=8.1.7 + - typing_extensions >=4.12.2 + - python + license: MIT + license_family: MIT + size: 17357 + timestamp: 1733750834072 - kind: conda name: safetensors - version: 0.4.5 - build: py312he431725_0 + version: 0.5.0 + build: py312hcd83bfe_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/safetensors-0.4.5-py312he431725_0.conda - sha256: 93a085d0d64237db7f4ff395c446f268c575dc2c324d8e3e5c5d7d836896295e - md5: ccb978cf1e3151c25a44c4ae65c1f20e + url: https://conda.anaconda.org/conda-forge/osx-arm64/safetensors-0.5.0-py312hcd83bfe_0.conda + sha256: 8992f78362793a465c3009be2fd80582c93e2151bc17d07ebd39ce7af757358a + md5: acbbbac2271653f4914cef842a84190f depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -2711,38 +3334,39 @@ packages: - __osx >=11.0 license: Apache-2.0 license_family: APACHE - size: 353606 - timestamp: 1725632294079 + size: 377533 + timestamp: 1735918206452 - kind: conda name: shellingham version: 1.5.4 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda - sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb - md5: d08db09a552699ee9e7eec56b4eb3899 + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + sha256: 0557c090913aa63cdbe821dbdfa038a321b488e22bc80196c4b3b1aace4914ef + md5: 7c3c2a0f3ebdea2bbc35538d162b43bf depends: - - python >=3.7 + - python >=3.9 license: MIT license_family: MIT - size: 14568 - timestamp: 1698144516278 + size: 14462 + timestamp: 1733301007770 - kind: conda name: six - version: 1.16.0 - build: pyh6c4a22f_0 + version: 1.17.0 + build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 - md5: e5f25f8dbc060e9a8d912e432202afc2 + url: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db + md5: a451d576819089b0d672f18768be0f65 depends: - - python + - python >=3.9 license: MIT license_family: MIT - size: 14259 - timestamp: 1620240338595 + size: 16385 + timestamp: 1733381032766 - kind: conda name: small_time version: 0.1.3 @@ -2760,68 +3384,70 @@ packages: - kind: conda name: snappy version: 1.2.1 - build: hd02b534_0 + build: h98b9ce2_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-hd02b534_0.conda - sha256: cb7a9440241c6092e0f1c795fdca149c4767023e783eaf9cfebc501f906b4897 - md5: 69d0f9694f3294418ee935da3d5f7272 + url: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda + sha256: 4242f95b215127a006eb664fe26ed5a82df87e90cbdbc7ce7ff4971f0720997f + md5: ded86dee325290da2967a3fea3800eb5 depends: - __osx >=11.0 - - libcxx >=16 + - libcxx >=18 license: BSD-3-Clause license_family: BSD - size: 35708 - timestamp: 1720003794374 + size: 35857 + timestamp: 1733502172664 - kind: conda name: sniffio version: 1.3.1 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b - md5: 490730480d76cf9c8f8f2849719c6e2b + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda + sha256: c2248418c310bdd1719b186796ae50a8a77ce555228b6acd32768e2543a15012 + md5: bf7a226e58dfb8346c70df36065d86c9 depends: - - python >=3.7 + - python >=3.9 license: Apache-2.0 license_family: Apache - size: 15064 - timestamp: 1708953086199 + size: 15019 + timestamp: 1733244175724 - kind: conda name: sse-starlette - version: 2.1.3 + version: 2.2.1 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/sse-starlette-2.1.3-pyhd8ed1ab_0.conda - sha256: 6d671a66333410ec7e5e7858a252565a9001366726d1fe3c3a506d7156169085 - md5: 3918255c942c242ed5599e10329e8d0e + url: https://conda.anaconda.org/conda-forge/noarch/sse-starlette-2.2.1-pyhd8ed1ab_0.conda + sha256: 3c6a476e7afb702d841e23c61a0c4cc491929d2e39376d329e67e94c40a236cc + md5: c1ef6bc13dd2caa4b406fb3cb06c2791 depends: - - anyio - - python >=3.8 - - starlette - - uvicorn + - anyio >=4.7.0 + - python >=3.9 + - starlette >=0.41.3 license: BSD-3-Clause license_family: BSD - size: 14712 - timestamp: 1722520112550 + size: 15324 + timestamp: 1735126414893 - kind: conda name: starlette - version: 0.38.5 - build: pyhd8ed1ab_0 + version: 0.41.3 + build: pyha770c72_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/starlette-0.38.5-pyhd8ed1ab_0.conda - sha256: d50621286d729eb1b64242ea8745f09c085af89b0dc6ada16c745807894e5988 - md5: c8aa19153b5af4409fd114732966021e + url: https://conda.anaconda.org/conda-forge/noarch/starlette-0.41.3-pyha770c72_1.conda + sha256: b74fc76107487eb26624c01fc55bfab7eed03ae82e003333c86d8a1eeac53672 + md5: 0207dac04ae2200701fab697f0aaaac4 depends: - - anyio <5,>=3.4.0 - - python >=3.8 + - anyio >=3.4.0,<5 + - python >=3.9 - typing_extensions >=3.10.0 license: BSD-3-Clause license_family: BSD - size: 57073 - timestamp: 1725895511527 + size: 58838 + timestamp: 1733344472634 - kind: conda name: tk version: 8.6.13 @@ -2839,15 +3465,16 @@ packages: timestamp: 1699202432999 - kind: conda name: tokenizers - version: 0.19.1 - build: py312hfbf4c0d_0 + version: 0.21.0 + build: py312hf3e4074_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/tokenizers-0.19.1-py312hfbf4c0d_0.conda - sha256: c84c7f65ac58c4448ba8a682844b1b5aa54724026039ea655ef774150bfa4ad2 - md5: 560c4039a7f54d6153520a0c029904a3 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tokenizers-0.21.0-py312hf3e4074_0.conda + sha256: 5d395333fcb22dc611140286c1f2ea8b3fa220a4931c583587cb612238091555 + md5: 4c732c74b485ef7ac8ec1c548dd45e8e depends: + - __osx >=11.0 - huggingface_hub >=0.16.4,<1.0 - - libcxx >=16 + - libcxx >=18 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 @@ -2855,17 +3482,16 @@ packages: - __osx >=11.0 license: Apache-2.0 license_family: APACHE - size: 1856398 - timestamp: 1713403690405 + size: 1931389 + timestamp: 1732734727624 - kind: conda name: tornado - version: 6.4.1 - build: py312h024a12e_1 - build_number: 1 + version: 6.4.2 + build: py312hea69d52_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.1-py312h024a12e_1.conda - sha256: 5eefede1d8a2f55892bc582dbcb574b1806f19bc1e3939ce56b79721b9406db7 - md5: 967bc97bb9e258993289546479af971f + url: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda + sha256: 964a2705a36c50040c967b18b45b9cc8de3c2aff4af546979a574e0b38e58e39 + md5: fb0605888a475d6a380ae1d1a819d976 depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -2873,198 +3499,324 @@ packages: - python_abi 3.12.* *_cp312 license: Apache-2.0 license_family: Apache - size: 841722 - timestamp: 1724956439106 + size: 842549 + timestamp: 1732616081362 - kind: conda name: tqdm - version: 4.66.5 - build: pyhd8ed1ab_0 + version: 4.67.1 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda - sha256: f2384902cef72048b0e9bad5c03d7a843de02ba6bc8618a9ecab6ff81a131312 - md5: c6e94fc2b2ec71ea33fe7c7da259acb4 + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + sha256: 11e2c85468ae9902d24a27137b6b39b4a78099806e551d390e394a8c34b48e40 + md5: 9efbfdc37242619130ea42b1cc4ed861 depends: - colorama - - python >=3.7 + - python >=3.9 license: MPL-2.0 or MIT - size: 89519 - timestamp: 1722737568509 + size: 89498 + timestamp: 1735661472632 - kind: conda name: traitlets version: 5.14.3 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda - sha256: 8a64fa0f19022828513667c2c7176cfd125001f3f4b9bc00d33732e627dd2592 - md5: 3df84416a021220d8b5700c613af2dc5 + url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 + md5: 019a7385be9af33791c989871317e1ed depends: - - python >=3.8 + - python >=3.9 license: BSD-3-Clause license_family: BSD - size: 110187 - timestamp: 1713535244513 + size: 110051 + timestamp: 1733367480074 - kind: conda name: transformers - version: 4.44.2 + version: 4.47.1 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/transformers-4.44.2-pyhd8ed1ab_0.conda - sha256: ff42271f3650525a8c7250618bcf763dd800088eed300baeb0e15c9856131f2a - md5: 00d239b9219b2453736c8b1d816d793a + url: https://conda.anaconda.org/conda-forge/noarch/transformers-4.47.1-pyhd8ed1ab_0.conda + sha256: df8238c3cccbb6bb1d5657e6a75977ac0b832ab61155d5e3d8560c1c4f52abeb + md5: 931d66db156680c42c62812d6533cbf7 depends: - datasets !=2.5.0 - filelock - huggingface_hub >=0.23.0,<1.0 - - numpy >=1.17,<2.0 + - numpy >=1.17 - packaging >=20.0 - - python >=3.8 + - python >=3.9 - pyyaml >=5.1 - regex !=2019.12.17 - requests - safetensors >=0.4.1 - - tokenizers >=0.19,<0.20 + - tokenizers >=0.21,<0.22 - tqdm >=4.27 license: Apache-2.0 license_family: APACHE - size: 3424805 - timestamp: 1724403480837 + size: 3680276 + timestamp: 1734499046193 - kind: conda name: typer - version: 0.12.5 + version: 0.15.1 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/typer-0.12.5-pyhd8ed1ab_0.conda - sha256: da9ff9e27c5fa8268c2d5898335485a897d9496eef3b5b446cd9387a89d168de - md5: be70216cc1a5fe502c849676baabf498 + url: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.1-pyhd8ed1ab_0.conda + sha256: ef695490e895c2ad552c77ec497b899b09fd4ad4ab07edcf5649f5994cf92a35 + md5: 170a0398946d8f5b454e592672b6fc20 depends: - - python >=3.7 - - typer-slim-standard 0.12.5 hd8ed1ab_0 + - python >=3.9 + - typer-slim-standard 0.15.1 hd8ed1ab_0 license: MIT license_family: MIT - size: 53350 - timestamp: 1724613663049 + size: 56175 + timestamp: 1733408582623 - kind: conda name: typer-slim - version: 0.12.5 + version: 0.15.1 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.12.5-pyhd8ed1ab_0.conda - sha256: 7be1876627495047f3f07c52c93ddc2ae2017b93affe58110a5474e5ebcb2662 - md5: a46aa56c0ca7cc2bd38baffc2686f0a6 + url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.1-pyhd8ed1ab_0.conda + sha256: d4965516f35e0805199de6596c4ac76c4ad3d6b012be35e532102f9e53ecb860 + md5: 0218b16f5a1dd569e575a7a6415489db depends: - click >=8.0.0 - - python >=3.7 + - python >=3.9 - typing_extensions >=3.7.4.3 constrains: - rich >=10.11.0 - - typer >=0.12.5,<0.12.6.0a0 + - typer >=0.15.1,<0.15.2.0a0 - shellingham >=1.3.0 license: MIT license_family: MIT - size: 45641 - timestamp: 1724613646022 + size: 43592 + timestamp: 1733408569554 - kind: conda name: typer-slim-standard - version: 0.12.5 + version: 0.15.1 build: hd8ed1ab_0 subdir: noarch noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.12.5-hd8ed1ab_0.conda - sha256: bb298b116159ec1085f6b29eaeb982006651a0997eda08de8b70cfb6177297f3 - md5: 2dc1ee4046de0692077e9aa9ba351d36 + url: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda + sha256: f31c56fe98315da8b9ce848256c17e0b9f87896b41a6ccf0c9cc74644dcef20f + md5: 4e603c43bfdfc7b533be087c3e070cc9 depends: - rich - shellingham - - typer-slim 0.12.5 pyhd8ed1ab_0 + - typer-slim 0.15.1 pyhd8ed1ab_0 license: MIT license_family: MIT - size: 46817 - timestamp: 1724613648907 + size: 49531 + timestamp: 1733408570063 - kind: conda name: typing-extensions version: 4.12.2 - build: hd8ed1ab_0 + build: hd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda - sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73 - md5: 52d648bd608f5737b123f510bb5514b5 + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda + sha256: c8e9c1c467b5f960b627d7adc1c65fece8e929a3de89967e91ef0f726422fd32 + md5: b6a408c64b78ec7b779a3e5c7a902433 depends: - - typing_extensions 4.12.2 pyha770c72_0 + - typing_extensions 4.12.2 pyha770c72_1 license: PSF-2.0 license_family: PSF - size: 10097 - timestamp: 1717802659025 + size: 10075 + timestamp: 1733188758872 - kind: conda name: typing_extensions version: 4.12.2 - build: pyha770c72_0 + build: pyha770c72_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb - md5: ebe6952715e1d5eb567eeebf25250fa7 + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda + sha256: 337be7af5af8b2817f115b3b68870208b30c31d3439bec07bfb2d8f4823e3568 + md5: d17f13df8b65464ca316cbc000a3cb64 depends: - - python >=3.8 + - python >=3.9 license: PSF-2.0 license_family: PSF - size: 39888 - timestamp: 1717802653893 + size: 39637 + timestamp: 1733188758212 - kind: conda name: tzdata - version: 2024a - build: h8827d51_1 - build_number: 1 + version: 2024b + build: hc8b5060_0 subdir: noarch noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - sha256: 7d21c95f61319dba9209ca17d1935e6128af4235a67ee4e57a00908a1450081e - md5: 8bfdead4e0fff0383ae4c9c50d0531bd + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 license: LicenseRef-Public-Domain - size: 124164 - timestamp: 1724736371498 + size: 122354 + timestamp: 1728047496079 - kind: conda name: urllib3 - version: 2.2.3 + version: 2.3.0 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda - sha256: b6bb34ce41cd93956ad6eeee275ed52390fb3788d6c75e753172ea7ac60b66e5 - md5: 6b55867f385dd762ed99ea687af32a69 + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda + sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e + md5: 32674f8dbfb7b26410ed580dd3c10a29 depends: - brotli-python >=1.0.9 - h2 >=4,<5 - pysocks >=1.5.6,<2.0,!=1.5.7 - - python >=3.8 + - python >=3.9 - zstandard >=0.18.0 license: MIT license_family: MIT - size: 98076 - timestamp: 1726496531769 + size: 100102 + timestamp: 1734859520452 - kind: conda name: uvicorn - version: 0.30.6 - build: py312h81bd7bf_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/uvicorn-0.30.6-py312h81bd7bf_0.conda - sha256: 8078e14e9f2a4ef3295825018c41e1d8bde1ac936c48dbcd6b5212d1d9fa2140 - md5: 9059f5a0f4baf1c941a90568e65997e8 + version: 0.34.0 + build: pyh31011fe_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda + sha256: 55c160b0cf9274e2b98bc0f7fcce548bffa8d788bc86aa02801877457040f6fa + md5: 5d448feee86e4740498ec8f8eb40e052 depends: + - __unix - click >=7.0 - h11 >=0.8 + - python >=3.9 + - typing_extensions >=4.0 + license: BSD-3-Clause + license_family: BSD + size: 48643 + timestamp: 1734293057914 +- kind: conda + name: uvicorn-standard + version: 0.34.0 + build: h31011fe_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda + sha256: 87e1531e175e75122f9f37608eb953af4c977465ab0ae11283cc01fef954e4ec + md5: 32a94143a7f65d76d2d5da37dcb4ed79 + depends: + - __unix + - httptools >=0.6.3 + - python-dotenv >=0.13 + - pyyaml >=5.1 + - uvicorn 0.34.0 pyh31011fe_0 + - uvloop >=0.14.0,!=0.15.0,!=0.15.1 + - watchfiles >=0.13 + - websockets >=10.4 + license: BSD-3-Clause + license_family: BSD + size: 7203 + timestamp: 1734293058849 +- kind: conda + name: uvloop + version: 0.21.0 + build: py312h0bf5046_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.21.0-py312h0bf5046_1.conda + sha256: b1efa77aa4871d7bb09c8dd297fa9bd9070ba7f0f95f2d12ae9cdd31ce8b6b22 + md5: 4f5110253ba80ebf27e55c4ab333880a + depends: + - __osx >=11.0 + - libuv >=1.49.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT OR Apache-2.0 + size: 544097 + timestamp: 1730214653726 +- kind: conda + name: watchfiles + version: 1.0.3 + build: py312hcd83bfe_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.3-py312hcd83bfe_0.conda + sha256: b64b78a7d6384bf72a878256802c783c692fe641ab4b806fd7e9f45e18a5e3b4 + md5: 13b89e1aa72aa773806b1f59ec018b67 + depends: + - __osx >=11.0 + - anyio >=3.0.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 363162 + timestamp: 1733999215646 +- kind: conda + name: websockets + version: '14.1' + build: py312hea69d52_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-14.1-py312hea69d52_0.conda + sha256: 98fb04a1a0f53dc604378f94b5795d0b8e462fee01bf0a887cb34d0efdf5d21f + md5: 89b79a9baa7db46ce21f5738a5a3dfda + depends: + - __osx >=11.0 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: BSD-3-Clause license_family: BSD - size: 133290 - timestamp: 1723660236813 + size: 243131 + timestamp: 1731498944076 +- kind: conda + name: wrapt + version: 1.17.0 + build: py312hea69d52_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py312hea69d52_0.conda + sha256: 0fb35c3d1642f9f47db87bdb33148f88ef19a3af1eb0ee99b5491551c57269c7 + md5: 73414acdb779a8694a14527865b4357a + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-2-Clause + license_family: BSD + size: 61043 + timestamp: 1732523852129 +- kind: conda + name: xorg-libxau + version: 1.0.12 + build: h5505292_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda + sha256: f33e6f013fc36ebc200f09ddead83468544cb5c353a3b50499b07b8c34e28a8d + md5: 50901e0764b7701d8ed7343496f4f301 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 13593 + timestamp: 1734229104321 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 + md5: 77c447f48cab5d3a15ac224edb86a968 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 18487 + timestamp: 1727795205022 - kind: conda name: xxhash version: 0.8.2 @@ -3077,17 +3829,6 @@ packages: license_family: BSD size: 97593 timestamp: 1689951969732 -- kind: conda - name: xz - version: 5.2.6 - build: h57fd34a_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec - md5: 39c6b54e94014701dd157f4f576ed211 - license: LGPL-2.1 and GPL-2.0 - size: 235693 - timestamp: 1660346961024 - kind: conda name: yaml version: 0.2.5 @@ -3103,57 +3844,58 @@ packages: timestamp: 1641347076660 - kind: conda name: yarl - version: 1.9.4 - build: py312h024a12e_1 - build_number: 1 + version: 1.18.3 + build: py312hea69d52_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.9.4-py312h024a12e_1.conda - sha256: 98d545da627ebac051fead168fe578bf7e0c92c1acace442ea8d47876f8a18e5 - md5: 040cc06ccd7be27f9855e1ce1498ec9c + url: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.18.3-py312hea69d52_0.conda + sha256: 69c7863809e11bc90c0d935c16e7f151dcc925add08b3894f06059263a8cb9ba + md5: f32f9b16361866a62d6e061fcd7eb400 depends: - __osx >=11.0 - idna >=2.0 - multidict >=4.0 + - propcache >=0.2.1 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: Apache-2.0 license_family: Apache - size: 111368 - timestamp: 1726055316146 + size: 141556 + timestamp: 1733429104990 - kind: conda name: zeromq version: 4.3.5 - build: h64debc3_5 - build_number: 5 + build: hc1bb282_7 + build_number: 7 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h64debc3_5.conda - sha256: b4ba544a04129472651a5df3b8906ed68e7f43bf23e724fd0e368218083c920c - md5: c29dbe9343a0b55b027fa645644c59d9 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-hc1bb282_7.conda + sha256: 9e585569fe2e7d3bea71972cd4b9f06b1a7ab8fa7c5139f92a31cbceecf25a8a + md5: f7e6b65943cb73bce0143737fded08f1 depends: - __osx >=11.0 - krb5 >=1.21.3,<1.22.0a0 - - libcxx >=17 + - libcxx >=18 - libsodium >=1.0.20,<1.0.21.0a0 license: MPL-2.0 license_family: MOZILLA - size: 296355 - timestamp: 1725430145243 + size: 281565 + timestamp: 1731585108039 - kind: conda name: zipp - version: 3.20.2 - build: pyhd8ed1ab_0 + version: 3.21.0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 - md5: 4daaed111c05672ae669f7036ee5bba3 + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + md5: 0c3cc595284c5e8f0f9900a9b228a332 depends: - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT - size: 21409 - timestamp: 1726248679175 + size: 21809 + timestamp: 1732827613585 - kind: conda name: zstandard version: 0.23.0 diff --git a/mojoproject.toml b/mojoproject.toml index 23a6c3f..97c2a27 100644 --- a/mojoproject.toml +++ b/mojoproject.toml @@ -2,7 +2,7 @@ authors = ["Mikhail Tavarez "] channels = [ "conda-forge", - "https://conda.modular.com/max-nightly", + "https://conda.modular.com/max", "https://repo.prefix.dev/mojo-community", ] description = "Add a short description here" @@ -20,4 +20,4 @@ publish = { cmd = "bash scripts/publish.sh", env = { PREFIX_API_KEY = "$PREFIX_A max = ">=24.5.0,<25" # mojo-rustls = ">=0.1.1,<0.2" # self dependency just for local testing gojo = ">=0.1.9,<0.2" -lightbug_http = "0.1.3" +lightbug_http = "0.1.6" diff --git a/src/libc.mojo b/src/libc.mojo index 6c061f6..e159dce 100644 --- a/src/libc.mojo +++ b/src/libc.mojo @@ -1,7 +1,7 @@ from utils import StaticTuple from sys.ffi import external_call -from sys.info import sizeof -from memory import memcpy +from sys.info import sizeof, os_is_windows, os_is_macos, os_is_linux +from memory import memcpy, UnsafePointer, stack_allocation from lightbug_http.io.bytes import Bytes alias IPPROTO_IPV6 = 41 @@ -10,10 +10,6 @@ alias EPROTONOSUPPORT = 93 # Adapted from https://github.com/gabrieldemarmiesse/mojo-stdlib-extensions/ . Huge thanks to Gabriel! -alias FD_STDIN: c_int = 0 -alias FD_STDOUT: c_int = 1 -alias FD_STDERR: c_int = 2 - alias SUCCESS = 0 alias GRND_NONBLOCK: UInt8 = 1 @@ -44,6 +40,7 @@ alias uintptr_t = UInt64 # --- ( error.h Constants )----------------------------------------------------- +# TODO: These are probably platform specific, we should check the values on each linux and macos. alias EPERM = 1 alias ENOENT = 2 alias ESRCH = 3 @@ -79,31 +76,28 @@ alias EPIPE = 32 alias EDOM = 33 alias ERANGE = 34 alias EWOULDBLOCK = EAGAIN - - -fn to_char_ptr(s: String) -> UnsafePointer[c_char]: - """Only ASCII-based strings.""" - var ptr = UnsafePointer[c_char]().alloc(len(s)) - for i in range(len(s)): - ptr[i] = ord(s[i]) - return ptr - - -fn to_char_ptr(s: Bytes) -> UnsafePointer[c_char]: - var ptr = UnsafePointer[c_char]().alloc(len(s)) - for i in range(len(s)): - ptr[i] = int(s[i]) - return ptr - - -fn c_charptr_to_string(s: UnsafePointer[c_char]) -> String: - return String(s.bitcast[UInt8](), strlen(s)) - - -fn cftob(val: c_int) -> Bool: - """Convert C-like failure (-1) to Bool.""" - return rebind[Bool](val > 0) - +alias EINPROGRESS = 36 +alias EALREADY = 37 +alias ENOTSOCK = 38 +alias EDESTADDRREQ = 39 +alias EMSGSIZE = 40 +alias ENOPROTOOPT = 42 +alias EAFNOSUPPORT = 47 +alias EADDRINUSE = 48 +alias EADDRNOTAVAIL = 49 +alias ENETUNREACH = 51 +alias ECONNABORTED = 53 +alias ECONNRESET = 54 +alias ENOBUFS = 55 +alias EISCONN = 56 +alias ENOTCONN = 57 +alias ETIMEDOUT = 60 +alias ECONNREFUSED = 61 +alias ELOOP = 62 +alias ENAMETOOLONG = 63 +alias EDQUOT = 69 +alias EPROTO = 100 +alias EOPNOTSUPP = 102 # --- ( Network Related Constants )--------------------------------------------- alias sa_family_t = c_ushort @@ -111,95 +105,91 @@ alias socklen_t = c_uint alias in_addr_t = c_uint alias in_port_t = c_ushort +# TODO: These might vary on each platform...we should confirm this. +# Taken from: https://github.com/openbsd/src/blob/master/sys/sys/socket.h#L250 # Address Family Constants -alias AF_UNSPEC = 0 -alias AF_UNIX = 1 -alias AF_LOCAL = AF_UNIX -alias AF_INET = 2 -alias AF_AX25 = 3 -alias AF_IPX = 4 -alias AF_APPLETALK = 5 -alias AF_NETROM = 6 -alias AF_BRIDGE = 7 -alias AF_ATMPVC = 8 -alias AF_X25 = 9 -alias AF_INET6 = 10 -alias AF_ROSE = 11 -alias AF_DECnet = 12 -alias AF_NETBEUI = 13 -alias AF_SECURITY = 14 -alias AF_KEY = 15 -alias AF_NETLINK = 16 -alias AF_ROUTE = AF_NETLINK -alias AF_PACKET = 17 -alias AF_ASH = 18 -alias AF_ECONET = 19 -alias AF_ATMSVC = 20 -alias AF_RDS = 21 -alias AF_SNA = 22 -alias AF_IRDA = 23 -alias AF_PPPOX = 24 -alias AF_WANPIPE = 25 -alias AF_LLC = 26 -alias AF_CAN = 29 -alias AF_TIPC = 30 -alias AF_BLUETOOTH = 31 -alias AF_IUCV = 32 -alias AF_RXRPC = 33 -alias AF_ISDN = 34 -alias AF_PHONET = 35 -alias AF_IEEE802154 = 36 -alias AF_CAIF = 37 -alias AF_ALG = 38 -alias AF_NFC = 39 -alias AF_VSOCK = 40 -alias AF_KCM = 41 -alias AF_QIPCRTR = 42 -alias AF_MAX = 43 - +alias AF_UNSPEC = 0 # unspecified +alias AF_UNIX = 1 # local to host +alias AF_LOCAL = AF_UNIX # draft POSIX compatibility +alias AF_INET = 2 # internetwork: UDP, TCP, etc. +alias AF_IMPLINK = 3 # arpanet imp addresses +alias AF_PUP = 4 # pup protocols: e.g. BSP +alias AF_CHAOS = 5 # mit CHAOS protocols +alias AF_NS = 6 # XEROX NS protocols +alias AF_ISO = 7 # ISO protocols +alias AF_OSI = AF_ISO +alias AF_ECMA = 8 # european computer manufacturers +alias AF_DATAKIT = 9 # datakit protocols +alias AF_CCITT = 10 # CCITT protocols, X.25 etc +alias AF_SNA = 11 # IBM SNA +alias AF_DECnet = 12 # DECnet +alias AF_DLI = 13 # DEC Direct data link interface +alias AF_LAT = 14 # LAT +alias AF_HYLINK = 15 # NSC Hyperchannel +alias AF_APPLETALK = 16 # Apple Talk +alias AF_ROUTE = 17 # Internal Routing Protocol +alias AF_LINK = 18 # Link layer interface +alias pseudo_AF_XTP = 19 # eXpress Transfer Protocol (no AF) +alias AF_COIP = 20 # connection-oriented IP, aka ST II +alias AF_CNT = 21 # Computer Network Technology +alias pseudo_AF_RTIP = 22 # Help Identify RTIP packets +alias AF_IPX = 23 # Novell Internet Protocol +alias AF_INET6 = 24 # IPv6 +alias pseudo_AF_PIP = 25 # Help Identify PIP packets +alias AF_ISDN = 26 # Integrated Services Digital Network +alias AF_E164 = AF_ISDN # CCITT E.164 recommendation +alias AF_NATM = 27 # native ATM access +alias AF_ENCAP = 28 +alias AF_SIP = 29 # Simple Internet Protocol +alias AF_KEY = 30 +alias pseudo_AF_HDRCMPLT = 31 # Used by BPF to not rewrite headers in interface output routine +alias AF_BLUETOOTH = 32 # Bluetooth +alias AF_MPLS = 33 # MPLS +alias pseudo_AF_PFLOW = 34 # pflow +alias pseudo_AF_PIPEX = 35 # PIPEX +alias AF_FRAME = 36 # frame (Ethernet) sockets +alias AF_MAX = 37 + +# Protocol families, same as address families for now. alias PF_UNSPEC = AF_UNSPEC -alias PF_UNIX = AF_UNIX alias PF_LOCAL = AF_LOCAL +alias PF_UNIX = AF_UNIX alias PF_INET = AF_INET -alias PF_AX25 = AF_AX25 -alias PF_IPX = AF_IPX +alias PF_IMPLINK = AF_IMPLINK +alias PF_PUP = AF_PUP +alias PF_CHAOS = AF_CHAOS +alias PF_NS = AF_NS +alias PF_ISO = AF_ISO +alias PF_OSI = AF_ISO +alias PF_ECMA = AF_ECMA +alias PF_DATAKIT = AF_DATAKIT +alias PF_CCITT = AF_CCITT +alias PF_SNA = AF_SNA +alias PF_DECnet = AF_DECnet +alias PF_DLI = AF_DLI +alias PF_LAT = AF_LAT +alias PF_HYLINK = AF_HYLINK alias PF_APPLETALK = AF_APPLETALK -alias PF_NETROM = AF_NETROM -alias PF_BRIDGE = AF_BRIDGE -alias PF_ATMPVC = AF_ATMPVC -alias PF_X25 = AF_X25 +alias PF_ROUTE = AF_ROUTE +alias PF_LINK = AF_LINK +alias PF_XTP = pseudo_AF_XTP # really just proto family, no AF +alias PF_COIP = AF_COIP +alias PF_CNT = AF_CNT +alias PF_IPX = AF_IPX # same format as = AF_NS alias PF_INET6 = AF_INET6 -alias PF_ROSE = AF_ROSE -alias PF_DECnet = AF_DECnet -alias PF_NETBEUI = AF_NETBEUI -alias PF_SECURITY = AF_SECURITY +alias PF_RTIP = pseudo_AF_RTIP # same format as AF_INET +alias PF_PIP = pseudo_AF_PIP +alias PF_ISDN = AF_ISDN +alias PF_NATM = AF_NATM +alias PF_ENCAP = AF_ENCAP +alias PF_SIP = AF_SIP alias PF_KEY = AF_KEY -alias PF_NETLINK = AF_NETLINK -alias PF_ROUTE = AF_ROUTE -alias PF_PACKET = AF_PACKET -alias PF_ASH = AF_ASH -alias PF_ECONET = AF_ECONET -alias PF_ATMSVC = AF_ATMSVC -alias PF_RDS = AF_RDS -alias PF_SNA = AF_SNA -alias PF_IRDA = AF_IRDA -alias PF_PPPOX = AF_PPPOX -alias PF_WANPIPE = AF_WANPIPE -alias PF_LLC = AF_LLC -alias PF_CAN = AF_CAN -alias PF_TIPC = AF_TIPC +alias PF_BPF = pseudo_AF_HDRCMPLT alias PF_BLUETOOTH = AF_BLUETOOTH -alias PF_IUCV = AF_IUCV -alias PF_RXRPC = AF_RXRPC -alias PF_ISDN = AF_ISDN -alias PF_PHONET = AF_PHONET -alias PF_IEEE802154 = AF_IEEE802154 -alias PF_CAIF = AF_CAIF -alias PF_ALG = AF_ALG -alias PF_NFC = AF_NFC -alias PF_VSOCK = AF_VSOCK -alias PF_KCM = AF_KCM -alias PF_QIPCRTR = AF_QIPCRTR +alias PF_MPLS = AF_MPLS +alias PF_PFLOW = pseudo_AF_PFLOW +alias PF_PIPEX = pseudo_AF_PIPEX +alias PF_FRAME = AF_FRAME alias PF_MAX = AF_MAX # Socket Type constants @@ -229,85 +219,38 @@ alias SHUT_RD = 0 alias SHUT_WR = 1 alias SHUT_RDWR = 2 -alias SOL_SOCKET = 1 - -alias SO_DEBUG = 1 -alias SO_REUSEADDR = 2 -alias SO_TYPE = 3 -alias SO_ERROR = 4 -alias SO_DONTROUTE = 5 -alias SO_BROADCAST = 6 -alias SO_SNDBUF = 7 -alias SO_RCVBUF = 8 -alias SO_KEEPALIVE = 9 -alias SO_OOBINLINE = 10 -alias SO_NO_CHECK = 11 -alias SO_PRIORITY = 12 -alias SO_LINGER = 13 -alias SO_BSDCOMPAT = 14 -alias SO_REUSEPORT = 15 -alias SO_PASSCRED = 16 -alias SO_PEERCRED = 17 -alias SO_RCVLOWAT = 18 -alias SO_SNDLOWAT = 19 -alias SO_RCVTIMEO = 20 -alias SO_SNDTIMEO = 21 -alias SO_RCVTIMEO_OLD = 20 -alias SO_SNDTIMEO_OLD = 21 -alias SO_SECURITY_AUTHENTICATION = 22 -alias SO_SECURITY_ENCRYPTION_TRANSPORT = 23 -alias SO_SECURITY_ENCRYPTION_NETWORK = 24 -alias SO_BINDTODEVICE = 25 -alias SO_ATTACH_FILTER = 26 -alias SO_DETACH_FILTER = 27 -alias SO_GET_FILTER = SO_ATTACH_FILTER -alias SO_PEERNAME = 28 -alias SO_TIMESTAMP = 29 -alias SO_TIMESTAMP_OLD = 29 -alias SO_ACCEPTCONN = 30 -alias SO_PEERSEC = 31 -alias SO_SNDBUFFORCE = 32 -alias SO_RCVBUFFORCE = 33 -alias SO_PASSSEC = 34 -alias SO_TIMESTAMPNS = 35 -alias SO_TIMESTAMPNS_OLD = 35 -alias SO_MARK = 36 -alias SO_TIMESTAMPING = 37 -alias SO_TIMESTAMPING_OLD = 37 -alias SO_PROTOCOL = 38 -alias SO_DOMAIN = 39 -alias SO_RXQ_OVFL = 40 -alias SO_WIFI_STATUS = 41 -alias SCM_WIFI_STATUS = SO_WIFI_STATUS -alias SO_PEEK_OFF = 42 -alias SO_NOFCS = 43 -alias SO_LOCK_FILTER = 44 -alias SO_SELECT_ERR_QUEUE = 45 -alias SO_BUSY_POLL = 46 -alias SO_MAX_PACING_RATE = 47 -alias SO_BPF_EXTENSIONS = 48 -alias SO_INCOMING_CPU = 49 -alias SO_ATTACH_BPF = 50 -alias SO_DETACH_BPF = SO_DETACH_FILTER -alias SO_ATTACH_REUSEPORT_CBPF = 51 -alias SO_ATTACH_REUSEPORT_EBPF = 52 -alias SO_CNX_ADVICE = 53 -alias SCM_TIMESTAMPING_OPT_STATS = 54 -alias SO_MEMINFO = 55 -alias SO_INCOMING_NAPI_ID = 56 -alias SO_COOKIE = 57 -alias SCM_TIMESTAMPING_PKTINFO = 58 -alias SO_PEERGROUPS = 59 -alias SO_ZEROCOPY = 60 -alias SO_TXTIME = 61 -alias SCM_TXTIME = SO_TXTIME -alias SO_BINDTOIFINDEX = 62 -alias SO_TIMESTAMP_NEW = 63 -alias SO_TIMESTAMPNS_NEW = 64 -alias SO_TIMESTAMPING_NEW = 65 -alias SO_RCVTIMEO_NEW = 66 -alias SO_SNDTIMEO_NEW = 67 -alias SO_DETACH_REUSEPORT_BPF = 68 +alias SOL_SOCKET = 0xffff + +# Socket option flags +# TODO: These are probably platform specific, on MacOS I have these values, but we should check on Linux. +# Taken from: https://github.com/openbsd/src/blob/master/sys/sys/socket.h +alias SO_DEBUG = 0x0001 +alias SO_ACCEPTCONN = 0x0002 +alias SO_REUSEADDR = 0x0004 +alias SO_KEEPALIVE = 0x0008 +alias SO_DONTROUTE = 0x0010 +alias SO_BROADCAST = 0x0020 +alias SO_USELOOPBACK = 0x0040 +alias SO_LINGER = 0x0080 +alias SO_OOBINLINE = 0x0100 +alias SO_REUSEPORT = 0x0200 +alias SO_TIMESTAMP = 0x0800 +alias SO_BINDANY = 0x1000 +alias SO_ZEROIZE = 0x2000 +alias SO_SNDBUF = 0x1001 +alias SO_RCVBUF = 0x1002 +alias SO_SNDLOWAT = 0x1003 +alias SO_RCVLOWAT = 0x1004 +alias SO_SNDTIMEO = 0x1005 +alias SO_RCVTIMEO = 0x1006 +alias SO_ERROR = 0x1007 +alias SO_TYPE = 0x1008 +alias SO_NETPROC = 0x1020 +alias SO_RTABLE = 0x1021 +alias SO_PEERCRED = 0x1022 +alias SO_SPLICE = 0x1023 +alias SO_DOMAIN = 0x1024 +alias SO_PROTOCOL = 0x1025 # --- ( Network Related Structs )----------------------------------------------- @@ -329,6 +272,10 @@ struct sockaddr: var sa_family: sa_family_t var sa_data: StaticTuple[c_char, 14] + fn __init__(out self, family: sa_family_t = 0, data: StaticTuple[c_char, 14] = StaticTuple[c_char, 14]()): + self.sa_family = family + self.sa_data = data + @value @register_passable("trivial") @@ -361,7 +308,7 @@ struct addrinfo: var ai_canonname: UnsafePointer[c_char] var ai_next: UnsafePointer[c_void] - fn __init__(inout self) -> None: + fn __init__(out self): self.ai_flags = 0 self.ai_family = 0 self.ai_socktype = 0 @@ -372,73 +319,96 @@ struct addrinfo: self.ai_next = UnsafePointer[c_void]() -fn strlen(s: UnsafePointer[c_char]) -> c_size_t: - """Libc POSIX `strlen` function - Reference: https://man7.org/linux/man-pages/man3/strlen.3p.html - Fn signature: size_t strlen(const char *s). +# --- ( Network Related Syscalls & Structs )------------------------------------ - Args: s: A UnsafePointer to a C string. - Returns: The length of the string. - """ - return external_call["strlen", c_size_t, UnsafePointer[c_char]](s) +fn htonl(hostlong: c_uint) -> c_uint: + """Libc POSIX `htonl` function. -# --- ( Network Related Syscalls & Structs )------------------------------------ + Args: + hostlong: A 32-bit integer in host byte order. + Returns: + The value provided in network byte order. -fn htonl(hostlong: c_uint) -> c_uint: - """Libc POSIX `htonl` function - Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html - Fn signature: uint32_t htonl(uint32_t hostlong). + #### C Function + ```c + uint32_t htonl(uint32_t hostlong) + ``` - Args: hostlong: A 32-bit integer in host byte order. - Returns: The value provided in network byte order. + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html. """ return external_call["htonl", c_uint, c_uint](hostlong) fn htons(hostshort: c_ushort) -> c_ushort: - """Libc POSIX `htons` function - Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html - Fn signature: uint16_t htons(uint16_t hostshort). + """Libc POSIX `htons` function. - Args: hostshort: A 16-bit integer in host byte order. - Returns: The value provided in network byte order. + Args: + hostshort: A 16-bit integer in host byte order. + + Returns: + The value provided in network byte order. + + #### C Function + ```c + uint16_t htons(uint16_t hostshort) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html. """ return external_call["htons", c_ushort, c_ushort](hostshort) fn ntohl(netlong: c_uint) -> c_uint: - """Libc POSIX `ntohl` function - Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html - Fn signature: uint32_t ntohl(uint32_t netlong). + """Libc POSIX `ntohl` function. - Args: netlong: A 32-bit integer in network byte order. - Returns: The value provided in host byte order. + Args: + netlong: A 32-bit integer in network byte order. + + Returns: + The value provided in host byte order. + + #### C Function + ```c + uint32_t ntohl(uint32_t netlong) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html """ return external_call["ntohl", c_uint, c_uint](netlong) fn ntohs(netshort: c_ushort) -> c_ushort: - """Libc POSIX `ntohs` function - Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html - Fn signature: uint16_t ntohs(uint16_t netshort). + """Libc POSIX `ntohs` function. + + Args: + netshort: A 16-bit integer in network byte order. - Args: netshort: A 16-bit integer in network byte order. - Returns: The value provided in host byte order. + Returns: + The value provided in host byte order. + + #### C Function + ```c + uint16_t ntohs(uint16_t netshort) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/htonl.3p.html """ return external_call["ntohs", c_ushort, c_ushort](netshort) -fn inet_ntop( +fn _inet_ntop( af: c_int, src: UnsafePointer[c_void], dst: UnsafePointer[c_char], size: socklen_t, -) -> UnsafePointer[c_char]: - """Libc POSIX `inet_ntop` function - Reference: https://man7.org/linux/man-pages/man3/inet_ntop.3p.html. - Fn signature: const char *inet_ntop(int af, const void *restrict src, char *restrict dst, socklen_t size). +) raises -> UnsafePointer[c_char]: + """Libc POSIX `inet_ntop` function. Args: af: Address Family see AF_ aliases. @@ -448,6 +418,14 @@ fn inet_ntop( Returns: A UnsafePointer to the buffer containing the result. + + #### C Function + ```c + const char *inet_ntop(int af, const void *restrict src, char *restrict dst, socklen_t size) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/inet_ntop.3p.html. """ return external_call[ "inet_ntop", @@ -459,17 +437,73 @@ fn inet_ntop( ](af, src, dst, size) -fn inet_pton( - af: c_int, src: UnsafePointer[c_char], dst: UnsafePointer[c_void] -) -> c_int: - """Libc POSIX `inet_pton` function - Reference: https://man7.org/linux/man-pages/man3/inet_ntop.3p.html - Fn signature: int inet_pton(int af, const char *restrict src, void *restrict dst). +fn inet_ntop( + af: c_int, + src: UnsafePointer[c_void], + dst: UnsafePointer[c_char], + size: socklen_t, +) raises -> String: + """Libc POSIX `inet_ntop` function. - Args: af: Address Family see AF_ aliases. + Args: + af: Address Family see AF_ aliases. + src: A UnsafePointer to a binary address. + dst: A UnsafePointer to a buffer to store the result. + size: The size of the buffer. + + Returns: + A UnsafePointer to the buffer containing the result. + + Raises: + Error: If an error occurs while converting the address. + EAFNOSUPPORT: `*src` was not an `AF_INET` or `AF_INET6` family address. + ENOSPC: The buffer size, `size`, was not large enough to store the presentation form of the address. + + #### C Function + ```c + const char *inet_ntop(int af, const void *restrict src, char *restrict dst, socklen_t size) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/inet_ntop.3p.html. + """ + var result = _inet_ntop(af, src, dst, size) + + # `inet_ntop` returns NULL on error. + if not result: + var errno = get_errno() + if errno == EAFNOSUPPORT: + raise Error("inet_ntop Error: `*src` was not an `AF_INET` or `AF_INET6` family address.") + elif errno == ENOSPC: + raise Error("inet_ntop Error: The buffer size, `size`, was not large enough to store the presentation form of the address.") + else: + raise Error("inet_ntop Error: An error occurred while converting the address. Error code: " + str(errno)) + + # We want the string representation of the address, so it's ok to take ownership of the pointer here. + return String(ptr=result, length=int(size)) + + +fn _inet_pton(af: c_int, src: UnsafePointer[c_char], dst: UnsafePointer[c_void]) -> c_int: + """Libc POSIX `inet_pton` function. Converts a presentation format address (that is, printable form as held in a character string) + to network format (usually a struct in_addr or some other internal binary representation, in network byte order). + It returns 1 if the address was valid for the specified address family, or 0 if the address was not parseable in the specified address family, + or -1 if some system error occurred (in which case errno will have been set). + + Args: + af: Address Family see AF_ aliases. src: A UnsafePointer to a string containing the address. dst: A UnsafePointer to a buffer to store the result. - Returns: 1 on success, 0 if the input is not a valid address, -1 on error. + + Returns: + 1 on success, 0 if the input is not a valid address, -1 on error. + + #### C Function + ```c + int inet_pton(int af, const char *restrict src, void *restrict dst) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/inet_ntop.3p.html """ return external_call[ "inet_pton", @@ -480,60 +514,135 @@ fn inet_pton( ](af, src, dst) -fn inet_addr(cp: UnsafePointer[c_char]) -> in_addr_t: - """Libc POSIX `inet_addr` function - Reference: https://man7.org/linux/man-pages/man3/inet_addr.3p.html - Fn signature: in_addr_t inet_addr(const char *cp). +fn inet_pton(af: c_int, src: UnsafePointer[c_char], dst: UnsafePointer[c_void]) raises: + """Libc POSIX `inet_pton` function. Converts a presentation format address (that is, printable form as held in a character string) + to network format (usually a struct in_addr or some other internal binary representation, in network byte order). - Args: cp: A UnsafePointer to a string containing the address. - Returns: The address in network byte order. + Args: + af: Address Family see AF_ aliases. + src: A UnsafePointer to a string containing the address. + dst: A UnsafePointer to a buffer to store the result. + + Raises: + Error: If an error occurs while converting the address or the input is not a valid address. + + #### C Function + ```c + int inet_pton(int af, const char *restrict src, void *restrict dst) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/inet_ntop.3p.html + * This function is valid for `AF_INET` and `AF_INET6`. """ - return external_call["inet_addr", in_addr_t, UnsafePointer[c_char]](cp) + var result = _inet_pton(af, src, dst) + if result == 0: + raise Error("inet_pton Error: The input is not a valid address.") + elif result == -1: + var errno = get_errno() + raise Error("inet_pton Error: An error occurred while converting the address. Error code: " + str(errno)) + + +fn _socket(domain: c_int, type: c_int, protocol: c_int) -> c_int: + """Libc POSIX `socket` function. + Args: + domain: Address Family see AF_ aliases. + type: Socket Type see SOCK_ aliases. + protocol: The protocol to use. + + Returns: + A File Descriptor or -1 in case of failure. -fn inet_ntoa(addr: in_addr) -> UnsafePointer[c_char]: - """Libc POSIX `inet_ntoa` function - Reference: https://man7.org/linux/man-pages/man3/inet_addr.3p.html - Fn signature: char *inet_ntoa(struct in_addr in). + #### C Function + ```c + int socket(int domain, int type, int protocol) + ``` - Args: in: A UnsafePointer to a string containing the address. - Returns: The address in network byte order. + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/socket.3p.html """ - return external_call["inet_ntoa", UnsafePointer[c_char], in_addr](addr) + return external_call["socket", c_int, c_int, c_int, c_int](domain, type, protocol) -fn socket(domain: c_int, type: c_int, protocol: c_int) -> c_int: - """Libc POSIX `socket` function - Reference: https://man7.org/linux/man-pages/man3/socket.3p.html - Fn signature: int socket(int domain, int type, int protocol). +fn socket(domain: c_int, type: c_int, protocol: c_int) raises -> c_int: + """Libc POSIX `socket` function. - Args: domain: Address Family see AF_ aliases. + Args: + domain: Address Family see AF_ aliases. type: Socket Type see SOCK_ aliases. protocol: The protocol to use. - Returns: A File Descriptor or -1 in case of failure. - """ - return external_call[ - "socket", c_int, c_int, c_int, c_int # FnName, RetType # Args - ](domain, type, protocol) - -fn setsockopt( + Returns: + A File Descriptor or -1 in case of failure. + + Raises: + SocketError: If an error occurs while creating the socket. + EACCES: Permission to create a socket of the specified type and/or protocol is denied. + EAFNOSUPPORT: The implementation does not support the specified address family. + EINVAL: Invalid flags in type, Unknown protocol, or protocol family not available. + EMFILE: The per-process limit on the number of open file descriptors has been reached. + ENFILE: The system-wide limit on the total number of open files has been reached. + ENOBUFS or ENOMEM: Insufficient memory is available. The socket cannot be created until sufficient resources are freed. + EPROTONOSUPPORT: The protocol type or the specified protocol is not supported within this domain. + + #### C Function + ```c + int socket(int domain, int type, int protocol) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/socket.3p.html + """ + var fd = _socket(domain, type, protocol) + if fd == -1: + var errno = get_errno() + if errno == EACCES: + raise Error("SocketError (EACCES): Permission to create a socket of the specified type and/or protocol is denied.") + elif errno == EAFNOSUPPORT: + raise Error("SocketError (EAFNOSUPPORT): The implementation does not support the specified address family.") + elif errno == EINVAL: + raise Error("SocketError (EINVAL): Invalid flags in type, Unknown protocol, or protocol family not available.") + elif errno == EMFILE: + raise Error("SocketError (EMFILE): The per-process limit on the number of open file descriptors has been reached.") + elif errno == ENFILE: + raise Error("SocketError (ENFILE): The system-wide limit on the total number of open files has been reached.") + elif int(errno) in [ENOBUFS, ENOMEM]: + raise Error("SocketError (ENOBUFS or ENOMEM): Insufficient memory is available. The socket cannot be created until sufficient resources are freed.") + elif errno == EPROTONOSUPPORT: + raise Error("SocketError (EPROTONOSUPPORT): The protocol type or the specified protocol is not supported within this domain.") + else: + raise Error("SocketError: An error occurred while creating the socket. Error code: " + str(errno)) + + return fd + + +fn _setsockopt[origin: Origin]( socket: c_int, level: c_int, option_name: c_int, - option_value: UnsafePointer[c_void], + option_value: Pointer[c_void, origin], option_len: socklen_t, ) -> c_int: - """Libc POSIX `setsockopt` function - Reference: https://man7.org/linux/man-pages/man3/setsockopt.3p.html - Fn signature: int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len). + """Libc POSIX `setsockopt` function. - Args: socket: A File Descriptor. + Args: + socket: A File Descriptor. level: The protocol level. option_name: The option to set. - option_value: A UnsafePointer to the value to set. + option_value: A Pointer to the value to set. option_len: The size of the value. - Returns: 0 on success, -1 on error. + + Returns: + 0 on success, -1 on error. + + #### C Function + ```c + int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/setsockopt.3p.html """ return external_call[ "setsockopt", @@ -541,128 +650,590 @@ fn setsockopt( c_int, c_int, c_int, - UnsafePointer[c_void], + Pointer[c_void, origin], socklen_t, # Args ](socket, level, option_name, option_value, option_len) -fn getsockname( +fn setsockopt[origin: Origin]( + socket: c_int, + level: c_int, + option_name: c_int, + option_value: Pointer[c_void, origin], + option_len: socklen_t, +) raises: + """Libc POSIX `setsockopt` function. Manipulate options for the socket referred to by the file descriptor, `socket`. + + Args: + socket: A File Descriptor. + level: The protocol level. + option_name: The option to set. + option_value: A UnsafePointer to the value to set. + option_len: The size of the value. + + Raises: + Error: If an error occurs while setting the socket option. + EBADF: The argument `socket` is not a valid descriptor. + EFAULT: The argument `option_value` points outside the process's allocated address space. + EINVAL: The argument `option_len` is invalid. Can sometimes occur when `option_value` is invalid. + ENOPROTOOPT: The option is unknown at the level indicated. + ENOTSOCK: The argument `socket` is not a socket. + + #### C Function + ```c + int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/setsockopt.3p.html + """ + var result = _setsockopt(socket, level, option_name, option_value, option_len) + if result == -1: + var errno = get_errno() + if errno == EBADF: + raise Error("setsockopt: The argument `socket` is not a valid descriptor.") + elif errno == EFAULT: + raise Error("setsockopt: The argument `option_value` points outside the process's allocated address space.") + elif errno == EINVAL: + raise Error("setsockopt: The argument `option_len` is invalid. Can sometimes occur when `option_value` is invalid.") + elif errno == ENOPROTOOPT: + raise Error("setsockopt: The option is unknown at the level indicated.") + elif errno == ENOTSOCK: + raise Error("setsockopt: The argument `socket` is not a socket.") + else: + raise Error("setsockopt: An error occurred while setting the socket option. Error code: " + str(errno)) + + +fn _getsockname[origin: Origin]( socket: c_int, address: UnsafePointer[sockaddr], - address_len: UnsafePointer[socklen_t], + address_len: Pointer[socklen_t, origin], ) -> c_int: - """Libc POSIX `getsockname` function - Reference: https://man7.org/linux/man-pages/man3/getsockname.3p.html - Fn signature: int getsockname(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len). + """Libc POSIX `getsockname` function. - Args: socket: A File Descriptor. + Args: + socket: A File Descriptor. address: A UnsafePointer to a buffer to store the address of the peer. address_len: A UnsafePointer to the size of the buffer. - Returns: 0 on success, -1 on error. + + Returns: + 0 on success, -1 on error. + + #### C Function + ```c + int getsockname(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/getsockname.3p.html """ return external_call[ "getsockname", c_int, # FnName, RetType c_int, UnsafePointer[sockaddr], - UnsafePointer[socklen_t], # Args + Pointer[socklen_t, origin], # Args ](socket, address, address_len) -fn getpeername( +fn getsockname[origin: Origin]( + socket: c_int, + address: UnsafePointer[sockaddr], + address_len: Pointer[socklen_t, origin], +) raises: + """Libc POSIX `getsockname` function. + + Args: + socket: A File Descriptor. + address: A UnsafePointer to a buffer to store the address of the peer. + address_len: A UnsafePointer to the size of the buffer. + + Raises: + Error: If an error occurs while getting the socket name. + EBADF: The argument `socket` is not a valid descriptor. + EFAULT: The `address` argument points to memory not in a valid part of the process address space. + EINVAL: `address_len` is invalid (e.g., is negative). + ENOBUFS: Insufficient resources were available in the system to perform the operation. + ENOTSOCK: The argument `socket` is not a socket, it is a file. + + #### C Function + ```c + int getsockname(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/getsockname.3p.html + """ + var result = _getsockname(socket, address, address_len) + if result == -1: + var errno = get_errno() + if errno == EBADF: + raise Error("getsockname: The argument `socket` is not a valid descriptor.") + elif errno == EFAULT: + raise Error("getsockname: The `address` argument points to memory not in a valid part of the process address space.") + elif errno == EINVAL: + raise Error("getsockname: `address_len` is invalid (e.g., is negative).") + elif errno == ENOBUFS: + raise Error("getsockname: Insufficient resources were available in the system to perform the operation.") + elif errno == ENOTSOCK: + raise Error("getsockname: The argument `socket` is not a socket, it is a file.") + else: + raise Error("getsockname: An error occurred while getting the socket name. Error code: " + str(errno)) + + +fn _getpeername[origin: Origin]( sockfd: c_int, addr: UnsafePointer[sockaddr], - address_len: UnsafePointer[socklen_t], + address_len: Pointer[socklen_t, origin], ) -> c_int: - """Libc POSIX `getpeername` function - Reference: https://man7.org/linux/man-pages/man2/getpeername.2.html - Fn signature: int getpeername(int socket, struct sockaddr *restrict addr, socklen_t *restrict address_len). + """Libc POSIX `getpeername` function. - Args: sockfd: A File Descriptor. + Args: + sockfd: A File Descriptor. addr: A UnsafePointer to a buffer to store the address of the peer. address_len: A UnsafePointer to the size of the buffer. - Returns: 0 on success, -1 on error. + + Returns: + 0 on success, -1 on error. + + #### C Function + ```c + int getpeername(int socket, struct sockaddr *restrict addr, socklen_t *restrict address_len) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man2/getpeername.2.html """ return external_call[ "getpeername", c_int, # FnName, RetType c_int, UnsafePointer[sockaddr], - UnsafePointer[socklen_t], # Args + Pointer[socklen_t, origin], # Args ](sockfd, addr, address_len) -fn bind( - socket: c_int, address: UnsafePointer[sockaddr], address_len: socklen_t -) -> c_int: - """Libc POSIX `bind` function - Reference: https://man7.org/linux/man-pages/man3/bind.3p.html - Fn signature: int bind(int socket, const struct sockaddr *address, socklen_t address_len). +fn getpeername[origin: Origin]( + sockfd: c_int, + addr: UnsafePointer[sockaddr], + address_len: Pointer[socklen_t, origin], +) raises: + """Libc POSIX `getpeername` function. + + Args: + sockfd: A File Descriptor. + addr: A UnsafePointer to a buffer to store the address of the peer. + address_len: A UnsafePointer to the size of the buffer. + + Raises: + Error: If an error occurs while getting the socket name. + EBADF: The argument `socket` is not a valid descriptor. + EFAULT: The `addr` argument points to memory not in a valid part of the process address space. + EINVAL: `address_len` is invalid (e.g., is negative). + ENOBUFS: Insufficient resources were available in the system to perform the operation. + ENOTCONN: The socket is not connected. + ENOTSOCK: The argument `socket` is not a socket, it is a file. + + #### C Function + ```c + int getpeername(int socket, struct sockaddr *restrict addr, socklen_t *restrict address_len) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man2/getpeername.2.html """ - return external_call[ - "bind", c_int, c_int, UnsafePointer[sockaddr], socklen_t - ](socket, address, address_len) + var result = _getpeername(sockfd, addr, address_len) + if result == -1: + var errno = get_errno() + if errno == EBADF: + raise Error("getpeername: The argument `socket` is not a valid descriptor.") + elif errno == EFAULT: + raise Error("getpeername: The `addr` argument points to memory not in a valid part of the process address space.") + elif errno == EINVAL: + raise Error("getpeername: `address_len` is invalid (e.g., is negative).") + elif errno == ENOBUFS: + raise Error("getpeername: Insufficient resources were available in the system to perform the operation.") + elif errno == ENOTCONN: + raise Error("getpeername: The socket is not connected.") + elif errno == ENOTSOCK: + raise Error("getpeername: The argument `socket` is not a socket, it is a file.") + else: + raise Error("getpeername: An error occurred while getting the socket name. Error code: " + str(errno)) + + +fn _bind[origin: MutableOrigin](socket: c_int, address: Pointer[sockaddr_in, origin], address_len: socklen_t) -> c_int: + """Libc POSIX `bind` function. + + Args: + socket: A File Descriptor. + address: A UnsafePointer to the address to bind to. + address_len: The size of the address. + + Returns: + 0 on success, -1 on error. + + #### C Function + ```c + int bind(int socket, const struct sockaddr *address, socklen_t address_len) + ``` + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/bind.3p.html + """ + return external_call["bind", c_int, c_int, Pointer[sockaddr_in, origin], socklen_t](socket, address, address_len) -fn listen(socket: c_int, backlog: c_int) -> c_int: - """Libc POSIX `listen` function - Reference: https://man7.org/linux/man-pages/man3/listen.3p.html - Fn signature: int listen(int socket, int backlog). - Args: socket: A File Descriptor. +fn bind[origin: MutableOrigin](socket: c_int, address: Pointer[sockaddr_in, origin], address_len: socklen_t) raises: + """Libc POSIX `bind` function. + + Args: + socket: A File Descriptor. + address: A UnsafePointer to the address to bind to. + address_len: The size of the address. + + Raises: + Error: If an error occurs while binding the socket. + EACCES: The address, `address`, is protected, and the user is not the superuser. + EADDRINUSE: The given address is already in use. + EBADF: `socket` is not a valid descriptor. + EINVAL: The socket is already bound to an address. + ENOTSOCK: `socket` is a descriptor for a file, not a socket. + + # The following errors are specific to UNIX domain (AF_UNIX) sockets + EACCES: Search permission is denied on a component of the path prefix. (See also path_resolution(7).) + EADDRNOTAVAIL: A nonexistent interface was requested or the requested address was not local. + EFAULT: `address` points outside the user's accessible address space. + EINVAL: The `address_len` is wrong, or the socket was not in the AF_UNIX family. + ELOOP: Too many symbolic links were encountered in resolving addr. + ENAMETOOLONG: `address` is too long. + ENOENT: The file does not exist. + ENOMEM: Insufficient kernel memory was available. + ENOTDIR: A component of the path prefix is not a directory. + EROFS: The socket inode would reside on a read-only file system. + + #### C Function + ```c + int bind(int socket, const struct sockaddr *address, socklen_t address_len) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/bind.3p.html + """ + var result = _bind(socket, address, address_len) + if result == -1: + var errno = get_errno() + if errno == EACCES: + raise Error("bind: The address, `address`, is protected, and the user is not the superuser.") + elif errno == EADDRINUSE: + raise Error("bind: The given address is already in use.") + elif errno == EBADF: + raise Error("bind: `socket` is not a valid descriptor.") + elif errno == EINVAL: + raise Error("bind: The socket is already bound to an address.") + elif errno == ENOTSOCK: + raise Error("bind: `socket` is a descriptor for a file, not a socket.") + + # The following errors are specific to UNIX domain (AF_UNIX) sockets. TODO: Pass address_family when unix sockets supported. + # if address_family == AF_UNIX: + # if errno == EACCES: + # raise Error("bind: Search permission is denied on a component of the path prefix. (See also path_resolution(7).)") + # elif errno == EADDRNOTAVAIL: + # raise Error("bind: A nonexistent interface was requested or the requested address was not local.") + # elif errno == EFAULT: + # raise Error("bind: `address` points outside the user's accessible address space.") + # elif errno == EINVAL: + # raise Error("bind: The `address_len` is wrong, or the socket was not in the AF_UNIX family.") + # elif errno == ELOOP: + # raise Error("bind: Too many symbolic links were encountered in resolving addr.") + # elif errno == ENAMETOOLONG: + # raise Error("bind: `address` is too long.") + # elif errno == ENOENT: + # raise Error("bind: The file does not exist.") + # elif errno == ENOMEM: + # raise Error("bind: Insufficient kernel memory was available.") + # elif errno == ENOTDIR: + # raise Error("bind: A component of the path prefix is not a directory.") + # elif errno == EROFS: + # raise Error("bind: The socket inode would reside on a read-only file system.") + + raise Error("bind: An error occurred while binding the socket. Error code: " + str(errno)) + + +fn _listen(socket: c_int, backlog: c_int) -> c_int: + """Libc POSIX `listen` function. + + Args: + socket: A File Descriptor. backlog: The maximum length of the queue of pending connections. - Returns: 0 on success, -1 on error. + + Returns: + 0 on success, -1 on error. + + #### C Function + ```c + int listen(int socket, int backlog) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/listen.3p.html """ return external_call["listen", c_int, c_int, c_int](socket, backlog) -fn accept( +fn listen(socket: c_int, backlog: c_int) raises: + """Libc POSIX `listen` function. + + Args: + socket: A File Descriptor. + backlog: The maximum length of the queue of pending connections. + + Raises: + Error: If an error occurs while listening on the socket. + EADDRINUSE: Another socket is already listening on the same port. + EBADF: `socket` is not a valid descriptor. + ENOTSOCK: `socket` is a descriptor for a file, not a socket. + EOPNOTSUPP: The socket is not of a type that supports the `listen()` operation. + + #### C Function + ```c + int listen(int socket, int backlog) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/listen.3p.html + """ + var result = _listen(socket, backlog) + if result == -1: + var errno = get_errno() + if errno == EADDRINUSE: + raise Error("listen: Another socket is already listening on the same port.") + elif errno == EBADF: + raise Error("listen: `socket` is not a valid descriptor.") + elif errno == ENOTSOCK: + raise Error("listen: `socket` is a descriptor for a file, not a socket.") + elif errno == EOPNOTSUPP: + raise Error("listen: The socket is not of a type that supports the `listen()` operation.") + else: + raise Error("listen: An error occurred while listening on the socket. Error code: " + str(errno)) + + +fn _accept[address_origin: MutableOrigin, len_origin: Origin]( socket: c_int, - address: UnsafePointer[sockaddr], - address_len: UnsafePointer[socklen_t], + address: Pointer[sockaddr, address_origin], + address_len: Pointer[socklen_t, len_origin], ) -> c_int: - """Libc POSIX `accept` function - Reference: https://man7.org/linux/man-pages/man3/accept.3p.html - Fn signature: int accept(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len). + """Libc POSIX `accept` function. - Args: socket: A File Descriptor. + Args: + socket: A File Descriptor. address: A UnsafePointer to a buffer to store the address of the peer. address_len: A UnsafePointer to the size of the buffer. - Returns: A File Descriptor or -1 in case of failure. + + Returns: + A File Descriptor or -1 in case of failure. + + #### C Function + ```c + int accept(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/accept.3p.html """ return external_call[ "accept", c_int, # FnName, RetType c_int, - UnsafePointer[sockaddr], - UnsafePointer[socklen_t], # Args + Pointer[sockaddr, address_origin], + Pointer[socklen_t, len_origin] ](socket, address, address_len) -fn connect( - socket: c_int, address: Reference[sockaddr], address_len: socklen_t -) -> c_int: - """Libc POSIX `connect` function - Reference: https://man7.org/linux/man-pages/man3/connect.3p.html - Fn signature: int connect(int socket, const struct sockaddr *address, socklen_t address_len). +fn accept[address_origin: MutableOrigin, len_origin: Origin]( + socket: c_int, + address: Pointer[sockaddr, address_origin], + address_len: Pointer[socklen_t, len_origin], +) raises -> c_int: + """Libc POSIX `accept` function. + + Args: + socket: A File Descriptor. + address: A UnsafePointer to a buffer to store the address of the peer. + address_len: A UnsafePointer to the size of the buffer. + + Raises: + Error: If an error occurs while listening on the socket. + EAGAIN or EWOULDBLOCK: The socket is marked nonblocking and no connections are present to be accepted. POSIX.1-2001 allows either error to be returned for this case, and does not require these constants to have the same value, so a portable application should check for both possibilities. + EBADF: `socket` is not a valid descriptor. + ECONNABORTED: `socket` is not a valid descriptor. + EFAULT: The `address` argument is not in a writable part of the user address space. + EINTR: The system call was interrupted by a signal that was caught before a valid connection arrived; see `signal(7)`. + EINVAL: Socket is not listening for connections, or `addr_length` is invalid (e.g., is negative). + EMFILE: The per-process limit of open file descriptors has been reached. + ENFILE: The system limit on the total number of open files has been reached. + ENOBUFS or ENOMEM: Not enough free memory. This often means that the memory allocation is limited by the socket buffer limits, not by the system memory. + ENOTSOCK: `socket` is a descriptor for a file, not a socket. + EOPNOTSUPP: The referenced socket is not of type `SOCK_STREAM`. + EPROTO: Protocol error. + + # Linux specific errors + EPERM: Firewall rules forbid connection. + + #### C Function + ```c + int accept(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/accept.3p.html + """ + var result = _accept(socket, address, address_len) + if result == -1: + var errno = get_errno() + if int(errno) in [EAGAIN, EWOULDBLOCK]: + raise Error("accept: The socket is marked nonblocking and no connections are present to be accepted. POSIX.1-2001 allows either error to be returned for this case, and does not require these constants to have the same value, so a portable application should check for both possibilities..") + elif errno == EBADF: + raise Error("accept: `socket` is not a valid descriptor.") + elif errno == ECONNABORTED: + raise Error("accept: `socket` is not a valid descriptor.") + elif errno == EFAULT: + raise Error("accept: The `address` argument is not in a writable part of the user address space.") + elif errno == EINTR: + raise Error("accept: The system call was interrupted by a signal that was caught before a valid connection arrived; see `signal(7)`.") + elif errno == EINVAL: + raise Error("accept: Socket is not listening for connections, or `addr_length` is invalid (e.g., is negative).") + elif errno == EMFILE: + raise Error("accept: The per-process limit of open file descriptors has been reached.") + elif errno == ENFILE: + raise Error("accept: The system limit on the total number of open files has been reached.") + elif int(errno) in [ENOBUFS, ENOMEM]: + raise Error("accept: Not enough free memory. This often means that the memory allocation is limited by the socket buffer limits, not by the system memory.") + elif errno == ENOTSOCK: + raise Error("accept: `socket` is a descriptor for a file, not a socket.") + elif errno == EOPNOTSUPP: + raise Error("accept: The referenced socket is not of type `SOCK_STREAM`.") + elif errno == EPROTO: + raise Error("accept: Protocol error.") + + @parameter + if os_is_linux(): + if errno == EPERM: + raise Error("accept: Firewall rules forbid connection.") + raise Error("accept: An error occurred while listening on the socket. Error code: " + str(errno)) + + return result + +fn _connect[origin: MutableOrigin](socket: c_int, address: Pointer[sockaddr_in, origin], address_len: socklen_t) -> c_int: + """Libc POSIX `connect` function. Args: socket: A File Descriptor. address: A UnsafePointer to the address to connect to. address_len: The size of the address. Returns: 0 on success, -1 on error. + + #### C Function + ```c + int connect(int socket, const struct sockaddr *address, socklen_t address_len) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/connect.3p.html """ return external_call["connect", c_int](socket, address, address_len) -fn recv( +fn connect(socket: c_int, mut address: sockaddr_in, address_len: socklen_t) raises: + """Libc POSIX `connect` function. + + Args: + socket: A File Descriptor. + address: A UnsafePointer to the address to connect to. + address_len: The size of the address. + + Raises: + Error: If an error occurs while connecting to the socket. + EACCES: For UNIX domain sockets, which are identified by pathname: Write permission is denied on the socket file, or search permission is denied for one of the directories in the path prefix. (See also path_resolution(7)). + EADDRINUSE: Local address is already in use. + EAGAIN: No more free local ports or insufficient entries in the routing cache. + EALREADY: The socket is nonblocking and a previous connection attempt has not yet been completed. + EBADF: The file descriptor is not a valid index in the descriptor table. + ECONNREFUSED: No-one listening on the remote address. + EFAULT: The socket structure address is outside the user's address space. + EINPROGRESS: The socket is nonblocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completion by selecting the socket for writing. After select(2) indicates writability, use getsockopt(2) to read the SO_ERROR option at level SOL_SOCKET to determine whether connect() completed successfully (SO_ERROR is zero) or unsuccessfully (SO_ERROR is one of the usual error codes listed here, explaining the reason for the failure). + EINTR: The system call was interrupted by a signal that was caught. + EISCONN: The socket is already connected. + ENETUNREACH: Network is unreachable. + ENOTSOCK: The file descriptor is not associated with a socket. + EAFNOSUPPORT: The passed address didn't have the correct address family in its `sa_family` field. + ETIMEDOUT: Timeout while attempting connection. The server may be too busy to accept new connections. + + #### C Function + ```c + int connect(int socket, const struct sockaddr *address, socklen_t address_len) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/connect.3p.html + """ + var result = _connect(socket, Pointer.address_of(address), address_len) + if result == -1: + var errno = get_errno() + if errno == EACCES: + raise Error("connect: For UNIX domain sockets, which are identified by pathname: Write permission is denied on the socket file, or search permission is denied for one of the directories in the path prefix. (See also path_resolution(7)).") + elif errno == EADDRINUSE: + raise Error("connect: Local address is already in use.") + elif errno == EAGAIN: + raise Error("connect: No more free local ports or insufficient entries in the routing cache.") + elif errno == EALREADY: + raise Error("connect: The socket is nonblocking and a previous connection attempt has not yet been completed.") + elif errno == EBADF: + raise Error("connect: The file descriptor is not a valid index in the descriptor table.") + elif errno == ECONNREFUSED: + raise Error("connect: No-one listening on the remote address.") + elif errno == EFAULT: + raise Error("connect: The socket structure address is outside the user's address space.") + elif errno == EINPROGRESS: + raise Error("connect: The socket is nonblocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completion by selecting the socket for writing. After select(2) indicates writability, use getsockopt(2) to read the SO_ERROR option at level SOL_SOCKET to determine whether connect() completed successfully (SO_ERROR is zero) or unsuccessfully (SO_ERROR is one of the usual error codes listed here, explaining the reason for the failure).") + elif errno == EINTR: + raise Error("connect: The system call was interrupted by a signal that was caught.") + elif errno == EISCONN: + raise Error("connect: The socket is already connected.") + elif errno == ENETUNREACH: + raise Error("connect: Network is unreachable.") + elif errno == ENOTSOCK: + raise Error("connect: The file descriptor is not associated with a socket.") + elif errno == EAFNOSUPPORT: + raise Error("connect: The passed address didn't have the correct address family in its `sa_family` field.") + elif errno == ETIMEDOUT: + raise Error("connect: Timeout while attempting connection. The server may be too busy to accept new connections.") + else: + raise Error("connect: An error occurred while connecting to the socket. Error code: " + str(errno)) + + +fn _recv( socket: c_int, buffer: UnsafePointer[UInt8], length: c_size_t, flags: c_int, ) -> c_ssize_t: - """Libc POSIX `recv` function - Reference: https://man7.org/linux/man-pages/man3/recv.3p.html - Fn signature: ssize_t recv(int socket, void *buffer, size_t length, int flags). + """Libc POSIX `recv` function. + + Args: + socket: A File Descriptor. + buffer: A UnsafePointer to the buffer to store the received data. + length: The size of the buffer. + flags: Flags to control the behaviour of the function. + + Returns: + The number of bytes received or -1 in case of failure. + + #### C Function + ```c + ssize_t recv(int socket, void *buffer, size_t length, int flags) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/recv.3p.html """ return external_call[ "recv", @@ -674,81 +1245,256 @@ fn recv( ](socket, buffer, length, flags) -fn send( - socket: c_int, buffer: UnsafePointer[c_void], length: c_size_t, flags: c_int -) -> c_ssize_t: - """Libc POSIX `send` function - Reference: https://man7.org/linux/man-pages/man3/send.3p.html - Fn signature: ssize_t send(int socket, const void *buffer, size_t length, int flags). +fn recv( + socket: c_int, + buffer: UnsafePointer[UInt8], + length: c_size_t, + flags: c_int, +) raises -> c_ssize_t: + """Libc POSIX `recv` function. - Args: socket: A File Descriptor. + Args: + socket: A File Descriptor. + buffer: A UnsafePointer to the buffer to store the received data. + length: The size of the buffer. + flags: Flags to control the behaviour of the function. + + Returns: + The number of bytes received. + + #### C Function + ```c + ssize_t recv(int socket, void *buffer, size_t length, int flags) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/recv.3p.html + """ + var result = _recv(socket, buffer, length, flags) + if result == -1: + var errno = get_errno() + if int(errno) in [EAGAIN, EWOULDBLOCK]: + raise Error("ReceiveError: The socket is marked nonblocking and the receive operation would block, or a receive timeout had been set and the timeout expired before data was received.") + elif errno == EBADF: + raise Error("ReceiveError: The argument `socket` is an invalid descriptor.") + elif errno == ECONNREFUSED: + raise Error("ReceiveError: The remote host refused to allow the network connection (typically because it is not running the requested service).") + elif errno == EFAULT: + raise Error("ReceiveError: `buffer` points outside the process's address space.") + elif errno == EINTR: + raise Error("ReceiveError: The receive was interrupted by delivery of a signal before any data were available.") + elif errno == ENOTCONN: + raise Error("ReceiveError: The socket is not connected.") + elif errno == ENOTSOCK: + raise Error("ReceiveError: The file descriptor is not associated with a socket.") + else: + raise Error("ReceiveError: An error occurred while attempting to receive data from the socket. Error code: " + str(errno)) + + return result + + +fn _send(socket: c_int, buffer: UnsafePointer[c_void], length: c_size_t, flags: c_int) -> c_ssize_t: + """Libc POSIX `send` function. + + Args: + socket: A File Descriptor. buffer: A UnsafePointer to the buffer to send. length: The size of the buffer. flags: Flags to control the behaviour of the function. - Returns: The number of bytes sent or -1 in case of failure. + + Returns: + The number of bytes sent or -1 in case of failure. + + #### C Function + ```c + ssize_t send(int socket, const void *buffer, size_t length, int flags) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/send.3p.html """ return external_call["send", c_ssize_t](socket, buffer, length, flags) -fn shutdown(socket: c_int, how: c_int) -> c_int: - """Libc POSIX `shutdown` function - Reference: https://man7.org/linux/man-pages/man3/shutdown.3p.html - Fn signature: int shutdown(int socket, int how). +fn send(socket: c_int, buffer: UnsafePointer[c_void], length: c_size_t, flags: c_int) raises -> c_ssize_t: + """Libc POSIX `send` function. - Args: socket: A File Descriptor. + Args: + socket: A File Descriptor. + buffer: A UnsafePointer to the buffer to send. + length: The size of the buffer. + flags: Flags to control the behaviour of the function. + + Returns: + The number of bytes sent or -1 in case of failure. + + Raises: + Error: If an error occurs while attempting to receive data from the socket. + EAGAIN or EWOULDBLOCK: The socket is marked nonblocking and the receive operation would block, or a receive timeout had been set and the timeout expired before data was received. + EBADF: The argument `socket` is an invalid descriptor. + ECONNRESET: Connection reset by peer. + EDESTADDRREQ: The socket is not connection-mode, and no peer address is set. + ECONNREFUSED: The remote host refused to allow the network connection (typically because it is not running the requested service). + EFAULT: `buffer` points outside the process's address space. + EINTR: The receive was interrupted by delivery of a signal before any data were available. + EINVAL: Invalid argument passed. + EISCONN: The connection-mode socket was connected already but a recipient was specified. + EMSGSIZE: The socket type requires that message be sent atomically, and the size of the message to be sent made this impossible. + ENOBUFS: The output queue for a network interface was full. This generally indicates that the interface has stopped sending, but may be caused by transient congestion. + ENOMEM: No memory available. + ENOTCONN: The socket is not connected. + ENOTSOCK: The file descriptor is not associated with a socket. + EOPNOTSUPP: Some bit in the flags argument is inappropriate for the socket type. + EPIPE: The local end has been shut down on a connection oriented socket. In this case the process will also receive a SIGPIPE unless MSG_NOSIGNAL is set. + + #### C Function + ```c + ssize_t send(int socket, const void *buffer, size_t length, int flags) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/send.3p.html + """ + var result = _send(socket, buffer, length, flags) + if result == -1: + var errno = get_errno() + if int(errno) in [EAGAIN, EWOULDBLOCK]: + raise Error("SendError: The socket is marked nonblocking and the receive operation would block, or a receive timeout had been set and the timeout expired before data was received.") + elif errno == EBADF: + raise Error("SendError: The argument `socket` is an invalid descriptor.") + elif errno == EAGAIN: + raise Error("SendError: No more free local ports or insufficient entries in the routing cache.") + elif errno == ECONNRESET: + raise Error("SendError: Connection reset by peer.") + elif errno == EDESTADDRREQ: + raise Error("SendError: The socket is not connection-mode, and no peer address is set.") + elif errno == ECONNREFUSED: + raise Error("SendError: The remote host refused to allow the network connection (typically because it is not running the requested service).") + elif errno == EFAULT: + raise Error("SendError: `buffer` points outside the process's address space.") + elif errno == EINTR: + raise Error("SendError: The receive was interrupted by delivery of a signal before any data were available.") + elif errno == EINVAL: + raise Error("SendError: Invalid argument passed.") + elif errno == EISCONN: + raise Error("SendError: The connection-mode socket was connected already but a recipient was specified.") + elif errno == EMSGSIZE: + raise Error("SendError: The socket type requires that message be sent atomically, and the size of the message to be sent made this impossible..") + elif errno == ENOBUFS: + raise Error("SendError: The output queue for a network interface was full. This generally indicates that the interface has stopped sending, but may be caused by transient congestion.") + elif errno == ENOMEM: + raise Error("SendError: No memory available.") + elif errno == ENOTCONN: + raise Error("SendError: The socket is not connected.") + elif errno == ENOTSOCK: + raise Error("SendError: The file descriptor is not associated with a socket.") + elif errno == EOPNOTSUPP: + raise Error("SendError: Some bit in the flags argument is inappropriate for the socket type.") + elif errno == EPIPE: + raise Error("SendError: The local end has been shut down on a connection oriented socket. In this case the process will also receive a SIGPIPE unless MSG_NOSIGNAL is set.") + else: + raise Error("SendError: An error occurred while attempting to receive data from the socket. Error code: " + str(errno)) + + return result + + +fn _shutdown(socket: c_int, how: c_int) -> c_int: + """Libc POSIX `shutdown` function. + + Args: + socket: A File Descriptor. how: How to shutdown the socket. - Returns: 0 on success, -1 on error. + + Returns: + 0 on success, -1 on error. + + #### C Function + ```c + int shutdown(int socket, int how) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/shutdown.3p.html """ - return external_call[ - "shutdown", c_int, c_int, c_int - ]( # FnName, RetType # Args - socket, how - ) + return external_call["shutdown", c_int, c_int, c_int](socket, how) -fn getaddrinfo( - nodename: UnsafePointer[c_char], - servname: UnsafePointer[c_char], - hints: UnsafePointer[addrinfo], - res: UnsafePointer[UnsafePointer[addrinfo]], -) -> c_int: - """Libc POSIX `getaddrinfo` function - Reference: https://man7.org/linux/man-pages/man3/getaddrinfo.3p.html - Fn signature: int getaddrinfo(const char *restrict nodename, const char *restrict servname, const struct addrinfo *restrict hints, struct addrinfo **restrict res). +fn shutdown(socket: c_int, how: c_int) raises: + """Libc POSIX `shutdown` function. + + Args: + socket: A File Descriptor. + how: How to shutdown the socket. + + Raises: + Error: If an error occurs while attempting to receive data from the socket. + EBADF: The argument `socket` is an invalid descriptor. + EINVAL: Invalid argument passed. + ENOTCONN: The socket is not connected. + ENOTSOCK: The file descriptor is not associated with a socket. + + #### C Function + ```c + int shutdown(int socket, int how) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/shutdown.3p.html """ - return external_call[ - "getaddrinfo", - c_int, # FnName, RetType - UnsafePointer[c_char], - UnsafePointer[c_char], - UnsafePointer[addrinfo], # Args - UnsafePointer[UnsafePointer[addrinfo]], # Args - ](nodename, servname, hints, res) + var result = _shutdown(socket, how) + if result == -1: + var errno = get_errno() + if errno == EBADF: + raise Error("ShutdownError: The argument `socket` is an invalid descriptor.") + elif errno == EINVAL: + raise Error("ShutdownError: Invalid argument passed.") + elif errno == ENOTCONN: + raise Error("ShutdownError: The socket is not connected.") + elif errno == ENOTSOCK: + raise Error("ShutdownError: The file descriptor is not associated with a socket.") + else: + raise Error("ShutdownError: An error occurred while attempting to receive data from the socket. Error code: " + str(errno)) fn gai_strerror(ecode: c_int) -> UnsafePointer[c_char]: - """Libc POSIX `gai_strerror` function - Reference: https://man7.org/linux/man-pages/man3/gai_strerror.3p.html - Fn signature: const char *gai_strerror(int ecode). + """Libc POSIX `gai_strerror` function. + + Args: + ecode: The error code. + + Returns: + A UnsafePointer to a string describing the error. + + #### C Function + ```c + const char *gai_strerror(int ecode) + ``` - Args: ecode: The error code. - Returns: A UnsafePointer to a string describing the error. + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/gai_strerror.3p.html """ - return external_call[ - "gai_strerror", UnsafePointer[c_char], c_int # FnName, RetType # Args - ](ecode) + return external_call["gai_strerror", UnsafePointer[c_char], c_int](ecode) + +fn inet_pton(address_family: Int, address: String) raises -> Int: + """Converts an IP address from text to binary form. -fn inet_pton(address_family: Int, address: String) -> Int: + Args: + address_family: The address family (AF_INET or AF_INET6). + address: The IP address in text form. + + Returns: + The IP address in binary form. + """ var ip_buf_size = 4 if address_family == AF_INET6: ip_buf_size = 16 var ip_buf = UnsafePointer[c_void].alloc(ip_buf_size) - var conv_status = inet_pton( - rebind[c_int](address_family), to_char_ptr(address), ip_buf - ) - return int(ip_buf.bitcast[c_uint]()) + inet_pton(rebind[c_int](address_family), address.unsafe_ptr(), ip_buf) + var result = int(ip_buf.bitcast[c_uint]()) + ip_buf.free() + return result # --- ( File Related Syscalls & Structs )--------------------------------------- @@ -757,10 +1503,8 @@ alias O_ACCMODE = 3 alias O_CLOEXEC = 524288 -fn close(fildes: c_int) -> c_int: - """Libc POSIX `close` function - Reference: https://man7.org/linux/man-pages/man3/close.3p.html - Fn signature: int close(int fildes). +fn _close(fildes: c_int) -> c_int: + """Libc POSIX `close` function. Args: fildes: A File Descriptor to close. @@ -768,169 +1512,69 @@ fn close(fildes: c_int) -> c_int: Returns: Upon successful completion, 0 shall be returned; otherwise, -1 shall be returned and errno set to indicate the error. + + #### C Function + ```c + int close(int fildes). + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/close.3p.html """ return external_call["close", c_int, c_int](fildes) -fn open[ - *T: AnyType -](path: UnsafePointer[c_char], oflag: c_int, *args: *T) -> c_int: - """Libc POSIX `open` function - Reference: https://man7.org/linux/man-pages/man3/open.3p.html - Fn signature: int open(const char *path, int oflag, ...). +fn close(fildes: c_int) raises: + """Libc POSIX `close` function. Args: - path: A UnsafePointer to a C string containing the path to open. - oflag: The flags to open the file with. - args: The optional arguments. - Returns: - A File Descriptor or -1 in case of failure - """ - return external_call["open", c_int](path, oflag, args) - - -fn printf[*T: AnyType](format: UnsafePointer[c_char], *args: *T) -> c_int: - """Libc POSIX `printf` function - Reference: https://man7.org/linux/man-pages/man3/fprintf.3p.html - Fn signature: int printf(const char *restrict format, ...). - - Args: format: A UnsafePointer to a C string containing the format. - args: The optional arguments. - Returns: The number of bytes written or -1 in case of failure. + fildes: A File Descriptor to close. + + Raises: + SocketError: If an error occurs while creating the socket. + EACCES: Permission to create a socket of the specified type and/or protocol is denied. + EAFNOSUPPORT: The implementation does not support the specified address family. + EINVAL: Invalid flags in type, Unknown protocol, or protocol family not available. + EMFILE: The per-process limit on the number of open file descriptors has been reached. + ENFILE: The system-wide limit on the total number of open files has been reached. + ENOBUFS or ENOMEM: Insufficient memory is available. The socket cannot be created until sufficient resources are freed. + EPROTONOSUPPORT: The protocol type or the specified protocol is not supported within this domain. + + #### C Function + ```c + int close(int fildes) + ``` + + #### Notes: + * Reference: https://man7.org/linux/man-pages/man3/close.3p.html """ - return external_call[ - "printf", - c_int, # FnName, RetType - ](format, args) - + if _close(fildes) == -1: + var errno = get_errno() + if errno == EBADF: + raise Error("CloseError (EBADF): The fildes argument is not a valid open file descriptor.") + elif errno == EINTR: + raise Error("CloseError (EINTR): The close() function was interrupted by a signal.") + elif errno == EIO: + raise Error("CloseError (EIO): An I/O error occurred while reading from or writing to the file system.") + elif int(errno) in [ENOSPC, EDQUOT]: + raise Error("CloseError (ENOSPC or EDQUOT): On NFS, these errors are not normally reported against the first write which exceeds the available storage space, but instead against a subsequent write(2), fsync(2), or close().") + else: + raise Error("SocketError: An error occurred while creating the socket. Error code: " + str(errno)) + + +fn get_errno() -> c_int: + """Get a copy of the current value of the `errno` global variable for + the current thread. -fn read(fildes: c_int, buf: UnsafePointer[c_void], nbyte: c_size_t) -> c_int: - """Libc POSIX `read` function - Reference: https://man7.org/linux/man-pages/man3/read.3p.html - Fn signature: sssize_t read(int fildes, void *buf, size_t nbyte). - - Args: fildes: A File Descriptor. - buf: A UnsafePointer to a buffer to store the read data. - nbyte: The number of bytes to read. - Returns: The number of bytes read or -1 in case of failure. + Returns: + A copy of the current value of `errno` for the current thread. """ - return external_call[ - "read", c_ssize_t, c_int, UnsafePointer[c_void], c_size_t - ](fildes, buf, nbyte) - -fn write(fildes: c_int, buf: UnsafePointer[c_void], nbyte: c_size_t) -> c_int: - """Libc POSIX `write` function - Reference: https://man7.org/linux/man-pages/man3/write.3p.html - Fn signature: ssize_t write(int fildes, const void *buf, size_t nbyte). - - Args: fildes: A File Descriptor. - buf: A UnsafePointer to a buffer to write. - nbyte: The number of bytes to write. - Returns: The number of bytes written or -1 in case of failure. - """ - return external_call[ - "write", c_ssize_t, c_int, UnsafePointer[c_void], c_size_t - ](fildes, buf, nbyte) - - -struct fd_set: - var fds_bits: StaticTuple[Int64, 16] - - fn __init__(inout self): - self.fds_bits = StaticTuple[Int64, 16]() - for i in range(16): - self.fds_bits[i] = 0 - - fn set(inout self, fd: Int): - var word = fd // 64 - var bit = fd % 64 - self.fds_bits[word] |= 1 << bit - print("Set fd", fd, "word:", word, "bit:", bit) - - fn clear(inout self, fd: Int): - var word = fd // 64 - var bit = fd % 64 - self.fds_bits[word] &= ~(1 << bit) - print("Cleared fd", fd, "word:", word, "bit:", bit) - - fn is_set(self, fd: Int) -> Bool: - var word = fd // 64 - var bit = fd % 64 - var result = (self.fds_bits[word] & (1 << bit)) != 0 - print("Checking fd", fd, "word:", word, "bit:", bit, "result:", result) - return result - - fn clear_all(inout self): - for i in range(16): - self.fds_bits[i] = 0 - print("Cleared all fds") - - fn print_bits(self): - for i in range(16): - print("Word", i, ":", bin(self.fds_bits[i])) - - -struct timeval: - var tv_sec: Int64 - var tv_usec: Int64 - - fn __init__(inout self, seconds: Int64, microseconds: Int64): - self.tv_sec = seconds - self.tv_usec = microseconds - - -fn select( - nfds: c_int, - readfds: UnsafePointer[fd_set], - writefds: UnsafePointer[fd_set], - exceptfds: UnsafePointer[fd_set], - timeout: UnsafePointer[timeval], -) -> c_int: - """Libc POSIX `select` function - Reference: https://man7.org/linux - Fn signature: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout). - - Args: nfds: The highest-numbered file descriptor in any of the three sets, plus 1. - readfds: A UnsafePointer to the set of file descriptors to read from. - writefds: A UnsafePointer to the set of file descriptors to write to. - exceptfds: A UnsafePointer to the set of file descriptors to check for exceptions. - timeout: A UnsafePointer to a timeval struct to set a timeout. - Returns: The number of file descriptors in the sets or -1 in case of failure. - """ - print("selecting") - return external_call[ - "select", - c_int, # FnName, RetType - c_int, - UnsafePointer[fd_set], - UnsafePointer[fd_set], - UnsafePointer[fd_set], - UnsafePointer[timeval], # Args - ](nfds, readfds, writefds, exceptfds, timeout) - - -fn __test_getaddrinfo__(): - var ip_addr = "127.0.0.1" - var port = 8083 - - var servinfo = UnsafePointer[addrinfo]().alloc(1) - servinfo[0] = addrinfo() - - var hints = addrinfo() - hints.ai_family = AF_INET - hints.ai_socktype = SOCK_STREAM - hints.ai_flags = AI_PASSIVE - - var status = getaddrinfo( - to_char_ptr(ip_addr), - UnsafePointer[UInt8](), - UnsafePointer.address_of(hints), - UnsafePointer.address_of(servinfo), - ) - var msg_ptr = gai_strerror(c_int(status)) - _ = external_call[ - "printf", c_int, UnsafePointer[c_char], UnsafePointer[c_char] - ](to_char_ptr("gai_strerror: %s"), msg_ptr) - var msg = c_charptr_to_string(msg_ptr) - print("getaddrinfo satus: " + msg) + @parameter + if os_is_windows(): + var errno = stack_allocation[1, c_int]() + _ = external_call["_get_errno", c_void](errno) + return errno[] + else: + alias loc = "__error" if os_is_macos() else "__errno_location" + return external_call[loc, UnsafePointer[c_int]]()[] diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index 7191eee..286cb18 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -1,8 +1,8 @@ import . _cffi as _c from pathlib import Path from os import PathLike -from utils import Span, StaticString, StringSlice -from memory import Arc, UnsafePointer +from utils import StaticString, StringSlice +from memory import Span, ArcPointer, UnsafePointer from ._cffi import TlsVersion, LogLevel @@ -166,7 +166,7 @@ struct ClientConfigBuilder: _c.client_config_builder_free(self._handle) fn set_alpn_protocols[ - lt: ImmutableLifetime + lt: Origin ](inout self, protocols: Span[Span[UInt8, lt]]) raises: protocols_ = List[_c.SliceBytes](capacity=len(protocols)) for p in protocols: @@ -186,7 +186,7 @@ struct ClientConfigBuilder: _c.client_config_builder_set_enable_sni(self._handle, enable) fn set_certified_key( - inout self, certified_keys: Span[Arc[CertifiedKey]] + inout self, certified_keys: Span[ArcPointer[CertifiedKey]] ) raises: keys = List[UnsafePointer[_c.CertifiedKey]]( capacity=len(certified_keys) @@ -513,7 +513,7 @@ struct ServerConfigBuilder: raise Error("failed to set alpn protocol" + str(result.value)) fn set_certified_keys( - inout self, certified_keys: Span[Arc[CertifiedKey]] + inout self, certified_keys: Span[ArcPointer[CertifiedKey]] ) raises: """ Provide the configuration a list of certificates where the connection @@ -642,6 +642,9 @@ struct SupportedCiphersuitesIterator: ) self.index += 1 return result + + fn __has_next__(self) -> Bool: + return self.index < self.len fn __len__(self) -> Int: return self.len - self.index diff --git a/src/rustls/_cffi.mojo b/src/rustls/_cffi.mojo index dfed214..2a81a00 100644 --- a/src/rustls/_cffi.mojo +++ b/src/rustls/_cffi.mojo @@ -912,13 +912,13 @@ fn acceptor_accept( `rustls_acceptor` is acceptable from a memory perspective but pointless from a protocol perspective. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[Acceptor], UnsafePointer[UnsafePointer[Accepted]], UnsafePointer[UnsafePointer[AcceptedAlert]], ) -> UInt32 - ]("rustls_acceptor_accept")(acceptor, out_accepted, out_alert) + ]("rustls_acceptor_accept")(acceptor, out_accepted, out_alert)) fn accepted_server_name(accepted: UnsafePointer[Accepted]) -> StringRef: @@ -1248,7 +1248,7 @@ fn certified_key_build( `rustls_certified_key`'s memory will automatically be released when the `rustls_server_config` is freed. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[UInt8], Int, @@ -1262,7 +1262,7 @@ fn certified_key_build( private_key, private_key_len, certified_key_out, - ) + )) fn certified_key_build_with_signing_key( @@ -1301,7 +1301,7 @@ fn certified_key_build_with_signing_key( `rustls_certified_key`'s memory will automatically be released when the `rustls_server_config` is freed. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[UInt8], Int, @@ -1310,7 +1310,7 @@ fn certified_key_build_with_signing_key( ) -> UInt32 ]("rustls_certified_key_build_with_signing_key")( cert_chain, cert_chain_len, signing_key, certified_key - ) + )) fn certified_key_get_certificate( @@ -1345,7 +1345,7 @@ fn certified_key_clone_with_ocsp( The cloned key is independent from its original and needs to be freed by the application. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[CertifiedKey], UnsafePointer[SliceBytes], @@ -1353,7 +1353,7 @@ fn certified_key_clone_with_ocsp( ) -> UInt32 ]("rustls_certified_key_clone_with_ocsp")( certified_key, ocsp_response, cloned_key_out - ) + )) fn certified_key_free(key: UnsafePointer[CertifiedKey]): @@ -1404,11 +1404,11 @@ fn root_cert_store_builder_add_pem( This may be useful on systems that have syntactically invalid root certificates. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[RootCertStoreBuilder], UnsafePointer[UInt8], Int, Bool ) -> UInt32 - ]("rustls_root_cert_store_builder_add_pem")(builder, pem, pem_len, strict) + ]("rustls_root_cert_store_builder_add_pem")(builder, pem, pem_len, strict)) fn root_cert_store_builder_load_roots_from_file( @@ -1427,7 +1427,7 @@ fn root_cert_store_builder_load_roots_from_file( This may be useful on systems that have syntactically invalid root certificates. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[RootCertStoreBuilder], UnsafePointer[Int8], @@ -1435,7 +1435,7 @@ fn root_cert_store_builder_load_roots_from_file( ) -> UInt32 ]("rustls_root_cert_store_builder_load_roots_from_file")( builder, filename, strict - ) + )) fn root_cert_store_builder_build( @@ -1451,12 +1451,12 @@ fn root_cert_store_builder_build( instances and must be freed by the application when no longer needed. See the documentation of `rustls_root_cert_store_free` for details about lifetime. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[RootCertStoreBuilder], UnsafePointer[UnsafePointer[RootCertStore]], ) -> UInt32 - ]("rustls_root_cert_store_builder_build")(builder, root_cert_store_out) + ]("rustls_root_cert_store_builder_build")(builder, root_cert_store_out)) fn root_cert_store_builder_free( @@ -1587,7 +1587,7 @@ fn web_pki_client_cert_verifier_builder_add_crl( This function returns an error if the provided buffer is not valid PEM encoded content. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[WebPkiClientCertVerifierBuilder], UnsafePointer[UInt8], @@ -1595,7 +1595,7 @@ fn web_pki_client_cert_verifier_builder_add_crl( ) -> UInt32 ]("rustls_web_pki_client_cert_verifier_builder_add_crl")( builder, crl_pem, crl_pem_len - ) + )) fn web_pki_client_cert_verifier_only_check_end_entity_revocation( @@ -1606,11 +1606,11 @@ fn web_pki_client_cert_verifier_only_check_end_entity_revocation( check the revocation status of end entity certificates, ignoring any intermediate certificates in the chain. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn (UnsafePointer[WebPkiClientCertVerifierBuilder],) -> UInt32 ]("rustls_web_pki_client_cert_verifier_only_check_end_entity_revocation")( builder - ) + )) fn web_pki_client_cert_verifier_allow_unknown_revocation_status( @@ -1635,11 +1635,11 @@ fn web_pki_client_cert_verifier_builder_allow_unauthenticated( Allow unauthenticated anonymous clients in addition to those that present a client certificate that chains to one of the verifier's configured trust anchors. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn (UnsafePointer[WebPkiClientCertVerifierBuilder]) -> UInt32 ]("rustls_web_pki_client_cert_verifier_builder_allow_unauthenticated")( builder - ) + )) fn web_pki_client_cert_verifier_clear_root_hint_subjects( @@ -1653,9 +1653,9 @@ fn web_pki_client_cert_verifier_clear_root_hint_subjects( hint subjects, indicating the client should make a free choice of which certificate to send. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn (UnsafePointer[WebPkiClientCertVerifierBuilder],) -> UInt32 - ]("rustls_web_pki_client_cert_verifier_clear_root_hint_subjects")(builder) + ]("rustls_web_pki_client_cert_verifier_clear_root_hint_subjects")(builder)) fn web_pki_client_cert_verifier_add_root_hint_subjects( @@ -1671,14 +1671,14 @@ fn web_pki_client_cert_verifier_add_root_hint_subjects( effect, use `rustls_web_pki_client_cert_verifier_clear_root_hint_subjects` to clear the subject hints. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[WebPkiClientCertVerifierBuilder], UnsafePointer[RootCertStore], ) -> UInt32 ]("rustls_web_pki_client_cert_verifier_add_root_hint_subjects")( builder, store - ) + )) fn web_pki_client_cert_verifier_builder_build( @@ -1694,14 +1694,14 @@ fn web_pki_client_cert_verifier_builder_build( freed by the application when no longer needed. See the documentation of `rustls_web_pki_client_cert_verifier_builder_free` for details about lifetime. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[WebPkiClientCertVerifierBuilder], UnsafePointer[UnsafePointer[ClientCertVerifier]], ) -> UInt32 ]("rustls_web_pki_client_cert_verifier_builder_build")( builder, verifier_out - ) + )) fn web_pki_client_cert_verifier_builder_free( @@ -1800,7 +1800,7 @@ fn web_pki_server_cert_verifier_builder_add_crl( This function returns an error if the provided buffer is not valid PEM encoded content. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[WebPkiServerCertVerifierBuilder], UnsafePointer[UInt8], @@ -1808,7 +1808,7 @@ fn web_pki_server_cert_verifier_builder_add_crl( ) -> UInt32 ]("rustls_web_pki_server_cert_verifier_builder_add_crl")( builder, crl_pem, crl_pem_len - ) + )) fn web_pki_server_cert_verifier_only_check_end_entity_revocation( @@ -1819,11 +1819,11 @@ fn web_pki_server_cert_verifier_only_check_end_entity_revocation( check the revocation status of end entity certificates, ignoring any intermediate certificates in the chain. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn (UnsafePointer[WebPkiServerCertVerifierBuilder]) -> UInt32 ]("rustls_web_pki_server_cert_verifier_only_check_end_entity_revocation")( builder - ) + )) fn web_pki_server_cert_verifier_allow_unknown_revocation_status( @@ -1836,11 +1836,11 @@ fn web_pki_server_cert_verifier_allow_unknown_revocation_status( Overrides the default behavior where unknown revocation status is considered an error. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn (UnsafePointer[WebPkiServerCertVerifierBuilder]) -> UInt32 ]("rustls_web_pki_server_cert_verifier_allow_unknown_revocation_status")( builder - ) + )) fn web_pki_server_cert_verifier_builder_build( @@ -1856,14 +1856,14 @@ fn web_pki_server_cert_verifier_builder_build( freed by the application when no longer needed. See the documentation of `rustls_web_pki_server_cert_verifier_builder_free` for details about lifetime. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[WebPkiServerCertVerifierBuilder], UnsafePointer[UnsafePointer[ServerCertVerifier]], ) -> UInt32 ]("rustls_web_pki_server_cert_verifier_builder_build")( builder, verifier_out - ) + )) fn web_pki_server_cert_verifier_builder_free( @@ -1893,9 +1893,9 @@ fn platform_server_cert_verifier( [`rustls-platform-verifier`]: https://github.com/rustls/rustls-platform-verifier """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn (UnsafePointer[UnsafePointer[ServerCertVerifier]],) -> UInt32 - ]("rustls_platform_server_cert_verifier")(verifier_out) + ]("rustls_platform_server_cert_verifier")(verifier_out)) fn platform_server_cert_verifier_with_provider( @@ -1979,7 +1979,7 @@ fn client_config_builder_new_custom( Ciphersuites are configured separately via the crypto provider. See `rustls_crypto_provider_builder_set_cipher_suites` for more information. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[CryptoProvider], UnsafePointer[UInt16], @@ -1988,7 +1988,7 @@ fn client_config_builder_new_custom( ) -> UInt32 ]("rustls_client_config_builder_new_custom")( provider, tls_versions, tls_versions_len, builder_out - ) + )) fn client_config_builder_dangerous_set_certificate_verifier( @@ -2024,14 +2024,14 @@ fn client_config_builder_dangerous_set_certificate_verifier( """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[ClientConfigBuilder], VerifyServerCertCallback, ) -> UInt32 ]("rustls_client_config_builder_dangerous_set_certificate_verifier")( config_builder, callback - ) + )) fn client_config_builder_set_server_verifier( @@ -2073,13 +2073,13 @@ fn client_config_builder_set_alpn_protocols( """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[ClientConfigBuilder], UnsafePointer[SliceBytes], Int, ) -> UInt32 - ]("rustls_client_config_builder_set_alpn_protocols")(builder, protocol, len) + ]("rustls_client_config_builder_set_alpn_protocols")(builder, protocol, len)) fn client_config_builder_set_enable_sni( @@ -2115,7 +2115,7 @@ fn client_config_builder_set_certified_key( EXPERIMENTAL: installing a client authentication callback will replace any configured certified keys and vice versa. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[ClientConfigBuilder], UnsafePointer[UnsafePointer[CertifiedKey]], @@ -2123,7 +2123,7 @@ fn client_config_builder_set_certified_key( ) -> UInt32 ]("rustls_client_config_builder_set_certified_key")( builder, certified_keys, certified_keys_len - ) + )) fn client_config_builder_build( @@ -2134,12 +2134,12 @@ fn client_config_builder_build( Turn a *rustls_client_config_builder (mutable) into a const *rustls_client_config (read-only). """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[ClientConfigBuilder], UnsafePointer[UnsafePointer[ClientConfig]], ) -> UInt32 - ]("rustls_client_config_builder_build")(builder, config_out) + ]("rustls_client_config_builder_build")(builder, config_out)) fn client_config_builder_free( @@ -2488,14 +2488,14 @@ fn connection_write( (this may be less than `count`). """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int], ) -> UInt32 - ]("rustls_connection_write")(conn, buf, count, out_n) + ]("rustls_connection_write")(conn, buf, count, out_n)) fn connection_read( @@ -2518,14 +2518,14 @@ fn connection_read( multiple times without zeroizing before each call is fine. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int], ) -> UInt32 - ]("rustls_connection_read")(conn, buf, count, out_n) + ]("rustls_connection_read")(conn, buf, count, out_n)) fn connection_free(conn: UnsafePointer[Connection]): @@ -2572,7 +2572,7 @@ fn crypto_provider_builder_new_from_default( res = _rustls.get_function[ fn (UnsafePointer[UnsafePointer[CryptoProviderBuilder]]) -> UInt32 ]("rustls_crypto_provider_builder_new_from_default")(builder_out) - return res + return Result(res) fn crypto_provider_builder_new_with_base( @@ -2619,7 +2619,7 @@ fn crypto_provider_builder_set_cipher_suites( Returns an error if the builder has already been built. Overwrites any previously set ciphersuites. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[CryptoProviderBuilder], UnsafePointer[UnsafePointer[SupportedCiphersuite]], @@ -2627,7 +2627,7 @@ fn crypto_provider_builder_set_cipher_suites( ) -> UInt32 ]("rustls_crypto_provider_builder_set_cipher_suites")( builder, cipher_suites, cipher_suites_len - ) + )) fn crypto_provider_builder_build( @@ -2642,12 +2642,12 @@ fn crypto_provider_builder_build( for further calls, except to `rustls_crypto_provider_builder_free`. The caller must still free the builder after a successful build. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[CryptoProviderBuilder], UnsafePointer[UnsafePointer[CryptoProvider]], ) -> UInt32 - ]("rustls_crypto_provider_builder_build")(builder, provider_out) + ]("rustls_crypto_provider_builder_build")(builder, provider_out)) fn crypto_provider_builder_build_as_default( @@ -2666,9 +2666,9 @@ fn crypto_provider_builder_build_as_default( for further calls, except to `rustls_crypto_provider_builder_free`. The caller must still free the builder after a successful build. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn (UnsafePointer[CryptoProviderBuilder]) -> UInt32 - ]("rustls_crypto_provider_builder_build_as_default")(builder) + ]("rustls_crypto_provider_builder_build_as_default")(builder)) fn crypto_provider_builder_free( @@ -2776,7 +2776,7 @@ fn crypto_provider_load_key( is written to `signing_key_out`. The caller owns the returned `rustls_signing_key` and must free it with `rustls_signing_key_free`. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[CryptoProvider], UnsafePointer[UInt8], @@ -2785,7 +2785,7 @@ fn crypto_provider_load_key( ) -> UInt32 ]("rustls_crypto_provider_load_key")( provider, private_key, private_key_len, signing_key_out - ) + )) fn crypto_provider_random( @@ -2801,13 +2801,13 @@ fn crypto_provider_random( Returns `RUSTLS_RESULT_OK` on success, or `RUSTLS_RESULT_GET_RANDOM_FAILED` on failure. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[CryptoProvider], UnsafePointer[UInt8], Int, ) -> UInt32 - ]("rustls_crypto_provider_random")(provider, buff, len) + ]("rustls_crypto_provider_random")(provider, buff, len)) fn crypto_provider_free(provider: UnsafePointer[CryptoProvider]): @@ -3008,7 +3008,7 @@ fn server_config_builder_new_custom( Ciphersuites are configured separately via the crypto provider. See `rustls_crypto_provider_builder_set_cipher_suites` for more information. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[CryptoProvider], UnsafePointer[UInt16], @@ -3017,7 +3017,7 @@ fn server_config_builder_new_custom( ) -> UInt32 ]("rustls_server_config_builder_new_custom")( provider, versions, tls_versions_len, builder_out - ) + )) fn server_config_builder_set_client_verifier( @@ -3064,9 +3064,9 @@ fn server_config_builder_set_ignore_client_order( as configured. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn (UnsafePointer[ServerConfigBuilder], Bool) -> UInt32 - ]("rustls_server_config_builder_set_ignore_client_order")(builder, ignore) + ]("rustls_server_config_builder_set_ignore_client_order")(builder, ignore)) fn server_config_builder_set_alpn_protocols( @@ -3087,13 +3087,13 @@ fn server_config_builder_set_alpn_protocols( """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[ServerConfigBuilder], UnsafePointer[SliceBytes], Int ) -> UInt32 ]("rustls_server_config_builder_set_alpn_protocols")( builder, protocols, len - ) + )) fn server_config_builder_set_certified_keys( @@ -3117,7 +3117,7 @@ fn server_config_builder_set_certified_keys( EXPERIMENTAL: installing a client_hello callback will replace any configured certified keys and vice versa. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[ServerConfigBuilder], UnsafePointer[UnsafePointer[CertifiedKey]], @@ -3125,7 +3125,7 @@ fn server_config_builder_set_certified_keys( ) -> UInt32 ]("rustls_server_config_builder_set_certified_keys")( builder, certified_keys, certified_keys_len - ) + )) fn server_config_builder_build( @@ -3141,12 +3141,12 @@ fn server_config_builder_build( and the builder was constructed using `rustls_server_config_builder_new`, or if no certificate resolver was set. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[ServerConfigBuilder], UnsafePointer[UnsafePointer[ServerConfig]], ) -> UInt32 - ]("rustls_server_config_builder_build")(builder, config_out) + ]("rustls_server_config_builder_build")(builder, config_out)) fn server_config_free(config: UnsafePointer[ServerConfig]): @@ -3182,12 +3182,12 @@ fn server_connection_new( The caller now owns the rustls_connection and must call `rustls_connection_free` when done with it. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[ServerConfig], UnsafePointer[UnsafePointer[Connection]], ) -> UInt32 - ]("rustls_server_connection_new")(config, conn_out) + ]("rustls_server_connection_new")(config, conn_out)) fn server_connection_get_server_name( @@ -3209,14 +3209,14 @@ fn server_connection_get_server_name( because it hasn't been processed yet, or because the client did not send SNI. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[Connection], UnsafePointer[UInt8], Int, UnsafePointer[Int], ) -> UInt32 - ]("rustls_server_connection_get_server_name")(conn, buf, count, out_n) + ]("rustls_server_connection_get_server_name")(conn, buf, count, out_n)) fn server_config_builder_set_hello_callback( @@ -3238,9 +3238,9 @@ fn server_config_builder_set_hello_callback( Installing a client_hello callback will replace any configured certified keys and vice versa. Same holds true for the set_certified_keys variant. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn (UnsafePointer[ServerConfigBuilder], ClientHelloCallback) -> UInt32 - ]("rustls_server_config_builder_set_hello_callback")(builder, callback) + ]("rustls_server_config_builder_set_hello_callback")(builder, callback)) fn client_hello_select_certified_key( @@ -3266,7 +3266,7 @@ fn client_hello_select_certified_key( Return RUSTLS_RESULT_OK if a key was selected and RUSTLS_RESULT_NOT_FOUND if none was suitable. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[ClientHello], UnsafePointer[UnsafePointer[CertifiedKey]], @@ -3275,7 +3275,7 @@ fn client_hello_select_certified_key( ) -> UInt32 ]("rustls_client_hello_select_certified_key")( hello, certified_keys, certified_keys_len, out_key - ) + )) fn server_config_builder_set_persistence( @@ -3292,10 +3292,10 @@ fn server_config_builder_set_persistence( will be passed to the callbacks. Otherwise the userdata param passed to the callbacks will be NULL. """ - return _rustls.get_function[ + return Result(_rustls.get_function[ fn ( UnsafePointer[ServerConfigBuilder], SessionStoreGetCallback, SessionStorePutCallback, ) -> UInt32 - ]("rustls_server_config_builder_set_persistence")(builder, get_cb, put_cb) + ]("rustls_server_config_builder_set_persistence")(builder, get_cb, put_cb)) diff --git a/src/test.mojo b/src/test.mojo index e268955..91eaedd 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -1,8 +1,11 @@ import rustls as rls import os -from utils import StringSlice, Span +from utils import StringSlice from collections import Optional, InlineArray -from memory import Arc +from memory import Span, ArcPointer +from utilss import logger +from libc import socket, AF_INET, SOCK_STREAM, send, atol +# from lightbug_http.net import create_connection alias DEMO_OK = 0 alias DEMO_AGAIN = 1 @@ -23,24 +26,30 @@ fn do_request( port: String, path: String, ) raises: - # var fd = socket(AF_INET, SOCK_STREAM, 0) - # var connection = create_connection(fd, host, atol(port)) - # if fd < 0: - # print("Failed to create connection") - # return ret + # logger.info("establish TCP connection") + var fd = socket(AF_INET, SOCK_STREAM, 0) + if fd < 0: + raise Error("Failed to create socket") - conn = rls.ClientConnection(client_config, host) + # Create the TCP connection + # var connection = create_connection(fd, host, atol(port)) + # if connection < 0: + # raise Error("Failed to create connection") - # var conn = ConnData( - # rconn, fd.__int__(), "verify_arg", SliceBytes(UnsafePointer[UInt8](), 0) - # ) + # Now create the TLS connection with the established TCP socket + var conn = rls.ClientConnection(client_config, host) + + # Set the underlying TCP socket + # conn.set_socket(fd) - # rustls_connection_set_userdata( - # rconn, UnsafePointer[ConnData].address_of(conn) - # ) - # conn.set_log_callback[log_cb]() + # # Perform TLS handshake + # try: + # conn.do_handshake() + # except: + # raise Error("TLS handshake failed") - # send_request_and_read_response(conn, rconn, host, path) + # # Now you can send your request + # send_request_and_read_response(conn, host, path) fn log_cb(level: Int, message: StringSlice): @@ -75,7 +84,7 @@ fn send_request_and_read_response( + "\r\n" ) - header_bytes = headers.as_bytes_slice() + header_bytes = headers.as_bytes() # Write plaintext to rustls connection @@ -335,10 +344,10 @@ fn main() raises: ) server_cert_verifier = server_cert_verifier_builder^.build() config_builder.set_server_verifier(server_cert_verifier) - alpn = List[Span[UInt8, ImmutableAnyLifetime]]("http/1.1".as_bytes_slice()) + alpn = List[Span[UInt8, StaticConstantOrigin]]("http/1.1".as_bytes()) config_builder.set_alpn_protocols(alpn) client_config = config_builder^.build() host = "www.google.com" port = "443" path = "/" - # result = do_request(client_config, host, port, path) + result = do_request(client_config, host, port, path) diff --git a/src/utilss.mojo b/src/utilss.mojo new file mode 100644 index 0000000..f2a60c8 --- /dev/null +++ b/src/utilss.mojo @@ -0,0 +1,178 @@ +from lightbug_http.io.bytes import Bytes, Byte +from lightbug_http.strings import BytesConstant +from lightbug_http.net import default_buffer_size +from memory import memcpy + + +@always_inline +fn is_newline(b: Byte) -> Bool: + return b == BytesConstant.nChar or b == BytesConstant.rChar + + +@always_inline +fn is_space(b: Byte) -> Bool: + return b == BytesConstant.whitespace + + +struct ByteWriter: + var _inner: Bytes + + fn __init__(out self): + self._inner = Bytes(capacity=default_buffer_size) + + @always_inline + fn write(mut self, owned b: Bytes): + self._inner.extend(b^) + + @always_inline + fn write(mut self, mut s: String): + # kind of cursed but seems to work? + _ = s._buffer.pop() + self._inner.extend(s._buffer^) + s._buffer = s._buffer_type() + + @always_inline + fn write(mut self, s: StringLiteral): + var str = String(s) + self.write(str) + + @always_inline + fn write(mut self, b: Byte): + self._inner.append(b) + + fn consume(mut self) -> Bytes: + var ret = self._inner^ + self._inner = Bytes() + return ret^ + + +struct ByteReader: + var _inner: Bytes + var read_pos: Int + + fn __init__(out self, owned b: Bytes): + self._inner = b^ + self.read_pos = 0 + + fn peek(self) -> Byte: + if self.read_pos >= len(self._inner): + return 0 + return self._inner[self.read_pos] + + fn read_until(mut self, char: Byte) -> Bytes: + var start = self.read_pos + while self.peek() != char: + self.increment() + logger.info("start", start, "read_pos", self.read_pos, len(self._inner)) + logger.info(chr(int(self._inner[0])), chr(int(self._inner[1])), chr(int(self._inner[2])), chr(int(self._inner[3]))) + logger.info(self._inner[start : self.read_pos].__str__()) + return self._inner[start : self.read_pos] + + @always_inline + fn read_word(mut self) -> Bytes: + return self.read_until(BytesConstant.whitespace) + + fn read_line(mut self) -> Bytes: + var start = self.read_pos + while not is_newline(self.peek()): + self.increment() + var ret = self._inner[start : self.read_pos] + if self.peek() == BytesConstant.rChar: + self.increment(2) + else: + self.increment() + return ret + + @always_inline + fn skip_whitespace(mut self): + while is_space(self.peek()): + self.increment() + + @always_inline + fn skip_newlines(mut self): + while self.peek() == BytesConstant.rChar: + self.increment(2) + + @always_inline + fn increment(mut self, v: Int = 1): + self.read_pos += v + + @always_inline + fn consume(mut self, mut buffer: Bytes, bytes_len: Int = -1): + var pos = self.read_pos + var read_len: Int + if bytes_len == -1: + self.read_pos = -1 + read_len = len(self._inner) - pos + else: + self.read_pos += bytes_len + read_len = bytes_len + + buffer.resize(read_len, 0) + memcpy(buffer.data, self._inner.data + pos, read_len) + + +struct LogLevel(): + alias FATAL = 0 + alias ERROR = 1 + alias WARN = 2 + alias INFO = 3 + alias DEBUG = 4 + + +@value +struct Logger(): + var level: Int + + fn __init__(out self, level: Int = LogLevel.INFO): + self.level = level + + fn _log_message(self, message: String, level: Int): + if self.level >= level: + if level < LogLevel.WARN: + print(message, file=2) + else: + print(message) + + fn info[*Ts: Writable](self, *messages: *Ts): + var msg = String.write("\033[36mINFO\033[0m - ") + @parameter + fn write_message[T: Writable](message: T): + msg.write(message, " ") + messages.each[write_message]() + self._log_message(msg, LogLevel.INFO) + + fn warn[*Ts: Writable](self, *messages: *Ts): + var msg = String.write("\033[33mWARN\033[0m - ") + @parameter + fn write_message[T: Writable](message: T): + msg.write(message, " ") + messages.each[write_message]() + self._log_message(msg, LogLevel.WARN) + + fn error[*Ts: Writable](self, *messages: *Ts): + var msg = String.write("\033[31mERROR\033[0m - ") + @parameter + fn write_message[T: Writable](message: T): + msg.write(message, " ") + messages.each[write_message]() + self._log_message(msg, LogLevel.ERROR) + + fn debug[*Ts: Writable](self, *messages: *Ts): + var msg = String.write("\033[34mDEBUG\033[0m - ") + @parameter + fn write_message[T: Writable](message: T): + msg.write(message, " ") + messages.each[write_message]() + self._log_message(msg, LogLevel.DEBUG) + + fn fatal[*Ts: Writable](self, *messages: *Ts): + var msg = String.write("\033[35mFATAL\033[0m - ") + @parameter + fn write_message[T: Writable](message: T): + msg.write(message, " ") + messages.each[write_message]() + self._log_message(msg, LogLevel.FATAL) + + +alias logger = Logger() \ No newline at end of file From 5db83592155ef6e705fc6442447373eac7aa58f8 Mon Sep 17 00:00:00 2001 From: Val Date: Mon, 6 Jan 2025 13:54:19 +0100 Subject: [PATCH 17/18] add info logs --- src/test.mojo | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/test.mojo b/src/test.mojo index 91eaedd..9fa5ea3 100644 --- a/src/test.mojo +++ b/src/test.mojo @@ -26,7 +26,7 @@ fn do_request( port: String, path: String, ) raises: - # logger.info("establish TCP connection") + logger.info("establish TCP connection") var fd = socket(AF_INET, SOCK_STREAM, 0) if fd < 0: raise Error("Failed to create socket") @@ -38,6 +38,7 @@ fn do_request( # Now create the TLS connection with the established TCP socket var conn = rls.ClientConnection(client_config, host) + logger.info("TLS connection created successfully") # Set the underlying TCP socket # conn.set_socket(fd) @@ -330,23 +331,28 @@ fn main() raises: var cert_path = "/etc/ssl/cert.pem" if not os.setenv("CA_FILE", cert_path): raise Error("Failed to set CA_FILE environment variable") - + logger.info("Setting up default provider") custom_provider = default_provider_with_custom_ciphersuite( "TLS13_CHACHA20_POLY1305_SHA256" ) tls_versions = List[UInt16](0x0303, 0x0304) + logger.info("Setting up config builder") config_builder = rls.ClientConfigBuilder(custom_provider, tls_versions) + logger.info("Setting up root cert store builder") server_cert_root_store_builder = rls.RootCertStoreBuilder() server_cert_root_store_builder.load_roots_from_file(cert_path) server_root_cert_store = server_cert_root_store_builder^.build() + logger.info("root cert store built successfully") server_cert_verifier_builder = rls.WebPkiServerCertVerifierBuilder( server_root_cert_store ) server_cert_verifier = server_cert_verifier_builder^.build() + logger.info("server cert verifier built successfully") config_builder.set_server_verifier(server_cert_verifier) alpn = List[Span[UInt8, StaticConstantOrigin]]("http/1.1".as_bytes()) config_builder.set_alpn_protocols(alpn) client_config = config_builder^.build() + logger.info("client config built successfully") host = "www.google.com" port = "443" path = "/" From b9c1129116d1bfc72aa81c34a8d59b52cd3d12e3 Mon Sep 17 00:00:00 2001 From: Val Date: Mon, 6 Jan 2025 13:59:35 +0100 Subject: [PATCH 18/18] rename lifetime to origin --- src/rustls/__init__.mojo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rustls/__init__.mojo b/src/rustls/__init__.mojo index 286cb18..dfc531f 100644 --- a/src/rustls/__init__.mojo +++ b/src/rustls/__init__.mojo @@ -254,7 +254,7 @@ struct ClientConnection: pass fn write_tls_into[ - lifetime: MutableLifetime + lifetime: Origin ](inout self, buf: Span[UInt8, lifetime]) raises: pass @@ -487,7 +487,7 @@ struct ServerConfigBuilder: raise Error("failed to set ignore client order" + str(result.value)) fn set_alpn_protocols[ - lt: ImmutableLifetime + lt: Origin ](inout self, protocols: Span[Span[UInt8, lt]]) raises: """ Set the ALPN protocol list to the given protocols.

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
?(8+<$>jj*V3Az! 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