/* * t_cose_defines.h * * Copyright (c) 2018-2019, Laurence Lundblade. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause * * See BSD-3-Clause license in README.md */ #ifndef __T_COSE_DEFINES_H__ #define __T_COSE_DEFINES_H__ /** * \file t_cose_defines.h * * \brief Constants from COSE standard and IANA registry. * * This file contains constants identifiers defined in [COSE (RFC * 8152)] (https://tools.ietf.org/html/rfc8152) and [IANA COSE * Registry] (https://www.iana.org/assignments/cose/cose.xhtml). They * include algorithm IDs and other constants. * * Many constants in the IANA registry are not included here yet as * they are not needed by t_cose. They can be added if they become * needed. */ /* --------------- COSE Header parameters ----------- * https://www.iana.org/assignments/cose/cose.xhtml#header-parameters */ /** * \def COSE_HEADER_PARAM_ALG * * \brief Label of COSE header that indicates an algorithm. */ #define COSE_HEADER_PARAM_ALG 1 /** * \def COSE_HEADER_PARAM_KID * * \brief Label of COSE header that contains a key ID. */ #define COSE_HEADER_PARAM_KID 4 /* ------------ COSE Header Algorithm Parameters -------------- * https://www.iana.org/assignments/cose/cose.xhtml#header-algorithm-parameters * * None of these are defined here yet, as they are not needed by t_cose yet. */ /* ------------- COSE Algorithms ---------------------------- * https://www.iana.org/assignments/cose/cose.xhtml#algorithms */ /** * \def COSE_ALGORITHM_ES256 * * \brief Indicates ECDSA with SHA-256. * * Value for \ref COSE_HEADER_PARAM_ALG to indicate ECDSA. w/SHA-256 */ #define COSE_ALGORITHM_ES256 -7 /** * \def COSE_ALGORITHM_ES384 * * \brief Indicates ECDSA with SHA-384. * * Value for \ref COSE_HEADER_PARAM_ALG to indicate ECDSA. w/SHA-384 */ #define COSE_ALGORITHM_ES384 -35 /** * \def COSE_ALGORITHM_ES512 * * \brief Indicates ECDSA with SHA-384. * * Value for \ref COSE_HEADER_PARAM_ALG to indicate ECDSA. w/SHA-512 */ #define COSE_ALGORITHM_ES512 -36 /** * \def COSE_ALG_SHA256_PROPRIETARY * * \brief COSE-style algorithm ID for SHA256. The official COSE * algorithm registry doesn't yet define an ID for a pure hash * function. One is needed for internal use, so this is defined. * * This is only used internally in the implementation and doesn't * appear in any protocol messages so there are no interoperability * issues. When this gets defined in the IANA registry, that value can * be substituted here and all will work fine. */ #define COSE_ALG_SHA256_PROPRIETARY -72000 /* ---------- COSE Key Common Parameters -------------- * https://www.iana.org/assignments/cose/cose.xhtml#key-common-parameters */ /** * \def COSE_KEY_COMMON_KTY * * \brief Label for data item containing the key type. * * In a \c COSE_Key, label that indicates the data item containing the * key type. */ #define COSE_KEY_COMMON_KTY 1 /** * \def COSE_KEY_COMMON_KID * * \brief Label for data item containing the key's kid. * * In a \c COSE_Key, label that indicates the data item containing the * kid of this key. */ #define COSE_KEY_COMMON_KID 2 /* ---------- COSE Key Type Parameters -------------------- * https://www.iana.org/assignments/cose/cose.xhtml#key-type-parameters */ /** * \def COSE_KEY_PARAM_CRV * * \brief Label for data item indicating EC curve. * * In a \c COSE_Key that holds an EC key of either type \ref * COSE_KEY_TYPE_EC2 or \ref COSE_KEY_TYPE_OKP this labels the data * item with the EC curve for the key. */ #define COSE_KEY_PARAM_CRV -1 /** * \def COSE_KEY_PARAM_X_COORDINATE * * \brief Label for data item that is an X coordinate of an EC key. * * In a \c COSE_Key that holds an EC key, this is label that indicates * the data item containing the X coordinate. * * This is used for both key types \ref COSE_KEY_TYPE_EC2 and \ref * COSE_KEY_TYPE_OKP. */ #define COSE_KEY_PARAM_X_COORDINATE -2 /** * \def COSE_KEY_PARAM_Y_COORDINATE * * \brief Label for data item that is a y coordinate of an EC key. * * In a COSE_Key that holds an EC key, this is label that indicates * the data item containing the Y coordinate. * * This is used only for key type \ref COSE_KEY_TYPE_EC2. */ #define COSE_KEY_PARAM_Y_COORDINATE -3 /** * \def COSE_KEY_PARAM_PRIVATE_D * * \brief Label for data item that is d, the private part of EC key. * * In a \c COSE_Key that holds an EC key, this is label that indicates * the data item containing the Y coordinate. * * This is used for both key types \ref COSE_KEY_TYPE_EC2 and \ref * COSE_KEY_TYPE_OKP. */ #define COSE_KEY_PARAM_PRIVATE_D -4 /* ---------- COSE Key Types -------------------------------- * https://www.iana.org/assignments/cose/cose.xhtml#key-type */ /** * \def COSE_KEY_TYPE_OKP * * \brief Key type is Octet Key Pair * * In a \c COSE_Key, this is a value of the data item labeled \ref * COSE_KEY_COMMON_KTY that indicates the \c COSE_Key is some sort of * key pair represented by some octets. It may or may not be an EC * key. */ #define COSE_KEY_TYPE_OKP 1 /** * \def COSE_KEY_TYPE_EC2 * * \brief Key is a 2-parameter EC key. * * In a \c COSE_Key, this is a value of the data item labeled \ref * COSE_KEY_COMMON_KTY that indicates the \c COSE_Key is an EC key * specified with two coordinates, X and Y. */ #define COSE_KEY_TYPE_EC2 2 /** * \def COSE_KEY_TYPE_SYMMETRIC * * \brief Key is a symmetric key. * * In a \c COSE_Key, this is a value of the data item labeled \ref * COSE_KEY_COMMON_KTY that indicates the \c COSE_Key is a symmetric * key. */ #define COSE_KEY_TYPE_SYMMETRIC 4 /* ----------- COSE Elliptic Curves --------------------- * https://www.iana.org/assignments/cose/cose.xhtml#elliptic-curves */ /** * \def COSE_ELLIPTIC_CURVE_P_256 * * \brief Key type for NIST P-256 key * * In a \c COSE_Key, this is a value of the data item labeled \ref * COSE_KEY_PARAM_CRV to indicate the NIST P-256 curve, also known as * secp256r1. * * This key type is always \ref COSE_KEY_TYPE_EC2. */ #define COSE_ELLIPTIC_CURVE_P_256 1 /** * \def COSE_ELLIPTIC_CURVE_P_384 * * \brief Key type for NIST P-384 key * * In a \c COSE_Key, this is a value of the data item labeled \ref * COSE_KEY_PARAM_CRV to indicate the NIST P-384 curve, also known as * secp384r1. * * This key type is always \ref COSE_KEY_TYPE_EC2. */ #define COSE_ELLIPTIC_CURVE_P_384 2 /** * \def COSE_ELLIPTIC_CURVE_P_521 * * \brief Key type for NIST P-521 key * * In a \c COSE_Key, this is a value of the data item labeled \ref * COSE_KEY_PARAM_CRV to indicate the NIST P-521 curve, also known as * secp521r1. */ #define COSE_ELLIPTIC_CURVE_P_521 3 /* ------- Constants from RFC 8152 --------- */ /** * \def COSE_SIG_CONTEXT_STRING_SIGNATURE1 * * \brief This is a string constant used by COSE to label \c COSE_Sign1 * structures. See RFC 8152, section 4.4. */ #define COSE_SIG_CONTEXT_STRING_SIGNATURE1 "Signature1" #endif /* __T_COSE_DEFINES_H__ */