diff --git a/README.md b/README.md
index c6a3110..5948a4f 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 
 # COSE-C Implementation [![Build Status](https://travis-ci.org/cose-wg/COSE-C.svg?branch=master)](https://travis-ci.org/cose-wg/COSE-C) [![Coverage Status](https://coveralls.io/repos/cose-wg/COSE-C/badge.svg?branch=master&service=github)](https://coveralls.io/github/cose-wg/COSE-C?branch=master) [![Coverity Status](https://scan.coverity.com/projects/7542/badge.svg)](https://scan.coverity.com/projects/jimsch-cose-c)
 
-This project is a C implementation of the IETF CBOR Encoded Mesage Syntax (COSE).
+This project is a C implementation of the IETF CBOR Encoded Message Syntax (COSE).
 There are currently two versions of the COSE document that can be read.
 The most current work in progress draft can be found on github in the [cose-wg/cose-spec](https://cose-wg.github.io/cose-spec/) project.
 The IETF also keeps a copy of the spec in the [COSE WG](https://tools.ietf.org/html/draft-ietf-cose-msg).
diff --git a/src/Cose.c b/src/Cose.c
index 382a4ce..2de060e 100644
--- a/src/Cose.c
+++ b/src/Cose.c
@@ -388,6 +388,90 @@
 	return pProtected;
 }
 
+#ifdef USE_COUNTER_SIGNATURES
+bool _COSE_CounterSign_add(COSE * pMessage, HCOSE_COUNTERSIGN hSigner, cose_errback * perr)
+{
+	COSE_CounterSign * pSigner = (COSE_CounterSign *)hSigner;
+
+	CHECK_CONDITION(IsValidCounterSignHandle(hSigner), COSE_ERR_INVALID_HANDLE);
+	CHECK_CONDITION(pSigner->m_signer.m_signerNext == NULL, COSE_ERR_INVALID_PARAMETER);
+
+	pSigner = pMessage->m_counterSigners;
+	pMessage->m_counterSigners = pSigner;
+	return true;
+
+errorReturn:
+	return false;
+}
+
+HCOSE_COUNTERSIGN _COSE_CounterSign_get(COSE * pMessage, int iSigner, cose_errback * perr)
+{
+	COSE_SignerInfo * pSigner = pMessage->m_counterSigners;
+	int i;
+
+	for (i = 0; i < iSigner; i++, pSigner = pSigner->m_signerNext) {
+		CHECK_CONDITION(pSigner != NULL, COSE_ERR_INVALID_PARAMETER);
+	}
+
+	return pSigner;
+
+errorReturn:
+	return false;
+}
+
+bool _COSE_CountSign_create(COSE * pMessage, cn_cbor * pcnBody, CBOR_CONTEXT_COMMA cose_errback * perr)
+{
+	cn_cbor * pArray = NULL;
+	cn_cbor_errback cbor_err;
+	COSE_CounterSign * pSigner = NULL;
+	cn_cbor * pcnProtected = NULL;
+	cn_cbor * pcn;
+	cn_cbor * pcn2;
+
+	if (pMessage->m_counterSigners == NULL) return true;
+
+	//  One or more than one?
+	if (pMessage->m_counterSigners->m_signer.m_signerNext != NULL) {
+		pArray = cn_cbor_array_create(CBOR_CONTEXT_PARAM_COMMA &cbor_err);
+		CHECK_CONDITION_CBOR(pArray != NULL, cbor_err);
+	}
+
+	pcnProtected = _COSE_arrayget_int(pMessage, INDEX_PROTECTED);
+	CHECK_CONDITION(pcnProtected != NULL, COSE_ERR_INTERNAL);
+
+	for (pSigner = pMessage->m_counterSigners; pSigner != NULL; pSigner = pSigner->m_signer.m_signerNext) {
+		pcn = cn_cbor_data_create(pcnProtected->v.bytes, pcnProtected->v.count, CBOR_CONTEXT_PARAM_COMMA &cbor_err);
+		CHECK_CONDITION_CBOR(pcnProtected != NULL, cbor_err);
+
+		pcn2 = cn_cbor_clone(pcnBody, CBOR_CONTEXT_PARAM_COMMA &cbor_err);
+		CHECK_CONDITION_CBOR(pcnBody != NULL, cbor_err);
+
+		if (!_COSE_Signer_sign(pSigner, pcnBody, pcn2, perr)) goto errorReturn;
+		pcn = NULL;
+		pcn2 = NULL;
+
+		if (pArray != NULL) {
+			bool f = cn_cbor_array_append(pArray, pSigner->m_signer.m_message.m_cborRoot, &cbor_err);
+			CHECK_CONDITION_CBOR(f, cbor_err);
+		}
+		else {
+			pArray = pSigner->m_signer.m_message.m_cborRoot;
+		}
+	}
+
+	if (!_COSE_map_put(pMessage, COSE_Header_CounterSign, pArray, COSE_UNPROTECT_ONLY, perr)) goto errorReturn;
+
+	return true;
+
+errorReturn:
+	if (pArray != NULL) CN_CBOR_FREE(pArray, context);
+	if ((pcn != NULL) && (pcn->parent != NULL)) CN_CBOR_FREE(pcn, context);
+	if ((pcn2 != NULL) && (pcn2->parent != NULL)) CN_CBOR_FREE(pcn2, context);
+	return false;
+}
+
+#endif
+
 bool _COSE_array_replace(COSE * pMessage, cn_cbor * cb_value, int index, CBOR_CONTEXT_COMMA cn_cbor_errback * errp)
 {
 #ifdef TAG_IN_ARRAY
diff --git a/src/Encrypt.c b/src/Encrypt.c
index 8132572..d5bc5c6 100644
--- a/src/Encrypt.c
+++ b/src/Encrypt.c
@@ -181,8 +181,8 @@
 	int alg;
 	const cn_cbor * cn = NULL;
 
-	byte * pbKey = pbKeyIn;
-	size_t cbitKey = cbKeyIn * 8;
+	byte * pbKey = NULL;
+	size_t cbitKey = 0;
 #ifdef USE_CBOR_CONTEXT
 	cn_cbor_context * context;
 #endif
@@ -285,7 +285,11 @@
 	//  We are doing the enveloped item - so look for the passed in recipient
 	//
 
-	if (pbKeyIn == NULL) {
+	if (pbKeyIn != NULL) {
+		CHECK_CONDITION(cbKeyIn == cbitKey / 8, COSE_ERR_INVALID_PARAMETER);
+		pbKey = pbKeyIn;
+	}
+	else {
 		//  Allocate the key if we have not already done so
 
 		if (pbKey == NULL) {
@@ -303,7 +307,7 @@
 					if (!_COSE_Recipient_decrypt(pRecipX, pRecip, alg, cbitKey, pbKey, perr)) goto errorReturn;
 					break;
 				}
-				else if (pRecipX->m_recipientNext != NULL) {
+				else if (pRecipX->m_encrypt.m_recipientFirst != NULL) {
 					if (_COSE_Recipient_decrypt(pRecipX, pRecip, alg, cbitKey, pbKey, perr)) break;
 				}
 			}
@@ -550,6 +554,11 @@
 	const cn_cbor * cbProtected = _COSE_encode_protected(&pcose->m_message, perr);
 	if (cbProtected == NULL) goto errorReturn;
 
+	//  Setup Counter Signatures
+	if (!_COSE_CountSign_create(&pcose->m_message, CBOR_CONTEXT_PARAM_COMMA perr)) {
+		goto errorReturn;
+	}
+
 	//  Build authenticated data
 
 	size_t cbAuthData = 0;
@@ -848,3 +857,21 @@
 errorReturn:
 	return (HCOSE_RECIPIENT)p;
 }
+
+bool COSE_Enveloped_AddCounterSigner(HCOSE_ENCRYPT hEnv, HCOSE_COUNTERSIGN hSign, cose_errback * perr)
+{
+	CHECK_CONDITION(IsValidEncryptHandle(hEnv), COSE_ERR_INVALID_HANDLE);
+	return _COSE_CounterSign_add(&((COSE_Enveloped *)hEnv)->m_message, hSign, perr);
+
+errorReturn:
+	return false;
+}
+
+HCOSE_COUNTERSIGN COSE_Enveloped_GetCounterSigner(HCOSE_ENCRYPT h, int iSigner, cose_errback * perr)
+{
+	CHECK_CONDITION(IsValidEncryptHandle(h), COSE_ERR_INVALID_HANDLE);
+	return _COSE_CounterSign_get(&((COSE_Enveloped *)h)->m_message, iSigner, perr);
+
+errorReturn:
+	return NULL;
+}
diff --git a/src/MacMessage.c b/src/MacMessage.c
index df62f1e..0c085c7 100644
--- a/src/MacMessage.c
+++ b/src/MacMessage.c
@@ -617,7 +617,7 @@
 					if (!_COSE_Recipient_decrypt(pRecipX, pRecip, alg, cbitKey, pbKey, perr)) goto errorReturn;
 					break;
 				}
-				else if (pRecipX->m_recipientNext != NULL) {
+				else if (pRecipX->m_encrypt.m_recipientFirst != NULL) {
 					if (_COSE_Recipient_decrypt(pRecipX, pRecip, alg, cbitKey, pbKey, perr)) break;
 				}
 			}
diff --git a/src/MacMessage0.c b/src/MacMessage0.c
index 43df47b..2702985 100644
--- a/src/MacMessage0.c
+++ b/src/MacMessage0.c
@@ -222,161 +222,3 @@
 errorReturn:
 	return false;
 }
-
-#if 0
-	int foo() {
-		COSE_Mac0Message * pcose = (COSE_Mac0Message *)h;
-		byte * pbAuthData = NULL;
-		int cbitKey = 0;
-		bool fRet = false;
-		int alg;
-		const cn_cbor * cn = NULL;
-
-#ifdef USE_CBOR_CONTEXT
-		cn_cbor_context * context = NULL;
-#endif
-		size_t cbAuthData;
-
-		CHECK_CONDITION(IsValidMac0Handle(h), COSE_ERR_INVALID_PARAMETER);
-
-#ifdef USE_CBOR_CONTEXT
-		context = &pcose->m_message.m_allocContext;
-#endif
-
-		cn = _COSE_map_get_int(&pcose->m_message, COSE_Header_Algorithm, COSE_BOTH, perr);
-		if (cn == NULL) goto errorReturn;
-
-		if (cn->type == CN_CBOR_TEXT) {
-			FAIL_CONDITION(COSE_ERR_UNKNOWN_ALGORITHM);
-		}
-		else {
-			CHECK_CONDITION((cn->type == CN_CBOR_UINT || cn->type == CN_CBOR_INT), COSE_ERR_INVALID_PARAMETER);
-
-			alg = (int)cn->v.uint;
-
-			switch (alg) {
-#ifdef USE_AES_CBC_MAC_128_64
-			case COSE_Algorithm_CBC_MAC_128_64:
-				cbitKey = 128;
-				break;
-#endif
-
-#ifdef USE_AES_CBC_MAC_128_128
-			case COSE_Algorithm_CBC_MAC_128_128:
-				cbitKey = 128;
-				break;
-#endif
-
-#ifdef USE_AES_CBC_MAC_256_64
-			case COSE_Algorithm_CBC_MAC_256_64:
-				cbitKey = 256;
-				break;
-#endif
-
-#ifdef USE_AES_CBC_MAC_256_128
-			case COSE_Algorithm_CBC_MAC_256_128:
-				cbitKey = 256;
-				break;
-#endif
-
-#ifdef USE_HMAC_256_64
-			case COSE_Algorithm_HMAC_256_64:
-				cbitKey = 256;
-				break;
-#endif
-
-#ifdef USE_HMAC_256_256
-			case COSE_Algorithm_HMAC_256_256:
-				cbitKey = 256;
-				break;
-#endif
-
-#ifdef USE_HMAC_384_384
-			case COSE_Algorithm_HMAC_384_384:
-				cbitKey = 384;
-				break;
-#endif
-
-#ifdef USE_HMAC_512_512
-			case COSE_Algorithm_HMAC_512_512:
-				cbitKey = 512;
-				break;
-#endif
-
-			default:
-				FAIL_CONDITION(COSE_ERR_UNKNOWN_ALGORITHM);
-				break;
-			}
-		}
-
-		//  Build protected headers
-
-		cn_cbor * cnProtected = _COSE_arrayget_int(&pcose->m_message, INDEX_PROTECTED);
-		CHECK_CONDITION((cnProtected != NULL) && (cnProtected->type == CN_CBOR_BYTES), COSE_ERR_INVALID_PARAMETER);
-
-		//  Build authenticated data
-		if (!_COSE_Mac_Build_AAD(&pcose->m_message, "MAC0", &pbAuthData, &cbAuthData, CBOR_CONTEXT_PARAM_COMMA perr)) goto errorReturn;
-
-		switch (alg) {
-#ifdef USE_HMAC_256_256
-		case COSE_Algorithm_HMAC_256_256:
-			if (!HMAC_Validate((COSE_MacMessage *)pcose, 256, 256, pbKey, cbKey, pbAuthData, cbAuthData, perr)) goto errorReturn;
-			break;
-#endif
-
-#ifdef USE_HMAC_256_64
-		case COSE_Algorithm_HMAC_256_64:
-			if (!HMAC_Validate((COSE_MacMessage *)pcose, 256, 64, pbKey, cbKey, pbAuthData, cbAuthData, perr)) goto errorReturn;
-			break;
-#endif
-
-#ifdef USE_HMAC_384_384
-		case COSE_Algorithm_HMAC_384_384:
-			if (!HMAC_Validate((COSE_MacMessage *)pcose, 384, 384, pbKey, cbKey, pbAuthData, cbAuthData, perr)) goto errorReturn;
-			break;
-#endif
-
-#ifdef USE_HMAC_512_512
-		case COSE_Algorithm_HMAC_512_512:
-			if (!HMAC_Validate((COSE_MacMessage *)pcose, 512, 512, pbKey, cbKey, pbAuthData, cbAuthData, perr)) goto errorReturn;
-			break;
-#endif
-
-#ifdef USE_AES_CBC_MAC_128_64
-		case COSE_Algorithm_CBC_MAC_128_64:
-			if (!AES_CBC_MAC_Validate((COSE_MacMessage *)pcose, 64, pbKey, cbKey, pbAuthData, cbAuthData, perr)) goto errorReturn;
-			break;
-#endif
-
-#ifdef USE_AES_CBC_MAC_256_64
-		case COSE_Algorithm_CBC_MAC_256_64:
-			if (!AES_CBC_MAC_Validate((COSE_MacMessage *)pcose, 64, pbKey, cbKey, pbAuthData, cbAuthData, perr)) goto errorReturn;
-			break;
-#endif
-
-#ifdef USE_AES_CBC_MAC_128_128
-		case COSE_Algorithm_CBC_MAC_128_128:
-			if (!AES_CBC_MAC_Validate((COSE_MacMessage *)pcose, 128, pbKey, cbKey, pbAuthData, cbAuthData, perr)) goto errorReturn;
-			break;
-#endif
-
-#ifdef USE_AES_CBC_MAC_256_128
-		case COSE_Algorithm_CBC_MAC_256_128:
-			if (!AES_CBC_MAC_Validate((COSE_MacMessage *)pcose, 128, pbKey, cbKey, pbAuthData, cbAuthData, perr)) goto errorReturn;
-			break;
-#endif
-
-		default:
-			FAIL_CONDITION(COSE_ERR_UNKNOWN_ALGORITHM);
-			break;
-		}
-
-		fRet = true;
-
-	errorReturn:
-		if (pbAuthData != NULL) COSE_FREE(pbAuthData, context);
-
-		return fRet;
-	}
-
-#endif
\ No newline at end of file
diff --git a/src/Recipient.c b/src/Recipient.c
index ff6cc02..3b21268 100644
--- a/src/Recipient.c
+++ b/src/Recipient.c
@@ -288,10 +288,12 @@
 
 #ifdef USE_Direct_HKDF_AES_128
 	case COSE_Algorithm_Direct_HKDF_AES_128:
+		break;
 #endif
 
 #ifdef USE_Direct_HKDF_AES_256
 	case COSE_Algorithm_Direct_HKDF_AES_256:
+		break;
 #endif
 
 #ifdef USE_Direct_HKDF_HMAC_SHA_256
diff --git a/src/SignerInfo.c b/src/SignerInfo.c
index dd21e33..55dc346 100644
--- a/src/SignerInfo.c
+++ b/src/SignerInfo.c
@@ -34,7 +34,6 @@
 	return true;
 }
 
