Skip to main content

Drop-in ssl stdlib library using BoringSSL with first-class fingerprint impersonation.

Project description

BoringSSL-backed TLS for CPython, with Chrome impersonation

Drop-in replacement for the ssl stdlib with a Fingerprint API for Chrome impersonation. Built on stock BoringSSL through boring-sys - no vendored patches, no curl-impersonate, no Go runtime at import time. Use it with any known Python http client you like or used to.

Supports CPython 3.7 onward, including freethreaded builds.

Why this exists

We sat on this for a long time, kept it private as we needed to think longer about whether the world really needed one more TLS library.

The initial thinking was: why do I have to install yet whole another http client just because we need to look like a real browser? The Python ecosystem already ships perfectly fine http clients - urllib3, niquests, httpx, aiohttp - and all of them ride on top of ssl. If the impersonation lives one layer down, in the SSL layer itself, every one of them gets it for free. No fork of curl, no Go runtime imported at module load, no second http client to teach your codebase, no patched BoringSSL to maintain across CVE cycles.

That is what utls is: the ClientHello machinery, plugged in exactly where the rest of Python already plugs in.

It was private until now. Enjoy it, but with care - browser impersonation has legitimate uses (interop testing, anti-bot researches, making sure your own service still answers a real Chrome correctly) and it has illegitimate ones. The license forbids nothing; your judgment does.

Contributions are welcome. New Chrome versions are one profile module plus one registry line; platform fixes, bug reports and CI cleanups are read and merged.

Getting Started

Install from PyPI (pre-built wheels for Linux, macOS, and Windows):

pip install utls

Then swap ssl for utls anywhere in your code:

import utls as ssl

ctx = ssl.create_default_context()

Or use it alongside the stdlib:

from utls import SSLContext, PROTOCOL_TLS_CLIENT

ctx = SSLContext(PROTOCOL_TLS_CLIENT)
ctx.load_default_certs()

import socket
sock = socket.create_connection(("example.com", 443))
ssock = ctx.wrap_socket(sock, server_hostname="example.com")
ssock.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
print(ssock.recv(4096).decode())

It works with asyncio out of the box:

import asyncio
import utls as ssl

