Fix allocation error for KeyWrap
diff --git a/src/openssl.c b/src/openssl.c index 645c7f6..7916cef 100644 --- a/src/openssl.c +++ b/src/openssl.c
@@ -756,19 +756,22 @@ bool AES_KW_Encrypt(COSE_RecipientInfo * pcose, const byte * pbKeyIn, int cbitKey, const byte * pbContent, int cbContent, cose_errback * perr) { - byte rgbOut[256 / 8]; + byte *pbOut = NULL; AES_KEY key; #ifdef USE_CBOR_CONTEXT cn_cbor_context * context = &pcose->m_encrypt.m_message.m_allocContext; #endif cn_cbor * cnTmp = NULL; + pbOut = COSE_CALLOC(cbContent + 8, 1, context); + CHECK_CONDITION(AES_set_encrypt_key(pbKeyIn, cbitKey, &key) == 0, COSE_ERR_CRYPTO_FAIL); - CHECK_CONDITION(AES_wrap_key(&key, NULL, rgbOut, pbContent, cbContent), COSE_ERR_CRYPTO_FAIL); + CHECK_CONDITION(AES_wrap_key(&key, NULL, pbOut, pbContent, cbContent), COSE_ERR_CRYPTO_FAIL); - cnTmp = cn_cbor_data_create(rgbOut, (int)cbContent + 8, CBOR_CONTEXT_PARAM_COMMA NULL); + cnTmp = cn_cbor_data_create(pbOut, (int)cbContent + 8, CBOR_CONTEXT_PARAM_COMMA NULL); CHECK_CONDITION(cnTmp != NULL, COSE_ERR_CBOR); + pbOut = NULL; CHECK_CONDITION(_COSE_array_replace(&pcose->m_encrypt.m_message, cnTmp, INDEX_BODY, CBOR_CONTEXT_PARAM_COMMA NULL), COSE_ERR_CBOR); cnTmp = NULL; @@ -776,6 +779,7 @@ errorReturn: COSE_FREE(cnTmp, context); + if (pbOut != NULL) COSE_FREE(pbOut, context); return false; }