Skip to main content

AEGIS encryption easy to use Python binding. Wheels for major platforms.

Project description

AEGIS Cipher Python Binding

PyPI version

Safe Python bindings for the AEGIS family of very fast authenticated encryption algorithms via libaegis. The module runs without compilation required on Windows, Mac and Linux (has precompiled wheels). For other platforms compilation is performed at install time.

AEGIS enables extremely fast Encryption, MAC and CSPRNG - many times faster than AES, ChaCha20 or traditional random number generators. Authenticated Encryption with Additional Data is supported with the MAC derived from the cipher state at the end, making it different from other AEADs like AES-GCM and ChaCha20-Poly1305. The whole internal state thus depends on the prior data, and it is neither Encrypt-Then-Mac nor Mac-The-Encrypt scheme when both features are used together.

Install

pip install aeg

Or add to your project using UV:

uv add aeg

Quick start

Normal authenticated encryption using the AEGIS-128X4 algorithm:

from aeg import aegis128x4 as ciph

key = ciph.random_key()      # Secret key (stored securely)
nonce = ciph.random_nonce()  # Public nonce (recreated for each message)
msg = b"hello"

ct = ciph.encrypt(key, nonce, msg)
pt = ciph.decrypt(key, nonce, ct)   # Raises ValueError if anything was tampered with
assert pt == msg

Variants

All submodules expose the same API; pick one for your needs. The 256 bit variants offer maximal security and use larger key and nonce, while the 128 bit variants run slightly faster and use smaller key and nonce while still providing strong security. The MAC length does not depend on the variant. Note that the x2 and x4 variants are typically the fastest (depending on CPU) by utilizing SIMD multi-lane processing for the highest throughput.

Variant Key/Nonce Bytes Notes
aegis128l 16
aegis128x2 16 Fastest on Intel Core
aegis128x4 16 Fastest on AMD and Xeon
aegis256 32
aegis256x2 32 Fast on Intel Core
aegis256x4 32 Fast on AMD and Xeon

Instead of importing the submodules, you can obtain one by its name string:

import aeg

ciph = aeg.cipher("AEGIS-128X2")   # Also accepts "aegis128x2" and other forms

API overview

Common parameters and returns (applies to all items below):

  • key: bytes of length ciph.KEYBYTES
  • nonce: bytes of length ciph.NONCEBYTES (must be unique per message)
  • message/ct: plain text or ciphertext
  • ad: optional associated data (authenticated, not encrypted)
  • into: optional output buffer (see below)
  • maclen: MAC tag length 16 or 32 bytes (default 16)

Only the first few can be positional arguments that are always provided in this order. All arguments can be passed as kwargs. The inputs can be any Buffer (e.g. bytes, bytearray, memoryview).

Most functions return a buffer of bytes. By default a bytearray of the correct size is returned. An existing buffer can be provided by into argument, in which case the bytes of it that were written to are returned as a memoryview.

One-shot AEAD

Encrypt and decrypt messages with built-in authentication:

  • encrypt(key, nonce, message, ad=None, maclen=16, into=None) -> ct_with_mac
  • decrypt(key, nonce, ct_with_mac, ad=None, maclen=16, into=None) -> plaintext

The MAC tag is handled separately of ciphertext:

  • encrypt_detached(key, nonce, message, ad=None, maclen=16, ct_into=None, mac_into=None) -> (ct, mac)
  • decrypt_detached(key, nonce, ct, mac, ad=None, into=None) -> plaintext

No MAC tag, vulnerable to alterations:

  • encrypt_unauthenticated(key, nonce, message, into=None) -> ciphertext (testing only)
  • decrypt_unauthenticated(key, nonce, ct, into=None) -> plaintext (testing only)

Incremental AEAD

Stateful classes that can be used for processing the data in separate chunks:

  • Encryptor(key, nonce, ad=None, maclen=16)
    • update(message[, into]) -> ciphertext_chunk
    • final([into]) -> mac_tag
  • Decryptor(key, nonce, ad=None, maclen=16)
    • update(ct_chunk[, into]) -> plaintext_chunk
    • final(mac) -> raises ValueError on failure

The object releases its state and becomes unusable after final has been called.

Message Authentication Code

No encryption, but prevents changes to the data without the correct key.

  • mac(key, nonce, data, maclen=16, into=None) -> mac bytes
  • Mac(key, nonce, maclen=16)
    • update(data)
    • final([into]) -> mac bytes
    • verify(mac) -> raises ValueError on failure
    • digest() -> mac bytes
    • hexdigest() -> mac str
    • reset()
    • clone() -> Mac

