void _COSE_Encrypt_Release(COSE_Encrypt * p) { if (p->pbContent != NULL) COSE_FREE((void *) p->pbContent, &p->m_message.m_allocContext); // if (p->pbIV != NULL) COSE_FREE(p->pbIV, &p->m_message.m_allocContext); if (p->pbKey != NULL) COSE_FREE(p ->pbKey, &p->m_message.m_allocContext); _COSE_Release(&p->m_message); }
bool _COSE_Init_From_Object(COSE* pobj, cn_cbor * pcbor, CBOR_CONTEXT_COMMA cose_errback * perr) { const cn_cbor * pmap = NULL; cn_cbor_errback errState; // = { 0 }; #ifdef TAG_IN_ARRAY cn_cbor * cbor; #endif // TAG_IN_ARRAY #ifdef USE_CBOR_CONTEXT if (context != NULL) pobj->m_allocContext = *context; #endif pobj->m_cborRoot = pcbor; pobj->m_cbor = pcbor; #ifdef TAG_IN_ARRAY cbor = cn_cbor_index(pobj->m_cbor, 0); CHECK_CONDITION(cbor != NULL, COSE_ERR_INVALID_PARAMETER); if (cbor->type == CN_CBOR_UINT) { pobj->m_msgType = (int) cbor->v.uint; } #else // Check if we have a tag if (pcbor->type == CN_CBOR_TAG) { pcbor = pobj->m_cbor = pcbor->first_child; } #endif pmap = _COSE_arrayget_int(pobj, INDEX_PROTECTED); CHECK_CONDITION(pmap != NULL, COSE_ERR_INVALID_PARAMETER); if (pmap != NULL) { CHECK_CONDITION(pmap->type == CN_CBOR_BYTES, COSE_ERR_INVALID_PARAMETER); if (pmap->length == 0) { pobj->m_protectedMap = cn_cbor_map_create(CBOR_CONTEXT_PARAM_COMMA NULL); CHECK_CONDITION(pobj->m_protectedMap, COSE_ERR_OUT_OF_MEMORY); } else { pobj->m_protectedMap = cn_cbor_decode((const byte *)pmap->v.str, pmap->length, CBOR_CONTEXT_PARAM_COMMA &errState); CHECK_CONDITION(pobj->m_protectedMap != NULL, COSE_ERR_INVALID_PARAMETER); } } pobj->m_unprotectMap = _COSE_arrayget_int(pobj, INDEX_UNPROTECTED); CHECK_CONDITION((pobj->m_unprotectMap != NULL) && (pobj->m_unprotectMap->type == CN_CBOR_MAP), COSE_ERR_INVALID_PARAMETER); pobj->m_ownUnprotectedMap = false; pobj->m_ownMsg = true; pobj->m_refCount = 1; return true; errorReturn: _COSE_Release(pobj); return false; }
void _COSE_Enveloped_Release(COSE_Enveloped * p) { COSE_RecipientInfo * pRecipient1; COSE_RecipientInfo * pRecipient2; if (p->pbContent != NULL) COSE_FREE((void *) p->pbContent, &p->m_message.m_allocContext); // if (p->pbIV != NULL) COSE_FREE(p->pbIV, &p->m_message.m_allocContext); for (pRecipient1 = p->m_recipientFirst; pRecipient1 != NULL; pRecipient1 = pRecipient2) { pRecipient2 = pRecipient1->m_recipientNext; COSE_Recipient_Free((HCOSE_RECIPIENT)pRecipient1); } _COSE_Release(&p->m_message); }
bool _COSE_Mac_Release(COSE_MacMessage * p) { COSE_RecipientInfo * pRecipient; COSE_RecipientInfo * pRecipient2; if (p->pbKey != NULL) COSE_FREE(p->pbKey, &p->m_message.m_allocContext); for (pRecipient = p->m_recipientFirst; pRecipient != NULL; pRecipient = pRecipient2) { pRecipient2 = pRecipient->m_recipientNext; _COSE_Recipient_Free(pRecipient); } _COSE_Release(&p->m_message); return true; }
bool _COSE_Init(COSE* pobj, int msgType, CBOR_CONTEXT_COMMA cose_errback * perr) { cn_cbor_errback errState;; #ifdef USE_CBOR_CONTEXT if (context != NULL) pobj->m_allocContext = *context; #endif pobj->m_protectedMap = cn_cbor_map_create(CBOR_CONTEXT_PARAM_COMMA &errState); CHECK_CONDITION_CBOR(pobj->m_protectedMap != NULL, errState); pobj->m_dontSendMap = cn_cbor_map_create(CBOR_CONTEXT_PARAM_COMMA &errState); CHECK_CONDITION_CBOR(pobj->m_dontSendMap != NULL, errState); pobj->m_cbor = cn_cbor_array_create(CBOR_CONTEXT_PARAM_COMMA &errState); CHECK_CONDITION_CBOR(pobj->m_cbor != NULL, errState); pobj->m_ownMsg = 1; #ifdef TAG_IN_ARRAY if (msgType > 0) { cn_cbor * cn = cn_cbor_int_create(msgType, CBOR_CONTEXT_PARAM_COMMA &errState); CHECK_CONDITION_CBOR(cn != NULL, errState); CHECK_CONDITION_CBOR(cn_cbor_array_append(pobj->m_cbor, cn, &errState), errState); pobj->m_msgType = msgType; } #else pobj->m_msgType = msgType; #endif pobj->m_unprotectMap = cn_cbor_map_create(CBOR_CONTEXT_PARAM_COMMA &errState); CHECK_CONDITION_CBOR(pobj->m_unprotectMap != NULL, errState); CHECK_CONDITION_CBOR(_COSE_array_replace(pobj, pobj->m_unprotectMap, INDEX_UNPROTECTED, CBOR_CONTEXT_PARAM_COMMA &errState), errState); pobj->m_ownUnprotectedMap = false; pobj->m_refCount = 1; return true; errorReturn: _COSE_Release(pobj); return false; }
bool _COSE_Mac0_Release(COSE_Mac0Message * p) { _COSE_Release(&p->m_message); return true; }