diff --git a/src/MacMessage.c b/src/MacMessage.c
index 1c86a84..83e6a0e 100644
--- a/src/MacMessage.c
+++ b/src/MacMessage.c
@@ -448,10 +448,19 @@
 		alg = (int)cn->v.uint;
 
 		switch (alg) {
+		case COSE_Algorithm_HMAC_256_64:
 		case COSE_Algorithm_HMAC_256_256:
 			cbitKey = 256;
 			break;
 
+		case COSE_Algorithm_HMAC_384_384:
+			cbitKey = 384;
+			break;
+
+		case COSE_Algorithm_HMAC_512_512:
+			cbitKey = 512;
+			break;
+
 		case COSE_Int_Alg_AES_CBC_MAC_256_64:
 		default:
 			FAIL_CONDITION(COSE_ERR_UNKNOWN_ALGORITHM);
@@ -514,6 +523,18 @@
 		if (!HMAC_Validate(pcose, 256, 256, pbAuthData, cbAuthData, perr)) goto errorReturn;
 		break;
 
+	case COSE_Algorithm_HMAC_256_64:
+		if (!HMAC_Validate(pcose, 256, 64, pbAuthData, cbAuthData, perr)) goto errorReturn;
+		break;
+
+	case COSE_Algorithm_HMAC_384_384:
+		if (!HMAC_Validate(pcose, 384, 384, pbAuthData, cbAuthData, perr)) goto errorReturn;
+		break;
+
+	case COSE_Algorithm_HMAC_512_512:
+		if (!HMAC_Validate(pcose, 512, 512, pbAuthData, cbAuthData, perr)) goto errorReturn;
+		break;
+
 	case COSE_Int_Alg_AES_CBC_MAC_256_64:
 		if (!AES_CBC_MAC_Validate(pcose, 256, 64, pbAuthData, cbAuthData, perr)) goto errorReturn;
 		break;
diff --git a/src/cose.h b/src/cose.h
index aedd499..3259957 100644
--- a/src/cose.h
+++ b/src/cose.h
@@ -76,6 +76,9 @@
 
 typedef enum {
 	COSE_Algorithm_HMAC_256_256 = 4,
+	COSE_Algorithm_HMAC_384_384 = 5,
+	COSE_Algorithm_HMAC_512_512 = 6,
+	COSE_Algorithm_HMAC_256_64 = 7,
 
 	COSE_Algorithm_AES_CCM_16_64_128 = 10,
 	COSE_Algorithm_AES_CCM_16_64_256 = 11,
diff --git a/src/openssl.c b/src/openssl.c
index 29610b3..da69d08 100644
--- a/src/openssl.c
+++ b/src/openssl.c
@@ -315,6 +315,8 @@
 
 	switch (HSize) {
 	case 256: pmd = EVP_sha256(); break;
+	case 384: pmd = EVP_sha384(); break;
+	case 512: pmd = EVP_sha512(); break;
 	default: FAIL_CONDITION(COSE_ERR_INVALID_PARAMETER); break;
 	}
 
@@ -331,7 +333,7 @@
 #else
 #endif
 
-	if (cn->length != (int) cbOut) return false;
+	if (cn->length > (int) cbOut) return false;
 	for (i = 0; i < (unsigned int) TSize/8; i++) f |= (cn->v.bytes[i] != rgbOut[i]);
 
 	HMAC_cleanup(&ctx);
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 2cb21c4..431c334 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -32,5 +32,9 @@
 add_test ( NAME mac-04 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test Examples/spec-examples/Mac-04.json )
 
 add_test ( NAME hmac-01 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test Examples/hmac-examples/HMac-01.json )
+add_test ( NAME hmac-02 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test Examples/hmac-examples/HMac-02.json )
+add_test ( NAME hmac-03 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test Examples/hmac-examples/HMac-03.json )
+add_test ( NAME hmac-04 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test Examples/hmac-examples/HMac-04.json )
+add_test ( NAME hmac-05 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND cose_test Examples/hmac-examples/HMac-05.json )
 
 
diff --git a/test/json.c b/test/json.c
index db1d023..996e0c6 100644
--- a/test/json.c
+++ b/test/json.c
@@ -60,7 +60,22 @@
 			ib = ib2;
 			break;
 
+		case't':
+			if (strncmp(&rgch[ib], "true", 4) != 0) goto error;
+			node = cn_cbor_data_create(NULL, 0, NULL, NULL);
+			node->type = CN_CBOR_TRUE;
+			ib += 3;
+			break;
+
+		case'f':
+			if (strncmp(&rgch[ib], "false", 5) != 0) goto error;
+			node = cn_cbor_data_create(NULL, 0, NULL, NULL);
+			node->type = CN_CBOR_FALSE;
+			ib += 4;
+			break;
+
 		default:
+			error:
 			fprintf(stderr, "Parse failure @ '%s'\n", &rgch[ib]);
 			break;
 		}
diff --git a/test/test.c b/test/test.c
index fd3dd55..c6175b0 100644
--- a/test/test.c
+++ b/test/test.c
@@ -160,11 +160,19 @@
 	int cbEncoded;
 	byte * pbEncoded = GetCBOREncoding(pControl, &cbEncoded);
 	const cn_cbor * pInput = cn_cbor_mapget_string(pControl, "input");
+	const cn_cbor * pFail;
 	const cn_cbor * pMac;
 	const cn_cbor * pRecipients;
 	HCOSE_MAC hMAC;
 	int type;
 	int iRecipient;
+	bool fFail = false;
+	bool fFailBody = false;
+
+	pFail = cn_cbor_mapget_string(pControl, "fail");
+	if ((pFail != NULL) && (pFail->type == CN_CBOR_TRUE)) {
+		fFailBody = true;
+	}
 
 	hMAC = (HCOSE_MAC) COSE_Decode(pbEncoded, cbEncoded, &type, COSE_mac_object, NULL, NULL);
 	if (hMAC == NULL) exit(1);
@@ -179,12 +187,37 @@
 	pRecipients = pRecipients->first_child;
 	for (iRecipient = 0; pRecipients != NULL; iRecipient++,pRecipients=pRecipients->next) {
 		cn_cbor * pkey = BuildKey(cn_cbor_mapget_string(pRecipients, "key"));
+		if (pkey == NULL) {
+			fFail = true;
+			continue;
+		}
 
 		HCOSE_RECIPIENT hRecip = COSE_Mac_GetRecipient(hMAC, iRecipient, NULL);
-		COSE_Recipient_SetKey(hRecip, pkey, NULL);
-		if (!COSE_Mac_validate(hMAC, hRecip, NULL)) CFails += 1;
+		if (hRecip == NULL) {
+			fFail = true;
+			continue;
+		}
+
+		if (!COSE_Recipient_SetKey(hRecip, pkey, NULL)) {
+			fFail = true;
+			continue;
+		}
+
+		pFail = cn_cbor_mapget_string(pRecipients, "fail");
+		if (COSE_Mac_validate(hMAC, hRecip, NULL)) {
+			if ((pFail != NULL) && (pFail->type != CN_CBOR_TRUE)) fFail = true;
+		}
+		else {
+			if ((pFail == NULL) || (pFail->type == CN_CBOR_FALSE)) fFail = true;
+		}
 	}
 
+	if (fFailBody) {
+		if (!fFail) fFail = true;
+		else fFail = false;
+	}
+
+	if (fFail) CFails += 1;
 	return 0;
 }
 
