# pymceliece
A Python wrapper for the libmceliece microlibrary
# Installation
## Dependencies
pymceliece depends only on libmceliece (which also depends on libcpucycles and
librandombytes), available [here](https://lib.mceliece.org)
# API
## Instantiated parameters
The API follows the libmceliece API. It implements the following parameter sets:
- mceliece8192128
- mceliece6960119
- mceliece6688128
- mceliece8192128
- mceliece460896
- mceliece348864
- mceliece6960119f
- mceliece6688128f
- mceliece8192128f
- mceliece460896f
- mceliece348864f
Each has the following constants defined:
- mceliecexxxxxxx.PUBLICKEYBYTES
Length of the public key
- mceliecexxxxxxx.SECRETKEYBYTES
Length of the private key
- mceliecexxxxxxx.CIPHERTEXTBYTES
Length of the ciphertext
- mceliecexxxxxxx.BYTES
Length of the session key
## Usage
For each instantiation the following functions are available:
### mcelieceXXXXXXX.keypair() -> Tuple[bytes, bytes]
Randomly generates a McEliece secret key and its corresponding public key.
Example:
```python
>>> from pymceliece import mceliece6960119
>>> pk, sk = mceliece6960119.keypair()
```
### mcelieceXXXXXXX.enc(pk: bytes) -> Tuple[bytes, bytes]
Randomly generates a ciphertext and the corresponding session key given a
public key pk.
Example:
```python
>>> from pymceliece import mceliece8192128f
>>> pk, _ = mceliece8192128f.keypair()
>>> c, k = mceliece8192128f.enc(pk)
```
### mcelieceXXXXXXX.dec(c: bytes, pk: bytes) -> bytes
Given a McEliece secret key sk and a ciphertext c encapsulated to sk's
corresponding public key pk, computes the session key k.
Example:
```python
>>> from pymceliece import mceliece348864f
>>> pk, sk = mceliece348864f.keypair()
>>> c, k = mceliece348864f.enc(pk)
>>> mceliece348864f.dec(c, sk) == k
True
```
Raw data
{
"_id": null,
"home_page": null,
"name": "pymceliece",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "post-quantum, cryptography, McEliece, Classic McEliece, libmceliece, pymceliece",
"author": null,
"author_email": "Jonathan Levin <pymceliece@riseup.net>",
"download_url": "https://files.pythonhosted.org/packages/44/52/aa65129a62f0eb7a81855a4cd25ab9409fdf6e1242fd2eac0fb0ec6f7468/pymceliece-0.0.2.tar.gz",
"platform": null,
"description": "# pymceliece\nA Python wrapper for the libmceliece microlibrary\n\n# Installation\n## Dependencies\npymceliece depends only on libmceliece (which also depends on libcpucycles and\nlibrandombytes), available [here](https://lib.mceliece.org)\n\n# API\n## Instantiated parameters\nThe API follows the libmceliece API. It implements the following parameter sets:\n\n- mceliece8192128\n- mceliece6960119\n- mceliece6688128\n- mceliece8192128\n- mceliece460896\n- mceliece348864\n- mceliece6960119f\n- mceliece6688128f\n- mceliece8192128f\n- mceliece460896f\n- mceliece348864f\n\nEach has the following constants defined:\n- mceliecexxxxxxx.PUBLICKEYBYTES\nLength of the public key\n- mceliecexxxxxxx.SECRETKEYBYTES\nLength of the private key\n- mceliecexxxxxxx.CIPHERTEXTBYTES\nLength of the ciphertext\n- mceliecexxxxxxx.BYTES\nLength of the session key\n\n## Usage\nFor each instantiation the following functions are available:\n### mcelieceXXXXXXX.keypair() -> Tuple[bytes, bytes]\n\nRandomly generates a McEliece secret key and its corresponding public key.\n\nExample:\n```python\n>>> from pymceliece import mceliece6960119\n>>> pk, sk = mceliece6960119.keypair()\n```\n\n### mcelieceXXXXXXX.enc(pk: bytes) -> Tuple[bytes, bytes]\nRandomly generates a ciphertext and the corresponding session key given a\npublic key pk.\n\nExample:\n```python\n>>> from pymceliece import mceliece8192128f\n>>> pk, _ = mceliece8192128f.keypair()\n>>> c, k = mceliece8192128f.enc(pk)\n```\n\n### mcelieceXXXXXXX.dec(c: bytes, pk: bytes) -> bytes\nGiven a McEliece secret key sk and a ciphertext c encapsulated to sk's\ncorresponding public key pk, computes the session key k.\n\nExample:\n```python\n>>> from pymceliece import mceliece348864f\n>>> pk, sk = mceliece348864f.keypair()\n>>> c, k = mceliece348864f.enc(pk)\n>>> mceliece348864f.dec(c, sk) == k\nTrue\n```\n\n",
"bugtrack_url": null,
"license": null,
"summary": "A Python wrapper for the libmceliece microlibrary",
"version": "0.0.2",
"project_urls": {
"Source": "https://www.github.com/ondesmartenot/pymceliece"
},
"split_keywords": [
"post-quantum",
" cryptography",
" mceliece",
" classic mceliece",
" libmceliece",
" pymceliece"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8b838e9d2fd3f14fd4934bdbcc52c9856ac3807b68563287a6b78d62a8cc1b4f",
"md5": "0d7b953ed44ee96dd75d9ed3c235af96",
"sha256": "e8884fe83328e3c7e8ab6e343fdf6babaa72142c9ee9d23d3210e7afecd92d1a"
},
"downloads": -1,
"filename": "pymceliece-0.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0d7b953ed44ee96dd75d9ed3c235af96",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 305834,
"upload_time": "2024-09-12T12:17:53",
"upload_time_iso_8601": "2024-09-12T12:17:53.323374Z",
"url": "https://files.pythonhosted.org/packages/8b/83/8e9d2fd3f14fd4934bdbcc52c9856ac3807b68563287a6b78d62a8cc1b4f/pymceliece-0.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4452aa65129a62f0eb7a81855a4cd25ab9409fdf6e1242fd2eac0fb0ec6f7468",
"md5": "00f87c8dc011b2008c66042ad0d625bc",
"sha256": "3e2bd7048b9f3ba576df6a0782ec15ebc9b6be669148adf4831109c139e26e91"
},
"downloads": -1,
"filename": "pymceliece-0.0.2.tar.gz",
"has_sig": false,
"md5_digest": "00f87c8dc011b2008c66042ad0d625bc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 250172,
"upload_time": "2024-09-12T12:17:55",
"upload_time_iso_8601": "2024-09-12T12:17:55.186135Z",
"url": "https://files.pythonhosted.org/packages/44/52/aa65129a62f0eb7a81855a4cd25ab9409fdf6e1242fd2eac0fb0ec6f7468/pymceliece-0.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-12 12:17:55",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ondesmartenot",
"github_project": "pymceliece",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pymceliece"
}