The Mac class follows the Python hashlib API for compatibility with code expecting hash objects. After calling final(), digest(), or hexdigest(), the Mac object becomes unusable for further update() operations. However, digest() and hexdigest() cache their results and can be called multiple times. Use reset() to clear the state and start over, or clone() to create a copy before finalizing.

Keystream generation

Useful for creating pseudo random bytes as rapidly as possible. Reuse of the same (key, nonce) creates identical output.

  • stream(key, nonce=None, length=None, into=None) -> randombytes

Miscellaneous

Constants (per module): NAME, KEYBYTES, NONCEBYTES, MACBYTES, MACBYTES_LONG, RATE, ALIGNMENT

  • random_key() -> bytearray (length KEYBYTES)
  • random_nonce() -> bytearray (length NONCEBYTES)
  • nonce_increment(nonce)
  • wipe(buffer)

Exceptions

  • Authentication failures raise ValueError.
  • Invalid sizes/types raise TypeError.
  • Unexpected errors from libaegis raise RuntimeError.

Examples

Authentication only

A cryptographically secure keyed hash is produced. The example uses all zeroes for the nonce to always produce the same hash for the same key:

from aeg import aegis256x4 as ciph
key, nonce = ciph.random_key(), bytes(ciph.NONCEBYTES)

mac = ciph.mac(key, nonce, b"message", maclen=32)
print(mac.hex())

# Alternative class-based API
a = ciph.Mac(key, nonce, maclen=32)
a.update(b"message")
print(a.hexdigest())

# Verification
b = ciph.Mac(key, nonce, maclen=32)
b.update(b"message")
b.update(b"Mallory Says Hello!")
b.verify(mac)  # Raises ValueError

Detached mode encryption and decryption

Keeping the ciphertext, mac and ad separate. The ad represents a file header that needs to be tamper proofed.

from aeg import aegis256x4 as ciph
key, nonce = ciph.random_key(), ciph.random_nonce()

ct, mac = ciph.encrypt_detached(key, nonce, b"secret", ad=b"header")
pt = ciph.decrypt_detached(key, nonce, ct, mac, ad=b"header")
print(ct, mac, pt)

ciph.wipe(key)  # Zero out sensitive buffers after use (recommended)
ciph.wipe(pt)

Incremental updates

Class-based interface for incremental updates is an alternative to the one-shot functions. Not to be confused with separately verified ciphertext frames (see the next example).

from aeg import aegis256x4 as ciph
key, nonce = ciph.random_key(), ciph.random_nonce()

enc = ciph.Encryptor(key, nonce, ad=b"header", maclen=16)
c1 = enc.update(b"chunk1")
c2 = enc.update(b"chunk2")
mac = enc.final()

dec = ciph.Decryptor(key, nonce, ad=b"header", maclen=16)
p1 = dec.update(c1)
p2 = dec.update(c2)
dec.final(mac)               # raises ValueError on failure

Large data AEAD encryption/decryption

It is often practical to split larger messages into frames that can be individually decrypted and verified. Because every frame needs a different key, we employ the nonce_increment utility function to produce sequential nonces for each frame. As for the AEGIS algorithm, each frame is a completely independent invocation. The program will each time produce a completely different random-looking encrypted.bin file.

# Encryption settings
from aeg import aegis128x4 as ciph
key = b"sixteenbyte key!"  # 16 bytes secret key for aegis128* algorithms
framebytes = 80  # In real applications 1 MiB or more is practical
maclen = ciph.MACBYTES  # 16

message = bytearray(30 * b"Attack at dawn! ")
with open("encrypted.bin", "wb") as f:
    # Public initial nonce sent with the ciphertext
    nonce = ciph.random_nonce()
    f.write(nonce)
    while message:
        chunk = message[:framebytes - maclen]
        del message[:len(chunk)]
        ct = ciph.encrypt(key, nonce, chunk, maclen=maclen)
        ciph.nonce_increment(nonce)
        f.write(ct)
# Decryption needs same values as encryption
from aeg import aegis128x4 as ciph
key = b"sixteenbyte key!"
framebytes = 80
maclen = ciph.MACBYTES

with open("encrypted.bin", "rb") as f:
    nonce = bytearray(f.read(ciph.NONCEBYTES))
    while True:
        frame = f.read(framebytes)
        if not frame:
            break
        pt = ciph.decrypt(key, nonce, frame, maclen=maclen)
        ciph.nonce_increment(nonce)
        print(pt)

Random generator