-
 bool COSE_Signer_Free(HCOSE_SIGNER hSigner)
 {
 	COSE_SignerInfo * pSigner = (COSE_SignerInfo *)hSigner;
@@ -67,7 +66,7 @@
 		return NULL;
 	}
 
-	if (!_COSE_Init(COSE_INIT_FLAGS_NO_CBOR_TAG, &pobj->m_message, COSE_recipient_object, CBOR_CONTEXT_PARAM_COMMA perror)) {
+	if (!_COSE_SignerInfo_Init(COSE_INIT_FLAGS_NO_CBOR_TAG, pobj, COSE_recipient_object, CBOR_CONTEXT_PARAM_COMMA perror)) {
 		_COSE_SignerInfo_Free(pobj);
 		COSE_FREE(pobj, context);
 		return NULL;
@@ -77,6 +76,10 @@
 	return (HCOSE_SIGNER)pobj;
 }
 
+bool _COSE_SignerInfo_Init(COSE_INIT_FLAGS flags, COSE_SignerInfo * pobj, int msgType, CBOR_CONTEXT_COMMA cose_errback * errp)
+{
+	return _COSE_Init(flags, &pobj->m_message, msgType, CBOR_CONTEXT_PARAM_COMMA errp);
+}
 
 
 COSE_SignerInfo * _COSE_SignerInfo_Init_From_Object(cn_cbor * cbor, COSE_SignerInfo * pIn, CBOR_CONTEXT_COMMA cose_errback * perr)
diff --git a/src/configure.h b/src/configure.h
index e4706d4..d701386 100644
--- a/src/configure.h
+++ b/src/configure.h
@@ -91,3 +91,5 @@
 
 #define USE_OPEN_SSL 1
 #define USE_BCRYPT 0
+
+#define USE_COUNTER_SIGNATURES
diff --git a/src/cose.h b/src/cose.h
index ab4c19c..6d1cecd 100644
--- a/src/cose.h
+++ b/src/cose.h
@@ -11,6 +11,7 @@
 typedef struct _cose_recipient * HCOSE_RECIPIENT;
 typedef struct _cose_mac * HCOSE_MAC;
 typedef struct _cose_mac0 * HCOSE_MAC0;
+typedef struct _cose_counterSignature * HCOSE_COUNTERSIGN;
 
 /**
 * All of the different kinds of errors
@@ -138,9 +139,13 @@
 
 typedef enum {
 	COSE_Header_Algorithm = 1,
+	COSE_Header_Critical = 2,
 	COSE_Header_Content_Type = 3,
 	COSE_Header_KID = 4,
 	COSE_Header_IV = 5,
+	COSE_Header_Partial_IV = 6,
+	COSE_Header_CounterSign = 7,
+	COSE_Header_Operation_Time = 8,
 
 	COSE_Header_HKDF_salt = -20,
 	COSE_Header_KDF_U_nonce = -21,
@@ -197,6 +202,9 @@
 extern bool COSE_Enveloped_AddRecipient(HCOSE_ENVELOPED hMac, HCOSE_RECIPIENT hRecip, cose_errback * perr);
 HCOSE_RECIPIENT COSE_Enveloped_GetRecipient(HCOSE_ENVELOPED cose, int iRecipient, cose_errback * perr);
 
+extern bool COSE_Enveloped_AddCounterSigner(HCOSE_ENCRYPT hEnv, HCOSE_COUNTERSIGN hSign, cose_errback * perr);
+HCOSE_COUNTERSIGN COSE_Enveloped_GetCounterSigner(HCOSE_ENCRYPT, int iSigner, cose_errback * perr);
+
 /*
  */
 
@@ -310,6 +318,15 @@
 cn_cbor * COSE_Sign0_map_get_int(HCOSE_SIGN0 h, int key, int flags, cose_errback * perror);
 bool COSE_Sign0_map_put_int(HCOSE_SIGN0 cose, int key, cn_cbor * value, int flags, cose_errback * errp);
 
+/*
+ * Counter Signature Routines
+ */
+
+HCOSE_COUNTERSIGN COSE_CounterSign_Init(COSE_INIT_FLAGS flags, CBOR_CONTEXT_COMMA cose_errback * perr);
+bool COSE_CounterSign_Free(HCOSE_COUNTERSIGN cose);
+
+cn_cbor * COSE_CounterSign_map_get_int(HCOSE_COUNTERSIGN h, int key, int flags, cose_errback * perror);
+bool COSE_CounterSign_map_put_int(HCOSE_COUNTERSIGN cose, int key, cn_cbor * value, int flags, cose_errback * errp);
 
 /*
 */
diff --git a/src/cose_int.h b/src/cose_int.h
index 4fc9254..1d4c7f8 100644
--- a/src/cose_int.h
+++ b/src/cose_int.h
@@ -3,6 +3,11 @@
 // These definitions are here because they aren't required for the public
 // interface, and they were quite confusing in cn-cbor.h
 
+#ifdef USE_COUNTER_SIGNATURES
+struct _COSE_COUNTER_SIGN;
+typedef struct _COSE_COUNTER_SIGN COSE_Counter_Sign;
+#endif
+
 typedef struct _COSE {
 	COSE_INIT_FLAGS m_flags;		//  Not sure what goes here yet
 	int m_ownMsg;		//  Do I own the pointer @ m_cbor?
@@ -20,6 +25,9 @@
 	cn_cbor_context m_allocContext;
 #endif
 	struct _COSE * m_handleList;
+#ifdef USE_COUNTER_SIGNATURES
+	COSE_Counter_Sign * m_counterSigners;
+#endif
 } COSE;
 
 struct _SignerInfo;
@@ -79,6 +87,12 @@
 #endif
 typedef COSE_MacMessage COSE_Mac0Message;
 
+#ifdef USE_COUNTER_SIGNATURES
+typedef struct _COSE_COUNTER_SIGN {
+	COSE_SignerInfo m_signer;
+} COSE_CounterSign;
+#endif
+
 #ifdef USE_CBOR_CONTEXT
 /**
 * Allocate enough space for 1 `cn_cbor` structure.
@@ -148,6 +162,7 @@
 extern bool IsValidEnvelopedHandle(HCOSE_ENVELOPED h);
 extern bool IsValidRecipientHandle(HCOSE_RECIPIENT h);
 extern bool IsValidSignerHandle(HCOSE_SIGNER h);
+extern bool IsValidCounterSignHandle(HCOSE_COUNTERSIGN h);
 
 extern bool _COSE_Init(COSE_INIT_FLAGS flags, COSE * pcose, int msgType, CBOR_CONTEXT_COMMA cose_errback * errp);
 extern bool _COSE_Init_From_Object(COSE* pobj, cn_cbor * pcbor, CBOR_CONTEXT_COMMA cose_errback * perror);
@@ -183,6 +198,9 @@
 extern HCOSE_SIGN _COSE_Sign_Init_From_Object(cn_cbor *, COSE_SignMessage * pIn, CBOR_CONTEXT_COMMA cose_errback * errp);
 extern void _COSE_Sign_Release(COSE_SignMessage * p);
 
+//  Signer items
+
+extern bool _COSE_SignerInfo_Init(COSE_INIT_FLAGS flags, COSE_SignerInfo * pcose, int msgType, CBOR_CONTEXT_COMMA cose_errback * errp);
 extern bool _COSE_Signer_sign(COSE_SignerInfo * pSigner, const cn_cbor * pcborBody, const cn_cbor * pcborProtected, cose_errback * perr);
 extern COSE_SignerInfo * _COSE_SignerInfo_Init_From_Object(cn_cbor * cbor, COSE_SignerInfo * pIn, CBOR_CONTEXT_COMMA cose_errback * perr);
 extern bool _COSE_SignerInfo_Free(COSE_SignerInfo * pSigner);
@@ -204,6 +222,11 @@
 extern HCOSE_MAC0 _COSE_Mac0_Init_From_Object(cn_cbor *, COSE_Mac0Message * pIn, CBOR_CONTEXT_COMMA cose_errback * errp);
 extern bool _COSE_Mac0_Release(COSE_Mac0Message * p);
 
+//  Counter Sign Items
+extern HCOSE_COUNTERSIGN _COSE_CounterSign_get(COSE * pMessage, int iSigner, cose_errback * perr);
+extern bool _COSE_CounterSign_add(COSE * pMessage, HCOSE_COUNTERSIGN hSigner, cose_errback * perr);
+extern bool _COSE_CountSign_create(COSE * pMessage, CBOR_CONTEXT_COMMA cose_errback * perr);
+
 //
 //  Debugging Items
 
@@ -250,3 +273,6 @@
 enum {
 	COSE_Int_Alg_AES_CBC_MAC_256_64 = -22
 };
+
+
+#define COSE_CounterSign_object 1000
\ No newline at end of file
diff --git a/test/encrypt.c b/test/encrypt.c
index b3b9ff5..541fdec 100644
--- a/test/encrypt.c
+++ b/test/encrypt.c
@@ -20,6 +20,7 @@
 {
 	HCOSE_ENVELOPED hEnc = NULL;
 	HCOSE_RECIPIENT hRecip = NULL;
+	HCOSE_RECIPIENT hRecip1 = NULL;
 	HCOSE_RECIPIENT hRecip2 = NULL;
 	bool fRet = false;
 	int type;
@@ -34,42 +35,44 @@
 
 	if (!SetReceivingAttributes((HCOSE)hEnc, pEnveloped, Attributes_Enveloped_protected)) goto errorReturn;
 
-	hRecip = COSE_Enveloped_GetRecipient(hEnc, iRecipient1, NULL);
-	if (hRecip == NULL) goto errorReturn;
-	if (!SetReceivingAttributes((HCOSE)hRecip, pRecipient1, Attributes_Recipient_protected)) goto errorReturn;
+	hRecip1 = COSE_Enveloped_GetRecipient(hEnc, iRecipient1, NULL);
+	if (hRecip1 == NULL) goto errorReturn;
+	if (!SetReceivingAttributes((HCOSE)hRecip1, pRecipient1, Attributes_Recipient_protected)) goto errorReturn;
 
 	if (pRecipient2 != NULL) {
 		pkey = BuildKey(cn_cbor_mapget_string(pRecipient2, "key"), false);
 		if (pkey == NULL) goto errorReturn;
 
-		hRecip2 = COSE_Recipient_GetRecipient(hRecip, iRecipient2, NULL);
+		hRecip2 = COSE_Recipient_GetRecipient(hRecip1, iRecipient2, NULL);
 		if (hRecip2 == NULL) goto errorReturn;
 
 		if (!SetReceivingAttributes((HCOSE)hRecip2, pRecipient2, Attributes_Recipient_protected)) goto errorReturn;
 		if (!COSE_Recipient_SetKey(hRecip2, pkey, NULL)) goto errorReturn;
-	}
-	else {
-		pkey = BuildKey(cn_cbor_mapget_string(pRecipient1, "key"), false);
-		if (pkey == NULL) goto errorReturn;
-		if (!COSE_Recipient_SetKey(hRecip, pkey, NULL)) goto errorReturn;
-	}
 
-
-	cn_cbor * cnStatic = cn_cbor_mapget_string(pRecipient1, "sender_key");
-	if (cnStatic != NULL) {
-		if (COSE_Recipient_map_get_int(hRecip, COSE_Header_ECDH_SPK, COSE_BOTH, NULL) == 0) {
-			COSE_Recipient_map_put_int(hRecip, COSE_Header_ECDH_SPK, BuildKey(cnStatic, true), COSE_DONT_SEND, NULL);
-		}
-	}
-
-	if (pRecipient2 != NULL) {
-		cnStatic = cn_cbor_mapget_string(pRecipient2, "sender_key");
+		cn_cbor * cnStatic = cn_cbor_mapget_string(pRecipient2, "sender_key");
 		if (cnStatic != NULL) {
 			if (COSE_Recipient_map_get_int(hRecip2, COSE_Header_ECDH_SPK, COSE_BOTH, NULL) == 0) {
 				COSE_Recipient_map_put_int(hRecip2, COSE_Header_ECDH_SPK, BuildKey(cnStatic, true), COSE_DONT_SEND, NULL);
 			}
 		}
+
+		hRecip = hRecip2;
 	}
+	else {
+		pkey = BuildKey(cn_cbor_mapget_string(pRecipient1, "key"), false);
+		if (pkey == NULL) goto errorReturn;
+		if (!COSE_Recipient_SetKey(hRecip1, pkey, NULL)) goto errorReturn;
+
+		cn_cbor * cnStatic = cn_cbor_mapget_string(pRecipient1, "sender_key");
+		if (cnStatic != NULL) {
+			if (COSE_Recipient_map_get_int(hRecip1, COSE_Header_ECDH_SPK, COSE_BOTH, NULL) == 0) {
+				COSE_Recipient_map_put_int(hRecip1, COSE_Header_ECDH_SPK, BuildKey(cnStatic, true), COSE_DONT_SEND, NULL);
+			}
+		}
+
+		hRecip = hRecip1;
+	}
+
 
 	if (!fFailBody) {
 		cn_cbor * cn = cn_cbor_mapget_string(pRecipient1, "fail");
@@ -89,7 +92,7 @@
 
 errorReturn:
 	if (hEnc != NULL) COSE_Enveloped_Free(hEnc);
-	if (hRecip != NULL) COSE_Recipient_Free(hRecip);
+	if (hRecip1 != NULL) COSE_Recipient_Free(hRecip1);
 	if (hRecip2 != NULL) COSE_Recipient_Free(hRecip2);
 
 
