Advanced Encryption Standard (AES) NumPy implementation
Project description
npaes
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7a72cbf81427d80207f9dc3d8cfee70e70a8e31fef9849f5279d924939b4167
|
|
| MD5 |
95b8e41f296686be65d4306f0dc141e2
|
|
| BLAKE2b-256 |
9e978bd939bc8ff04a189e4393ca6cd4e6df41530ae45199aaf142d5e9daff9a
|
Provenance
The following attestation bundles were made for npaes-0.4.tar.gz:
Publisher:
publish.yml on bsolomon1124/npaes
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
npaes-0.4.tar.gz -
Subject digest:
c7a72cbf81427d80207f9dc3d8cfee70e70a8e31fef9849f5279d924939b4167 - Sigstore transparency entry: 1340027122
- Sigstore integration time:
-
Permalink:
bsolomon1124/npaes@36ca5510842bfd33a82e2a2d4ed3f015a2aa8582 -
Branch / Tag:
refs/tags/v0.4 - Owner: https://github.com/bsolomon1124
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@36ca5510842bfd33a82e2a2d4ed3f015a2aa8582 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f718658a18a9137698a089377f825a99fcb6d55e62a79a61fee317387a417165
|
|
| MD5 |
22870c5a002d4e1c95dee69cc8eb9385
|
|
| BLAKE2b-256 |
1c0df6913a929df787ade8a990fc54b2a313578c2d03c20611da9b3361e5ac15
|
Provenance
The following attestation bundles were made for npaes-0.4-py3-none-any.whl:
Publisher:
publish.yml on bsolomon1124/npaes
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
npaes-0.4-py3-none-any.whl -
Subject digest:
f718658a18a9137698a089377f825a99fcb6d55e62a79a61fee317387a417165 - Sigstore transparency entry: 1340027126
- Sigstore integration time:
-
Permalink:
bsolomon1124/npaes@36ca5510842bfd33a82e2a2d4ed3f015a2aa8582 -
Branch / Tag:
refs/tags/v0.4 - Owner: https://github.com/bsolomon1124
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@36ca5510842bfd33a82e2a2d4ed3f015a2aa8582 -
Trigger Event:
push
-
Statement type: