Package: pycose
pycose --- CBOR Object Signing and EncryptionThis 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$pipinstallpycoseWhat is COSE ?CBOR Encoded Message Syntax (COSE) is a data format for concise representation of small messagesRFC 8152. 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 2informationbucketsand thepayload: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:MACorsignature(forMAC0orSign1messages)COSE recipientsorCOSE signatures(forMAC,Encrypt, andSignmessages)ExamplesEncodingfrombinasciiimportunhexlifyfrompycose.messagesimportEnc0Messagefrompycose.keysimportSymmetricKey# Create a COSE Encrypt0 Messagemsg=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 Keycose_key=SymmetricKey(key=unhexlify(b'000102030405060708090a0b0c0d0e0f'))msg.key=cose_key# Performs encryption and CBOR serializationmsg.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'Decodingfrombinasciiimportunhexlifyfrompycose.messagesimportEnc0Messagefrompycose.keysimportSymmetricKey# 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=Enc0Message.decode(msg)# Create a COSE Symmetric Keycose_key=SymmetricKey(key=unhexlify(b'000102030405060708090a0b0c0d0e0f'))cose_msg.key=cose_keycose_msg.decrypt()b'a secret message'More examplesMore examples can be foundhereTestingTo run the test suite you needpytest:$pipinstallpytestMove to the root of the repository and type:$pytestCryptographyThe project depends onpyca/cryptographyfor all cryptographic operations, except the deterministic ECDSA algorithm. For deterministic ECDSAcoseusespython-ecdsa.DocumentationMore documentation on COSE and thecoseAPI can be found at:https://pycose.readthedocs.io