async def main():
    ctx = ssl.create_default_context()
    reader, writer = await asyncio.open_connection("example.com", 443, ssl=ctx)
    writer.write(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
    await writer.drain()
    print((await reader.read(4096)).decode())
    writer.close()

asyncio.run(main())

Browser impersonation

import utls, socket

ctx = utls.create_default_context()
ctx.set_fingerprint("chrome:stable")

with socket.create_connection(("www.google.com", 443)) as raw:
    with ctx.wrap_socket(raw, server_hostname="www.google.com") as s:
        s.sendall(b"GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n")
        print(s.recv(4096))

The bundled profile registry can be inspected at runtime:

from utls import Fingerprint, presets

print(presets())
# ['chrome:131', 'chrome:142', 'chrome:146', 'chrome:148', 'chrome:stable']

fp = Fingerprint.from_preset("chrome:stable")
print(fp.ja3_hash, fp.ja4_hash)

Profiles ship as plain Python modules under utls.profiles.*. utls is Chrome-only by design. Adding a new Chrome version is one .py file plus one registry line.

What impersonation actually rewrites

set_fingerprint controls the TLS ClientHello bytes: cipher suite list and order, extension list and order, named groups, key shares, signature algorithms, ALPN/ALPS payloads, GREASE placement, certificate compression, explicit ECH GREASE or real config, and so on. Everything that goes into a JA3 or JA4 hash, utls drives.

What it does not rewrite, because they live above TLS:

  • The HTTP request line, method, path, and body.
  • HTTP/2 SETTINGS frames, WINDOW_UPDATE values, HEADERS frame priority flags, and the Akamai HTTP/2 fingerprint that some bot-detection vendors track. Those belong to your HTTP client; pair utls with niquests or urllib3-future if you need them honored end-to-end.

Carrying the canonical Chrome header set

Each profile also publishes the exact HTTP request-header set Chrome sends on a top-level navigation, in the on-the-wire insertion order. The HTTP layer is yours to drive, but the headers are right there if you want matched cosmetics:

from utls import Fingerprint

fp = Fingerprint.from_preset("chrome:stable")
for name, value in fp.http_headers.items():
    print(f"{name}: {value}")
# sec-ch-ua: "Chromium";v="148", "Google Chrome";v="148", "Not/A)Brand";v="99"
# sec-ch-ua-mobile: ?0
# sec-ch-ua-platform: "Linux"
# User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ...
# Accept: text/html,application/xhtml+xml,...
# ...

Request- or session-dependent headers (Host, Cookie, Referer, Content-Length, Content-Type) are deliberately omitted from the dict; the HTTP client is responsible for emitting those. For HTTP/1.1, prepend Host at position 0 to preserve Chrome's wire order.

Choosing a profile

  • chrome:stable always tracks the newest Chrome major shipped in a utls release. Use this if you want to drift with Chrome without code changes.
  • chrome:148, chrome:146, chrome:142, chrome:131 pin to specific Chrome majors. Use these when reproducibility matters - e.g. a long- running scraper that should not silently change shape when utls is upgraded.

The JA4 hash is the fingerprint identity that bot-detection vendors and TLS observatories actually index on. chrome:142 / chrome:146 / chrome:148 share the same JA4 because they share the same TLS-layer ClientHello (the deltas are HTTP-layer); chrome:131 differs because it uses the legacy ALPS codepoint (0x4469 vs 0x44cd).

Why JA3 varies but JA4 stays put

Chrome 110+ permutes its TLS extension order on every connection to defeat order-based fingerprinting. utls mirrors that behavior. As a result:

  • JA3 hashes the wire order verbatim, so fp.ja3_hash (and the hash you'd compute from a live capture) shifts per connection. Use the JA3 string for diffing the extension set, not the hash for equality.
  • JA4 sorts extension codepoints before hashing, so fp.ja4_hash is stable and the value that matches your live capture.

Capturing a fingerprint from a live ClientHello

If you have raw ClientHello bytes (e.g. captured via tcpdump, mitmproxy, or a custom TLS trap), you can rebuild a Fingerprint from them and feed it back into a context:

from utls import Fingerprint, SSLContext

raw = open("clienthello.bin", "rb").read()
fp = Fingerprint.from_capture(raw)
print(fp.ja4_hash)

ctx = SSLContext()
ctx.set_fingerprint(fp)

Captured fingerprints carry no HTTP headers (fp.http_headers == {}); they only encode the TLS layer. To round-trip a full profile, use fp.to_dict() + Fingerprint.from_dict(...) and add http_headers manually.

Server-side and impersonation

set_fingerprint on a server-side context raises at the Rust level. The ClientHello is, by definition, the client's choice; a server-side fingerprint would be meaningless on the wire. Server contexts can still inspect the peer ClientHello for diagnostics (see the Server-side section below).

Encrypted Client Hello (ECH)

Chrome profiles ship with ECH GREASE enabled by default, matching real Chrome. To offer real ECH - encrypting the inner ClientHello (including the real SNI) under the server's published HPKE config - fork a per-peer context carrying the wire-format ECHConfigList bytes:

import utls, socket

base = utls.SSLContext()
base.load_default_certs()
base.set_fingerprint("chrome:stable")

# ECH configs are peer-specific* - each origin publishes its own in a DNS
# HTTPS RR. `set_ech_configs` is non-mutating: it returns a NEW SSLContext
# that shares the underlying SSL_CTX (and CA store) with `base` via
# SSL_CTX_up_ref, so the fork is cheap. `base` is untouched and can be
# re-forked for other peers.
ech_bytes = ...  # you are responsible to get it yourself!
ctx = base.set_ech_configs(ech_bytes)

with socket.create_connection(("example.com", 443)) as raw:
    ssl_sock = ctx.wrap_socket(raw, server_hostname="example.com")
    ssl_sock.do_handshake()

utls does not perform the DNS HTTPS RR lookup; the caller fetches the ech= bytes (e.g. via dnspython's HTTPS rdata). Pass None to clear the ECH override in the fork.

Niquests or urllib3-future does ECH transparently via a custom resolver (E.g. DNS over HTTPS) No effort required.

Feature parity with stdlib

utls re-exports the public names of the ssl module that matter for client and server code paths. The Python facade is a real subclass of ssl.SSLContext, so isinstance(ctx, ssl.SSLContext) is true and most downstream libraries (urllib3-future, niquests, httpx with custom transports) accept a utls context directly.

What's different from ssl:

  • TLS 1.2 is the minimum version. SSLv2, SSLv3, TLS 1.0 and TLS 1.1 are not available - BoringSSL refuses to negotiate them (No decent client out there should try < TLS 1.2).
  • Hostname verification uses SAN only, never the Common Name.
  • compression() always returns None (TLS compression is disabled, as it should be - BoringSSL doesn't ship it - as anyone should).
  • PSK callbacks are not available - BoringSSL deleted them upstream.
  • A Fingerprint API exists and is honored on the client side. Server-side set_fingerprint rejects at the Rust level: the ClientHello is the client's choice, not the server's.

Server-side

Server-side TLS is supported for everything BoringSSL still exposes:

  • mTLS (client certificate auth via verify_mode=CERT_REQUIRED),
  • ALPN selection from a server preference list,
  • SNI dispatch via set_servername_callback,
  • ECDH curve restriction (set_ecdh_curve),
  • Session ticket count (set_num_tickets),
  • set_session_id_context,
  • Server-side ClientHello fingerprinting (read-only diagnostics).

Things you can't have on the server side because BoringSSL doesn't have them: DTLS, FFDHE parameters, SSLv2/SSLv3, TLS compression, PSK.

urllib3-future / niquests

utls is automatically picked up if installed. enjoy.

Disclaimer

Early/Beta project. The public API is stable; we do not plan to diverge from stdlib for the ssl-compatible subset. Not pure Python - you need either a pre-built wheel or a build environment (Rust + cmake + ninja + Go for BoringSSL).

MIT-licensed (see LICENSE). BoringSSL is permissively licensed; boring-sys is Apache-2.0 - bundled into the wheel.

  • FIPS mode is not on the roadmap.
  • Chrome only. Firefox / Safari / Edge are unlikely. Thus, contribution are welcomed.
  • PyPy is not supported.

Throughput is on par with stdlib ssl: ~343 MiB/s for bulk recv vs. stdlib's 340 MiB/s on a loopback TLS 1.3 / AES-256-GCM connection. (yes, it is faster than rtls!)

Contributions, bug reports and feedback are welcome.

Versioning

This project uses CalVer (YYYY.0M.0D). It aims to be a drop-in replacement for stdlib ssl, so semantic versioning would be misleading - pin a lower bound, not an upper bound.

Prior art

  • rtls - same drop-in approach over rustls. utls's MemoryBIO-first design and read-batching pass are directly inspired by it; many of the compatibility tests were ported from there.
  • uTLS - the reference Go-language TLS fingerprinting library. The spec data encoded in our Chrome profiles is checked against uTLS's published ClientHellos.
  • curl-impersonate - the original "browser-on-the-wire" project. utls aims to give Python the same capability without a non-native Python http client or a patched BoringSSL.

JA4 pinning

The JA4 fingerprint algorithm is pinned to FoxIO-LLC/ja4 spec revision 0.18.8. The constant is duplicated in python/utls/_fingerprint.py (JA4_SPEC_VERSION) and crates/utls-core/src/fingerprint/ja4.rs, and a dedicated CI job asserts they agree.

Documentation

For the ssl-compatible surface, the stdlib documentation at https://docs.python.org/3/library/ssl.html applies almost verbatim - the notable exceptions are listed under Feature parity with stdlib.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

utls-2026.5.29.tar.gz (110.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

utls-2026.5.29-cp314-cp314t-win_arm64.whl (983.9 kB view details)

Uploaded CPython 3.14tWindows ARM64

utls-2026.5.29-cp314-cp314t-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.14tWindows x86-64

utls-2026.5.29-cp314-cp314t-win32.whl (965.9 kB view details)

Uploaded CPython 3.14tWindows x86

utls-2026.5.29-cp314-cp314t-musllinux_1_1_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.1+ x86-64

utls-2026.5.29-cp314-cp314t-musllinux_1_1_armv7l.whl (7.3 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.1+ ARMv7l

utls-2026.5.29-cp314-cp314t-musllinux_1_1_aarch64.whl (7.5 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.1+ ARM64

utls-2026.5.29-cp314-cp314t-manylinux_2_28_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

utls-2026.5.29-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

utls-2026.5.29-cp314-cp314t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl (2.1 MB view details)

Uploaded CPython 3.14tmacOS 10.15+ universal2 (ARM64, x86-64)macOS 10.15+ x86-64macOS 11.0+ ARM64

utls-2026.5.29-cp313-cp313t-win_arm64.whl (987.7 kB view details)

Uploaded CPython 3.13tWindows ARM64

utls-2026.5.29-cp313-cp313t-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.13tWindows x86-64

utls-2026.5.29-cp313-cp313t-win32.whl (965.5 kB view details)

Uploaded CPython 3.13tWindows x86

utls-2026.5.29-cp313-cp313t-musllinux_1_1_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.1+ x86-64

utls-2026.5.29-cp313-cp313t-musllinux_1_1_armv7l.whl (7.3 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.1+ ARMv7l

utls-2026.5.29-cp313-cp313t-musllinux_1_1_aarch64.whl (7.6 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.1+ ARM64

utls-2026.5.29-cp313-cp313t-manylinux_2_28_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

utls-2026.5.29-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ x86-64

utls-2026.5.29-cp313-cp313t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl (2.1 MB view details)

Uploaded CPython 3.13tmacOS 10.15+ universal2 (ARM64, x86-64)macOS 10.15+ x86-64macOS 11.0+ ARM64

utls-2026.5.29-cp37-abi3-win_arm64.whl (989.6 kB view details)

Uploaded CPython 3.7+Windows ARM64

utls-2026.5.29-cp37-abi3-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.7+Windows x86-64

utls-2026.5.29-cp37-abi3-win32.whl (970.8 kB view details)

Uploaded CPython 3.7+Windows x86

utls-2026.5.29-cp37-abi3-musllinux_1_1_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.7+musllinux: musl 1.1+ x86-64

utls-2026.5.29-cp37-abi3-musllinux_1_1_armv7l.whl (7.3 MB view details)

Uploaded CPython 3.7+musllinux: musl 1.1+ ARMv7l

utls-2026.5.29-cp37-abi3-musllinux_1_1_aarch64.whl (7.6 MB view details)

Uploaded CPython 3.7+musllinux: musl 1.1+ ARM64

utls-2026.5.29-cp37-abi3-manylinux_2_28_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.28+ ARM64

utls-2026.5.29-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ x86-64

utls-2026.5.29-cp37-abi3-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl (2.1 MB view details)

Uploaded CPython 3.7+macOS 10.15+ universal2 (ARM64, x86-64)macOS 10.15+ x86-64macOS 11.0+ ARM64

File details

Details for the file utls-2026.5.29.tar.gz.

File metadata

  • Download URL: utls-2026.5.29.tar.gz
  • Upload date:
  • Size: 110.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for utls-2026.5.29.tar.gz
Algorithm Hash digest
SHA256 55c88b356a1258b14b56d75d1e4eca3be14bffbc4e2660b77e074c65ba4d8d6e
MD5 798a4cec8f42ec51b49c15b8804cedfc
BLAKE2b-256 e8fc6f02714c85985dc5a045a338e2b433c67c2087e696db48c7dfe665301bb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29.tar.gz:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp314-cp314t-win_arm64.whl.

File metadata

  • Download URL: utls-2026.5.29-cp314-cp314t-win_arm64.whl
  • Upload date:
  • Size: 983.9 kB
  • Tags: CPython 3.14t, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for utls-2026.5.29-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 40675c6ea7c22842d06b8f513f16aecd0fada58f64e126d097e1abc2f4d4e991
MD5 af5ddd5c137165a612886662982eca0f
BLAKE2b-256 1abfac18d66a39de7a62d87f2d0a22be527617b2aa88dd467af415ab8ff8dc84

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp314-cp314t-win_arm64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: utls-2026.5.29-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for utls-2026.5.29-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 c82694d4cb77dcfd7926f06f56022032f366aa9802b0a80b7ef01d585250d9a9
MD5 c223ba56aadfa37f8409806b4ad1068a
BLAKE2b-256 0c133c2e2e7ef960bff0cd87762bb793279e7826cb2ab00135c4b5e18e3cdcfb

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp314-cp314t-win_amd64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp314-cp314t-win32.whl.

File metadata

  • Download URL: utls-2026.5.29-cp314-cp314t-win32.whl
  • Upload date:
  • Size: 965.9 kB
  • Tags: CPython 3.14t, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for utls-2026.5.29-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 d7e6107c03636e240cb5750573a4e20dc09cfb06d7caebc59ffdcc90d5364f20
MD5 4de9cbb9cb93fe1331dd8326297b4e68
BLAKE2b-256 9c323f2796a451abb4edba17cb85e5d7603f8c7cad31aab679636771f5042703

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp314-cp314t-win32.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp314-cp314t-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp314-cp314t-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 6020155337cf07f55fbb905f611f4de28e3c0cc8975caadb4a55b11d4ace8a5c
MD5 a12ae30ca9cc476113475463532e9e37
BLAKE2b-256 8ff6267e1175cae944b82f586eb72bc77b55a0e882e0c84ed216ba057e80d72a

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp314-cp314t-musllinux_1_1_x86_64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp314-cp314t-musllinux_1_1_armv7l.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp314-cp314t-musllinux_1_1_armv7l.whl
Algorithm Hash digest
SHA256 47bd419628b29825c42625f0036577b4ba2c284c21201389e0980c368efc6d66
MD5 d545539c72fa970a072c4a29dda95e5e
BLAKE2b-256 6827eada385734d703b05f0b8c86243c24d1b898b565b636c67706b00c599f2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp314-cp314t-musllinux_1_1_armv7l.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp314-cp314t-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp314-cp314t-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 bfa45d710fa1d1ce059ac3282fafb329f568fc59587646c10e6db138de149361
MD5 138df6c47192768d05e99b2f18b38167
BLAKE2b-256 ae0d8f761cdf0b543a07dbc72a238a920495036b168ab00019c81ba1d2a84e9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp314-cp314t-musllinux_1_1_aarch64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 07b56db3eebfb16d5a1ee8850da0f801aeaaac76f229f5e018cc8a734b4355f0
MD5 8f3a3093f1cfb448811bd424d55144ad
BLAKE2b-256 d2e8ef3648cb60c223869192a615a4fb669af58b50fbbc6b46f6de4d86ec0b80

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp314-cp314t-manylinux_2_28_aarch64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e9113f26513831cf96b4ac27a0176f78a22a763ea9febe24c284767aeffabf94
MD5 ac7df418fc4e92199d8f1c3a93590105
BLAKE2b-256 b742e3e34cc24ace3f952e538af7017103bde37c4c2c5701136e1d77314e4c2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp314-cp314t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp314-cp314t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 1f745ccd8895170be34c76c632da02b2502922a1a02d547ef25c43d031c90945
MD5 68994b84bff2fc1310b158927bffb3f8
BLAKE2b-256 209af0a0ba20d9794bdd43552299bb9b09a2cbd4e1e17770c8009a86a0dabef7

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp314-cp314t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp313-cp313t-win_arm64.whl.

File metadata

  • Download URL: utls-2026.5.29-cp313-cp313t-win_arm64.whl
  • Upload date:
  • Size: 987.7 kB
  • Tags: CPython 3.13t, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for utls-2026.5.29-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 0820c9a866a3c1a0db649dc762c2af246889374aa94d301db6d5dc6a4962750d
MD5 892b176bddf30753d6c8841a6cd2112c
BLAKE2b-256 6d14658d7d6bf96fce55f8c5d74ecceba0d7d9990bdbb1e26e3af6d481c1e2ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp313-cp313t-win_arm64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp313-cp313t-win_amd64.whl.

File metadata

  • Download URL: utls-2026.5.29-cp313-cp313t-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.13t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for utls-2026.5.29-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 d321921a226374beba848b78fd18c9f00472c9cf0c6467ac896810e7c2e6a3b5
MD5 2e6a7c191faff7e4275ed65d1f80d43c
BLAKE2b-256 b0441355109828f52c7ad0c585ab5f6a41c699985ed2103c7c3e275c3ec3b1db

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp313-cp313t-win_amd64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp313-cp313t-win32.whl.

File metadata

  • Download URL: utls-2026.5.29-cp313-cp313t-win32.whl
  • Upload date:
  • Size: 965.5 kB
  • Tags: CPython 3.13t, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for utls-2026.5.29-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 92c05fb1e39b80a048d128ffdddb78691a23ab409918b0ff9cabe82096c2181e
MD5 66960fcfd2ed7bdc7b1640fd7cdde515
BLAKE2b-256 3d8f5310f13bab3836d977fedf61aa3c9fd9f65bc5de2801e34aca7206961e41

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp313-cp313t-win32.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp313-cp313t-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp313-cp313t-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 7e8fd40d225ab8c3b1da1a2cbaddcb002042a968a4cd623dd8aec1837dd73bdf
MD5 60b74c407803c392341fbeb459f1be9a
BLAKE2b-256 7e3f4769b54ca53b5c0af4377c3d5f1d1f1ee28c6112e914afb0d9b40103c2f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp313-cp313t-musllinux_1_1_x86_64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp313-cp313t-musllinux_1_1_armv7l.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp313-cp313t-musllinux_1_1_armv7l.whl
Algorithm Hash digest
SHA256 f277c27aeaa9991f9dfb726c4dc7729e9749ca52a90c8fa97b9ba2a11b53c46a
MD5 92e18c22a2824802f63815b1f2200f72
BLAKE2b-256 9c783ebc181b0bab42235a3fa659cb875cce750bd2c5cbc6edded97fc33a7a14

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp313-cp313t-musllinux_1_1_armv7l.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp313-cp313t-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp313-cp313t-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 86912f019d1c8eb1ee901b58e529f62408a47285f2bb80b744984ee77f341b68
MD5 7609f5309dc014dd206411d309cbf10c
BLAKE2b-256 4df284c2efaeb7b7ad95949daaa8641b57ac1c49ff3730ab477c9ea0fb4ebfeb

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp313-cp313t-musllinux_1_1_aarch64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp313-cp313t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 505e7e540c075ec4b575874b8406f94df2ef48ee4a8ecf290d9caed5ed3807d2
MD5 43bc07792e0f923bd4df1cb0f3a6f8d0
BLAKE2b-256 dd00e319b095e50d571993ff9a090d61e5838f31f040ea4c6d96a45413e7875c

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp313-cp313t-manylinux_2_28_aarch64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5ef6a28ca365c0e33f7c381dd0b946f9d304beeb72caaf0deca514aaac8bf947
MD5 d044885feb1479aabc482bbfdbd45258
BLAKE2b-256 530cc8ee84acf7d74720a334ee814218dda900011c1a05ac24bddc978277051c

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp313-cp313t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp313-cp313t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 f4f67602323ddeca51da8007e7f11c0a122ef19cfad5efbd6d11d0e797f1f15f
MD5 238342d2d17d675aca8f4f26fde44ee0
BLAKE2b-256 d95c45ecb354bac183420784368c191b2814592d9e497e97ccc94b9d85bfc3c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp313-cp313t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp37-abi3-win_arm64.whl.

File metadata

  • Download URL: utls-2026.5.29-cp37-abi3-win_arm64.whl
  • Upload date:
  • Size: 989.6 kB
  • Tags: CPython 3.7+, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for utls-2026.5.29-cp37-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 e4b89f01fb70792fb4097df55315180894b747fd71c36037c0a1be29e011fef4
MD5 d4c64c1aa85568d15c789cfd4e9f58b2
BLAKE2b-256 88e87f3715b9da2e08c609f97bd8563dbbd986a7e9de644e62df19968c334e3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp37-abi3-win_arm64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: utls-2026.5.29-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.7+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for utls-2026.5.29-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ff7e3b63fd37f5c25f97d41ae36ec382404ee0ef2fc68173b69a207306a49ecb
MD5 680f15ef6298834ddeecd145540770f8
BLAKE2b-256 29404ae0fe86f0620d46ad22cda20640af4207df74cf46dbe0a43ea14f46386f

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp37-abi3-win_amd64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp37-abi3-win32.whl.

File metadata

  • Download URL: utls-2026.5.29-cp37-abi3-win32.whl
  • Upload date:
  • Size: 970.8 kB
  • Tags: CPython 3.7+, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for utls-2026.5.29-cp37-abi3-win32.whl
Algorithm Hash digest
SHA256 f24f383a0b4d1be416d91e66a56dfdd4363475a28526f42c597f0f0031e25367
MD5 a6f147513482e6df3a0a4aecdc952f58
BLAKE2b-256 5155e7c77eeaa8e51823a7f766e995a8f95a5dc5446f17bbda7ee0dd2b6a7f9c

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp37-abi3-win32.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp37-abi3-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp37-abi3-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 b1f2fca2afe16d7e21edc24e00534633e7645d6f37476be3c9627007d026d601
MD5 d199881961abbdf486a459464208aef7
BLAKE2b-256 ed2e9f7299afba5b550ca327c2ad48f101ae2eb7096e181bf892714be9fe4ddb

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp37-abi3-musllinux_1_1_x86_64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp37-abi3-musllinux_1_1_armv7l.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp37-abi3-musllinux_1_1_armv7l.whl
Algorithm Hash digest
SHA256 6634e926d91cec95043ae5bb9825966bf74a0e5693e40bc9522abb65d0f00367
MD5 fad37a6fb428baba85e29a27606a5521
BLAKE2b-256 558645f3a7d16b9748530dcfab3d7612e800071ef074cfb384685a08c5709b84

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp37-abi3-musllinux_1_1_armv7l.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp37-abi3-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp37-abi3-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 0dec0bb85d5dfc7136d88ca3760084fcf18b1d536821aa0cd4dca00acf099eb4
MD5 451efe2abf74104f97f892a6b85546d6
BLAKE2b-256 9471db70ccd6cf6957e739a1bf79cf39bf2ce0ca95aa3a01d3ca21f9c4cffa28

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp37-abi3-musllinux_1_1_aarch64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp37-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp37-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3b0d0f32c3ed3d4a3a1fc0e0df8ff694bbeda8691bb7059751b35105912e404d
MD5 8443b523f83bb9bfec3b0b531d4f1dd1
BLAKE2b-256 671e622e4fc91c86956b829fec80581f449d1de7e1921068b65d3bdba12e1e05

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp37-abi3-manylinux_2_28_aarch64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ca06bea506492595fecccaf25080bd8fe71d1dda98aa3c3f0db0d0e9ddbcc1bb
MD5 c7bd5fc534517d2e161f7fd0bdc80938
BLAKE2b-256 2d16023a2e1d667673549dbb59ce142a1d108a59d5ba324094eef3ac1ed11290

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file utls-2026.5.29-cp37-abi3-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for utls-2026.5.29-cp37-abi3-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 98bad06b723306b32f4bce95bba6f80fb76ba37e0f7f5ec5682f4d456516354e
MD5 8eb3f7cb34c0c0566c7326e385edd8ee
BLAKE2b-256 e7c29af031bdbc22a5516a36f5f7f5f0baf29de658d043da96baf5fbd3714f9c

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.29-cp37-abi3-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl:

Publisher: CI.yml on jawah/utls

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page