Skip to main content

Advanced Encryption Standard (AES) NumPy implementation

Project description

npaes

PyPI version Python versions License: Apache-2.0

Advanced Encryption Standard (AES) NumPy implementation.

Warning: incomplete and not suitable for production use. See the Caution section.

Overview

This package implements the Advanced Encryption Standard (AES) as specified in Federal Information Processing Standards Publication 197 ("FIPS 197"):

https://csrc.nist.gov/publications/detail/fips/197/final

It is based entirely and solely on FIPS 197. The tests in tests/test_npaes.py use the full set of example vectors from Appendices A, B, and C of FIPS 197. npaes supports AES-128, AES-192, and AES-256.

Its sole dependency is NumPy. It does not use OpenSSL or any other C libraries besides the portions of NumPy that are implemented in C.

Additional technical notes can be found in the docstring of src/npaes/__init__.py.

Installation

From PyPI:

pip install npaes

Or with uv:

uv add npaes

Basic usage

import os

from npaes import AES

# Key must be bytes type and 128, 192, or 256 bits.
# Or use hashlib.sha256() for an off-length key.
key = os.urandom(32)  # 256-bit key

# Your plaintext must be bytes and a multiple of 16 bytes long.
msg = b"a secret message goes here" + 6 * b"\x03"
cipher = AES(key)
ciphertext = cipher.encrypt(msg)

print(ciphertext)
# b'a\x85cna\xc2\xeeu\xe9S\xdf\xabE\x0c\xda\xf4\x19\x11\xa3!\xdd\x96-\x85\x10f\xd4\x18;s%\x81'
print(cipher.decrypt(ciphertext))
# b'a secret message goes here\x03\x03\x03\x03\x03\x03'

Caution

This package is incomplete. While the raw encryption and decryption are fully tested using the FIPS 197 example vectors, it is incomplete for the following reasons:

  • It does not allow you to specify an initialization vector (IV).
  • It does not allow you to specify a block mode.
  • It is optimized in most places but not all, and has little to no chance of ever being as fast as the optimized ANSI C version in OpenSSL.

Development

This project uses uv with the uv_build backend and a src/ layout.

uv sync                                         # install deps
uv run pytest                                   # tests + coverage
uv run ruff check && uv run ruff format --check # lint + format
uv run ty check                                 # type check
uv build                                        # build sdist + wheel

See CHANGELOG.md for release notes.

License

Apache-2.0. See LICENSE.

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

npaes-0.4.tar.gz (16.2 kB view details)

Uploaded Source

Built Distribution

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

npaes-0.4-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

Details for the file npaes-0.4.tar.gz.

File metadata

  • Download URL: npaes-0.4.tar.gz
  • Upload date:
  • Size: 16.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for npaes-0.4.tar.gz
Algorithm Hash digest
SHA256 c7a72cbf81427d80207f9dc3d8cfee70e70a8e31fef9849f5279d924939b4167
MD5 95b8e41f296686be65d4306f0dc141e2
BLAKE2b-256 9e978bd939bc8ff04a189e4393ca6cd4e6df41530ae45199aaf142d5e9daff9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for npaes-0.4.tar.gz:

Publisher: publish.yml on bsolomon1124/npaes

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

File details

Details for the file npaes-0.4-py3-none-any.whl.

File metadata

  • Download URL: npaes-0.4-py3-none-any.whl
  • Upload date:
  • Size: 16.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for npaes-0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 f718658a18a9137698a089377f825a99fcb6d55e62a79a61fee317387a417165
MD5 22870c5a002d4e1c95dee69cc8eb9385
BLAKE2b-256 1c0df6913a929df787ade8a990fc54b2a313578c2d03c20611da9b3361e5ac15

See more details on using hashes here.

Provenance

The following attestation bundles were made for npaes-0.4-py3-none-any.whl:

Publisher: publish.yml on bsolomon1124/npaes

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