Cannot put the same attribute into a map twice
diff --git a/src/Cose.c b/src/Cose.c
index 9cbac96..de37bcc 100644
--- a/src/Cose.c
+++ b/src/Cose.c
@@ -308,15 +308,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:
@@ -342,6 +338,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/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 8374d6f..24f34c8 100644
--- a/src/SignerInfo.c
+++ b/src/SignerInfo.c
@@ -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 b51fcf8..ead32c2 100644
--- a/src/cose_int.h
+++ b/src/cose_int.h
@@ -197,8 +197,8 @@
 //
 //  Debugging Items
 
-#define DO_ASSERT assert(false);
-//#define DO_ASSERT
+//#define DO_ASSERT assert(false);
+#define DO_ASSERT
 #define CHECK_CONDITION(condition, error) { if (!(condition)) { DO_ASSERT; if (perr != NULL) {perr->err = error;} goto errorReturn;}}
 #define FAIL_CONDITION(error) { DO_ASSERT; if (perr != NULL) {perr->err = error;} goto errorReturn;}
 #define CHECK_CONDITION_CBOR(condition, error) { if (!(condition)) { DO_ASSERT; if (perr != NULL) {perr->err = _MapFromCBOR(error);} goto errorReturn;}}
@@ -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 6220068..37bc301 100644
--- a/test/test.c
+++ b/test/test.c
@@ -793,7 +793,7 @@
 	}
 	else {
 #ifdef USE_CBOR_CONTEXT
-		allocator = CreateContext(-1);
+		allocator = CreateContext((unsigned int) -1);
 #endif
 		MacMessage();
 		SignMessage();