blob: 6e585d49a29fd4a74838619e74472338f130dd08 [file] [log] [blame]
/*
* t_cose_common.h
*
* Copyright 2019, Laurence Lundblade
*
* SPDX-License-Identifier: BSD-3-Clause
*
* See BSD-3-Clause license in README.md.
*/
#ifndef __T_COSE_COMMON_H__
#define __T_COSE_COMMON_H__
#ifdef __cplusplus
extern "C" {
#endif
/**
* \file t_cose_common.h
*
* \brief Defines common to all public t_cose interfaces.
*
*/
/* Private value. Intentionally not documented for Doxygen.
* This is the size allocated for the encoded protected headers. It
* needs to be big enough for make_protected_header() to succeed. It
* currently sized for one header with an algorithm ID up to 32 bits
* long -- one byte for the wrapping map, one byte for the label, 5
* bytes for the ID. If this is made accidentially too small, QCBOR will
* only return an error, and not overrun any buffers.
*
* 9 extra bytes are added, rounding it up to 16 total, in case some
* other protected header is to be added.
*/
#define T_COSE_SIGN1_MAX_PROT_HEADER (1+1+5+9)
/**
* Error codes return by t_cose.
*
* Do not reorder these. It is OK to add
* new ones at the end.
*/
enum t_cose_err_t {
/**
* Operation completed successfully
*/
T_COSE_SUCCESS = 0,
/**
* The requested signing algorithm is not supported.
*/
T_COSE_ERR_UNSUPPORTED_SIGNING_ALG,
/**
* Error constructing the protected headers.
*/
T_COSE_ERR_PROTECTED_HEADERS,
/**
* The hash algorithm needed is not supported. Note that the
* signing algorithm identifier usually identifies the hash
* algorithm.
*/
T_COSE_ERR_UNSUPPORTED_HASH,
/**
* Some system failure when running the hash algorithm.
*/
T_COSE_ERR_HASH_GENERAL_FAIL,
/**
* The buffer to receive a hash result is too small.
*/
T_COSE_ERR_HASH_BUFFER_SIZE,
/**
* The buffer to receive result of a signing operation is too
* small.
*/
T_COSE_ERR_SIG_BUFFER_SIZE,
/**
* The buffer to receive to receive a key is too small.
*/
T_COSE_ERR_KEY_BUFFER_SIZE,
/**
* When verifying a \c COSE_Sign1, something is wrong with the
* format of the CBOR. For example, it is missing something like
* the payload.
*/
T_COSE_ERR_SIGN1_FORMAT,
/**
* When decoding some CBOR like a \c COSE_Sign1, the CBOR was not
* well-formed. Most likely what was supposed to be CBOR was is
* either not or it has been corrupted.
*/
T_COSE_ERR_CBOR_NOT_WELL_FORMED,
/**
* No algorithm ID was found when one is needed. For example, when
* verifying a \c COSE_Sign1.
*/
T_COSE_ERR_NO_ALG_ID,
/**
* No key ID was found when one is needed. For example, when
* verifying a \c COSE_Sign1.
*/
T_COSE_ERR_NO_KID,
/**
* Signature verification failed. For example, the cryptographic
* operations completed successfully but hash wasn't as expected.
*/
T_COSE_ERR_SIG_VERIFY,
/**
* Verification of a short-circuit signature failed.
*/
T_COSE_ERR_BAD_SHORT_CIRCUIT_KID,
/**
* Some (unspecified) argument was not valid.
*/
T_COSE_ERR_INVALID_ARGUMENT,
/**
* Out of heap memory.
*/
T_COSE_ERR_INSUFFICIENT_MEMORY,
/**
* General unspecific failure.
*/
T_COSE_ERR_FAIL,
/**
* Equivalent to \c PSA_ERROR_TAMPERING_DETECTED.
*/
T_COSE_ERR_TAMPERING_DETECTED,
/**
* The key identified by a key slot of a key ID was not found.
*/
T_COSE_ERR_UNKNOWN_KEY,
/**
* The key was found, but it was the wrong type for the operation.
*/
T_COSE_ERR_WRONG_TYPE_OF_KEY,
/**
* Error constructing the \c Sig_structure when signing or verify.
*/
T_COSE_ERR_SIG_STRUCT,
/**
* Signature was short-circuit. THe option to allow verification
* of short-circuit signatures was not set
*/
T_COSE_ERR_SHORT_CIRCUIT_SIG
};
#ifdef __cplusplus
}
#endif
#endif /* __T_COSE_COMMON_H__ */