|
BSL v1.1.1 - 39.g9f43410
AMMOS Bundle Protocol Security Library (BSL)
|
Implementation of the COSE context [17]. More...
#include "CoseContext.h"#include "CoseContext_Private.h"#include "CoseMsg.h"#include "bsl/BPSecLib_Private.h"#include "bsl/crypto/CryptoInterface.h"#include "bsl/dynamic/CBOR.h"#include <m-bptree.h>#include <m-bstring.h>#include <m-deque.h>#include <m-variant.h>#include <stdio.h>#include <stdlib.h>#include <time.h>
Include dependency graph for CoseContext.c:Data Structures | |
| struct | BSLX_CoseSc_t |
| struct | BSLX_CoseSc_KdfContext_t |
| Limited fields actually used by this COSE implementation. More... | |
Functions | |
| static int | local_cmp_int64 (const void *lhs, const void *rhs) |
Matches signature for bsearch() | |
| static void | BSLX_CoseSc_Init (BSLX_CoseSc_t *self) |
| static void | BSLX_CoseSc_Deinit (BSLX_CoseSc_t *self) |
| static void | BSLX_CoseSc_Prepare (BSLX_CoseSc_t *self, BSL_BundleRef_t *bundle, BSL_SecOper_t *sec_oper) |
| static void | BSLX_CoseSc_GetOptions (BSLX_CoseSc_t *self, const BSL_SecOper_t *sec_oper) |
| bool | BSLX_CoseSc_Validate (BSL_LibCtx_t *lib, BSL_BundleRef_t *bundle, BSL_SecOper_t *sec_oper) |
| Match signature BSL_SecCtx_Validate_f. | |
| int | BSLX_CoseSc_AadScope_Encode (QCBOREncodeContext *enc, const BSLX_CoseSc_AadScope_t *scope) |
| int | BSLX_CoseSc_AadScope_Decode (QCBORDecodeContext *dec, BSLX_CoseSc_AadScope_t *scope) |
| static m_bstring_t * | BSLX_CoseSc_ChunkList_GetBstring (BSLX_CoseSc_ChunkList_t chunklist) |
| Get the last bytes chunk to append to, or add one if needed. | |
| static size_t | BSLX_CoseSc_bstring_AppendHead (m_bstring_t data, uint8_t major, uint64_t argument) |
| Append a CBOR head only. | |
| static size_t | BSLX_CoseSc_bstring_AppendRaw (m_bstring_t data, const BSL_Data_t *chunk) |
| Append raw CBOR encoded data. | |
| static int | BSLX_CoseSc_ExternalAad_Chunked (const BSLX_CoseSc_t *ctx, BSLX_CoseSc_ChunkList_t chunklist, size_t *total) |
| Handle the external AAD content as appending to a list of chunks. | |
| static void | BSLX_CoseSc_BuildAad (BSLX_CoseSc_t *ctx, BSLX_CoseSc_ChunkList_t chunklist, const BSLX_CoseMsg_Headers_t *headers, const char *context) |
| Common COSE AAD composition for MAC, Encrypt, and Sign. | |
| static void | BSLX_CoseSc_Mac_Compute (BSLX_CoseSc_t *ctx, const BSLX_CoseMsg_Headers_t *headers, const char *context, BSL_Data_t *tag) |
| Internal processing according to Section 6.3 of RFC 9052. | |
| static void | BSLX_CoseSc_GetAndValidateTarget (BSLX_CoseSc_t *self, const BSLX_CoseMsg_Headers_t *headers) |
| static void | BSLX_CoseSc_GetAndValidateKey (BSLX_CoseSc_t *self, const BSLX_CoseMsg_Headers_t *headers) |
| Combine options and received headers to validate end key. | |
| static void | BSLX_CoseSc_GetAndValidateAddlHeaders (BSLX_CoseSc_t *self) |
| static void | BSLX_CoseSc_GetAndValidateAadScope (BSLX_CoseSc_t *self) |
| static void | BSLX_CoseSc_SourceHeaders (BSLX_CoseSc_t *ctx, BSLX_CoseMsg_Headers_t *headers0, BSLX_CoseMsg_Headers_t *headers1) |
| Common logic for headers at the source. | |
| static void | BSLX_CoseSc_VerifyHeaders (BSLX_CoseSc_t *ctx, BSLX_CoseMsg_Headers_t *headers0, BSLX_CoseMsg_Headers_t *headers1) |
| Common logic for headers at verifier or acceptor. | |
| static void | BSLX_CoseSc_AddAadScope (BSLX_CoseSc_t *ctx) |
| static void | BSLX_CoseSc_Mac0_Source (BSLX_CoseSc_t *ctx) |
| Internal processing to source a COSE_Mac0 message. | |
| static void | BSLX_CoseSc_Mac0_VerifyAccept (BSLX_CoseSc_t *ctx, const BSL_IdValPair_t *result) |
| Internal processing to verify a COSE_Mac0 message. | |
| static int | BSLX_CoseSc_GenerateNonce (BSL_Crypto_KeyHandle_t keyhandle, BSL_Data_t *out, BSL_Data_t *partial, const BSL_Data_t *base, bool use_offset, int64_t offset, size_t default_len) |
| Synthesize a nonce value based on option values. | |
| static int | BSLX_CoseSc_KdfContext_Encode (QCBOREncodeContext *enc, const BSLX_CoseSc_KdfContext_t *obj) |
| Matches BSL_CBOR_Encode_f signature. | |
| static void | BSLX_CoseSc_HkdfContentKey (BSLX_CoseSc_t *ctx, BSLX_CoseMsg_Recipient_t *recip) |
| HKDF processing for source and verifier. | |
| static void | BSLX_CoseSc_GenerateContentKey (BSLX_CoseSc_t *ctx, BSLX_CoseMsg_Recipient_t *recip) |
| Common processing to source content key from recipient layer. | |
| static void | BSLX_CoseSc_ExtractContentKey (BSLX_CoseSc_t *ctx, BSLX_CoseMsg_Recipient_t *recip) |
| Common processing to extract content key from recipient layer. | |
| static void | BSLX_CoseSc_Mac_Source (BSLX_CoseSc_t *ctx) |
| Internal processing to source a COSE_Mac message. | |
| static void | BSLX_CoseSc_Mac_VerifyAccept (BSLX_CoseSc_t *ctx, const BSL_IdValPair_t *result) |
| Internal processing to verify a COSE_Mac message. | |
| static void | BSLX_CoseSc_Encrypt_Compute (BSLX_CoseSc_t *ctx, const BSLX_CoseMsg_Headers_t *headers, const char *context, BSL_CipherMode_e mode) |
| Internal processing according to Section 5.3 of RFC 9052. | |
| static void | BSLX_CoseSc_GenerateIV (BSLX_CoseSc_t *ctx, BSLX_CoseMsg_Headers_t *headers) |
| Generate optional partial IV depending on key Base IV. | |
| static void | BSLX_CoseSc_ExtractIV (BSLX_CoseSc_t *ctx, const BSLX_CoseMsg_Headers_t *headers) |
| Extract IV header parameters and augment with key data. | |
| static void | BSLX_CoseSc_Encrypt0_Source (BSLX_CoseSc_t *ctx) |
| Internal processing to source a COSE_Encrypt0 message. | |
| static void | BSLX_CoseSc_Encrypt0_VerifyAccept (BSLX_CoseSc_t *ctx, const BSL_IdValPair_t *result) |
| Internal processing to verify a COSE_Encrypt0 message. | |
| static void | BSLX_CoseSc_Encrypt_Source (BSLX_CoseSc_t *ctx) |
| Internal processing to source a COSE_Encrypt message. | |
| static void | BSLX_CoseSc_Encrypt_VerifyAccept (BSLX_CoseSc_t *ctx, const BSL_IdValPair_t *result) |
| Internal processing to verify a COSE_Encrypt message. | |
| int | BSLX_CoseSc_Execute (BSL_LibCtx_t *lib, BSL_BundleRef_t *bundle, BSL_SecOper_t *sec_oper) |
| Match signature BSL_SecCtx_Execute_f. | |
Variables | |
| static const int64_t | cose_bib_cnt_algs [] |
| Acceptable target algorithms for MAC. | |
| static const int64_t | cose_bcb_cnt_algs [] |
| Acceptable target algorithms for Encrypt. | |
| static const int64_t | cose_recip_alg_unprot [] |
| Recipient algorithms which cannot protect the header. | |
Implementation of the COSE context [17].
| int BSLX_CoseSc_AadScope_Decode | ( | QCBORDecodeContext * | dec, |
| BSLX_CoseSc_AadScope_t * | scope | ||
| ) |
References BSL_LOG_ERR, and BSL_SUCCESS.
Referenced by BSLX_CoseSc_GetAndValidateAadScope(), and BSLX_CoseSc_GetOptions().
| int BSLX_CoseSc_AadScope_Encode | ( | QCBOREncodeContext * | enc, |
| const BSLX_CoseSc_AadScope_t * | scope | ||
| ) |
References BSL_SUCCESS.
Referenced by BSLP_PolicyOptions_SC3(), BSLX_CoseSc_AddAadScope(), BSLX_CoseSc_ExternalAad_Chunked(), test_AppendixA_Example1_BIB_Source(), test_AppendixA_Example1_BIB_VerifyAccept(), test_AppendixA_Example4_BCB_Source(), test_AppendixA_Example4_BCB_VerifyAccept(), test_AppendixA_Example5_BCB_Source(), test_AppendixA_Example5_BCB_VerifyAccept(), test_AppendixA_Example6_BCB_Source(), test_CCSDS_Example_Mac_Source(), and test_CCSDS_Example_Mac_VerifyAccept().
|
static |
References BSL_CBOR_Encode_Twopass(), BSL_Data_Deinit(), BSL_Data_Init(), BSL_IdValPair_SetRaw(), BSL_LOG_ERR, BSL_SecOper_AddParam(), BSL_SUCCESS, BSLX_CoseSc_AadScope_Encode(), BSLX_COSESC_PARAM_AAD_SCOPE, ctx, BSL_Data_t::len, and BSL_Data_t::ptr.
Referenced by BSLX_CoseSc_Encrypt0_Source(), BSLX_CoseSc_Encrypt_Source(), BSLX_CoseSc_Mac0_Source(), and BSLX_CoseSc_Mac_Source().
|
static |
Append a CBOR head only.
Referenced by BSLX_CoseSc_BuildAad(), BSLX_CoseSc_Encrypt_Compute(), BSLX_CoseSc_ExternalAad_Chunked(), and BSLX_CoseSc_Mac_Compute().
|
static |
Append raw CBOR encoded data.
References BSL_Data_t::len, and BSL_Data_t::ptr.
Referenced by BSLX_CoseSc_BuildAad(), and BSLX_CoseSc_ExternalAad_Chunked().
|
static |
Common COSE AAD composition for MAC, Encrypt, and Sign.
This relies on the outer array head to already be present in the list.
References BSL_ERR_SECURITY_CONTEXT_VALIDATION_FAILED, BSL_SUCCESS, BSLX_CoseSc_bstring_AppendHead(), BSLX_CoseSc_bstring_AppendRaw(), BSLX_CoseSc_ChunkList_GetBstring(), BSLX_CoseSc_ExternalAad_Chunked(), ctx, BSL_Data_t::len, and BSLX_CoseMsg_Headers_t::phdr_bstr.
Referenced by BSLX_CoseSc_Encrypt_Compute(), and BSLX_CoseSc_Mac_Compute().
|
static |
Get the last bytes chunk to append to, or add one if needed.
Referenced by BSLX_CoseSc_BuildAad(), BSLX_CoseSc_Encrypt_Compute(), BSLX_CoseSc_ExternalAad_Chunked(), and BSLX_CoseSc_Mac_Compute().
|
static |
References BSLX_CoseSc_t::aad_scope, BSLX_CoseSc_t::addl_phdr, BSLX_CoseSc_t::addl_phdr_bstr, BSLX_CoseSc_t::addl_uhdr, ASSERT_ARG_NONNULL, BSL_AuthCtx_Deinit(), BSL_Cipher_Deinit(), BSL_Crypto_ReleaseKeyHandle(), BSL_Data_Deinit(), BSL_free(), BSL_PrimaryBlock_deinit(), BSLX_CoseSc_t::cekhandle, BSLX_CoseSc_t::enc_ctx, BSLX_CoseSc_t::full_iv, BSLX_CoseSc_t::iv_base, BSLX_CoseSc_t::keyhandle, BSLX_CoseSc_t::kid, BSLX_CoseSc_t::mac_ctx, BSLX_CoseSc_t::partial_iv, BSLX_CoseSc_t::primary_block, BSLX_CoseSc_t::salt_base, and BSLX_CoseSc_t::wrapped_cek.
Referenced by BSLX_CoseSc_Execute(), and BSLX_CoseSc_Validate().
|
static |
Internal processing to source a COSE_Encrypt0 message.
References BSL_CBOR_Encode_Twopass(), BSL_CRYPTO_ENCRYPT, BSL_Data_Deinit(), BSL_Data_Init(), BSL_IdValPair_SetBytestr(), BSL_LOG_ERR, BSL_SecOper_AddResult(), BSL_SUCCESS, BSLX_CoseMsg_Encrypt0_Deinit(), BSLX_CoseMsg_Encrypt0_Encode(), BSLX_CoseMsg_Encrypt0_Init(), BSLX_CoseSc_AddAadScope(), BSLX_CoseSc_Encrypt_Compute(), BSLX_CoseSc_GenerateIV(), BSLX_COSESC_RESULT_COSE_ENCRYPT0, BSLX_CoseSc_SourceHeaders(), ctx, and BSLX_CoseMsg_Encrypt0_t::headers.
Referenced by BSLX_CoseSc_Execute().
|
static |
Internal processing to verify a COSE_Encrypt0 message.
References BSL_CBOR_Decode(), BSL_CRYPTO_DECRYPT, BSL_Data_Deinit(), BSL_Data_Init(), BSL_ERR_SECURITY_CONTEXT_CRYPTO_FAILED, BSL_IdValPair_GetAsBytestr(), BSL_LOG_ERR, BSL_SUCCESS, BSLX_CoseMsg_Encrypt0_Decode(), BSLX_CoseMsg_Encrypt0_Deinit(), BSLX_CoseMsg_Encrypt0_Init(), BSLX_CoseSc_Encrypt_Compute(), BSLX_CoseSc_ExtractIV(), BSLX_CoseSc_GetAndValidateAadScope(), BSLX_CoseSc_GetAndValidateAddlHeaders(), BSLX_CoseSc_VerifyHeaders(), ctx, and BSLX_CoseMsg_Encrypt0_t::headers.
Referenced by BSLX_CoseSc_Execute().
|
static |
Internal processing according to Section 5.3 of RFC 9052.
References ASSERT_PRECONDITION, BSL_BundleCtx_ReadBTSD(), BSL_BundleCtx_WriteBTSD(), BSL_Cipher_AddAadBuffer(), BSL_Cipher_AddAadSeq(), BSL_Cipher_AddSeq(), BSL_Cipher_FinalizeSeq(), BSL_Cipher_GetTag(), BSL_Cipher_Init(), BSL_Cipher_SetTag(), BSL_Cipher_TagLen(), BSL_CRYPTO_AES_128, BSL_CRYPTO_AES_192, BSL_CRYPTO_AES_256, BSL_CRYPTO_DECRYPT, BSL_CRYPTO_ENCRYPT, BSL_Data_Deinit(), BSL_Data_Init(), BSL_ERR_HOST_CALLBACK_FAILED, BSL_ERR_SECURITY_CONTEXT_CRYPTO_FAILED, BSL_ERR_SECURITY_CONTEXT_VALIDATION_FAILED, BSL_LOG_DEBUG, BSL_LOG_ERR, BSL_LOG_WARNING, BSL_malloc(), BSL_SeqReader_Destroy(), BSL_SeqReader_Get(), BSL_SeqWriter_Destroy(), BSL_SeqWriter_Put(), BSL_SUCCESS, BSLX_COSEMSG_ALG_AES_GCM_128, BSLX_COSEMSG_ALG_AES_GCM_192, BSLX_COSEMSG_ALG_AES_GCM_256, BSLX_CoseSc_bstring_AppendHead(), BSLX_CoseSc_BuildAad(), BSLX_CoseSc_ChunkList_GetBstring(), ctx, BSL_Data_t::len, BSL_Data_t::ptr, and tag.
Referenced by BSLX_CoseSc_Encrypt0_Source(), BSLX_CoseSc_Encrypt0_VerifyAccept(), BSLX_CoseSc_Encrypt_Source(), and BSLX_CoseSc_Encrypt_VerifyAccept().
|
static |
Internal processing to source a COSE_Encrypt message.
References BSL_CBOR_Encode_Twopass(), BSL_CRYPTO_ENCRYPT, BSL_Data_Deinit(), BSL_Data_Init(), BSL_IdValPair_SetBytestr(), BSL_LOG_ERR, BSL_SecOper_AddResult(), BSL_SUCCESS, BSLX_CoseMsg_Encrypt_Deinit(), BSLX_CoseMsg_Encrypt_Encode(), BSLX_CoseMsg_Encrypt_Init(), BSLX_CoseMsg_RecipientList_ResizeNew(), BSLX_CoseSc_AddAadScope(), BSLX_CoseSc_Encrypt_Compute(), BSLX_CoseSc_GenerateContentKey(), BSLX_CoseSc_GenerateIV(), BSLX_COSESC_RESULT_COSE_ENCRYPT, BSLX_CoseSc_SourceHeaders(), ctx, BSLX_CoseMsg_Recipient_t::headers, BSLX_CoseMsg_Encrypt_t::headers, and BSLX_CoseMsg_Encrypt_t::recipients.
Referenced by BSLX_CoseSc_Execute().
|
static |
Internal processing to verify a COSE_Encrypt message.
References BSL_CBOR_Decode(), BSL_CRYPTO_DECRYPT, BSL_Data_Deinit(), BSL_Data_Init(), BSL_ERR_SECURITY_CONTEXT_CRYPTO_FAILED, BSL_IdValPair_GetAsBytestr(), BSL_LOG_CRIT, BSL_LOG_ERR, BSL_SUCCESS, BSLX_CoseMsg_Encrypt_Decode(), BSLX_CoseMsg_Encrypt_Deinit(), BSLX_CoseMsg_Encrypt_Init(), BSLX_CoseSc_Encrypt_Compute(), BSLX_CoseSc_ExtractContentKey(), BSLX_CoseSc_ExtractIV(), BSLX_CoseSc_GetAndValidateAadScope(), BSLX_CoseSc_GetAndValidateAddlHeaders(), BSLX_CoseSc_VerifyHeaders(), ctx, BSLX_CoseMsg_Recipient_t::headers, BSLX_CoseMsg_Encrypt_t::headers, and BSLX_CoseMsg_Encrypt_t::recipients.
Referenced by BSLX_CoseSc_Execute().
| int BSLX_CoseSc_Execute | ( | BSL_LibCtx_t * | lib, |
| BSL_BundleRef_t * | bundle, | ||
| BSL_SecOper_t * | sec_oper | ||
| ) |
Match signature BSL_SecCtx_Execute_f.
References BSL_ERR_SECURITY_CONTEXT_FAILED, BSL_LOG_ERR, BSL_SecOper_FindResult(), BSL_SecOper_ResultCount(), BSL_SUCCESS, BSLX_CoseSc_Deinit(), BSLX_CoseSc_Encrypt0_Source(), BSLX_CoseSc_Encrypt0_VerifyAccept(), BSLX_CoseSc_Encrypt_Source(), BSLX_CoseSc_Encrypt_VerifyAccept(), BSLX_CoseSc_GetAndValidateKey(), BSLX_CoseSc_GetAndValidateTarget(), BSLX_CoseSc_GetOptions(), BSLX_CoseSc_Init(), BSLX_CoseSc_Mac0_Source(), BSLX_CoseSc_Mac0_VerifyAccept(), BSLX_CoseSc_Mac_Source(), BSLX_CoseSc_Mac_VerifyAccept(), BSLX_CoseSc_Prepare(), BSLX_COSESC_RESULT_COSE_ENCRYPT, BSLX_COSESC_RESULT_COSE_ENCRYPT0, BSLX_COSESC_RESULT_COSE_MAC, BSLX_COSESC_RESULT_COSE_MAC0, and ctx.
Referenced by MockBPA_Agent_Init(), test_AppendixA_Example1_BIB_Source(), test_AppendixA_Example1_BIB_VerifyAccept(), test_AppendixA_Example4_BCB_Source(), test_AppendixA_Example4_BCB_VerifyAccept(), test_AppendixA_Example5_BCB_Source(), test_AppendixA_Example5_BCB_VerifyAccept(), test_AppendixA_Example6_BCB_Source(), test_CCSDS_Example_Mac_Source(), and test_CCSDS_Example_Mac_VerifyAccept().
|
static |
Handle the external AAD content as appending to a list of chunks.
| [in] | ctx | The context to read from. |
| [in,out] | chunklist | The list to append to. |
| [in,out] | total | The total size accumulator to add to. |
References ASSERT_ARG_NONNULL, BSL_CanonicalBlock_t::block_num, BSL_BundleCtx_GetBlockMetadata(), BSL_BundleCtx_ReadBTSD(), BSL_CBOR_Encode_Twopass(), BSL_Data_Deinit(), BSL_Data_Init(), BSL_ERR_ENCODING, BSL_HostEID_EncodeToCBOR(), BSL_LOG_ERR, BSL_LOG_WARNING, BSL_SecOper_GetSecuritySource(), BSL_SUCCESS, BSLX_COSESC_AAD_FLAG_BTSD, BSLX_COSESC_AAD_FLAG_METADATA, BSLX_CoseSc_AadScope_Encode(), BSLX_CoseSc_bstring_AppendHead(), BSLX_CoseSc_bstring_AppendRaw(), BSLX_CoseSc_ChunkList_GetBstring(), BSL_CanonicalBlock_t::btsd_len, ctx, BSL_CanonicalBlock_t::flags, and BSL_CanonicalBlock_t::type_code.
Referenced by BSLX_CoseSc_BuildAad().
|
static |
Common processing to extract content key from recipient layer.
References BSL_Crypto_UnwrapKey(), BSL_ERR_SECURITY_CONTEXT_CRYPTO_FAILED, BSL_ERR_SECURITY_CONTEXT_FAILED, BSL_LOG_ERR, BSL_SUCCESS, BSLX_COSEMSG_ALG_AES_KW_128, BSLX_COSEMSG_ALG_AES_KW_192, BSLX_COSEMSG_ALG_AES_KW_256, BSLX_COSEMSG_ALG_DIRECT, BSLX_COSEMSG_ALG_DIRECT_HKDF_SHA_256, BSLX_COSEMSG_ALG_DIRECT_HKDF_SHA_512, BSLX_CoseSc_HkdfContentKey(), BSLX_CoseMsg_Recipient_t::ciphertext, and ctx.
Referenced by BSLX_CoseSc_Encrypt_VerifyAccept(), and BSLX_CoseSc_Mac_VerifyAccept().
|
static |
Extract IV header parameters and augment with key data.
References BSL_Crypto_GetKeyParameter(), BSL_Data_Resize(), BSL_ERR_SECURITY_CONTEXT_CRYPTO_FAILED, BSL_IdValPair_GetAsBytestr(), BSL_LOG_ERR, BSL_SUCCESS, BSLX_COSEMSG_AESGCM_IV_LEN, BSLX_COSEMSG_HDR_IV, BSLX_COSEMSG_HDR_PARTIALIV, BSLX_CoseMsg_Headers_Get(), BSLX_COSEMSG_KEY_PARAM_BASEIV, ctx, BSL_Data_t::len, and BSL_Data_t::ptr.
Referenced by BSLX_CoseSc_Encrypt0_VerifyAccept(), and BSLX_CoseSc_Encrypt_VerifyAccept().
|
static |
Common processing to source content key from recipient layer.
References BSL_Crypto_GenKey(), BSL_Crypto_WrapKey(), BSL_ERR_SECURITY_CONTEXT_CRYPTO_FAILED, BSL_ERR_SECURITY_CONTEXT_FAILED, BSL_LOG_DEBUG, BSL_LOG_ERR, BSL_SUCCESS, BSLX_COSEMSG_ALG_AES_KW_128, BSLX_COSEMSG_ALG_AES_KW_192, BSLX_COSEMSG_ALG_AES_KW_256, BSLX_COSEMSG_ALG_DIRECT, BSLX_COSEMSG_ALG_DIRECT_HKDF_SHA_256, BSLX_COSEMSG_ALG_DIRECT_HKDF_SHA_512, BSLX_CoseSc_HkdfContentKey(), BSLX_CoseMsg_Recipient_t::ciphertext, and ctx.
Referenced by BSLX_CoseSc_Encrypt_Source(), and BSLX_CoseSc_Mac_Source().
|
static |
Generate optional partial IV depending on key Base IV.
References BSL_Crypto_GetKeyParameter(), BSL_Data_Init(), BSL_Data_InitView(), BSL_ERR_SECURITY_CONTEXT_CRYPTO_FAILED, BSL_IdValPair_GetAsBytestr(), BSL_IdValPair_SetBytestr(), BSL_LOG_DEBUG, BSL_LOG_ERR, BSL_SUCCESS, BSLX_COSEMSG_AESGCM_IV_LEN, BSLX_COSEMSG_HDR_IV, BSLX_COSEMSG_HDR_PARTIALIV, BSLX_COSEMSG_KEY_PARAM_BASEIV, BSLX_CoseSc_GenerateNonce(), ctx, BSL_Data_t::len, and BSLX_CoseMsg_Headers_t::uhdr.
Referenced by BSLX_CoseSc_Encrypt0_Source(), and BSLX_CoseSc_Encrypt_Source().
|
static |
Synthesize a nonce value based on option values.
References BSL_Crypto_GenIV(), BSL_Crypto_GetKeyStatistics(), BSL_CRYPTO_KEYSTATS_TIMES_USED, BSL_Data_CopyFrom(), BSL_Data_Resize(), BSL_LOG_ERR, BSL_SUCCESS, keyhandle, BSL_Data_t::len, BSL_Data_t::ptr, and BSL_Crypto_KeyStats_t::stats.
Referenced by BSLX_CoseSc_GenerateIV(), and BSLX_CoseSc_HkdfContentKey().
|
static |
References BSLX_CoseSc_t::aad_scope, BSL_CBOR_Decode(), BSL_ERR_SECURITY_CONTEXT_FAILED, BSL_IdValPair_GetAsRaw(), BSL_LOG_ERR, BSL_SecOper_FindParam(), BSL_SUCCESS, BSLX_CoseSc_AadScope_Decode(), BSLX_COSESC_PARAM_AAD_SCOPE, BSLX_CoseSc_t::opt_aad_scope, BSLX_CoseSc_t::sec_oper, and BSLX_CoseSc_t::status.
Referenced by BSLX_CoseSc_Encrypt0_VerifyAccept(), BSLX_CoseSc_Encrypt_VerifyAccept(), BSLX_CoseSc_Mac0_VerifyAccept(), and BSLX_CoseSc_Mac_VerifyAccept().
|
static |
References BSLX_CoseSc_t::addl_phdr, BSLX_CoseSc_t::addl_phdr_bstr, BSLX_CoseSc_t::addl_uhdr, BSL_CBOR_Decode(), BSL_Data_CopyFrom(), BSL_ERR_SECURITY_CONTEXT_FAILED, BSL_IdValPair_GetAsBytestr(), BSL_LOG_ERR, BSL_SecOper_FindParam(), BSL_SUCCESS, BSLX_CoseMsg_Headers_Decode_Map(), BSLX_COSESC_PARAM_ADDL_PHDR, BSLX_COSESC_PARAM_ADDL_UHDR, BSL_Data_t::len, BSL_Data_t::ptr, BSLX_CoseSc_t::sec_oper, and BSLX_CoseSc_t::status.
Referenced by BSLX_CoseSc_Encrypt0_VerifyAccept(), BSLX_CoseSc_Encrypt_VerifyAccept(), BSLX_CoseSc_Mac0_VerifyAccept(), and BSLX_CoseSc_Mac_VerifyAccept().
|
static |
Combine options and received headers to validate end key.
References BSL_Crypto_GetKeyParameter(), BSL_Crypto_GetRegistryKey(), BSL_Data_Cmp(), BSL_Data_CopyFrom(), BSL_ERR_SECURITY_CONTEXT_FAILED, BSL_IdValPair_GetAsBytestr(), BSL_IdValPair_GetAsInt64(), BSL_LOG_DEBUG, BSL_LOG_ERR, BSL_SUCCESS, BSLX_COSEMSG_ALG_DIRECT, BSLX_COSEMSG_HDR_ALG, BSLX_COSEMSG_HDR_KID, BSLX_CoseMsg_Headers_Get(), BSLX_COSEMSG_KEY_PARAM_ALG, BSLX_CoseSc_t::hdr_key_alg, BSLX_CoseSc_t::key_alg, BSLX_CoseSc_t::keyhandle, BSLX_CoseSc_t::kid, BSL_Data_t::len, BSLX_CoseSc_t::opt_key_alg, BSLX_CoseSc_t::opt_kid, BSL_Data_t::ptr, and BSLX_CoseSc_t::status.
Referenced by BSLX_CoseSc_Execute(), and BSLX_CoseSc_VerifyHeaders().
|
static |
References BSL_ERR_SECURITY_CONTEXT_FAILED, BSL_IdValPair_GetAsInt64(), BSL_LOG_CRIT, BSL_LOG_ERR, BSL_SUCCESS, BSLX_COSEMSG_ALG_AES_GCM_128, BSLX_COSEMSG_ALG_AES_GCM_192, BSLX_COSEMSG_ALG_AES_GCM_256, BSLX_COSEMSG_ALG_HMAC_SHA_256_256, BSLX_COSEMSG_ALG_HMAC_SHA_384_384, BSLX_COSEMSG_ALG_HMAC_SHA_512_512, BSLX_COSEMSG_HDR_ALG, BSLX_CoseMsg_Headers_Get(), BSLX_CoseSc_t::hdr_tgt_alg, BSLX_CoseSc_t::opt_tgt_alg, BSLX_CoseSc_t::status, BSLX_CoseSc_t::tgt_alg, and BSLX_CoseSc_t::tgt_keylen.
Referenced by BSLX_CoseSc_Execute(), and BSLX_CoseSc_VerifyHeaders().
|
static |
References BSLX_CoseSc_t::aad_scope, BSL_CBOR_Decode(), BSL_Data_CopyFrom(), BSL_Data_Deinit(), BSL_Data_Init(), BSL_ERR_SECURITY_CONTEXT_FAILED, BSL_IdValPair_GetAsBytestr(), BSL_IdValPair_GetAsInt64(), BSL_IdValPair_GetAsRaw(), BSL_LOG_ERR, BSL_SecOper_FindOption(), BSL_SUCCESS, BSLX_CoseSc_AadScope_Decode(), BSLX_COSESC_OPTION_AAD_SCOPE, BSLX_COSESC_OPTION_IV_BASE, BSLX_COSESC_OPTION_IV_COUNTER_OFFSET, BSLX_COSESC_OPTION_KEY_ALG, BSLX_COSESC_OPTION_KEY_ID, BSLX_COSESC_OPTION_SALT_BASE, BSLX_COSESC_OPTION_SALT_COUNTER_OFFSET, BSLX_COSESC_OPTION_SALT_LENGTH, BSLX_COSESC_OPTION_TGT_ALG, cose_bcb_cnt_algs, cose_bib_cnt_algs, BSLX_CoseSc_t::is_bib, BSLX_CoseSc_t::is_source, BSLX_CoseSc_t::iv_base, BSLX_CoseSc_t::iv_offset, BSLX_CoseSc_t::key_alg, BSLX_CoseSc_t::kid, BSL_Data_t::len, local_cmp_int64(), BSLX_CoseSc_t::opt_aad_scope, BSLX_CoseSc_t::opt_iv_base, BSLX_CoseSc_t::opt_iv_offset, BSLX_CoseSc_t::opt_key_alg, BSLX_CoseSc_t::opt_kid, BSLX_CoseSc_t::opt_salt_base, BSLX_CoseSc_t::opt_salt_length, BSLX_CoseSc_t::opt_salt_offset, BSLX_CoseSc_t::opt_tgt_alg, BSL_Data_t::ptr, BSLX_CoseSc_t::salt_base, BSLX_CoseSc_t::salt_length, BSLX_CoseSc_t::salt_offset, BSLX_CoseSc_t::status, and BSLX_CoseSc_t::tgt_alg.
Referenced by BSLX_CoseSc_Execute(), and BSLX_CoseSc_Validate().
|
static |
HKDF processing for source and verifier.
References BSLX_CoseSc_KdfContext_t::alg, BSL_CBOR_Encode_Twopass(), BSL_Crypto_KDF(), BSL_CRYPTO_KDF_HKDF_SHA_256, BSL_CRYPTO_KDF_HKDF_SHA_512, BSL_Data_Deinit(), BSL_Data_Init(), BSL_ERR_SECURITY_CONTEXT_CRYPTO_FAILED, BSL_ERR_SECURITY_CONTEXT_VALIDATION_FAILED, BSL_IdValPair_GetAsBytestr(), BSL_IdValPair_SetBytestr(), BSL_LOG_DEBUG, BSL_LOG_ERR, BSL_SecOper_GetSecuritySource(), BSL_SUCCESS, BSLX_COSEMSG_ALG_DIRECT_HKDF_SHA_256, BSLX_COSEMSG_ALG_DIRECT_HKDF_SHA_512, BSLX_COSEMSG_HDR_SALT, BSLX_CoseMsg_Headers_Get(), BSLX_CoseSc_GenerateNonce(), BSLX_CoseSc_KdfContext_Encode(), ctx, BSLX_CoseMsg_Recipient_t::headers, BSLX_CoseMsg_Headers_t::phdr_bstr, and BSLX_CoseMsg_Headers_t::uhdr.
Referenced by BSLX_CoseSc_ExtractContentKey(), and BSLX_CoseSc_GenerateContentKey().
|
static |
References BSLX_CoseSc_t::aad_scope, BSLX_CoseSc_t::addl_phdr, BSLX_CoseSc_t::addl_phdr_bstr, BSLX_CoseSc_t::addl_uhdr, ASSERT_ARG_NONNULL, BSL_Data_Init(), BSL_PrimaryBlock_Init(), BSL_SUCCESS, BSLX_CoseSc_t::cekhandle, BSLX_CoseSc_t::enc_ctx, BSLX_CoseSc_t::full_iv, BSLX_CoseSc_t::iv_base, BSLX_CoseSc_t::kid, BSLX_CoseSc_t::mac_ctx, BSLX_CoseSc_t::partial_iv, BSLX_CoseSc_t::primary_block, BSLX_CoseSc_t::salt_base, BSLX_CoseSc_t::status, and BSLX_CoseSc_t::wrapped_cek.
Referenced by BSLX_CoseSc_Execute(), and BSLX_CoseSc_Validate().
|
static |
Matches BSL_CBOR_Encode_f signature.
References BSLX_CoseSc_KdfContext_t::addl_phdr, BSLX_CoseSc_KdfContext_t::alg, BSL_CBOR_EncodeEID(), BSL_SUCCESS, BSLX_CoseSc_KdfContext_t::key_length, BSLX_CoseSc_KdfContext_t::recip_phdr, BSLX_CoseSc_KdfContext_t::sec_src_eid, and UsefulBufC_FROM_BSL_Data.
Referenced by BSLX_CoseSc_HkdfContentKey().
|
static |
Internal processing to source a COSE_Mac0 message.
References BSL_CBOR_Encode_Twopass(), BSL_Data_Deinit(), BSL_Data_Init(), BSL_IdValPair_SetBytestr(), BSL_LOG_ERR, BSL_SecOper_AddResult(), BSL_SUCCESS, BSLX_CoseMsg_Mac0_Deinit(), BSLX_CoseMsg_Mac0_Encode(), BSLX_CoseMsg_Mac0_Init(), BSLX_CoseSc_AddAadScope(), BSLX_CoseSc_Mac_Compute(), BSLX_COSESC_RESULT_COSE_MAC0, BSLX_CoseSc_SourceHeaders(), ctx, BSLX_CoseMsg_Mac0_t::headers, and BSLX_CoseMsg_Mac0_t::tag.
Referenced by BSLX_CoseSc_Execute().
|
static |
Internal processing to verify a COSE_Mac0 message.
References BSL_CBOR_Decode(), BSL_Crypto_Compare(), BSL_Data_Deinit(), BSL_Data_Init(), BSL_ERR_SECURITY_CONTEXT_AUTH_FAILED, BSL_ERR_SECURITY_CONTEXT_VALIDATION_FAILED, BSL_IdValPair_GetAsBytestr(), BSL_LOG_DEBUG, BSL_LOG_ERR, BSL_SUCCESS, BSLX_CoseMsg_Mac0_Decode(), BSLX_CoseMsg_Mac0_Deinit(), BSLX_CoseMsg_Mac0_Init(), BSLX_CoseSc_GetAndValidateAadScope(), BSLX_CoseSc_GetAndValidateAddlHeaders(), BSLX_CoseSc_Mac_Compute(), BSLX_CoseSc_VerifyHeaders(), ctx, BSLX_CoseMsg_Mac0_t::headers, BSL_Data_t::len, BSL_Data_t::ptr, BSLX_CoseMsg_Mac0_t::tag, and tag.
Referenced by BSLX_CoseSc_Execute().
|
static |
Internal processing according to Section 6.3 of RFC 9052.
References BSL_AuthCtx_DigestBuffer(), BSL_AuthCtx_DigestSeq(), BSL_AuthCtx_Finalize(), BSL_AuthCtx_Init(), BSL_BundleCtx_ReadBTSD(), BSL_CRYPTO_SHA_256, BSL_CRYPTO_SHA_384, BSL_CRYPTO_SHA_512, BSL_ERR_SECURITY_CONTEXT_VALIDATION_FAILED, BSL_LOG_ERR, BSL_LOG_WARNING, BSL_malloc(), BSL_SeqReader_Destroy(), BSL_SUCCESS, BSLX_COSEMSG_ALG_HMAC_SHA_256_256, BSLX_COSEMSG_ALG_HMAC_SHA_384_384, BSLX_COSEMSG_ALG_HMAC_SHA_512_512, BSLX_CoseSc_bstring_AppendHead(), BSLX_CoseSc_BuildAad(), BSLX_CoseSc_ChunkList_GetBstring(), ctx, and tag.
Referenced by BSLX_CoseSc_Mac0_Source(), BSLX_CoseSc_Mac0_VerifyAccept(), BSLX_CoseSc_Mac_Source(), and BSLX_CoseSc_Mac_VerifyAccept().
|
static |
Internal processing to source a COSE_Mac message.
References BSL_CBOR_Encode_Twopass(), BSL_Data_Deinit(), BSL_Data_Init(), BSL_IdValPair_SetBytestr(), BSL_LOG_ERR, BSL_SecOper_AddResult(), BSL_SUCCESS, BSLX_CoseMsg_Mac_Deinit(), BSLX_CoseMsg_Mac_Encode(), BSLX_CoseMsg_Mac_Init(), BSLX_CoseMsg_RecipientList_ResizeNew(), BSLX_CoseSc_AddAadScope(), BSLX_CoseSc_GenerateContentKey(), BSLX_CoseSc_Mac_Compute(), BSLX_COSESC_RESULT_COSE_MAC, BSLX_CoseSc_SourceHeaders(), ctx, BSLX_CoseMsg_Recipient_t::headers, BSLX_CoseMsg_Mac_t::headers, BSLX_CoseMsg_Mac_t::recipients, and BSLX_CoseMsg_Mac_t::tag.
Referenced by BSLX_CoseSc_Execute().
|
static |
Internal processing to verify a COSE_Mac message.
References BSL_CBOR_Decode(), BSL_Crypto_Compare(), BSL_Data_Deinit(), BSL_Data_Init(), BSL_ERR_SECURITY_CONTEXT_AUTH_FAILED, BSL_ERR_SECURITY_CONTEXT_CRYPTO_FAILED, BSL_ERR_SECURITY_CONTEXT_VALIDATION_FAILED, BSL_IdValPair_GetAsBytestr(), BSL_LOG_CRIT, BSL_LOG_DEBUG, BSL_LOG_ERR, BSL_SUCCESS, BSLX_CoseMsg_Mac_Decode(), BSLX_CoseMsg_Mac_Deinit(), BSLX_CoseMsg_Mac_Init(), BSLX_CoseSc_ExtractContentKey(), BSLX_CoseSc_GetAndValidateAadScope(), BSLX_CoseSc_GetAndValidateAddlHeaders(), BSLX_CoseSc_Mac_Compute(), BSLX_CoseSc_VerifyHeaders(), ctx, BSLX_CoseMsg_Recipient_t::headers, BSLX_CoseMsg_Mac_t::headers, BSL_Data_t::len, BSL_Data_t::ptr, BSLX_CoseMsg_Mac_t::recipients, BSLX_CoseMsg_Mac_t::tag, and tag.
Referenced by BSLX_CoseSc_Execute().
|
static |
References BSL_CanonicalBlock_t::block_num, BSL_BundleCtx_GetBlockMetadata(), BSL_BundleCtx_GetBundleMetadata(), BSL_LOG_DEBUG, BSL_LOG_ERR, BSL_SecOper_GetSecurityBlockNum(), BSL_SecOper_GetTargetBlockNum(), BSL_SecOper_IsBIB(), BSL_SecOper_IsRoleSource(), BSL_SecOper_IsRoleVerifier(), BSL_SUCCESS, BSLX_CoseSc_t::bundle, BSLX_CoseSc_t::is_bib, BSLX_CoseSc_t::is_source, BSLX_CoseSc_t::overwrite_btsd, BSLX_CoseSc_t::primary_block, BSLX_CoseSc_t::sec_blk_num, BSLX_CoseSc_t::sec_oper, BSLX_CoseSc_t::status, and BSLX_CoseSc_t::target_block.
Referenced by BSLX_CoseSc_Execute(), and BSLX_CoseSc_Validate().
|
static |
Common logic for headers at the source.
References BSL_IdValPair_SetBytestr(), BSL_IdValPair_SetInt64(), BSLX_COSEMSG_HDR_ALG, BSLX_COSEMSG_HDR_KID, BSLX_CoseMsg_Headers_DerivePhdr(), cose_recip_alg_unprot, ctx, local_cmp_int64(), BSLX_CoseMsg_Headers_t::phdr, and BSLX_CoseMsg_Headers_t::uhdr.
Referenced by BSLX_CoseSc_Encrypt0_Source(), BSLX_CoseSc_Encrypt_Source(), BSLX_CoseSc_Mac0_Source(), and BSLX_CoseSc_Mac_Source().
| bool BSLX_CoseSc_Validate | ( | BSL_LibCtx_t * | lib, |
| BSL_BundleRef_t * | bundle, | ||
| BSL_SecOper_t * | sec_oper | ||
| ) |
Match signature BSL_SecCtx_Validate_f.
References BSL_SUCCESS, BSLX_CoseSc_Deinit(), BSLX_CoseSc_GetOptions(), BSLX_CoseSc_Init(), BSLX_CoseSc_Prepare(), and ctx.
Referenced by MockBPA_Agent_Init(), test_AppendixA_Example1_BIB_Source(), test_AppendixA_Example1_BIB_VerifyAccept(), test_AppendixA_Example4_BCB_Source(), test_AppendixA_Example4_BCB_VerifyAccept(), test_AppendixA_Example5_BCB_Source(), test_AppendixA_Example5_BCB_VerifyAccept(), test_AppendixA_Example6_BCB_Source(), test_CCSDS_Example_Mac_Source(), test_CCSDS_Example_Mac_VerifyAccept(), test_CoseSc_InvalidOptions_Source(), and test_CoseSc_InvalidOptions_Verifier().
|
static |
Common logic for headers at verifier or acceptor.
References BSL_ERR_SECURITY_CONTEXT_CRYPTO_FAILED, BSL_LOG_ERR, BSL_SUCCESS, BSLX_CoseMsg_HdrMapTree_update(), BSLX_CoseMsg_Headers_CheckCrit(), BSLX_CoseSc_GetAndValidateKey(), BSLX_CoseSc_GetAndValidateTarget(), ctx, and BSLX_CoseMsg_Headers_t::uhdr.
Referenced by BSLX_CoseSc_Encrypt0_VerifyAccept(), BSLX_CoseSc_Encrypt_VerifyAccept(), BSLX_CoseSc_Mac0_VerifyAccept(), and BSLX_CoseSc_Mac_VerifyAccept().
|
static |
Matches signature for bsearch()
Referenced by BSLX_CoseSc_GetOptions(), and BSLX_CoseSc_SourceHeaders().
|
static |
Acceptable target algorithms for Encrypt.
bsearch() to work. Referenced by BSLX_CoseSc_GetOptions().
|
static |
Acceptable target algorithms for MAC.
bsearch() to work. Referenced by BSLX_CoseSc_GetOptions().
|
static |
Recipient algorithms which cannot protect the header.
bsearch() to work. Referenced by BSLX_CoseSc_SourceHeaders().