diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-cose.spec | 392 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 394 insertions, 0 deletions
@@ -0,0 +1 @@ +/cose-0.9.dev8.tar.gz diff --git a/python-cose.spec b/python-cose.spec new file mode 100644 index 0000000..94c1c1d --- /dev/null +++ b/python-cose.spec @@ -0,0 +1,392 @@ +%global _empty_manifest_terminate_build 0 +Name: python-cose +Version: 0.9.dev8 +Release: 1 +Summary: CBOR Object Signing and Encryption (COSE) implementation +License: BSD-3 +URL: https://pycose.readthedocs.io/en/latest/ +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/c8/51/1ce23503581575c1ac48911a14ed92ed16b1ec10e1f32e792c7af428d33e/cose-0.9.dev8.tar.gz +BuildArch: noarch + +Requires: python3-cryptography +Requires: python3-cbor2 +Requires: python3-ecdsa +Requires: python3-attrs +Requires: python3-certvalidator + +%description +# pycose:snake: --- CBOR Object Signing and Encryption +[](https://github.com/TimothyClaeys/pycose/actions/workflows/python-package.yml) +[](https://pycose.readthedocs.io/en/latest/?badge=latest) + +This project is a Python implementation of the IETF CBOR Encoded Message Syntax (COSE). COSE has reached RFC status and is now available at RFC 8152. + + +## Installation + +```bash +$ pip install cose +``` + +:warning:**WARNING**:warning:: There is package on [PyPI](https://pypi.org/) called `pycose` which contains old code from this repository. Since I am not the maintainer I cannot update that package or remove it. + +## What is COSE ? +CBOR Encoded Message Syntax (COSE) is a data format for concise representation of small messages [RFC 8152](https://tools.ietf.org/html/rfc8152). COSE is optimized for low power devices. The messages can be encrypted, MAC'ed and signed. There are 6 different types of COSE messages: + +- **Encrypt0**: An encrypted COSE message with a single recipient. The payload and AAD are protected by a shared CEK (Content Encryption Keys) +- **Encrypt**: An encrypted COSE message can have multiple recipients. For each recipient the CEK is encrypted with a KEK (Key Encryption Key) - using AES key wrap - and added to the message. +- **MAC0**: An authenticated COSE message with one recipient. +- **MAC**: An authenticated COSE message that can have multiple recipients. For each recipient, the authentication key is encrypted with a KEK and added to the message. +- **Sign1**: A signed COSE message with a single signature. +- **Sign**: A COSE message that has been signed by multiple entities (each signature is carried in a COSE signature structure, added to the message). + +A basic COSE message consists of 2 _information_ _buckets_ and the _payload_: + +- **Protected header**: This message field contains information that needs to be protected. This information is taken into account during the encryption, calculation of the MAC or the signature. +- **Unprotected header**: The information contained in the unprotected header is not protected by the cryptographic algorithms. +- **Payload**: Contains the payload of the message, protected (mac'ed, signed or encrypted) by the cryptographic algorithms. + +Additionally, based on the message type, other message fields can be added: + +- _MAC_ or _signature_ (for **MAC0** or **Sign1** messages) +- _COSE recipients_ or _COSE signatures_ (for **MAC**, **Encrypt**, and **Sign** messages) + +## Examples + +### Encoding + +```python +from binascii import unhexlify +from cose.messages import Enc0Message +from cose.keys import SymmetricKey + +# Create a COSE Encrypt0 Message +msg = Enc0Message( + phdr={'ALG': 'A128GCM', 'IV': unhexlify(b'01010101010101010101010101010101')}, + uhdr={'KID': b'meriadoc.brandybuck@buckland.example'}, + payload='a secret message'.encode('utf-8') +) + +# Create a COSE Symmetric Key +cose_key = SymmetricKey(key=unhexlify(b'000102030405060708090a0b0c0d0e0f')) +msg.key = cose_key + +# Performs encryption and CBOR serialization +msg.encode() +b'\xd0\x83U\xa2\x01\x01\x05P\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xa1\x04X$meriadoc.brandybuck@buckland.exampleX \xc4\xaf\x85\xacJQ4\x93\x19\x93\xec\n\x18c\xa6\xe8\xc6n\xf4\xc9\xac\x161^\xe6\xfe\xcd\x9b.\x1cy\xa1' +``` + +### Decoding +```python +from binascii import unhexlify +from cose.messages import CoseMessage +from cose.keys import SymmetricKey + +# message bytes (CBOR encoded) +msg = b'\xd0\x83U\xa2\x01\x01\x05P\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xa1\x04X$meriadoc.brandybuck@buckland.exampleX \xc4\xaf\x85\xacJQ4\x93\x19\x93\xec\n\x18c\xa6\xe8\xc6n\xf4\xc9\xac\x161^\xe6\xfe\xcd\x9b.\x1cy\xa1' + +cose_msg = CoseMessage.decode(msg) + +# Create a COSE Symmetric Key +cose_key = SymmetricKey(key=unhexlify(b'000102030405060708090a0b0c0d0e0f')) +cose_msg.key = cose_key + +cose_msg.decrypt() +b'a secret message' +``` + +### More examples +More examples can be found [here](https://pycose.readthedocs.io/en/latest/examples.html) + +## Testing + +To run the test suite you need `pytest`: +```shell +$ pip install pytest +``` +Move to the root of the repository and type: + +```shell +$ pytest +``` + +## Cryptography + +The project depends on [pyca/cryptography](https://github.com/pyca/cryptography) for all cryptographic operations, except the deterministic ECDSA algorithm. For deterministic ECDSA `cose` uses [python-ecdsa](https://github.com/warner/python-ecdsa). + +## Documentation + +More documentation on COSE and the `cose` API can be found at: https://pycose.readthedocs.io + + + + + +%package -n python3-cose +Summary: CBOR Object Signing and Encryption (COSE) implementation +Provides: python-cose +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-cose +# pycose:snake: --- CBOR Object Signing and Encryption +[](https://github.com/TimothyClaeys/pycose/actions/workflows/python-package.yml) +[](https://pycose.readthedocs.io/en/latest/?badge=latest) + +This project is a Python implementation of the IETF CBOR Encoded Message Syntax (COSE). COSE has reached RFC status and is now available at RFC 8152. + + +## Installation + +```bash +$ pip install cose +``` + +:warning:**WARNING**:warning:: There is package on [PyPI](https://pypi.org/) called `pycose` which contains old code from this repository. Since I am not the maintainer I cannot update that package or remove it. + +## What is COSE ? +CBOR Encoded Message Syntax (COSE) is a data format for concise representation of small messages [RFC 8152](https://tools.ietf.org/html/rfc8152). COSE is optimized for low power devices. The messages can be encrypted, MAC'ed and signed. There are 6 different types of COSE messages: + +- **Encrypt0**: An encrypted COSE message with a single recipient. The payload and AAD are protected by a shared CEK (Content Encryption Keys) +- **Encrypt**: An encrypted COSE message can have multiple recipients. For each recipient the CEK is encrypted with a KEK (Key Encryption Key) - using AES key wrap - and added to the message. +- **MAC0**: An authenticated COSE message with one recipient. +- **MAC**: An authenticated COSE message that can have multiple recipients. For each recipient, the authentication key is encrypted with a KEK and added to the message. +- **Sign1**: A signed COSE message with a single signature. +- **Sign**: A COSE message that has been signed by multiple entities (each signature is carried in a COSE signature structure, added to the message). + +A basic COSE message consists of 2 _information_ _buckets_ and the _payload_: + +- **Protected header**: This message field contains information that needs to be protected. This information is taken into account during the encryption, calculation of the MAC or the signature. +- **Unprotected header**: The information contained in the unprotected header is not protected by the cryptographic algorithms. +- **Payload**: Contains the payload of the message, protected (mac'ed, signed or encrypted) by the cryptographic algorithms. + +Additionally, based on the message type, other message fields can be added: + +- _MAC_ or _signature_ (for **MAC0** or **Sign1** messages) +- _COSE recipients_ or _COSE signatures_ (for **MAC**, **Encrypt**, and **Sign** messages) + +## Examples + +### Encoding + +```python +from binascii import unhexlify +from cose.messages import Enc0Message +from cose.keys import SymmetricKey + +# Create a COSE Encrypt0 Message +msg = Enc0Message( + phdr={'ALG': 'A128GCM', 'IV': unhexlify(b'01010101010101010101010101010101')}, + uhdr={'KID': b'meriadoc.brandybuck@buckland.example'}, + payload='a secret message'.encode('utf-8') +) + +# Create a COSE Symmetric Key +cose_key = SymmetricKey(key=unhexlify(b'000102030405060708090a0b0c0d0e0f')) +msg.key = cose_key + +# Performs encryption and CBOR serialization +msg.encode() +b'\xd0\x83U\xa2\x01\x01\x05P\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xa1\x04X$meriadoc.brandybuck@buckland.exampleX \xc4\xaf\x85\xacJQ4\x93\x19\x93\xec\n\x18c\xa6\xe8\xc6n\xf4\xc9\xac\x161^\xe6\xfe\xcd\x9b.\x1cy\xa1' +``` + +### Decoding +```python +from binascii import unhexlify +from cose.messages import CoseMessage +from cose.keys import SymmetricKey + +# message bytes (CBOR encoded) +msg = b'\xd0\x83U\xa2\x01\x01\x05P\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xa1\x04X$meriadoc.brandybuck@buckland.exampleX \xc4\xaf\x85\xacJQ4\x93\x19\x93\xec\n\x18c\xa6\xe8\xc6n\xf4\xc9\xac\x161^\xe6\xfe\xcd\x9b.\x1cy\xa1' + +cose_msg = CoseMessage.decode(msg) + +# Create a COSE Symmetric Key +cose_key = SymmetricKey(key=unhexlify(b'000102030405060708090a0b0c0d0e0f')) +cose_msg.key = cose_key + +cose_msg.decrypt() +b'a secret message' +``` + +### More examples +More examples can be found [here](https://pycose.readthedocs.io/en/latest/examples.html) + +## Testing + +To run the test suite you need `pytest`: +```shell +$ pip install pytest +``` +Move to the root of the repository and type: + +```shell +$ pytest +``` + +## Cryptography + +The project depends on [pyca/cryptography](https://github.com/pyca/cryptography) for all cryptographic operations, except the deterministic ECDSA algorithm. For deterministic ECDSA `cose` uses [python-ecdsa](https://github.com/warner/python-ecdsa). + +## Documentation + +More documentation on COSE and the `cose` API can be found at: https://pycose.readthedocs.io + + + + + +%package help +Summary: Development documents and examples for cose +Provides: python3-cose-doc +%description help +# pycose:snake: --- CBOR Object Signing and Encryption +[](https://github.com/TimothyClaeys/pycose/actions/workflows/python-package.yml) +[](https://pycose.readthedocs.io/en/latest/?badge=latest) + +This project is a Python implementation of the IETF CBOR Encoded Message Syntax (COSE). COSE has reached RFC status and is now available at RFC 8152. + + +## Installation + +```bash +$ pip install cose +``` + +:warning:**WARNING**:warning:: There is package on [PyPI](https://pypi.org/) called `pycose` which contains old code from this repository. Since I am not the maintainer I cannot update that package or remove it. + +## What is COSE ? +CBOR Encoded Message Syntax (COSE) is a data format for concise representation of small messages [RFC 8152](https://tools.ietf.org/html/rfc8152). COSE is optimized for low power devices. The messages can be encrypted, MAC'ed and signed. There are 6 different types of COSE messages: + +- **Encrypt0**: An encrypted COSE message with a single recipient. The payload and AAD are protected by a shared CEK (Content Encryption Keys) +- **Encrypt**: An encrypted COSE message can have multiple recipients. For each recipient the CEK is encrypted with a KEK (Key Encryption Key) - using AES key wrap - and added to the message. +- **MAC0**: An authenticated COSE message with one recipient. +- **MAC**: An authenticated COSE message that can have multiple recipients. For each recipient, the authentication key is encrypted with a KEK and added to the message. +- **Sign1**: A signed COSE message with a single signature. +- **Sign**: A COSE message that has been signed by multiple entities (each signature is carried in a COSE signature structure, added to the message). + +A basic COSE message consists of 2 _information_ _buckets_ and the _payload_: + +- **Protected header**: This message field contains information that needs to be protected. This information is taken into account during the encryption, calculation of the MAC or the signature. +- **Unprotected header**: The information contained in the unprotected header is not protected by the cryptographic algorithms. +- **Payload**: Contains the payload of the message, protected (mac'ed, signed or encrypted) by the cryptographic algorithms. + +Additionally, based on the message type, other message fields can be added: + +- _MAC_ or _signature_ (for **MAC0** or **Sign1** messages) +- _COSE recipients_ or _COSE signatures_ (for **MAC**, **Encrypt**, and **Sign** messages) + +## Examples + +### Encoding + +```python +from binascii import unhexlify +from cose.messages import Enc0Message +from cose.keys import SymmetricKey + +# Create a COSE Encrypt0 Message +msg = Enc0Message( + phdr={'ALG': 'A128GCM', 'IV': unhexlify(b'01010101010101010101010101010101')}, + uhdr={'KID': b'meriadoc.brandybuck@buckland.example'}, + payload='a secret message'.encode('utf-8') +) + +# Create a COSE Symmetric Key +cose_key = SymmetricKey(key=unhexlify(b'000102030405060708090a0b0c0d0e0f')) +msg.key = cose_key + +# Performs encryption and CBOR serialization +msg.encode() +b'\xd0\x83U\xa2\x01\x01\x05P\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xa1\x04X$meriadoc.brandybuck@buckland.exampleX \xc4\xaf\x85\xacJQ4\x93\x19\x93\xec\n\x18c\xa6\xe8\xc6n\xf4\xc9\xac\x161^\xe6\xfe\xcd\x9b.\x1cy\xa1' +``` + +### Decoding +```python +from binascii import unhexlify +from cose.messages import CoseMessage +from cose.keys import SymmetricKey + +# message bytes (CBOR encoded) +msg = b'\xd0\x83U\xa2\x01\x01\x05P\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xa1\x04X$meriadoc.brandybuck@buckland.exampleX \xc4\xaf\x85\xacJQ4\x93\x19\x93\xec\n\x18c\xa6\xe8\xc6n\xf4\xc9\xac\x161^\xe6\xfe\xcd\x9b.\x1cy\xa1' + +cose_msg = CoseMessage.decode(msg) + +# Create a COSE Symmetric Key +cose_key = SymmetricKey(key=unhexlify(b'000102030405060708090a0b0c0d0e0f')) +cose_msg.key = cose_key + +cose_msg.decrypt() +b'a secret message' +``` + +### More examples +More examples can be found [here](https://pycose.readthedocs.io/en/latest/examples.html) + +## Testing + +To run the test suite you need `pytest`: +```shell +$ pip install pytest +``` +Move to the root of the repository and type: + +```shell +$ pytest +``` + +## Cryptography + +The project depends on [pyca/cryptography](https://github.com/pyca/cryptography) for all cryptographic operations, except the deterministic ECDSA algorithm. For deterministic ECDSA `cose` uses [python-ecdsa](https://github.com/warner/python-ecdsa). + +## Documentation + +More documentation on COSE and the `cose` API can be found at: https://pycose.readthedocs.io + + + + + +%prep +%autosetup -n cose-0.9.dev8 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-cose -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed Apr 12 2023 Python_Bot <Python_Bot@openeuler.org> - 0.9.dev8-1 +- Package Spec generated @@ -0,0 +1 @@ +8f7ffe9b4c83a44eee9035e0de4fe5a8 cose-0.9.dev8.tar.gz |