Merge pull request #32 from jimsch/master
That should fix the crash on gcc
diff --git a/src/Cose.c b/src/Cose.c
index 7524ec0..612f761 100644
--- a/src/Cose.c
+++ b/src/Cose.c
@@ -34,7 +34,6 @@
pobj->m_cborRoot = pobj->m_cbor = cn_cbor_array_create(CBOR_CONTEXT_PARAM_COMMA &errState);
CHECK_CONDITION_CBOR(pobj->m_cbor != NULL, errState);
- pobj->m_cborRoot = NULL;
pobj->m_ownMsg = 1;
#ifdef TAG_IN_ARRAY
@@ -53,13 +52,13 @@
CHECK_CONDITION_CBOR(_COSE_array_replace(pobj, pobj->m_unprotectMap, INDEX_UNPROTECTED, CBOR_CONTEXT_PARAM_COMMA &errState), errState);
pobj->m_ownUnprotectedMap = false;
- /*
+
if (!(flags & COSE_INIT_FLAGS_NO_CBOR_TAG)) {
cn_cbor_errback cbor_error;
cn_cbor * cn = cn_cbor_tag_create(msgType, pobj->m_cborRoot, CBOR_CONTEXT_PARAM_COMMA &cbor_error);
CHECK_CONDITION_CBOR(cn != NULL, cbor_error);
pobj->m_cborRoot = cn;
- }*/
+ }
pobj->m_refCount = 1;
@@ -76,6 +75,7 @@
#ifdef TAG_IN_ARRAY
cn_cbor * cbor;
#endif // TAG_IN_ARRAY
+ cn_cbor_errback cbor_error;
#ifdef USE_CBOR_CONTEXT
if (context != NULL) pobj->m_allocContext = *context;
@@ -117,6 +117,9 @@
CHECK_CONDITION((pobj->m_unprotectMap != NULL) && (pobj->m_unprotectMap->type == CN_CBOR_MAP), COSE_ERR_INVALID_PARAMETER);
pobj->m_ownUnprotectedMap = false;
+ pobj->m_dontSendMap = cn_cbor_map_create(CBOR_CONTEXT_PARAM_COMMA &cbor_error);
+ CHECK_CONDITION_CBOR(pobj->m_dontSendMap != NULL, cbor_error);
+
pobj->m_ownMsg = true;
pobj->m_refCount = 1;
@@ -309,15 +312,11 @@
cn_cbor_context * context = &pCose->m_allocContext;
#endif
cn_cbor_errback error;
- bool f;
+ bool f = false;
- if ((flags & COSE_BOTH) == COSE_BOTH) {
- if (perr != NULL) perr->err = COSE_ERR_INVALID_PARAMETER;
- errorReturn:
- return false;
- }
-
- if (perr != NULL) perr->err = COSE_ERR_NONE;
+ CHECK_CONDITION(cn_cbor_mapget_int(pCose->m_protectedMap, key) == NULL, COSE_ERR_INVALID_PARAMETER);
+ CHECK_CONDITION(cn_cbor_mapget_int(pCose->m_unprotectMap, key) == NULL, COSE_ERR_INVALID_PARAMETER);
+ CHECK_CONDITION(cn_cbor_mapget_int(pCose->m_dontSendMap, key) == NULL, COSE_ERR_INVALID_PARAMETER);
switch (flags) {
case COSE_PROTECT_ONLY:
@@ -343,6 +342,7 @@
CHECK_CONDITION(f, _MapFromCBOR(error));
+errorReturn:
return f;
}
diff --git a/src/Encrypt.c b/src/Encrypt.c
index cd1ba35..48cb54e 100644
--- a/src/Encrypt.c
+++ b/src/Encrypt.c
@@ -345,6 +345,7 @@
cn_Alg = _COSE_map_get_int(&pcose->m_message, COSE_Header_Algorithm, COSE_BOTH, perr);
if (cn_Alg == NULL) goto errorReturn;
+ CHECK_CONDITION((cn_Alg->type != CN_CBOR_TEXT), COSE_ERR_UNKNOWN_ALGORITHM);
CHECK_CONDITION((cn_Alg->type == CN_CBOR_UINT) || (cn_Alg->type == CN_CBOR_INT), COSE_ERR_INVALID_PARAMETER);
alg = (int) cn_Alg->v.uint;
diff --git a/src/Encrypt0.c b/src/Encrypt0.c
index 9135959..0d8e78b 100644
--- a/src/Encrypt0.c
+++ b/src/Encrypt0.c
@@ -281,6 +281,7 @@
cn_Alg = _COSE_map_get_int(&pcose->m_message, COSE_Header_Algorithm, COSE_BOTH, perr);
if (cn_Alg == NULL) goto errorReturn;
+ CHECK_CONDITION(cn_Alg->type != CN_CBOR_TEXT, COSE_ERR_UNKNOWN_ALGORITHM);
CHECK_CONDITION((cn_Alg->type == CN_CBOR_UINT) || (cn_Alg->type == CN_CBOR_INT), COSE_ERR_INVALID_PARAMETER);
alg = (int) cn_Alg->v.uint;
@@ -308,7 +309,7 @@
case COSE_Algorithm_AES_GCM_256: cbitKey = 256; break;
default:
- FAIL_CONDITION(COSE_ERR_INVALID_PARAMETER);
+ FAIL_CONDITION(COSE_ERR_UNKNOWN_ALGORITHM);
}
// Build protected headers
diff --git a/src/MacMessage.c b/src/MacMessage.c
index 78bdcfc..6a1a9f8 100644
--- a/src/MacMessage.c
+++ b/src/MacMessage.c
@@ -322,7 +322,8 @@
cn_Alg = _COSE_map_get_int(&pcose->m_message, COSE_Header_Algorithm, COSE_BOTH, perr);
if (cn_Alg == NULL) goto errorReturn;
- CHECK_CONDITION(((cn_Alg->type == CN_CBOR_UINT || cn_Alg->type == CN_CBOR_INT)), COSE_ERR_INVALID_PARAMETER);
+ CHECK_CONDITION(cn_Alg->type != CN_CBOR_TEXT, COSE_ERR_UNKNOWN_ALGORITHM);
+ CHECK_CONDITION(((cn_Alg->type == CN_CBOR_UINT || cn_Alg->type == CN_CBOR_INT)), COSE_ERR_UNKNOWN_ALGORITHM);
alg = (int) cn_Alg->v.uint;
@@ -350,7 +351,7 @@
break;
default:
- FAIL_CONDITION(COSE_ERR_INVALID_PARAMETER);
+ FAIL_CONDITION(COSE_ERR_UNKNOWN_ALGORITHM);
}
// If we are doing direct encryption - then recipient generates the key
diff --git a/src/MacMessage0.c b/src/MacMessage0.c
index 1a61ffa..04b781b 100644
--- a/src/MacMessage0.c
+++ b/src/MacMessage0.c
@@ -219,6 +219,7 @@
cn_Alg = _COSE_map_get_int(&pcose->m_message, COSE_Header_Algorithm, COSE_BOTH, perr);
if (cn_Alg == NULL) goto errorReturn;
+ CHECK_CONDITION(cn_Alg->type != CN_CBOR_TEXT, COSE_ERR_UNKNOWN_ALGORITHM);
CHECK_CONDITION(((cn_Alg->type == CN_CBOR_UINT || cn_Alg->type == CN_CBOR_INT)), COSE_ERR_INVALID_PARAMETER);
alg = (int) cn_Alg->v.uint;
@@ -247,7 +248,7 @@
break;
default:
- FAIL_CONDITION(COSE_ERR_INVALID_PARAMETER);
+ FAIL_CONDITION(COSE_ERR_UNKNOWN_ALGORITHM);
}
// Build protected headers
diff --git a/src/Recipient.c b/src/Recipient.c
index 3f8ea04..63b659b 100644
--- a/src/Recipient.c
+++ b/src/Recipient.c
@@ -38,7 +38,7 @@
COSE_RecipientInfo * pobj = (COSE_RecipientInfo *)COSE_CALLOC(1, sizeof(COSE_RecipientInfo), context);
CHECK_CONDITION(pobj != NULL, COSE_ERR_OUT_OF_MEMORY);
- if (!_COSE_Init(flags, &pobj->m_encrypt.m_message, COSE_recipient_object, CBOR_CONTEXT_PARAM_COMMA perr)) {
+ if (!_COSE_Init(flags | COSE_INIT_FLAGS_NO_CBOR_TAG, &pobj->m_encrypt.m_message, COSE_recipient_object, CBOR_CONTEXT_PARAM_COMMA perr)) {
_COSE_Recipient_Free(pobj);
return NULL;
}
@@ -673,10 +673,16 @@
context = &p->m_encrypt.m_message.m_allocContext;
#endif
- cn_Temp = cn_cbor_int_create(COSE_Algorithm_Direct, CBOR_CONTEXT_PARAM_COMMA &cbor_error);
- CHECK_CONDITION_CBOR(cn_Temp != NULL, cbor_error);
- if (!COSE_Recipient_map_put(hRecipient, COSE_Header_Algorithm, cn_Temp, COSE_UNPROTECT_ONLY, perr)) goto errorReturn;
- cn_Temp = NULL;
+ cn_cbor * cnAlg = _COSE_map_get_int(&p->m_encrypt.m_message, COSE_Header_Algorithm, COSE_BOTH, perr);
+ if (cnAlg != NULL) {
+ CHECK_CONDITION(cnAlg->type == CN_CBOR_INT && cnAlg->v.sint == COSE_Algorithm_Direct, COSE_ERR_INVALID_PARAMETER);
+ }
+ else {
+ cn_Temp = cn_cbor_int_create(COSE_Algorithm_Direct, CBOR_CONTEXT_PARAM_COMMA &cbor_error);
+ CHECK_CONDITION_CBOR(cn_Temp != NULL, cbor_error);
+ if (!COSE_Recipient_map_put(hRecipient, COSE_Header_Algorithm, cn_Temp, COSE_UNPROTECT_ONLY, perr)) goto errorReturn;
+ cn_Temp = NULL;
+ }
if (cbKid > 0) {
pbTemp = (byte *)COSE_CALLOC(cbKid, 1, context);
diff --git a/src/Sign.c b/src/Sign.c
index 76420cd..6a72d21 100644
--- a/src/Sign.c
+++ b/src/Sign.c
@@ -44,10 +44,6 @@
CHECK_CONDITION(flags == COSE_INIT_FLAGS_NONE, COSE_ERR_INVALID_PARAMETER);
COSE_SignMessage * pobj = (COSE_SignMessage *)COSE_CALLOC(1, sizeof(COSE_SignMessage), context);
CHECK_CONDITION(pobj != NULL, COSE_ERR_OUT_OF_MEMORY);
- if (pobj == NULL) {
- if (perr != NULL) perr->err = COSE_ERR_OUT_OF_MEMORY;
- return NULL;
- }
if (!_COSE_Init(flags, &pobj->m_message, COSE_sign_object, CBOR_CONTEXT_PARAM_COMMA perr)) {
_COSE_Sign_Release(pobj);
diff --git a/src/Sign0.c b/src/Sign0.c
index 93c2184..1b8528f 100644
--- a/src/Sign0.c
+++ b/src/Sign0.c
@@ -362,7 +362,7 @@
break;
default:
- FAIL_CONDITION(COSE_ERR_INVALID_PARAMETER);
+ FAIL_CONDITION(COSE_ERR_UNKNOWN_ALGORITHM);
}
COSE_FREE(pbToSign, context);
diff --git a/src/SignerInfo.c b/src/SignerInfo.c
index 5169887..24f34c8 100644
--- a/src/SignerInfo.c
+++ b/src/SignerInfo.c
@@ -67,7 +67,7 @@
return NULL;
}
- if (!_COSE_Init(0, &pobj->m_message, COSE_recipient_object, CBOR_CONTEXT_PARAM_COMMA perror)) {
+ if (!_COSE_Init(COSE_INIT_FLAGS_NO_CBOR_TAG, &pobj->m_message, COSE_recipient_object, CBOR_CONTEXT_PARAM_COMMA perror)) {
_COSE_SignerInfo_Free(pobj);
COSE_FREE(pobj, context);
return NULL;
@@ -212,7 +212,7 @@
break;
default:
- FAIL_CONDITION(COSE_ERR_INVALID_PARAMETER);
+ FAIL_CONDITION(COSE_ERR_UNKNOWN_ALGORITHM);
}
fRet = true;
diff --git a/src/cbor.c b/src/cbor.c
index 31b6ddf..40f5144 100644
--- a/src/cbor.c
+++ b/src/cbor.c
@@ -160,3 +160,15 @@
return pcnTag;
}
+
+cn_cbor * cn_cbor_bool_create(int boolValue, CBOR_CONTEXT_COMMA cn_cbor_errback * errp)
+{
+ cn_cbor * pcn = CN_CALLOC(context);
+ if (pcn == NULL) {
+ if (errp != NULL) errp->err = CN_CBOR_ERR_OUT_OF_MEMORY;
+ return NULL;
+ }
+
+ pcn->type = CN_CBOR_FALSE + (boolValue != 0);
+ return pcn;
+}
diff --git a/src/cose.h b/src/cose.h
index 200d163..7232bb6 100644
--- a/src/cose.h
+++ b/src/cose.h
@@ -150,6 +150,7 @@
COSE_Header_KDF_PUB_other = -999,
COSE_Header_KDF_PRIV = -998,
+ COSE_Header_UseCompressedECDH = -997,
COSE_Header_ECDH_EPHEMERAL = -1,
COSE_Header_ECDH_STATIC = -2
@@ -302,4 +303,4 @@
extern cn_cbor * cn_cbor_clone(const cn_cbor * pIn, CBOR_CONTEXT_COMMA cn_cbor_errback * perr);
extern cn_cbor * cn_cbor_tag_create(int tag, cn_cbor * child, CBOR_CONTEXT_COMMA cn_cbor_errback * perr);
-
+extern cn_cbor * cn_cbor_bool_create(int boolValue, CBOR_CONTEXT_COMMA cn_cbor_errback * errp);
\ No newline at end of file
diff --git a/src/cose_int.h b/src/cose_int.h
index fb82337..ead32c2 100644
--- a/src/cose_int.h
+++ b/src/cose_int.h
@@ -234,6 +234,7 @@
/// NEW CBOR FUNCTIONS
bool cn_cbor_array_replace(cn_cbor * cb_array, cn_cbor * cb_value, int index, CBOR_CONTEXT_COMMA cn_cbor_errback *errp);
+cn_cbor * cn_cbor_bool_create(int boolValue, CBOR_CONTEXT_COMMA cn_cbor_errback * errp);
enum {
diff --git a/test/encrypt.c b/test/encrypt.c
index 68ca8bf..0cf8193 100644
--- a/test/encrypt.c
+++ b/test/encrypt.c
@@ -441,6 +441,8 @@
//
// Unsupported algorithm
+ // Bad Int algorithm
+
hEncrypt = COSE_Enveloped_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
if (hEncrypt == NULL) CFails++;
CHECK_RETURN(COSE_Enveloped_SetContent(hEncrypt, (byte *) "Message", 7, &cose_error), COSE_ERR_NONE, CFails++);
@@ -449,8 +451,17 @@
if (hRecipient == NULL) CFails++;
CHECK_RETURN(COSE_Enveloped_AddRecipient(hEncrypt, hRecipient, &cose_error), COSE_ERR_NONE, CFails++);
CHECK_FAILURE(COSE_Enveloped_encrypt(hEncrypt, &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
+ COSE_Recipient_Free(hRecipient);
+ COSE_Enveloped_Free(hEncrypt);
+
+ hEncrypt = COSE_Enveloped_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ if (hEncrypt == NULL) CFails++;
+ CHECK_RETURN(COSE_Enveloped_SetContent(hEncrypt, (byte *) "Message", 7, &cose_error), COSE_ERR_NONE, CFails++);
CHECK_RETURN(COSE_Enveloped_map_put_int(hEncrypt, COSE_Header_Algorithm, cn_cbor_string_create("hmac", CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, &cose_error), COE_ERR_NONE, CFails++);
+ hRecipient = COSE_Recipient_from_shared_secret(rgb, sizeof(rgb), rgb, sizeof(rgb), CBOR_CONTEXT_PARAM_COMMA NULL);
+ if (hRecipient == NULL) CFails++;
+ CHECK_RETURN(COSE_Enveloped_AddRecipient(hEncrypt, hRecipient, &cose_error), COSE_ERR_NONE, CFails++);
CHECK_FAILURE(COSE_Enveloped_encrypt(hEncrypt, &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
//
@@ -459,6 +470,9 @@
CHECK_FAILURE_PTR(COSE_Enveloped_GetRecipient(hEncrypt, -1, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
CHECK_FAILURE_PTR(COSE_Enveloped_GetRecipient(hEncrypt, 9, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+ COSE_Enveloped_Free(hEncrypt);
+ COSE_Recipient_Free(hRecipient);
+
return;
}
@@ -467,6 +481,7 @@
HCOSE_ENCRYPT hEncrypt = NULL;
byte rgb[10];
cn_cbor * cn = cn_cbor_int_create(5, CBOR_CONTEXT_PARAM_COMMA NULL);
+ cose_errback cose_error;
// Missing case - addref then release on item
@@ -499,10 +514,15 @@
if (hEncrypt == NULL) CFails++;
if (!COSE_Encrypt_SetContent(hEncrypt, (byte *) "Message", 7, NULL)) CFails++;
if (!COSE_Encrypt_map_put_int(hEncrypt, COSE_Header_Algorithm, cn_cbor_int_create(-99, CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Encrypt_encrypt(hEncrypt, rgb, sizeof(rgb), NULL)) CFails++;
+ CHECK_FAILURE(COSE_Encrypt_encrypt(hEncrypt, rgb, sizeof(rgb), &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
+ COSE_Encrypt_Free(hEncrypt);
- if (!COSE_Encrypt_map_put_int(hEncrypt, COSE_Header_Algorithm, cn_cbor_string_create("hmac", CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Encrypt_encrypt(hEncrypt, rgb, sizeof(rgb), NULL)) CFails++;
+ hEncrypt = COSE_Encrypt_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ if (hEncrypt == NULL) CFails++;
+ if (!COSE_Encrypt_SetContent(hEncrypt, (byte *) "Message", 7, NULL)) CFails++;
+ if (!COSE_Encrypt_map_put_int(hEncrypt, COSE_Header_Algorithm, cn_cbor_int_create(-99, CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, NULL)) CFails++;
+ CHECK_FAILURE(COSE_Encrypt_encrypt(hEncrypt, rgb, sizeof(rgb), &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
+ COSE_Encrypt_Free(hEncrypt);
return;
}
diff --git a/test/mac_test.c b/test/mac_test.c
index 92610d5..dc8ef1c 100644
--- a/test/mac_test.c
+++ b/test/mac_test.c
@@ -367,6 +367,7 @@
HCOSE_RECIPIENT hRecipient = NULL;
byte rgb[10];
cn_cbor * cn = cn_cbor_int_create(5, CBOR_CONTEXT_PARAM_COMMA NULL);
+ cose_errback cose_error;
// Missing case - addref then release on item
@@ -408,11 +409,22 @@
hRecipient = COSE_Recipient_from_shared_secret(rgb, sizeof(rgb), rgb, sizeof(rgb), CBOR_CONTEXT_PARAM_COMMA NULL);
if (hRecipient == NULL) CFails++;
if (!COSE_Mac_AddRecipient(hMAC, hRecipient, NULL)) CFails++;
- if (COSE_Mac_encrypt(hMAC, NULL)) CFails++;
- if (COSE_Mac_GetRecipient(hMAC, 9, NULL)) CFails++;
+ CHECK_FAILURE(COSE_Mac_encrypt(hMAC, &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
+ COSE_Mac_Free(hMAC);
+ COSE_Recipient_Free(hRecipient);
+ hMAC = COSE_Mac_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ if (hMAC == NULL) CFails++;
+ if (!COSE_Mac_SetContent(hMAC, (byte *) "Message", 7, NULL)) CFails++;
if (!COSE_Mac_map_put_int(hMAC, COSE_Header_Algorithm, cn_cbor_string_create("hmac", CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Mac_encrypt(hMAC, NULL)) CFails++;
+ hRecipient = COSE_Recipient_from_shared_secret(rgb, sizeof(rgb), rgb, sizeof(rgb), CBOR_CONTEXT_PARAM_COMMA NULL);
+ if (hRecipient == NULL) CFails++;
+ if (!COSE_Mac_AddRecipient(hMAC, hRecipient, NULL)) CFails++;
+ CHECK_FAILURE(COSE_Mac_encrypt(hMAC, &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
+ COSE_Recipient_Free(hRecipient);
+ COSE_Mac_Free(hMAC);
+
+ if (COSE_Mac_GetRecipient(hMAC, 9, NULL)) CFails++;
return;
}
@@ -423,6 +435,7 @@
HCOSE_MAC0 hMAC;
byte rgb[10];
cn_cbor * cn = cn_cbor_int_create(5, CBOR_CONTEXT_PARAM_COMMA NULL);
+ cose_errback cose_error;
hEncrypt = COSE_Encrypt_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
@@ -456,11 +469,15 @@
if (hMAC == NULL) CFails++;
if (!COSE_Mac0_SetContent(hMAC, (byte *) "Message", 7, NULL)) CFails++;
if (!COSE_Mac0_map_put_int(hMAC, COSE_Header_Algorithm, cn_cbor_int_create(-99, CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Mac0_encrypt(hMAC, rgb, sizeof(rgb), NULL)) CFails++;
+ CHECK_FAILURE(COSE_Mac0_encrypt(hMAC, rgb, sizeof(rgb), &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
+ COSE_Mac0_Free(hMAC);
+ hMAC = COSE_Mac0_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ if (hMAC == NULL) CFails++;
+ if (!COSE_Mac0_SetContent(hMAC, (byte *) "Message", 7, NULL)) CFails++;
if (!COSE_Mac0_map_put_int(hMAC, COSE_Header_Algorithm, cn_cbor_string_create("hmac", CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Mac0_encrypt(hMAC, rgb, sizeof(rgb), NULL)) CFails++;
-
+ CHECK_FAILURE(COSE_Mac0_encrypt(hMAC, rgb, sizeof(rgb), &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
+ COSE_Mac0_Free(hMAC);
return;
}
diff --git a/test/sign.c b/test/sign.c
index 05d62d8..d9d86aa 100644
--- a/test/sign.c
+++ b/test/sign.c
@@ -354,6 +354,7 @@
HCOSE_SIGNER hSigner2;
byte rgb[10];
cn_cbor * cn = cn_cbor_int_create(5, CBOR_CONTEXT_PARAM_COMMA NULL);
+ cose_errback cose_error;
hSign2 = COSE_Sign_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
hSigner2 = COSE_Signer_Init(CBOR_CONTEXT_PARAM_COMMA NULL);
@@ -413,11 +414,27 @@
if (!COSE_Sign_SetContent(hSign, (byte *) "Message", 7, NULL)) CFails++;
if (!COSE_Signer_map_put_int(hSigner, COSE_Header_Algorithm, cn_cbor_int_create(-99, CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, NULL)) CFails++;
if (!COSE_Sign_AddSigner(hSign, hSigner, NULL)) CFails++;
- if (COSE_Sign_Sign(hSign, NULL)) CFails++;
+ CHECK_FAILURE(COSE_Sign_Sign(hSign, &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
+ if (COSE_Sign_GetSigner(hSign, 9, NULL)) CFails++;
+ COSE_Sign_Free(hSign);
+ COSE_Signer_Free(hSigner);
+
+ hSign = COSE_Sign_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ if (hSign == NULL) CFails++;
+ hSigner = COSE_Signer_Init(CBOR_CONTEXT_PARAM_COMMA NULL);
+ if (hSigner == NULL) CFails++;
+
+ if (!COSE_Sign_SetContent(hSign, (byte *) "Message", 7, NULL)) CFails++;
+ if (!COSE_Signer_map_put_int(hSigner, COSE_Header_Algorithm, cn_cbor_string_create("hmac", CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, NULL)) CFails++;
+ if (!COSE_Sign_AddSigner(hSign, hSigner, NULL)) CFails++;
+ CHECK_FAILURE(COSE_Sign_Sign(hSign, &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
if (COSE_Sign_GetSigner(hSign, 9, NULL)) CFails++;
- if (!COSE_Signer_map_put_int(hSigner, COSE_Header_Algorithm, cn_cbor_string_create("hmac", CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Sign_Sign(hSign, NULL)) CFails++;
+ cn = COSE_Signer_map_get_int(hSigner, COSE_Header_Algorithm, COSE_BOTH, &cose_error);
+ if (cn != NULL) {
+ if (cn->type != CN_CBOR_TEXT) CFails++;
+ }
+ else CFails++;
return;
}
@@ -428,6 +445,7 @@
HCOSE_SIGN0 hSign2;
byte rgb[10];
cn_cbor * cn = cn_cbor_int_create(5, CBOR_CONTEXT_PARAM_COMMA NULL);
+ cose_errback cose_error;
hSign2 = COSE_Sign0_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
// Missing case - addref then release on item
@@ -462,10 +480,18 @@
if (!COSE_Sign0_SetContent(hSign, (byte *) "Message", 7, NULL)) CFails++;
if (!COSE_Sign0_map_put_int(hSign, COSE_Header_Algorithm, cn_cbor_int_create(-99, CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Sign0_Sign(hSign, cn, NULL)) CFails++;
+ CHECK_FAILURE(COSE_Sign0_Sign(hSign, cn, &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
+ COSE_Sign0_Free(hSign);
+
+ hSign = COSE_Sign0_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ if (hSign == NULL) CFails++;
+
+ if (!COSE_Sign0_SetContent(hSign, (byte *) "Message", 7, NULL)) CFails++;
if (!COSE_Sign0_map_put_int(hSign, COSE_Header_Algorithm, cn_cbor_string_create("hmac", CBOR_CONTEXT_PARAM_COMMA NULL), COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Sign0_Sign(hSign, cn, NULL)) CFails++;
+ CHECK_FAILURE(COSE_Sign0_Sign(hSign, cn, &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
+
+ COSE_Sign0_Free(hSign);
return;
}
diff --git a/test/test.c b/test/test.c
index 60f6014..37bc301 100644
--- a/test/test.c
+++ b/test/test.c
@@ -792,9 +792,15 @@
RunCorners();
}
else {
+#ifdef USE_CBOR_CONTEXT
+ allocator = CreateContext((unsigned int) -1);
+#endif
MacMessage();
SignMessage();
EncryptMessage();
+#ifdef USE_CBOR_CONTEXT
+ FreeContext(allocator);
+#endif
}
if (CFails > 0) fprintf(stderr, "Failed %d tests\n", CFails);