The stream generator is much faster than any traditional random number generator, cryptographically secure and seekable. Use random_key() for unpredictable output.

from aeg import aegis128x4 as ciph

key = b"SeedForReplay001"  # A non-random deterministic seed (16 bytes)
nonce = bytearray(ciph.NONCEBYTES)  # All-zeroes nonce

# Generate multiple blocks of pseudorandom data
for i in range(5):
    rand = ciph.stream(key, nonce, 10)
    print(f"Block {int.from_bytes(nonce, "little")}: {rand.hex()}")
    ciph.nonce_increment(nonce)

Note: this is seekable by converting the block number to nonce with idx.to_bytes(ciph.NONCEBYTES, "little"), given some fixed block size (e.g. 1 MiB).

Preallocated output buffers (into=)

For advanced use cases, the output buffer can be supplied with into kwarg. Any type of writable buffer with a sufficient number of bytes can be used. This includes bytearrays, memoryviews, mmap files, numpy arrays etc.

A TypeError is raised if the buffer is too small. For convenience, the functions return a memoryview showing only the bytes actually written.

Foreign arrays can be used. This example fills a Numpy array with random integers.

import numpy as np
from aeg import aegis128x4 as ciph
key, nonce = ciph.random_key(), ciph.random_nonce()

arr = np.empty(10, dtype=np.uint64)  # Uninitialised integer array
ciph.stream(key, nonce, into=arr)    # Fill with random bytes
print(arr)

In-place operations are supported when the input and the output point to the same location in memory. When using attached MAC tag, the input buffer needs to be sliced to correct length:

from aeg import aegis256x4 as ciph
key, nonce = ciph.random_key(), ciph.random_nonce()
buf = memoryview(bytearray(1000))  # memoryview[:len] is still in the same buffer (no copy)
buf[:7] = b"message"

# Each function returns a memoryview capped to correct length
ct = ciph.encrypt(key, nonce, buf[:7], into=buf)
pt = ciph.decrypt(key, nonce, ct, into=buf)

print(bytes(pt))

Detached and unauthenticated modes can use same size input and output (no MAC added to ciphertext). Detached encryption instead of into takes ct_into and mac_into separately and returns memoryviews to both.

Performance

Runtime CPU feature detection selects optimized code paths (AES-NI, ARM Crypto, AVX2/AVX-512). Multi-lane variants (x2/x4) offer higher throughput on suitable CPUs.

Benchmarks using the included benchmark module, run on Intel i7-14700, linux, single core (the software is not multithreaded). Note that the results are in megabits per second, not bytes. The CPU lacks AVX-512 that makes the X4 variants faster on processors supporting it (most AMD, Xeon).

uv run -m aeg.benchmark
AEGIS-256        103166.24 Mb/s
AEGIS-256X2      184225.50 Mb/s
AEGIS-256X4      194018.26 Mb/s
AEGIS-128L       161551.73 Mb/s
AEGIS-128X2      281987.80 Mb/s
AEGIS-128X4      217997.37 Mb/s
AEGIS-128L MAC   188886.40 Mb/s
AEGIS-128X2 MAC  306457.97 Mb/s
AEGIS-128X4 MAC  299576.59 Mb/s
AEGIS-256 MAC    100914.04 Mb/s
AEGIS-256X2 MAC  190208.20 Mb/s
AEGIS-256X4 MAC  315919.87 Mb/s

The Python library performance is similar to that of the C library:

./libaegis/zig-out/bin/benchmark
AEGIS-256        107820.86 Mb/s
AEGIS-256X2      205025.57 Mb/s
AEGIS-256X4      223361.81 Mb/s
AEGIS-128L       187530.77 Mb/s
AEGIS-128X2      354003.14 Mb/s
AEGIS-128X4      218596.59 Mb/s
AEGIS-128L MAC   224276.49 Mb/s
AEGIS-128X2 MAC  417741.65 Mb/s
AEGIS-128X4 MAC  410454.05 Mb/s
AEGIS-256 MAC    116776.62 Mb/s
AEGIS-256X2 MAC  224150.04 Mb/s
AEGIS-256X4 MAC  392088.05 Mb/s

Alternatives

There is also a package named pyaegis on PyPI that is unrelated to this module, but that also binds to the libaegis C library. There are also a number of modules named aegis from different packages not at all related to the encryption algorithm.

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

aeg-0.9.0.tar.gz (152.0 kB view details)

Uploaded Source

Built Distributions

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

aeg-0.9.0-pp311-pypy311_pp73-win_amd64.whl (174.3 kB view details)

