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.30.tar.gz (117.1 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.30-cp314-cp314t-win_arm64.whl (1.1 MB view details)

Uploaded CPython 3.14tWindows ARM64

utls-2026.5.30-cp314-cp314t-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.14tWindows x86-64

utls-2026.5.30-cp314-cp314t-win32.whl (1.1 MB view details)

Uploaded CPython 3.14tWindows x86

utls-2026.5.30-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.30-cp314-cp314t-musllinux_1_1_armv7l.whl (7.4 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.1+ ARMv7l

utls-2026.5.30-cp314-cp314t-musllinux_1_1_aarch64.whl (7.6 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.1+ ARM64

utls-2026.5.30-cp314-cp314t-manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

utls-2026.5.30-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

utls-2026.5.30-cp314-cp314t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl (2.2 MB view details)

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

utls-2026.5.30-cp313-cp313t-win_arm64.whl (1.1 MB view details)

Uploaded CPython 3.13tWindows ARM64

utls-2026.5.30-cp313-cp313t-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.13tWindows x86-64

utls-2026.5.30-cp313-cp313t-win32.whl (1.1 MB view details)

Uploaded CPython 3.13tWindows x86

utls-2026.5.30-cp313-cp313t-musllinux_1_1_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.1+ x86-64

utls-2026.5.30-cp313-cp313t-musllinux_1_1_armv7l.whl (7.4 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.1+ ARMv7l

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

Uploaded CPython 3.13tmusllinux: musl 1.1+ ARM64

utls-2026.5.30-cp313-cp313t-manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

utls-2026.5.30-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ x86-64

utls-2026.5.30-cp313-cp313t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl (2.2 MB view details)

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

utls-2026.5.30-cp37-abi3-win_arm64.whl (1.1 MB view details)

Uploaded CPython 3.7+Windows ARM64

utls-2026.5.30-cp37-abi3-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.7+Windows x86-64

utls-2026.5.30-cp37-abi3-win32.whl (1.1 MB view details)

Uploaded CPython 3.7+Windows x86

utls-2026.5.30-cp37-abi3-musllinux_1_1_x86_64.whl (8.0 MB view details)

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

utls-2026.5.30-cp37-abi3-musllinux_1_1_armv7l.whl (7.4 MB view details)

Uploaded CPython 3.7+musllinux: musl 1.1+ ARMv7l

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

Uploaded CPython 3.7+musllinux: musl 1.1+ ARM64

utls-2026.5.30-cp37-abi3-manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.28+ ARM64

utls-2026.5.30-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

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

utls-2026.5.30-cp37-abi3-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl (2.3 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.30.tar.gz.

File metadata

  • Download URL: utls-2026.5.30.tar.gz
  • Upload date:
  • Size: 117.1 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.30.tar.gz
Algorithm Hash digest
SHA256 4d09c6b8b3891899a4ef20981bd4ca83428b83b796e78f8545b178c117bc1757
MD5 60467f54bad7e8aca5bfbb3d2ea110d0
BLAKE2b-256 b3850188e5d446d1a8d7b2cbe323879e78df9e6e471dceb8bc5493462bca568f

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.30.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.30-cp314-cp314t-win_arm64.whl.

File metadata

  • Download URL: utls-2026.5.30-cp314-cp314t-win_arm64.whl
  • Upload date:
  • Size: 1.1 MB
  • 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.30-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 c9111c714b6ae55c4eca12798b070881d24b0e60ad49e054e3023f5468da48d5
MD5 3b8374acad7277f59cd0213cada3f800
BLAKE2b-256 21374d7b3f4d930e57bea8ae14fdcbebad5fa9f0dce17e866f47b15cc11bb989

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: utls-2026.5.30-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 1.3 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.30-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 3d9ce837517622c393652074833c7600b9293b23a531666c261d2f39c7c7feb6
MD5 3319236fc4da97159cd6e9b2e359fe78
BLAKE2b-256 8726bfb0f4846ea8fa4a8e81eaa3f3a18ed07b75f1d2dd65b5cb15493d53d34b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: utls-2026.5.30-cp314-cp314t-win32.whl
  • Upload date:
  • Size: 1.1 MB
  • 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.30-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 31500aa1b5941b1f7402f804e996fbfa385e208b29adbf27aba48017c0afc96f
MD5 86d1f18962cb79b4685fd403b17641f4
BLAKE2b-256 e1bf0465627400a85ae69bf6c83937ec293ec94ec2fec76619ed1082b72339c0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp314-cp314t-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 8794115d0f0043821a6add45f4ef0f07ee710f9d5463e52fd09eb2f5f1df63f9
MD5 0a4f3ce0cca966ffe3f9c4c587337ee4
BLAKE2b-256 36a490d83ed8b3ae5c7f38dbc54e550244406230c7a950544a708d062830e321

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp314-cp314t-musllinux_1_1_armv7l.whl
Algorithm Hash digest
SHA256 aaa95e8679eb2ee1df4cf548e9f8007d2c476f8dcd0a6492c040231e7639d532
MD5 0ab01233c1cf321daaeae3feb655d745
BLAKE2b-256 66f7ec0a83fd1cdd5cfbf02e1953ce798477b5116c6fd050c1f90c01c08b79e0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp314-cp314t-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 a21bd9a956d647920a756e286a37a3d93a7cf06bf917147189513da6db7a7caa
MD5 780f2e5f1dd0928c85ccc7c4ffbe234e
BLAKE2b-256 310c8794f0920cffb12b86f74fc53c0d437e0d4afc463c4a588f4e33afa3e06f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 413f52e4f3827a1161b9ca4c409e347ad02c71b2d1e9dd4807517a9ab10f22b0
MD5 c848e881bd4e1679d464075d691e0879
BLAKE2b-256 bc564e233a9526a54c50b9c30f4d2d429b00f9c5244b0be51d3676d5404f0773

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a50047600f675a017c7b016f43bddda9f481f96adffbfd850a7b042089ddb503
MD5 c6948a7bf31c8754772b06a5849d9bb6
BLAKE2b-256 f8f6e281441db5dd499c60061d658938345fe35b50e450ec158f4209563691f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.30-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.30-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.30-cp314-cp314t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 0e688ab10c7a53e421cc2cbf2da2fafe61eeed8267edda4d636f911bbb5df30a
MD5 a242c12b472283be61ada65815bdb444
BLAKE2b-256 f08bb07d5f621f1469229d0c5c68f49f65de5215cd39b77d94a6b901697c7509

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: utls-2026.5.30-cp313-cp313t-win_arm64.whl
  • Upload date:
  • Size: 1.1 MB
  • 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.30-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 133f73e266f8a460ca80fc7a5dec50b5156f4094f40b9156e970ee6b76509dc2
MD5 788116c7e5482b017df0ed9c54918b35
BLAKE2b-256 cddd429f9510475de69950d06723182bfcddb968cb2223bb7e694548623705e9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: utls-2026.5.30-cp313-cp313t-win_amd64.whl
  • Upload date:
  • Size: 1.3 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.30-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 6849f90e3ebc8de145dcb69ec13a42a265f0577db5b3282891077f858738943b
MD5 8f10a677fe8157bb63b8f5eee4d4d684
BLAKE2b-256 4b7e2f8727a34396964c545e122566d8329755da90cbb75508b3915a45f6e62a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: utls-2026.5.30-cp313-cp313t-win32.whl
  • Upload date:
  • Size: 1.1 MB
  • 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.30-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 f17d6da07340b691f8e113579bcba66f246270cb5e997a1b6604cae0c235617a
MD5 d01451380f1ac53d5e2dd8d3f461a668
BLAKE2b-256 8e95647f5ee920c104d11f50e266c45d5b8142c90a6aa23049cf8f396d70e871

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp313-cp313t-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 e645f84650afaee4331340c583f8034405c0f5a6abc9581486d1b13e07eae711
MD5 fc692adc34fbaef6ddae1a524d7f8572
BLAKE2b-256 0ce3ede03047e83ff4421c1a4301158e736f5b4539dcf395de5cda4b3a3641d0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp313-cp313t-musllinux_1_1_armv7l.whl
Algorithm Hash digest
SHA256 a838683f5d98e519f213456ea5d46e7cfb1bf9bd82265bd9ccf694187376d8b6
MD5 5d8be196b47df51971dd613f74cdf688
BLAKE2b-256 35b3ac5cba505e117afaed8982112676aee0c1523b46e1081440f4a8ae70ee04

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp313-cp313t-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 5bcfc5ebf938382631027ce0fb6e64dce2e72296edb1307e95808bb481895fa5
MD5 252f093b2eaeb5b48dfeb8cca45c7ade
BLAKE2b-256 6fab8fe70f1b5e05a29e7341949dd700aa2ffd536f450689ef5ac70ad371337c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 24f20c06bf590e04f03e04f8825a98041e460a8c3ce488c6fa0057c803c1e6d2
MD5 dc28e9476e8d9097b94274aac4fa76e9
BLAKE2b-256 9e71cb61698f5fae4c278b340aadd227df1483ae37810edc218ce4ae4f97da24

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b3dd8360833db2e0bc9c28273d7475dd686e54eb54cf3e8eb9033594b3b01268
MD5 17549474e1df4e09d9b34884b8b0583d
BLAKE2b-256 a9905cafedbe5f86858c27ede1b089f35af83b363a7f5c67e6ce4c7d2639ae94

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.30-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.30-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.30-cp313-cp313t-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 cce6fa6e3d29a48412002ff28062398918ada2f6144ec27bf9fe6dbec95a6055
MD5 3dd80621690654052da1c80f85b9f565
BLAKE2b-256 aeafb4b8bdb0cbbe815f29d65fda33d18e8041a00f9b111a287400d2b9048813

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: utls-2026.5.30-cp37-abi3-win_arm64.whl
  • Upload date:
  • Size: 1.1 MB
  • 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.30-cp37-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 0690321d8bac0842127cf63d29e9b9fa18ebe3a76cd2ddb79cb658d351d65de4
MD5 03b9abb88a3a42f5baeb91da7986caaa
BLAKE2b-256 5a9dda6ed210a59cb90e02e104403e77ba13d7df9c04bc3bce8637adc320744f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: utls-2026.5.30-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.3 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.30-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 8f5fe2d30270ad5191dff4bc84ba1a5fdb62b2225248b65631752244fd6ea81b
MD5 2dee9d5e32dbc5f0b9aee91b5ddfd3d4
BLAKE2b-256 caf559576fc21036865af8840bf4b72fbdd780f625d0f25a11b7e6f32368cde8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: utls-2026.5.30-cp37-abi3-win32.whl
  • Upload date:
  • Size: 1.1 MB
  • 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.30-cp37-abi3-win32.whl
Algorithm Hash digest
SHA256 e1f4d5f7476bfa1b56116b0a0f7b9ea21f7f684c93e95f12d3381927464e302d
MD5 8105bc752e34f705380adceb65e1b3ea
BLAKE2b-256 1a4479df8b77eb0802bab766c1283307061b1730bc0c4790a0ea14e4be01cfe9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp37-abi3-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 5ff956ed9ac8b2c7ba848b989cc74aa5d32428b0f54175f247a7caf8ccf91fb1
MD5 0db96a9523495689898f50b2757033b9
BLAKE2b-256 de9f9b878c9f56ae2473b4a35c638f84d35137d1e32c6dc0a937edadb4cb7fbe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp37-abi3-musllinux_1_1_armv7l.whl
Algorithm Hash digest
SHA256 1745605c7898be13da4b329cc66521bd33a484946984c228494091255a8f14b8
MD5 09c81aa5b904620092f0c25bda3a9d23
BLAKE2b-256 0be4e133ef990cb8c692d5666d3b74a6f68478f5347f778aca974ba2f4ea5011

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp37-abi3-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 5ecd79e159af5f9b8e128ac48120117a360ba43038048d6897821c8b0200dde9
MD5 d6a295e7ccdd341149ebc1c688aad8a4
BLAKE2b-256 6e6cab386374ab09938f9804cc598bb5c3bed4cad5401c809dc1cd643817a6c8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp37-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 85503511825fb4eb8b314272f45e0812145e7aecb05f21ee2e4fcfed59ccea23
MD5 320f46c471e4b4241072b4a083c61ddb
BLAKE2b-256 eb2c80ebd0e674d1ec1504088b5dda4b84eb2fe811512915d53d7e961c480e63

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for utls-2026.5.30-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c195d7486595d33a4d64b4d7c7f0933076b4bcca0ec156331283f0190f09409e
MD5 e113f8586a1c97d1128e0c87edb052be
BLAKE2b-256 343a5cbfe9adb054b816e8f00db9eb7d0272ca027f0e532eca49f10e818bab88

See more details on using hashes here.

Provenance

The following attestation bundles were made for utls-2026.5.30-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.30-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.30-cp37-abi3-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 de1814ecd4594f02f475be9aec2b22c628d49a4e751dd2f3165f48785e45694d
MD5 25e9c0b80b77bfa61c98ab9eee35b605
BLAKE2b-256 9f5d4d549a917ed44d628e52c2f434478b8db9c4f4a9c250fdbe9032f6deada2

See more details on using hashes here.

Provenance

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