File syn_cose.h¶
FileList > proto > syn_cose.h
Go to the source code of this file
Zero-Heap CBOR Object Signing and Encryption (COSE - RFC 9052 / RFC 8152). More...
#include "syntropic/common/syn_defs.h"#include "syntropic/crypto/syn_aes.h"#include "syntropic/crypto/syn_chacha20poly1305.h"#include "syntropic/crypto/syn_ed25519.h"#include "syntropic/crypto/syn_hmac.h"#include "syntropic/crypto/syn_p256.h"#include "syntropic/crypto/syn_sha256.h"#include "syntropic/util/syn_cbor_read.h"#include "syntropic/util/syn_cbor_write.h"#include <stdbool.h>#include <stddef.h>#include <stdint.h>
Classes¶
| Type | Name |
|---|---|
| struct | SYN_COSE_Encrypt0Message Parsed COSE_Encrypt0 Message descriptor. |
| struct | SYN_COSE_Key COSE_Key representation structure (RFC 9052 / RFC 9053). |
| struct | SYN_COSE_Mac0Message Parsed COSE_Mac0 Message descriptor (Tag 17). |
| struct | SYN_COSE_Sign1Message Parsed COSE_Sign1 Message descriptor. |
Public Types¶
| Type | Name |
|---|---|
| enum | SYN_COSE_Algorithm COSE Algorithm Identifiers. |
| enum | SYN_COSE_Curve COSE Elliptic Curves (crv) |
| enum | SYN_COSE_KeyType COSE Key Types (kty) |
Public Functions¶
| Type | Name |
|---|---|
| SYN_Status | syn_cose_encrypt0_create (SYN_COSE_Algorithm alg, const uint8_t * key, const uint8_t * iv, size_t iv_len, const uint8_t * kid, size_t kid_len, const uint8_t * plaintext, size_t plaintext_len, const uint8_t * external_aad, size_t external_aad_len, uint8_t * out_buf, size_t out_buf_size, size_t * out_len) Encrypt a payload into a COSE_Encrypt0 (Tag 16) message using ChaCha20/Poly1305. |
| SYN_Status | syn_cose_encrypt0_decrypt (const uint8_t * msg, size_t msg_len, const uint8_t * key, const uint8_t * external_aad, size_t external_aad_len, uint8_t * out_plaintext, size_t out_plaintext_size, size_t * out_plaintext_len, SYN_COSE_Encrypt0Message * parsed_out) Decrypt and verify a COSE_Encrypt0 message. |
| SYN_Status | syn_cose_key_decode (const uint8_t * buf, size_t buf_len, SYN_COSE_Key * key_out) Decode a CBOR-encoded COSE_Key map into a SYN_COSE_Key structure. |
| SYN_Status | syn_cose_key_encode (const SYN_COSE_Key * key, uint8_t * out_buf, size_t out_buf_size, size_t * out_len) Encode a COSE_Key structure into CBOR format. |
| SYN_Status | syn_cose_mac0_create (SYN_COSE_Algorithm alg, const uint8_t * key, size_t key_len, const uint8_t * kid, size_t kid_len, const uint8_t * payload, size_t payload_len, const uint8_t * external_aad, size_t external_aad_len, uint8_t * out_buf, size_t out_buf_size, size_t * out_len) Create a COSE_Mac0 (Tag 17) message using HMAC-SHA256. |
| SYN_Status | syn_cose_mac0_verify (const uint8_t * msg, size_t msg_len, const uint8_t * key, size_t key_len, const uint8_t * external_aad, size_t external_aad_len, SYN_COSE_Mac0Message * parsed_out) Verify a COSE_Mac0 message using HMAC-SHA256. |
| SYN_Status | syn_cose_sign1_create (SYN_COSE_Algorithm alg, const uint8_t * secret_key, const uint8_t * public_key, const uint8_t * kid, size_t kid_len, const uint8_t * payload, size_t payload_len, const uint8_t * external_aad, size_t external_aad_len, uint8_t * out_buf, size_t out_buf_size, size_t * out_len) Create a COSE_Sign1 (Tag 18) message signed with EdDSA (Ed25519) or ES256 (P-256). |
| SYN_Status | syn_cose_sign1_verify (const uint8_t * msg, size_t msg_len, const uint8_t * public_key, size_t public_key_len, const uint8_t * external_aad, size_t external_aad_len, SYN_COSE_Sign1Message * parsed_out) Parse and verify a COSE_Sign1 message using the signer's public key. |
Macros¶
| Type | Name |
|---|---|
| define | SYN_COSE_HEADER_ALG 1Header parameter label for algorithm identifier (1). |
| define | SYN_COSE_HEADER_CONTENT_TYPE 3Header parameter label for content type (3). |
| define | SYN_COSE_HEADER_CRIT 2Header parameter label for criticality (2). |
| define | SYN_COSE_HEADER_IV 5Header parameter label for initialization vector / nonce (5). |
| define | SYN_COSE_HEADER_KID 4Header parameter label for key identifier (4). |
| define | SYN_COSE_HEADER_PARTIAL_IV 6Header parameter label for partial IV (6). |
| define | SYN_COSE_KEY_ALG 3Key parameter label for key algorithm identifier (3). |
| define | SYN_COSE_KEY_CRV (-1)Key parameter label for elliptic curve identifier (-1). |
| define | SYN_COSE_KEY_D (-4)Key parameter label for private key / secret exponent (-4). |
| define | SYN_COSE_KEY_K (-1)Key parameter label for symmetric key octet sequence (-1). |
| define | SYN_COSE_KEY_KID 2Key parameter label for key identification value (2). |
| define | SYN_COSE_KEY_KTY 1Key parameter label for identification of the key type (1). |
| define | SYN_COSE_KEY_X (-2)Key parameter label for public key x-coordinate or OKP public key (-2). |
| define | SYN_COSE_KEY_Y (-3)Key parameter label for public key y-coordinate (-3). |
| define | SYN_COSE_MAX_IV_LEN 16UMaximum IV length (16 bytes). |
| define | SYN_COSE_MAX_KID_LEN 32UMaximum key ID length (32 bytes). |
| define | SYN_COSE_MAX_PROTECTED_LEN 64UMaximum protected header byte length (64 bytes). |
| define | SYN_COSE_MAX_SIG_LEN 64UMaximum signature length in bytes (64 bytes for Ed25519 / P-256). |
| define | SYN_COSE_MAX_TAG_LEN 32UMaximum MAC tag length in bytes (32 bytes for HMAC-256/256). |
Detailed Description¶
Implements COSE_Sign1 (Tag 18) and COSE_Encrypt0 (Tag 16) for constrained IoT nodes. Supported Cryptographic Algorithms: * EdDSA (-8): Pure C99 Ed25519 signature scheme (RFC 8032). * ES256 (-7): ECDSA over NIST P-256 curve with SHA-256 (RFC 9053). * ChaCha20/Poly1305 (24): Authenticated encryption with associated data (RFC 9053).
Public Types Documentation¶
enum SYN_COSE_Algorithm¶
COSE Algorithm Identifiers.
enum SYN_COSE_Algorithm {
SYN_COSE_ALGO_UNKNOWN = 0,
SYN_COSE_ALGO_A128GCM = 1,
SYN_COSE_ALGO_A192GCM = 2,
SYN_COSE_ALGO_A256GCM = 3,
SYN_COSE_ALGO_HMAC_256_64 = 4,
SYN_COSE_ALGO_HMAC_256_256 = 5,
SYN_COSE_ALGO_AES_CCM_16_64_128 =
10,
SYN_COSE_ALGO_AES_CCM_16_64_256 =
11,
SYN_COSE_ALGO_CHACHA20_POLY1305 = 24,
SYN_COSE_ALGO_AES_CCM_16_128_128 =
30,
SYN_COSE_ALGO_AES_CCM_16_128_256 =
31,
SYN_COSE_ALGO_ES256 = -7,
SYN_COSE_ALGO_EDDSA = -8
};
enum SYN_COSE_Curve¶
COSE Elliptic Curves (crv)
enum SYN_COSE_KeyType¶
COSE Key Types (kty)
enum SYN_COSE_KeyType {
SYN_COSE_KTY_RESERVED = 0,
SYN_COSE_KTY_OKP = 1,
SYN_COSE_KTY_EC2 = 2,
SYN_COSE_KTY_SYMMETRIC = 4
};
Public Functions Documentation¶
function syn_cose_encrypt0_create¶
Encrypt a payload into a COSE_Encrypt0 (Tag 16) message using ChaCha20/Poly1305.
SYN_Status syn_cose_encrypt0_create (
SYN_COSE_Algorithm alg,
const uint8_t * key,
const uint8_t * iv,
size_t iv_len,
const uint8_t * kid,
size_t kid_len,
const uint8_t * plaintext,
size_t plaintext_len,
const uint8_t * external_aad,
size_t external_aad_len,
uint8_t * out_buf,
size_t out_buf_size,
size_t * out_len
)
Parameters:
algEncryption algorithm (SYN_COSE_ALGO_CHACHA20_POLY1305).keySymmetric key (32 bytes).ivNonce / IV (12 bytes for ChaCha20/Poly1305).iv_lenIV length.kidOptional key identifier (NULL if unused).kid_lenKey identifier length.plaintextPlaintext payload to encrypt.plaintext_lenPlaintext length.external_aadOptional external associated data (NULL if unused).external_aad_lenExternal AAD length.out_buf[out] Output buffer for encoded COSE_Encrypt0 message.out_buf_sizeCapacity of output buffer.out_len[out] Number of bytes written to output buffer.
Returns:
SYN_Status SYN_OK on success, error code otherwise.
function syn_cose_encrypt0_decrypt¶
Decrypt and verify a COSE_Encrypt0 message.
SYN_Status syn_cose_encrypt0_decrypt (
const uint8_t * msg,
size_t msg_len,
const uint8_t * key,
const uint8_t * external_aad,
size_t external_aad_len,
uint8_t * out_plaintext,
size_t out_plaintext_size,
size_t * out_plaintext_len,
SYN_COSE_Encrypt0Message * parsed_out
)
Parameters:
msgRaw COSE_Encrypt0 CBOR encoded message.msg_lenMessage length.keySymmetric key (32 bytes).external_aadOptional external associated data (NULL if unused).external_aad_lenExternal AAD length.out_plaintext[out] Output buffer for decrypted plaintext.out_plaintext_sizeOutput buffer capacity.out_plaintext_len[out] Number of plaintext bytes written.parsed_out[out] Optional parsed message details (may be NULL).
Returns:
SYN_Status SYN_OK if decrypted and authenticated, error code otherwise.
function syn_cose_key_decode¶
Decode a CBOR-encoded COSE_Key map into a SYN_COSE_Key structure.
Parameters:
bufInput CBOR buffer.buf_lenLength of CBOR buffer.key_out[out] Decoded key descriptor.
Returns:
SYN_Status SYN_OK on success, error code otherwise.
function syn_cose_key_encode¶
Encode a COSE_Key structure into CBOR format.
SYN_Status syn_cose_key_encode (
const SYN_COSE_Key * key,
uint8_t * out_buf,
size_t out_buf_size,
size_t * out_len
)
Parameters:
keyPointer to populated COSE_Key descriptor.out_buf[out] Output buffer for encoded CBOR map.out_buf_sizeCapacity of output buffer.out_len[out] Number of bytes written.
Returns:
SYN_Status SYN_OK on success, error code otherwise.
function syn_cose_mac0_create¶
Create a COSE_Mac0 (Tag 17) message using HMAC-SHA256.
SYN_Status syn_cose_mac0_create (
SYN_COSE_Algorithm alg,
const uint8_t * key,
size_t key_len,
const uint8_t * kid,
size_t kid_len,
const uint8_t * payload,
size_t payload_len,
const uint8_t * external_aad,
size_t external_aad_len,
uint8_t * out_buf,
size_t out_buf_size,
size_t * out_len
)
Parameters:
algMAC algorithm (SYN_COSE_ALGO_HMAC_256_256 or SYN_COSE_ALGO_HMAC_256_64).keyMAC key.key_lenKey length in bytes.kidOptional key identifier (NULL if unused).kid_lenKey identifier length.payloadMessage payload to authenticate.payload_lenPayload length.external_aadOptional external associated data (NULL if unused).external_aad_lenExternal AAD length.out_buf[out] Output buffer for encoded COSE_Mac0 message.out_buf_sizeCapacity of output buffer.out_len[out] Number of bytes written to output buffer.
Returns:
SYN_Status SYN_OK on success, error code otherwise.
function syn_cose_mac0_verify¶
Verify a COSE_Mac0 message using HMAC-SHA256.
SYN_Status syn_cose_mac0_verify (
const uint8_t * msg,
size_t msg_len,
const uint8_t * key,
size_t key_len,
const uint8_t * external_aad,
size_t external_aad_len,
SYN_COSE_Mac0Message * parsed_out
)
Parameters:
msgRaw COSE_Mac0 CBOR encoded message.msg_lenMessage length.keyMAC key.key_lenKey length in bytes.external_aadOptional external associated data (NULL if unused).external_aad_lenExternal AAD length.parsed_out[out] Optional parsed message details (may be NULL).
Returns:
SYN_Status SYN_OK if authentication tag is valid, error code otherwise.
function syn_cose_sign1_create¶
Create a COSE_Sign1 (Tag 18) message signed with EdDSA (Ed25519) or ES256 (P-256).
SYN_Status syn_cose_sign1_create (
SYN_COSE_Algorithm alg,
const uint8_t * secret_key,
const uint8_t * public_key,
const uint8_t * kid,
size_t kid_len,
const uint8_t * payload,
size_t payload_len,
const uint8_t * external_aad,
size_t external_aad_len,
uint8_t * out_buf,
size_t out_buf_size,
size_t * out_len
)
Parameters:
algSignature algorithm (SYN_COSE_ALGO_EDDSA or SYN_COSE_ALGO_ES256).secret_keySecret key (32 bytes for Ed25519 / P-256 scalar).public_keyPublic key (32 bytes for Ed25519, 64/65 bytes for P-256).kidOptional key identifier (NULL if unused).kid_lenKey identifier length.payloadMessage payload to sign.payload_lenPayload length.external_aadOptional external associated data (NULL if unused).external_aad_lenExternal AAD length.out_buf[out] Output buffer for encoded COSE_Sign1 message.out_buf_sizeCapacity of output buffer.out_len[out] Number of bytes written to output buffer.
Returns:
SYN_Status SYN_OK on success, error code otherwise.
function syn_cose_sign1_verify¶
Parse and verify a COSE_Sign1 message using the signer's public key.
SYN_Status syn_cose_sign1_verify (
const uint8_t * msg,
size_t msg_len,
const uint8_t * public_key,
size_t public_key_len,
const uint8_t * external_aad,
size_t external_aad_len,
SYN_COSE_Sign1Message * parsed_out
)
Parameters:
msgRaw COSE_Sign1 CBOR encoded message.msg_lenMessage length.public_keyPublic key of the signer.public_key_lenPublic key length (32 for Ed25519, 64/65 for P-256).external_aadOptional external associated data (NULL if unused).external_aad_lenExternal AAD length.parsed_out[out] Optional parsed message details (may be NULL).
Returns:
SYN_Status SYN_OK if verified and valid, error code otherwise.
Macro Definition Documentation¶
define SYN_COSE_HEADER_ALG¶
Header parameter label for algorithm identifier (1).
define SYN_COSE_HEADER_CONTENT_TYPE¶
Header parameter label for content type (3).
define SYN_COSE_HEADER_CRIT¶
Header parameter label for criticality (2).
define SYN_COSE_HEADER_IV¶
Header parameter label for initialization vector / nonce (5).
define SYN_COSE_HEADER_KID¶
Header parameter label for key identifier (4).
define SYN_COSE_HEADER_PARTIAL_IV¶
Header parameter label for partial IV (6).
define SYN_COSE_KEY_ALG¶
Key parameter label for key algorithm identifier (3).
define SYN_COSE_KEY_CRV¶
Key parameter label for elliptic curve identifier (-1).
define SYN_COSE_KEY_D¶
Key parameter label for private key / secret exponent (-4).
define SYN_COSE_KEY_K¶
Key parameter label for symmetric key octet sequence (-1).
define SYN_COSE_KEY_KID¶
Key parameter label for key identification value (2).
define SYN_COSE_KEY_KTY¶
Key parameter label for identification of the key type (1).
define SYN_COSE_KEY_X¶
Key parameter label for public key x-coordinate or OKP public key (-2).
define SYN_COSE_KEY_Y¶
Key parameter label for public key y-coordinate (-3).
define SYN_COSE_MAX_IV_LEN¶
Maximum IV length (16 bytes).
define SYN_COSE_MAX_KID_LEN¶
Maximum key ID length (32 bytes).
define SYN_COSE_MAX_PROTECTED_LEN¶
Maximum protected header byte length (64 bytes).
define SYN_COSE_MAX_SIG_LEN¶
Maximum signature length in bytes (64 bytes for Ed25519 / P-256).
define SYN_COSE_MAX_TAG_LEN¶
Maximum MAC tag length in bytes (32 bytes for HMAC-256/256).
The documentation for this class was generated from the following file src/syntropic/proto/syn_cose.h