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, plus H2 pseudo-headers) 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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

utls-2026.5.28-cp314-cp314t-win_arm64.whl (982.5 kB view details)

Uploaded CPython 3.14tWindows ARM64

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

Uploaded CPython 3.14tWindows x86-64

utls-2026.5.28-cp314-cp314t-win32.whl (964.2 kB view details)

Uploaded CPython 3.14tWindows x86

utls-2026.5.28-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.28-cp314-cp314t-musllinux_1_1_armv7l.whl (7.3 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.1+ ARMv7l

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

Uploaded CPython 3.14tmusllinux: musl 1.1+ ARM64

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

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

utls-2026.5.28-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.28-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.28-cp313-cp313t-win_arm64.whl (985.3 kB view details)

Uploaded CPython 3.13tWindows ARM64

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

Uploaded CPython 3.13tWindows x86-64

utls-2026.5.28-cp313-cp313t-win32.whl (963.7 kB view details)

Uploaded CPython 3.13tWindows x86

utls-2026.5.28-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.28-cp313-cp313t-musllinux_1_1_armv7l.whl (7.3 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.1+ ARMv7l

utls-2026.5.28-cp313-cp313t-musllinux_1_1_aarch64.whl (7.5 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.1+ ARM64

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

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

utls-2026.5.28-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.28-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.28-cp37-abi3-win_arm64.whl (987.7 kB view details)

Uploaded CPython 3.7+Windows ARM64

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

Uploaded CPython 3.7+Windows x86-64

utls-2026.5.28-cp37-abi3-win32.whl (969.1 kB view details)

Uploaded CPython 3.7+Windows x86

utls-2026.5.28-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.28-cp37-abi3-musllinux_1_1_armv7l.whl (7.3 MB view details)

Uploaded CPython 3.7+musllinux: musl 1.1+ ARMv7l

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

Uploaded CPython 3.7+musllinux: musl 1.1+ ARM64

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

Uploaded CPython 3.7+manylinux: glibc 2.28+ ARM64

utls-2026.5.28-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.28-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.28-cp314-cp314t-win_arm64.whl.

File metadata

  • Download URL: utls-2026.5.28-cp314-cp314t-win_arm64.whl
  • Upload date:
  • Size: 982.5 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.28-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 6bc2053f4bac0d74eb07d4794bd3c259ede4faa858c4d35c8445d8802c2e4225
MD5 d07f211dc4c776056b7c8fd9e33deb57
BLAKE2b-256 d2e0744bfd0bc446de2ef5cc8893925967b49b351f0cfae745ddbdf05aff5eaa

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: utls-2026.5.28-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.28-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 f5f4f1fad1cc36a21554a4011e0240b11b5ce910925936f1fe6ded91690b8304
MD5 a920f391be2756bba29f97eede333525
BLAKE2b-256 c53fb92e58cc8cd3f0ec619e56671978f209ead919e13d7445f9e11d0dd78df9

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp314-cp314t-win32.whl.

File metadata

  • Download URL: utls-2026.5.28-cp314-cp314t-win32.whl
  • Upload date:
  • Size: 964.2 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.28-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 75ecd885b50a926fc61220e94ff0b9c33cfd9af181ddad0886abfc4bf4436acb
MD5 1a09d79737f22db75c311dfad323b589
BLAKE2b-256 ae1f9867a8ed925866222c9db3ba9309377df7ce7583f8391961748acb4324e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp314-cp314t-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp314-cp314t-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 6ece259f424a63ca9e3baa9c8fb7653093ed5bb5272dd8abde3ee4368968bd3d
MD5 75a3fb96c057c5d1953bf838bf438db1
BLAKE2b-256 e7af1eb5b227cfc5defbb6bf2354a7666fac583593bb2084e6f97fbe03a5930c

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp314-cp314t-musllinux_1_1_armv7l.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp314-cp314t-musllinux_1_1_armv7l.whl
Algorithm Hash digest
SHA256 0dcba91428a970d957a4c40f8fc675d25ca82456b0bf106fc66dc75fbef3c3c0
MD5 27bebb43ddf6b3647779905ab8aea2cb
BLAKE2b-256 15824c912b3d156fe640b1a7ab242933e898014ab107c799cc7a776f65b516d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp314-cp314t-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp314-cp314t-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 2bbd2b7d4feed42f587c18752a612fcd50cc58f90c7c0fdc729f0d7625acfd04
MD5 c53a1dfca601e09d0f23470395a6af41
BLAKE2b-256 6cc0b0f58f20fe2aab849348d205753e6c3ecef810e9fcfcae921d278afbf676

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 55945956b0f4efeb5538ef9d0a1ee803d8903f0e8ffcbd2ca8393ef0a3aa58eb
MD5 0f38c48c8e8ee825282194d15152bd75
BLAKE2b-256 569810bff17fedfbb7ff137ae1264270db10521e2ccc2a0e56438114e4a740b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 19eabccc7b3c164af48a6cbcd6c8932c29b7ded8606210201f5b3dd36b7955b0
MD5 6c9643fa2953af74d548ac2f2ae1d702
BLAKE2b-256 29b9ffea0e5514b9bd5d866f32ea123d9cff5d1c8fb1a45aa93a88c07bf1781e

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-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.28-cp314-cp314t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 aca89c277d81bcc8d759310f5fb1a154b232f773b3b3094470b5d3f7528a3778
MD5 1f07583685895487073ec72bda159663
BLAKE2b-256 cc1bf6cfea9d7173c104c5dd93fb0f3c03ace037512136ef1925b3828e22e036

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp313-cp313t-win_arm64.whl.

File metadata

  • Download URL: utls-2026.5.28-cp313-cp313t-win_arm64.whl
  • Upload date:
  • Size: 985.3 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.28-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 77f30de59fb7129b548f58b630bdb02bf984583b49ad97fdc8a144c8da24e47e
MD5 d04a6c5e38d46288abe3fb2528135d30
BLAKE2b-256 e3fbc1da737deae9dee39aafbff081553b0e1ee26177a53b8bcdf0e33ec1b8f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp313-cp313t-win_amd64.whl.

File metadata

  • Download URL: utls-2026.5.28-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.28-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 00b57f70c9dd30f731b726819b75180665d1a7974d25743fa22c1ee3d63d258b
MD5 30e2b9de156b0358d02e9f4dccc16778
BLAKE2b-256 4d5e7cb27e19c763a2760d947d680862413ef196939aaf77a8612048fc1198f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp313-cp313t-win32.whl.

File metadata

  • Download URL: utls-2026.5.28-cp313-cp313t-win32.whl
  • Upload date:
  • Size: 963.7 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.28-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 893a612f588c682713fd65a6788fae9b541410a7b87dd074e273c7fb5e01a4ce
MD5 832f7f3d29ecf9f1dabecc916bd5b749
BLAKE2b-256 70aefaaa648e5011126297e39f22a4a1b4ed0fb82d88c690575e23b3dcda700a

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp313-cp313t-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp313-cp313t-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 0d66e3b47db03ce12b4a89e3caaf157e9ee1c1dfa6f0b94b73d919882ec6d051
MD5 b345ff050b53983bc1a3ba8cfaca08ca
BLAKE2b-256 17f81e9aed6a0af2c49f5fdad0856fddca7ee09dcb27965f98eb084e33afdd30

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp313-cp313t-musllinux_1_1_armv7l.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp313-cp313t-musllinux_1_1_armv7l.whl
Algorithm Hash digest
SHA256 bee585bc2c93cbf2bf4322b02ac071734e7021efd772e669f6d2271d87c33746
MD5 47eafd07260ed85fa2445b65587d4cdb
BLAKE2b-256 56b209384e7dd88e42b60ac9db54399c6ab78b265eb227f822869b6415cd76e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp313-cp313t-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp313-cp313t-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 e59024c8c018ab35b11a4ce619cd23604ef49d4f8624228d33503d72119667ec
MD5 a3d7be23847ebea39d0801c287871fb1
BLAKE2b-256 6b3cabf2aa8282e30f511c3d4ac602e9c73e0c5f72d4fbb1bd6ce70fe8a48eda

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp313-cp313t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5b82a5895961b05b63fa84c98b3f2d5969e0db66e3e7ede6233f9d71de8baf03
MD5 127882f0671a8af5909aaf1bdd750d63
BLAKE2b-256 a9e1f36164974e6610199513154b3434452884de63817a792aa37120ffde6aca

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d8644ba6f2a7436098d7292ab7a42d4db855f21641d523a7c918cde80279f4cf
MD5 7cc4b60a899480034bde7d6cb1d6cfd1
BLAKE2b-256 c6bdc5d448685fc2eec723bfc5e032337e194174d44ce4e23155593d7139d37a

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-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.28-cp313-cp313t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 8d60a5b30ec374899141dc47764a926601fc8e851efdbc4979a596b306dabd84
MD5 157ec8d4c52b9658c8014dce7d9fec81
BLAKE2b-256 ece0283023081dccec5d2ea3b9f5fb5392c21ea258e994c77050afa49cbb63c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp37-abi3-win_arm64.whl.

File metadata

  • Download URL: utls-2026.5.28-cp37-abi3-win_arm64.whl
  • Upload date:
  • Size: 987.7 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.28-cp37-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 4b481692a15548adf2807c583da1446bd20362a50ef87cb70559c4d7d2a28300
MD5 62218e29ea19b8a4b454b4a4268b4936
BLAKE2b-256 b89d81cd8b5a108f42b7064fa8e0ee169e5bef813a662170a31bb8d586a0a655

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: utls-2026.5.28-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.28-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 82a718f22d7af469b938fc9c0ec6a7bd24d2d465262203b4d44874703984c526
MD5 721fb6d90b339a5b4ee32cb560d4aa21
BLAKE2b-256 7380304adab91e4e018d01fbb1e50a2333c87ee5c569b8de78619cf288db78d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp37-abi3-win32.whl.

File metadata

  • Download URL: utls-2026.5.28-cp37-abi3-win32.whl
  • Upload date:
  • Size: 969.1 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.28-cp37-abi3-win32.whl
Algorithm Hash digest
SHA256 3634479995302420b0559831a694ea73ee527c61f21abb84ecdd33b0b8e7800a
MD5 da42ab3fc609cc9c9c42f7e7dfb06df9
BLAKE2b-256 7d5e4b31a92e7bbbc425a44ebbeed379ab71d77099f83b34044ad6cfe5044237

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp37-abi3-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp37-abi3-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 feed2bbd03c74d8d69dcc68ec6e205afc0e2e1c1796607fa7f6a75ea1c969e8c
MD5 282b866fbb097e85f22e04888052b49c
BLAKE2b-256 a78ca6a520923436516a1870610eefb899d14ad263c2a24cb44d8d7cfddc77c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp37-abi3-musllinux_1_1_armv7l.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp37-abi3-musllinux_1_1_armv7l.whl
Algorithm Hash digest
SHA256 fe72026373775cd1458be041b39d252123e5015189c171b8ce2afcd2bb270cac
MD5 1f79e32dfb6396b30becd8a42bd47d9b
BLAKE2b-256 fdbf9e43ba1d46341213265c8ff89c6cb12ba9b752aee049ffae2127437b25de

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp37-abi3-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp37-abi3-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 83416b6ee46b7259928b300190cee5ad915ec626f67ebc8ca77493adda0e62f7
MD5 874d870eacff0e4e94f8f0b19a7b0458
BLAKE2b-256 53974fd3fa7cc680aa7d6ae45920582ddb141afab1b9ab849fc0973f04c2a6ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp37-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp37-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f5a48070d0008ad1e2031be00a9e8f782a949f9b0e32946a7a797521d93b5526
MD5 2ccc5cd4a9c80ad3b91aed70d73cc8b9
BLAKE2b-256 13c9e258fce043a53ee17ea1efeb884fdd9f9e1985846a2168bf8692f804a5a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for utls-2026.5.28-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 555c14e8d57ae9a4ea28658e135682700e3058a05043e574a90adcd06ebee74a
MD5 04aadd7d47584eb24dc48c2c2e50bcf0
BLAKE2b-256 5e092a14e91963e51798352e024d1af722313f9faff6851816dfaeecd09a0b55

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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.28-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.28-cp37-abi3-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 ab285e942209466891001d222a5a7680fd8963ec834dfdaa701392efda67948e
MD5 d7da792a53791b484fd2c9d86179df35
BLAKE2b-256 9c4a3dad617f082e7be966076a70187d31d3f51ad3d97e0bb62e6acb38b429a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.28-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