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

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

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

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.4.1.tar.gz (242.2 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.4.1-cp314-cp314-win_amd64.whl (407.8 kB view details)

Uploaded CPython 3.14Windows x86-64

aeg-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (383.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

aeg-0.4.1-cp314-cp314-macosx_15_0_arm64.whl (138.6 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

aeg-0.4.1-cp313-cp313-win_amd64.whl (406.6 kB view details)

Uploaded CPython 3.13Windows x86-64

aeg-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (383.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

aeg-0.4.1-cp313-cp313-macosx_15_0_arm64.whl (270.9 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

aeg-0.4.1-cp312-cp312-win_amd64.whl (406.7 kB view details)

Uploaded CPython 3.12Windows x86-64

aeg-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (383.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

aeg-0.4.1-cp312-cp312-macosx_15_0_arm64.whl (138.7 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

aeg-0.4.1-cp311-cp311-win_amd64.whl (406.3 kB view details)

Uploaded CPython 3.11Windows x86-64

aeg-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (383.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

aeg-0.4.1-cp311-cp311-macosx_15_0_arm64.whl (271.1 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

aeg-0.4.1-cp310-cp310-win_amd64.whl (406.3 kB view details)

Uploaded CPython 3.10Windows x86-64

aeg-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (383.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

aeg-0.4.1-cp310-cp310-macosx_15_0_arm64.whl (271.1 kB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

File details

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

File metadata

  • Download URL: aeg-0.4.1.tar.gz
  • Upload date:
  • Size: 242.2 kB
  • Tags: Source
  • 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.4.1.tar.gz
Algorithm Hash digest
SHA256 c73cba37fa26dcddadf5db561ffdb59ea366ff12f93773f6c3475ade52d79f71
MD5 5e1876734c39fdd9c95771d296e0ee0f
BLAKE2b-256 16322cc8ab26c430870f54026968bd61d43678883c7d03e81a12667e1a14e921

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: aeg-0.4.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 407.8 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.8

File hashes

Hashes for aeg-0.4.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 85c7e4388f9d8ad8379f111a145b4e9627ba120e9bf71cfe3a2313eed29e1358
MD5 d11e26f64a7b1bb217909cbb12b5ffc6
BLAKE2b-256 e4b456a7317ea01320bb0b71092bbb79f251d72a5cc6900131b01b0b1b5bb653

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for aeg-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 e4ea8eb22b8e8579f1838dbd7f47fabb6bae783f3c9b5fee343bbbbb42895827
MD5 bebbd7c219880b5dd4cd3f4446e18957
BLAKE2b-256 f0a382d19ce050a370dd800914d351ea57b4a86aeefc29effc99a13e5c48fa7a

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

  • Download URL: aeg-0.4.1-cp314-cp314-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 138.6 kB
  • Tags: CPython 3.14, macOS 15.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.4.1-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 d42c953df5349f7058c86990c414eefc34df3191b8cd0eeaf40b294d2115deb5
MD5 acbe2c3be3122e2a3a206f8519e75b71
BLAKE2b-256 1d9ca4e877396be6e5f724c850d34ebda76da7a161170ecc9236add11c1a4bf5

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: aeg-0.4.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 406.6 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.8

File hashes

Hashes for aeg-0.4.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 cad3e26356ffe84fb90f42d2788940723a32f8a831441598a6e392d9af71fbb0
MD5 1ba6ea9809318c1b70b9e8dfa3c337c3
BLAKE2b-256 96c85cf6dedb6c792068d283c789bc9077be7f2c659cd63955b0fa85d6e5c412

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for aeg-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 601d539697b52c3ceac6f752398fbdd67f972bf82b7a10c68d5209663a78696d
MD5 8df0b4cd6f512ceb13e498f3141a4639
BLAKE2b-256 0a5cf30b6911bc1167b1010f63b8c47650bf0ed12d4f92b6e6ed2644b046b23a

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

  • Download URL: aeg-0.4.1-cp313-cp313-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 270.9 kB
  • Tags: CPython 3.13, macOS 15.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.4.1-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4919fc19908592dbad8644df8867d196fb1a3f616c6e38055e1d4d734cb80d74
MD5 1e062b67e239062bb722d10b023b9875
BLAKE2b-256 2bc2b5b55e2912bf016c80b97fbc987e26e28448c050c8c0f5d764c134a74a1c

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: aeg-0.4.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 406.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.8

File hashes

Hashes for aeg-0.4.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 40e45a74c2d4048dae69f97854517d859fa39eb70a21f5852e6c751da1ef1473
MD5 812bb20dac6e510f8655bcd07aa415e2
BLAKE2b-256 69c9ae71e08ca02b4303cdf84525440df36bfe47de20a7e6b22ff58aec3dc6cf

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for aeg-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 26a639afb583a9cef2108ef2ea361dc974874c1c5fd9de5bf73426c3f5d39aba
MD5 344ec60eb10d9ac46bc621b77e3e8729
BLAKE2b-256 df6d9c2a0afcf004206079776ccecb90ec7b60904aa59b29e8fa034574f7abfe

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

  • Download URL: aeg-0.4.1-cp312-cp312-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 138.7 kB
  • Tags: CPython 3.12, macOS 15.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.4.1-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 38751b19abd53fe561fde5433c4a6e18aabaaea38347d28957f877ea777a1d6e
MD5 c17d42dd3cf52b0c3b41c11b5dbe9f28
BLAKE2b-256 e9855e5807d11443d7be000e888bc15641d805e1aafd8a1944d9990b4aa171da

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: aeg-0.4.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 406.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.8

File hashes

Hashes for aeg-0.4.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0c14350c823ff2aedb776afc6011c22f819655e8b5f93a02b94bfd1c45090dfc
MD5 f0340c3b0bec6244c86dd509c37aa379
BLAKE2b-256 9d5b0043b016bb800a33093bd7b9a70073b12ac23336077bd9e3fa66170e3b5c

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for aeg-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 c50409d912d8288532c3b049faf0dcea7ea839d544960a73dea812b164e3eed8
MD5 8adf9746c68ea0ed52f2e2675ef5bd09
BLAKE2b-256 1ab8235c6fb9c42b74007a73e20be71005e3311597a346794e7e48933fa21c18

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

  • Download URL: aeg-0.4.1-cp311-cp311-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 271.1 kB
  • Tags: CPython 3.11, macOS 15.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.4.1-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 f48f33a99e139225efb5aae79b5443084349802f0076fd80c9b76770aae04d71
MD5 a282260b1627493874b8ce5fbac70716
BLAKE2b-256 36e713fcd852985701a017d5d2b87abfc52db3166c1111ee6bee24cf0462b55b

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: aeg-0.4.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 406.3 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.8

File hashes

Hashes for aeg-0.4.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 16c7b6f10001ad5aeffd5c06b920230f8cc9c74a22c2e98b1f6481895dd2b4d4
MD5 69983e462a49a523744909ca4122438f
BLAKE2b-256 a4021c5bb890ee2af9c2f611eff6f914fae1405227f81b8d7693cf5f211a5b46

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for aeg-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 9ba38539c453b85bdb8b800c4034410869b908e7d447e19fca91943358168aca
MD5 da6b236f6712808ab16d82361010e954
BLAKE2b-256 c782142a1a6818569bda697abeda859dfb64e68cc16c4eb3a5ca6fed06ce531f

See more details on using hashes here.

File details

Details for the file aeg-0.4.1-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

  • Download URL: aeg-0.4.1-cp310-cp310-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 271.1 kB
  • Tags: CPython 3.10, macOS 15.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.4.1-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 f97e7eb719ed6c9acd4739d8c94489a7b0425bb9a600692effc4ca0de08628c6
MD5 1d0d300823a297e1c9ca88859723a1ca
BLAKE2b-256 aee5677bfb28da1df55da11178637d016c9a4184211349feb784a0e5bdcfa291

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