Uploaded PyPyWindows x86-64

aeg-0.9.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (175.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

aeg-0.9.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl (110.7 kB view details)

Uploaded PyPymacOS 11.0+ ARM64

aeg-0.9.0-pp310-pypy310_pp73-win_amd64.whl (174.3 kB view details)

Uploaded PyPyWindows x86-64

aeg-0.9.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (175.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

aeg-0.9.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl (110.8 kB view details)

Uploaded PyPymacOS 11.0+ ARM64

aeg-0.9.0-cp315-cp315t-win_amd64.whl (202.6 kB view details)

Uploaded CPython 3.15tWindows x86-64

aeg-0.9.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (373.7 kB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

aeg-0.9.0-cp315-cp315t-macosx_11_0_arm64.whl (135.3 kB view details)

Uploaded CPython 3.15tmacOS 11.0+ ARM64

aeg-0.9.0-cp314-cp314t-win_amd64.whl (202.6 kB view details)

Uploaded CPython 3.14tWindows x86-64

aeg-0.9.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (373.6 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

aeg-0.9.0-cp314-cp314t-macosx_11_0_arm64.whl (135.3 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

aeg-0.9.0-cp310-abi3-win_amd64.whl (201.1 kB view details)

Uploaded CPython 3.10+Windows x86-64

aeg-0.9.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (360.0 kB view details)

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

aeg-0.9.0-cp310-abi3-macosx_11_0_arm64.whl (134.8 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file aeg-0.9.0.tar.gz.

File metadata

  • Download URL: aeg-0.9.0.tar.gz
  • Upload date:
  • Size: 152.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0.tar.gz
Algorithm Hash digest
SHA256 45ab6b9238fa7bfdce42261c91e370c6e6488b96e481463e0392262fcb0cef19
MD5 33d130a05df3dae1d9a990d0c9cbbf53
BLAKE2b-256 4a1de1ccee86eeb6b4e94ecb2357bad3601926ff1ea4a5b53e087d8c91aa9f14

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-pp311-pypy311_pp73-win_amd64.whl.

File metadata

  • Download URL: aeg-0.9.0-pp311-pypy311_pp73-win_amd64.whl
  • Upload date:
  • Size: 174.3 kB
  • Tags: PyPy, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 e4dc6dfddb19a88fbd4d1e2c356ece47eddf8e776a3d7e3ba5348f901bfb8a24
MD5 91576208b3883e0a6a9c5d39bcc7752d
BLAKE2b-256 fa63efdeaac2b127b7186678dec7da42bd0ea548283734af9eef4e023314d379

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

  • Download URL: aeg-0.9.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
  • Upload date:
  • Size: 175.4 kB
  • Tags: PyPy, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 2cc0dbd8149910a948156d8df790bfc07f10e1e384d1db0b0998e7178e0a9f6b
MD5 9e48fb6cc7d6a7abb20ca077a0db5c56
BLAKE2b-256 59e7853fae6791fe9ebf49f6f30578742557fa69c2f38ddf4d2523ac229ac27f

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl.

File metadata

  • Download URL: aeg-0.9.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 110.7 kB
  • Tags: PyPy, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 15a5ef3283340b536b91c5d74c392f372b6583957ecefca1a35bd867c6e611fd
MD5 22121518b85133b5955e4e025710c7e7
BLAKE2b-256 dd729349db169537a3d1dfafdc04ea23aad30caab88e32f4e699ec29230be826

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-pp310-pypy310_pp73-win_amd64.whl.

File metadata

  • Download URL: aeg-0.9.0-pp310-pypy310_pp73-win_amd64.whl
  • Upload date:
  • Size: 174.3 kB
  • Tags: PyPy, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 08c116f511a66f646c123accb83aa59a7aacd42c386ce95b33cbc04cba8e4065
MD5 498b87956a5dea8a67b523226495889f
BLAKE2b-256 f530e7c51d30c07adaf86a2dfd28d1b7753f8fc284dfee0c92da789401e9a4f7

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

  • Download URL: aeg-0.9.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
  • Upload date:
  • Size: 175.4 kB
  • Tags: PyPy, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 512b06c81ad2b7cb00b599907226fa31d178897948aa6ce3f896d7de18de815c
MD5 bbdbd04faee9ff244b7fff68f0dd9c0c
BLAKE2b-256 cb23b6db15b213717568577920a07e7c850cf13d2bcc08a5f31a980e983ff6e5

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

  • Download URL: aeg-0.9.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 110.8 kB
  • Tags: PyPy, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7efe57322ff072d27c064d67b6eb5966b3c61a956dd19194d5b9ef7ad8215b98
MD5 4b41edec15d62d4161b8bd8a7727586c
BLAKE2b-256 aa12d18815323d0724c702d2e50347eec83f609c0f04517001bd621783d3bbe0

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-cp315-cp315t-win_amd64.whl.

File metadata

  • Download URL: aeg-0.9.0-cp315-cp315t-win_amd64.whl
  • Upload date:
  • Size: 202.6 kB
  • Tags: CPython 3.15t, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-cp315-cp315t-win_amd64.whl
Algorithm Hash digest
SHA256 92a5d7fe6829e780fa9dc342f3e170bf15ee715bd1b104572eb85f21a899b2e5
MD5 ced4f899f73805b47d6ba9c2a49dd921
BLAKE2b-256 242f53e6ef739c4e2ef4687c1178a9b7e1c4d98c97807fd1eb3a492400d80b0b

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

  • Download URL: aeg-0.9.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
  • Upload date:
  • Size: 373.7 kB
  • Tags: CPython 3.15t, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 30d059d0dd4d4251116a3d9676cb051341fef3abaccf70eff81bfe89fb46f75c
MD5 fae188cd229a05bf4763a9f23b0b7a63
BLAKE2b-256 fcb2d0b910f64710578d4c8ee129c1062fe9ea342e4bf40c43a68bddc298cf43

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-cp315-cp315t-macosx_11_0_arm64.whl.

File metadata

  • Download URL: aeg-0.9.0-cp315-cp315t-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 135.3 kB
  • Tags: CPython 3.15t, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-cp315-cp315t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cf9fafc7a42fbc665fb00e30cc7437ea5e950a5ae3567e47f06c54ec04bb996a
MD5 1a0272b858c952cd19c0fefa9bfe0364
BLAKE2b-256 9bc310c41b98182678bb5d0ebc831bfaa4f4aea842056d48931dd7b2caa053f9

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: aeg-0.9.0-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 202.6 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 1733ef0406c16ba5e09e024fc8f90844d65b8a08671d60d94d742c2b60802bd3
MD5 46b97f0143f0d1237e7e66fab2d89fe4
BLAKE2b-256 c1b5d6436f5f2815d36b1c2f0117d92ef8f5967fd6b3e32c7fc528815edba201

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

  • Download URL: aeg-0.9.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
  • Upload date:
  • Size: 373.6 kB
  • Tags: CPython 3.14t, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 f0121f50399173a4e0b688d5e6bbc7cf7a50958a400dee835aee62559adceff2
MD5 1b9b583c3f7b6243835ae69d1ad81f26
BLAKE2b-256 5fd2f09a547f5ca955aec77f7b2dc31b943789eaee85778491f2697349515362

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

  • Download URL: aeg-0.9.0-cp314-cp314t-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 135.3 kB
  • Tags: CPython 3.14t, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c4c85b6eb4b21ff4c113231a672085efe8eeb6617285e0f733ab7a31f1d598a
MD5 a58d9e62ab46c42fe5bb9ecad82041ba
BLAKE2b-256 a8a6e60e19398e1b0a18e702a7038bc15a5d44b5821191ff681e58e4d5f9046a

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: aeg-0.9.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 201.1 kB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e9cd416187c583fa1c2d24e78d672c5da10c7b679f1ec7e8c39bf9dfde078974
MD5 b14d953800d78ac7cb52061e26381fde
BLAKE2b-256 9f25786e2e54c3b089c7334add040dc4dff047fb39c1563a96f21ec44dbe14eb

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

  • Download URL: aeg-0.9.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
  • Upload date:
  • Size: 360.0 kB
  • Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 3d1ec6189031007754c4133b458af4b1ad8e394e2b3fa7fad50bf1f333bdcbf4
MD5 2881d1bf771d54dcecc8eda9f080cf68
BLAKE2b-256 86196ddfdeafa45e10164802c4df14363b23363db66bf50974aee645044343cd

See more details on using hashes here.

File details

Details for the file aeg-0.9.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: aeg-0.9.0-cp310-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 134.8 kB
  • Tags: CPython 3.10+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aeg-0.9.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3105de449aba09266e760ab65a5d3dacd1af9a80a72b772024a591ea100afe73
MD5 0bcb9151d6276ed4dbc5fe39e94fefff
BLAKE2b-256 e116f4cd358a689cb3724cfe5ccbedfe91228ad305a1cc0d5315e82a9f6921e6

See more details on using hashes here.

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