Add and correct corner cases to the test set
diff --git a/src/Cose.c b/src/Cose.c
index 3b18219..382a4ce 100644
--- a/src/Cose.c
+++ b/src/Cose.c
@@ -281,6 +281,9 @@
if ((pcose->m_dontSendMap != NULL) && ((flags & COSE_DONT_SEND) != 0)) {
p = cn_cbor_mapget_int(pcose->m_dontSendMap, key);
}
+
+ if ((p == NULL) && (perror != NULL)) perror->err = COSE_ERR_INVALID_PARAMETER;
+
return p;
}
@@ -313,6 +316,7 @@
#endif
cn_cbor_errback error;
bool f = false;
+ CHECK_CONDITION(value != NULL, COSE_ERR_INVALID_PARAMETER);
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);
diff --git a/src/Recipient.c b/src/Recipient.c
index 8013928..c8e524a 100644
--- a/src/Recipient.c
+++ b/src/Recipient.c
@@ -169,7 +169,7 @@
if (fSend) {
CHECK_CONDITION(pKeyPublic != NULL, COSE_ERR_INVALID_PARAMETER);
- pkeyMessage = pKeyPrivate;
+ pkeyMessage = (cn_cbor *) pKeyPrivate;
if (!ECDH_ComputeSecret(pCose, &pkeyMessage, pKeyPublic, &pbSecret, &cbSecret, CBOR_CONTEXT_PARAM_COMMA perr)) goto errorReturn;
if (pkeyMessage->parent == NULL) {
@@ -680,13 +680,11 @@
byte * pbTemp = NULL;
byte * pbKey = NULL;
#ifdef USE_CBOR_CONTEXT
- cn_cbor_context * context;
+ cn_cbor_context * context = NULL;
#endif
- if (!IsValidRecipientHandle(hRecipient) || (rgbKey == NULL)) {
- if (perr != NULL) perr->err = COSE_ERR_CBOR;
- return false;
- }
+ CHECK_CONDITION(IsValidRecipientHandle(hRecipient), COSE_ERR_INVALID_HANDLE);
+ CHECK_CONDITION(rgbKey != NULL, COSE_ERR_INVALID_PARAMETER);
p = (COSE_RecipientInfo *)hRecipient;
@@ -701,7 +699,7 @@
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;
+ if (!COSE_Recipient_map_put_int(hRecipient, COSE_Header_Algorithm, cn_Temp, COSE_UNPROTECT_ONLY, perr)) goto errorReturn;
cn_Temp = NULL;
}
@@ -714,7 +712,7 @@
CHECK_CONDITION_CBOR(cnTemp != NULL, cbor_error);
pbTemp = NULL;
- if (!COSE_Recipient_map_put(hRecipient, COSE_Header_KID, cnTemp, COSE_UNPROTECT_ONLY, perr)) goto errorReturn;
+ if (!COSE_Recipient_map_put_int(hRecipient, COSE_Header_KID, cnTemp, COSE_UNPROTECT_ONLY, perr)) goto errorReturn;
}
pbKey = (byte *)COSE_CALLOC(cbKey, 1, context);
@@ -749,21 +747,20 @@
return false;
}
-bool COSE_Recipient_SetKey(HCOSE_RECIPIENT h, const cn_cbor * pKey, cose_errback * perror)
+bool COSE_Recipient_SetKey(HCOSE_RECIPIENT h, const cn_cbor * pKey, cose_errback * perr)
{
COSE_RecipientInfo * p;
- if (!IsValidRecipientHandle(h) || (pKey == NULL)) {
- if (perror != NULL) perror->err = COSE_ERR_INVALID_PARAMETER;
- return false;
- }
-
-
+ CHECK_CONDITION(IsValidRecipientHandle(h), COSE_ERR_INVALID_HANDLE);
+ CHECK_CONDITION(pKey != NULL, COSE_ERR_INVALID_PARAMETER);
p = (COSE_RecipientInfo *)h;
p->m_pkey = pKey;
return true;
+
+errorReturn:
+ return false;
}
/*!
@@ -791,7 +788,7 @@
cn_cbor * cn3 = NULL;
cn_cbor_errback cbor_err;
#ifdef USE_CBOR_CONTEXT
- cn_cbor_context * context;
+ cn_cbor_context * context = NULL;
#endif
CHECK_CONDITION(IsValidRecipientHandle(h), COSE_ERR_INVALID_HANDLE);
@@ -875,7 +872,7 @@
bool COSE_Recipient_SetExternal(HCOSE_RECIPIENT hcose, const byte * pbExternalData, size_t cbExternalData, cose_errback * perr)
{
if (!IsValidRecipientHandle(hcose)) {
- if (perr != NULL) perr->err = COSE_ERR_INVALID_PARAMETER;
+ if (perr != NULL) perr->err = COSE_ERR_INVALID_HANDLE;
return false;
}
@@ -883,14 +880,12 @@
}
-bool COSE_Recipient_map_put(HCOSE_RECIPIENT h, int key, cn_cbor * value, int flags, cose_errback * perror)
+bool COSE_Recipient_map_put_int(HCOSE_RECIPIENT h, int key, cn_cbor * value, int flags, cose_errback * perr)
{
- if (!IsValidRecipientHandle(h) || (value == NULL)) {
- if (perror != NULL) perror->err = COSE_ERR_INVALID_PARAMETER;
- return false;
- }
+ CHECK_CONDITION(IsValidRecipientHandle(h), COSE_ERR_INVALID_HANDLE);
+ CHECK_CONDITION(value != NULL, COSE_ERR_INVALID_PARAMETER);
- if (!_COSE_map_put(&((COSE_RecipientInfo *)h)->m_encrypt.m_message, key, value, flags, perror)) return false;
+ if (!_COSE_map_put(&((COSE_RecipientInfo *)h)->m_encrypt.m_message, key, value, flags, perr)) return false;
if (key == COSE_Header_Algorithm) {
if (value->type == CN_CBOR_INT) {
@@ -918,6 +913,9 @@
}
return true;
+
+errorReturn:
+ return false;
}
diff --git a/src/Sign.c b/src/Sign.c
index 6a72d21..9466f85 100644
--- a/src/Sign.c
+++ b/src/Sign.c
@@ -150,13 +150,10 @@
#endif
cn_cbor * p = NULL;
COSE_SignMessage * pMessage = (COSE_SignMessage *)h;
+ bool f = false;
- if (!IsValidSignHandle(h) || (rgb == NULL)) {
- if (perr != NULL) perr->err = COSE_ERR_INVALID_PARAMETER;
- errorReturn:
- if (p != NULL) CN_CBOR_FREE(p, context);
- return false;
- }
+ CHECK_CONDITION(IsValidSignHandle(h), COSE_ERR_INVALID_HANDLE);
+ CHECK_CONDITION(rgb != NULL, COSE_ERR_INVALID_PARAMETER);
#ifdef USE_CBOR_CONTEXT
context = &pMessage->m_message.m_allocContext;
@@ -166,8 +163,13 @@
CHECK_CONDITION(p != NULL, COSE_ERR_OUT_OF_MEMORY);
CHECK_CONDITION(_COSE_array_replace(&pMessage->m_message, p, INDEX_BODY, CBOR_CONTEXT_PARAM_COMMA NULL), COSE_ERR_OUT_OF_MEMORY);
+ p = NULL;
- return true;
+ f = true;
+errorReturn:
+ if (p != NULL) CN_CBOR_FREE(p, context);
+
+ return f;
}
HCOSE_SIGNER COSE_Sign_add_signer(HCOSE_SIGN hSign, const cn_cbor * pkey, int algId, cose_errback * perr)
@@ -181,13 +183,8 @@
HCOSE_SIGNER hSigner = NULL;
cn_cbor_errback cbor_error;
- if (!IsValidSignHandle(hSign) || (pkey == NULL)) {
- if (perr != NULL) perr->err = COSE_ERR_INVALID_PARAMETER;
- errorReturn:
- if (cbor2 != NULL) CN_CBOR_FREE((void *) cbor2, context);
- if (hSigner != NULL) COSE_Signer_Free(hSigner);
- return NULL;
- }
+ CHECK_CONDITION(IsValidSignHandle(hSign), COSE_ERR_INVALID_HANDLE);
+ CHECK_CONDITION(pkey != NULL, COSE_ERR_INVALID_PARAMETER);
#ifdef USE_CBOR_CONTEXT
context = &pMessage->m_message.m_allocContext;
@@ -216,6 +213,11 @@
if (!COSE_Sign_AddSigner(hSign, hSigner, perr)) goto errorReturn;
return hSigner;
+
+errorReturn:
+ if (cbor2 != NULL) CN_CBOR_FREE((void *)cbor2, context);
+ if (hSigner != NULL) COSE_Signer_Free(hSigner);
+ return NULL;
}
bool COSE_Sign_Sign(HCOSE_SIGN h, cose_errback * perr)
@@ -229,7 +231,7 @@
const cn_cbor * pcborProtected;
if (!IsValidSignHandle(h)) {
- CHECK_CONDITION(false, COSE_ERR_INVALID_PARAMETER);
+ CHECK_CONDITION(false, COSE_ERR_INVALID_HANDLE);
errorReturn:
return false;
}
@@ -258,8 +260,8 @@
const cn_cbor * cnContent;
const cn_cbor * cnProtected;
- CHECK_CONDITION(IsValidSignHandle(hSign), COSE_ERR_INVALID_PARAMETER);
- CHECK_CONDITION(IsValidSignerHandle(hSigner), COSE_ERR_INVALID_PARAMETER);
+ CHECK_CONDITION(IsValidSignHandle(hSign), COSE_ERR_INVALID_HANDLE);
+ CHECK_CONDITION(IsValidSignerHandle(hSigner), COSE_ERR_INVALID_HANDLE);
pSign = (COSE_SignMessage *)hSign;
pSigner = (COSE_SignerInfo *)hSigner;
@@ -290,8 +292,8 @@
#endif
cn_cbor_errback cbor_error;
- CHECK_CONDITION(IsValidSignHandle(hSign), COSE_ERR_INVALID_PARAMETER);
- CHECK_CONDITION(IsValidSignerHandle(hSigner), COSE_ERR_INVALID_PARAMETER);
+ CHECK_CONDITION(IsValidSignHandle(hSign), COSE_ERR_INVALID_HANDLE);
+ CHECK_CONDITION(IsValidSignerHandle(hSigner), COSE_ERR_INVALID_HANDLE);
pSign = (COSE_SignMessage *)hSign;
pSigner = (COSE_SignerInfo *)hSigner;
@@ -326,7 +328,7 @@
cn_cbor * COSE_Sign_map_get_int(HCOSE_SIGN h, int key, int flags, cose_errback * perror)
{
if (!IsValidSignHandle(h)) {
- if (perror != NULL) perror->err = COSE_ERR_INVALID_PARAMETER;
+ if (perror != NULL) perror->err = COSE_ERR_INVALID_HANDLE;
return NULL;
}
@@ -335,8 +337,8 @@
bool COSE_Sign_map_put_int(HCOSE_SIGN h, int key, cn_cbor * value, int flags, cose_errback * perror)
{
- if (!IsValidSignHandle(h) || (value == NULL)) {
- if (perror != NULL) perror->err = COSE_ERR_INVALID_PARAMETER;
+ if (!IsValidSignHandle(h)){
+ if (perror != NULL) perror->err = COSE_ERR_INVALID_HANDLE;
return false;
}
@@ -349,7 +351,7 @@
COSE_SignerInfo * p;
if (!IsValidSignHandle(cose)) {
- if (perr != NULL) perr->err = COSE_ERR_INVALID_PARAMETER;
+ if (perr != NULL) perr->err = COSE_ERR_INVALID_HANDLE;
return NULL;
}
diff --git a/src/Sign0.c b/src/Sign0.c
index 1b8528f..4d273ea 100644
--- a/src/Sign0.c
+++ b/src/Sign0.c
@@ -126,13 +126,10 @@
#endif
cn_cbor * p = NULL;
COSE_Sign0Message * pMessage = (COSE_Sign0Message *)h;
+ bool fRet = false;
- if (!IsValidSign0Handle(h) || (rgb == NULL)) {
- if (perr != NULL) perr->err = COSE_ERR_INVALID_PARAMETER;
- errorReturn:
- if (p != NULL) CN_CBOR_FREE(p, context);
- return false;
- }
+ CHECK_CONDITION(IsValidSign0Handle(h), COSE_ERR_INVALID_HANDLE);
+ CHECK_CONDITION(rgb != NULL, COSE_ERR_INVALID_PARAMETER);
#ifdef USE_CBOR_CONTEXT
context = &pMessage->m_message.m_allocContext;
@@ -142,8 +139,13 @@
CHECK_CONDITION(p != NULL, COSE_ERR_OUT_OF_MEMORY);
CHECK_CONDITION(_COSE_array_replace(&pMessage->m_message, p, INDEX_BODY, CBOR_CONTEXT_PARAM_COMMA NULL), COSE_ERR_OUT_OF_MEMORY);
+ p = NULL;
- return true;
+ fRet = true;
+
+errorReturn:
+ if (p != NULL) CN_CBOR_FREE(p, context);
+ return fRet;
}
/*!
@@ -164,7 +166,7 @@
bool COSE_Sign0_SetExternal(HCOSE_SIGN0 hcose, const byte * pbExternalData, size_t cbExternalData, cose_errback * perr)
{
if (!IsValidSign0Handle(hcose)) {
- if (perr != NULL) perr->err = COSE_ERR_INVALID_PARAMETER;
+ if (perr != NULL) perr->err = COSE_ERR_INVALID_HANDLE;
return false;
}
@@ -180,7 +182,7 @@
const cn_cbor * pcborProtected;
if (!IsValidSign0Handle(h)) {
- CHECK_CONDITION(false, COSE_ERR_INVALID_PARAMETER);
+ CHECK_CONDITION(false, COSE_ERR_INVALID_HANDLE);
errorReturn:
return false;
}
@@ -203,7 +205,7 @@
const cn_cbor * cnContent;
const cn_cbor * cnProtected;
- CHECK_CONDITION(IsValidSign0Handle(hSign), COSE_ERR_INVALID_PARAMETER);
+ CHECK_CONDITION(IsValidSign0Handle(hSign), COSE_ERR_INVALID_HANDLE);
pSign = (COSE_Sign0Message *)hSign;
@@ -225,21 +227,22 @@
cn_cbor * COSE_Sign0_map_get_int(HCOSE_SIGN0 h, int key, int flags, cose_errback * perror)
{
if (!IsValidSign0Handle(h)) {
- if (perror != NULL) perror->err = COSE_ERR_INVALID_PARAMETER;
+ if (perror != NULL) perror->err = COSE_ERR_INVALID_HANDLE;
return NULL;
}
return _COSE_map_get_int(&((COSE_Sign0Message *)h)->m_message, key, flags, perror);
}
-bool COSE_Sign0_map_put_int(HCOSE_SIGN0 h, int key, cn_cbor * value, int flags, cose_errback * perror)
+bool COSE_Sign0_map_put_int(HCOSE_SIGN0 h, int key, cn_cbor * value, int flags, cose_errback * perr)
{
- if (!IsValidSign0Handle(h) || (value == NULL)) {
- if (perror != NULL) perror->err = COSE_ERR_INVALID_PARAMETER;
- return false;
- }
+ CHECK_CONDITION(IsValidSign0Handle(h), COSE_ERR_INVALID_HANDLE);
+ CHECK_CONDITION(value != NULL, COSE_ERR_INVALID_PARAMETER);
- return _COSE_map_put(&((COSE_Sign0Message *)h)->m_message, key, value, flags, perror);
+ return _COSE_map_put(&((COSE_Sign0Message *)h)->m_message, key, value, flags, perr);
+
+errorReturn:
+ return false;
}
diff --git a/src/SignerInfo.c b/src/SignerInfo.c
index 24f34c8..dd75531 100644
--- a/src/SignerInfo.c
+++ b/src/SignerInfo.c
@@ -223,19 +223,20 @@
return fRet;
}
-bool COSE_Signer_SetKey(HCOSE_SIGNER h, const cn_cbor * pKey, cose_errback * perror)
+bool COSE_Signer_SetKey(HCOSE_SIGNER h, const cn_cbor * pKey, cose_errback * perr)
{
COSE_SignerInfo * p;
+ bool fRet = false;
- if (!IsValidSignerHandle(h) || (pKey == NULL)) {
- if (perror != NULL) perror->err = COSE_ERR_INVALID_PARAMETER;
- return false;
- }
+ CHECK_CONDITION(IsValidSignerHandle(h), COSE_ERR_INVALID_HANDLE);
+ CHECK_CONDITION(pKey != NULL, COSE_ERR_INVALID_PARAMETER);
p = (COSE_SignerInfo *)h;
p->m_pkey = pKey;
- return true;
+ fRet = true;
+errorReturn:
+ return fRet;
}
/*!
@@ -256,7 +257,7 @@
bool COSE_Signer_SetExternal(HCOSE_SIGNER hcose, const byte * pbExternalData, size_t cbExternalData, cose_errback * perr)
{
if (!IsValidSignerHandle(hcose)) {
- if (perr != NULL) perr->err = COSE_ERR_INVALID_PARAMETER;
+ if (perr != NULL) perr->err = COSE_ERR_INVALID_HANDLE;
return false;
}
@@ -332,19 +333,22 @@
cn_cbor * COSE_Signer_map_get_int(HCOSE_SIGNER h, int key, int flags, cose_errback * perr)
{
if (!IsValidSignerHandle(h)) {
- if (perr != NULL) perr->err = COSE_ERR_INVALID_PARAMETER;
+ if (perr != NULL) perr->err = COSE_ERR_INVALID_HANDLE;
return NULL;
}
return _COSE_map_get_int((COSE *)h, key, flags, perr);
}
-bool COSE_Signer_map_put_int(HCOSE_SIGNER h, int key, cn_cbor * value, int flags, cose_errback * perror)
+bool COSE_Signer_map_put_int(HCOSE_SIGNER h, int key, cn_cbor * value, int flags, cose_errback * perr)
{
- if (!IsValidSignerHandle(h) || (value == NULL)) {
- if (perror != NULL) perror->err = COSE_ERR_INVALID_PARAMETER;
- return false;
- }
+ bool fRet = false;
- return _COSE_map_put(&((COSE_SignerInfo *)h)->m_message, key, value, flags, perror);
+ CHECK_CONDITION(IsValidSignerHandle(h), COSE_ERR_INVALID_HANDLE);
+ CHECK_CONDITION(value != NULL, COSE_ERR_INVALID_PARAMETER);
+
+ return _COSE_map_put(&((COSE_SignerInfo *)h)->m_message, key, value, flags, perr);
+
+errorReturn:
+ return fRet;
}
diff --git a/src/cose.h b/src/cose.h
index 620b39b..dceed1c 100644
--- a/src/cose.h
+++ b/src/cose.h
@@ -207,7 +207,7 @@
bool COSE_Recipient_SetSenderKey(HCOSE_RECIPIENT h, const cn_cbor * pKey, int destination, cose_errback * perror);
bool COSE_Recipient_SetExternal(HCOSE_RECIPIENT hcose, const byte * pbExternalData, size_t cbExternalData, cose_errback * perr);
-bool COSE_Recipient_map_put(HCOSE_RECIPIENT h, int key, cn_cbor * value, int flags, cose_errback * perror);
+bool COSE_Recipient_map_put_int(HCOSE_RECIPIENT h, int key, cn_cbor * value, int flags, cose_errback * perror);
cn_cbor * COSE_Recipient_map_get_string(HCOSE_RECIPIENT cose, const char * key, int flags, cose_errback * errp);
cn_cbor * COSE_Recipient_map_get_int(HCOSE_RECIPIENT cose, int key, int flags, cose_errback * errp);
diff --git a/test/encrypt.c b/test/encrypt.c
index afe4554..a7072ba 100644
--- a/test/encrypt.c
+++ b/test/encrypt.c
@@ -12,6 +12,10 @@
#include "test.h"
#include "context.h"
+#ifdef _MSC_VER
+#pragma warning (disable: 4127)
+#endif
+
int _ValidateEnveloped(const cn_cbor * pControl, const byte * pbEncoded, size_t cbEncoded)
{
@@ -68,7 +72,7 @@
cn_cbor * cnStatic = cn_cbor_mapget_string(pRecipients, "sender_key");
if (cnStatic != NULL) {
if (COSE_Recipient_map_get_int(hRecip, COSE_Header_ECDH_SPK, COSE_BOTH, NULL) == 0) {
- COSE_Recipient_map_put(hRecip, COSE_Header_ECDH_SPK, BuildKey(cnStatic, true), COSE_DONT_SEND, NULL);
+ COSE_Recipient_map_put_int(hRecip, COSE_Header_ECDH_SPK, BuildKey(cnStatic, true), COSE_DONT_SEND, NULL);
}
}
@@ -396,57 +400,57 @@
cn_cbor * cn = cn_cbor_int_create(5, CBOR_CONTEXT_PARAM_COMMA NULL);
cose_errback cose_error;
- hEncrypt = COSE_Enveloped_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
- hEncryptBad = (HCOSE_ENVELOPED) COSE_Mac_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
- hRecipient = COSE_Recipient_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
- hRecipientBad = (HCOSE_RECIPIENT) COSE_Mac_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ hEncrypt = COSE_Enveloped_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ hEncryptBad = (HCOSE_ENVELOPED)COSE_Mac_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ hRecipient = COSE_Recipient_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ hRecipientBad = (HCOSE_RECIPIENT)COSE_Mac_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
// Missing case - addref then release on item
- //
- // Do parameter checks
- // - NULL handle
- // - Incorrect handle
- // - NULL pointer
- //
+ //
+ // Do parameter checks
+ // - NULL handle
+ // - Incorrect handle
+ // - NULL pointer
+ //
- CHECK_FAILURE(COSE_Enveloped_SetContent(hEncryptNULL, rgb, 10, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
- CHECK_FAILURE(COSE_Enveloped_SetContent(hEncryptBad, rgb, 10, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
- CHECK_FAILURE(COSE_Enveloped_SetContent(hEncrypt, NULL, 10, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+ CHECK_FAILURE(COSE_Enveloped_SetContent(hEncryptNULL, rgb, 10, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Enveloped_SetContent(hEncryptBad, rgb, 10, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Enveloped_SetContent(hEncrypt, NULL, 10, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
CHECK_FAILURE(COSE_Enveloped_map_put_int(hEncryptNULL, 1, cn, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
CHECK_FAILURE(COSE_Enveloped_map_put_int(hEncryptBad, 1, cn, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
CHECK_FAILURE(COSE_Enveloped_map_put_int(hEncrypt, 1, cn, COSE_PROTECT_ONLY | COSE_UNPROTECT_ONLY, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
CHECK_FAILURE(COSE_Enveloped_map_put_int(hEncrypt, 1, NULL, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
-
-
- CHECK_FAILURE(COSE_Enveloped_map_get_int(hEncryptNULL, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
- CHECK_FAILURE(COSE_Enveloped_map_get_int(hEncryptBad, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
- CHECK_FAILURE(COSE_Enveloped_encrypt(hEncryptNULL, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
- CHECK_FAILURE(COSE_Enveloped_encrypt(hEncryptBad, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Enveloped_map_get_int(hEncryptNULL, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Enveloped_map_get_int(hEncryptBad, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
- CHECK_FAILURE(COSE_Enveloped_decrypt(hEncryptNULL, hRecipient, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
- CHECK_FAILURE(COSE_Enveloped_decrypt(hEncryptBad, hRecipient, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
- CHECK_FAILURE(COSE_Enveloped_decrypt(hEncrypt, hRecipientNULL, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
- CHECK_FAILURE(COSE_Enveloped_decrypt(hEncrypt, hRecipientBad, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+
+ CHECK_FAILURE(COSE_Enveloped_encrypt(hEncryptNULL, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Enveloped_encrypt(hEncryptBad, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+
+ CHECK_FAILURE(COSE_Enveloped_decrypt(hEncryptNULL, hRecipient, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Enveloped_decrypt(hEncryptBad, hRecipient, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Enveloped_decrypt(hEncrypt, hRecipientNULL, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Enveloped_decrypt(hEncrypt, hRecipientBad, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
CHECK_FAILURE(COSE_Enveloped_AddRecipient(hEncryptNULL, hRecipient, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
CHECK_FAILURE(COSE_Enveloped_AddRecipient(hEncryptBad, hRecipient, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
CHECK_FAILURE(COSE_Enveloped_AddRecipient(hEncrypt, hRecipientNULL, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
CHECK_FAILURE(COSE_Enveloped_AddRecipient(hEncrypt, hRecipientBad, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
-
+
CHECK_FAILURE_PTR(COSE_Enveloped_GetRecipient(hEncryptNULL, 0, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
CHECK_FAILURE_PTR(COSE_Enveloped_GetRecipient(hEncryptBad, 0, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
-
+
CHECK_FAILURE(COSE_Enveloped_SetExternal(hEncryptNULL, rgb, 10, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
CHECK_FAILURE(COSE_Enveloped_SetExternal(hEncryptBad, rgb, 10, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
CHECK_FAILURE(COSE_Enveloped_SetExternal(hEncrypt, NULL, 10, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
-
+
if (!COSE_Enveloped_Free(hEncrypt)) CFails++;
if (!COSE_Recipient_Free(hRecipient)) CFails++;
@@ -477,14 +481,14 @@
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++);
- //
- // Over shoot the recipients
-
- 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++);
+ //
+ // Over shoot the recipients
- COSE_Enveloped_Free(hEncrypt);
- COSE_Recipient_Free(hRecipient);
+ 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;
}
@@ -539,3 +543,45 @@
return;
}
+
+void Recipient_Corners()
+{
+ HCOSE_RECIPIENT hRecip;
+ HCOSE_RECIPIENT hRecipNULL = NULL;
+ HCOSE_RECIPIENT hRecipBad;
+ cose_errback cose_error;
+ byte rgb[10];
+ cn_cbor * cn = cn_cbor_int_create(1, CBOR_CONTEXT_PARAM_COMMA NULL);
+
+ hRecip = COSE_Recipient_Init(0, CBOR_CONTEXT_PARAM_COMMA &cose_error);
+ hRecipBad = (HCOSE_RECIPIENT)COSE_Signer_Init(CBOR_CONTEXT_PARAM_COMMA &cose_error);
+
+ // Check for invalid parameters
+
+ CHECK_FAILURE_PTR(COSE_Recipient_from_shared_secret(NULL, 0, NULL, 0, CBOR_CONTEXT_PARAM_COMMA &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+
+ CHECK_FAILURE(COSE_Recipient_SetKey_secret(hRecipNULL, rgb, sizeof(rgb), NULL, 0, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Recipient_SetKey_secret(hRecipBad, rgb, sizeof(rgb), NULL, 0, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Recipient_SetKey_secret(hRecip, NULL, sizeof(rgb), NULL, 0, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+
+ CHECK_FAILURE(COSE_Recipient_SetKey(hRecipNULL, cn, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Recipient_SetKey(hRecipBad, cn, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Recipient_SetKey(hRecip, NULL, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+
+ CHECK_FAILURE(COSE_Recipient_SetSenderKey(hRecipNULL, cn, 0, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Recipient_SetSenderKey(hRecipBad, cn, 0, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Recipient_SetSenderKey(hRecip, NULL, 0, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+ CHECK_FAILURE(COSE_Recipient_SetSenderKey(hRecip, cn, 3, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+
+ CHECK_FAILURE(COSE_Recipient_SetExternal(hRecipNULL, rgb, 10, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Recipient_SetExternal(hRecipBad, rgb, 10, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+
+ CHECK_FAILURE(COSE_Recipient_map_get_int(hRecipNULL, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Recipient_map_get_int(hRecipBad, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Recipient_map_get_int(hRecip, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+
+ CHECK_FAILURE(COSE_Recipient_map_put_int(hRecipNULL, 1, cn, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Recipient_map_put_int(hRecipBad, 1, cn, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Recipient_map_put_int(hRecip, 1, NULL, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+ CHECK_FAILURE(COSE_Recipient_map_put_int(hRecip, 1, cn, COSE_PROTECT_ONLY | COSE_UNPROTECT_ONLY, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+}
\ No newline at end of file
diff --git a/test/mac_test.c b/test/mac_test.c
index cd0c538..455a395 100644
--- a/test/mac_test.c
+++ b/test/mac_test.c
@@ -10,6 +10,11 @@
#include "test.h"
#include "context.h"
+#ifdef _MSC_VER
+#pragma warning (disable: 4127)
+#endif
+
+
int _ValidateMAC(const cn_cbor * pControl, const byte * pbEncoded, size_t cbEncoded)
{
const cn_cbor * pInput = cn_cbor_mapget_string(pControl, "input");
@@ -64,7 +69,7 @@
cn_cbor * cnStatic = cn_cbor_mapget_string(pRecipients, "sender_key");
if (cnStatic != NULL) {
if (COSE_Recipient_map_get_int(hRecip, COSE_Header_ECDH_SPK, COSE_BOTH, NULL) == 0) {
- COSE_Recipient_map_put(hRecip, COSE_Header_ECDH_SPK, BuildKey(cnStatic, true), COSE_DONT_SEND, NULL);
+ COSE_Recipient_map_put_int(hRecip, COSE_Header_ECDH_SPK, BuildKey(cnStatic, true), COSE_DONT_SEND, NULL);
}
}
diff --git a/test/sign.c b/test/sign.c
index d9d86aa..6bb1e6b 100644
--- a/test/sign.c
+++ b/test/sign.c
@@ -12,6 +12,10 @@
#include "test.h"
#include "context.h"
+#ifdef _MSC_VER
+#pragma warning (disable: 4127)
+#endif
+
int _ValidateSigned(const cn_cbor * pControl, const byte * pbEncoded, size_t cbEncoded)
{
const cn_cbor * pInput = cn_cbor_mapget_string(pControl, "input");
@@ -349,60 +353,82 @@
void Sign_Corners()
{
HCOSE_SIGN hSign = NULL;
- HCOSE_SIGN hSign2;
+ HCOSE_SIGN hSignBad;
+ HCOSE_SIGN hSignNULL = NULL;
HCOSE_SIGNER hSigner = NULL;
- HCOSE_SIGNER hSigner2;
+ HCOSE_SIGNER hSignerBad;
+ HCOSE_SIGNER hSignerNULL = NULL;
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);
+ hSign = COSE_Sign_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ hSignBad = (HCOSE_SIGN)COSE_Sign0_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+
+ hSigner = COSE_Signer_Init(CBOR_CONTEXT_PARAM_COMMA NULL);
+ hSignerBad = (HCOSE_SIGNER)COSE_Recipient_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
// Missing case - addref then release on item
-
// Incorrect algorithm
+ // bad handle checks
+ // null handle
+ // wrong type of handle
// Null handle checks
- if (COSE_Sign_SetContent(hSign, rgb, 10, NULL)) CFails++;
- if (COSE_Sign_map_get_int(hSign, 1, COSE_BOTH, NULL)) CFails++;
- if (COSE_Sign_map_put_int(hSign, 1, cn, COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Sign_AddSigner(hSign, hSigner, NULL)) CFails++;
- if (COSE_Sign_AddSigner(hSign2, hSigner, NULL)) CFails++;
- if (COSE_Sign_GetSigner(hSign, 2, NULL)) CFails++;
- if (COSE_Sign_Sign(hSign, NULL)) CFails++;
- if (COSE_Sign_validate(hSign, hSigner, NULL)) CFails++;
- if (COSE_Sign_validate(hSign2, hSigner, NULL)) CFails++;
+ CHECK_FAILURE(COSE_Sign_SetContent(hSignNULL, rgb, sizeof(rgb), &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_SetContent(hSignBad, rgb, sizeof(rgb), &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_SetContent(hSign, NULL, sizeof(rgb), &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
- if (COSE_Signer_SetKey(hSigner, NULL, NULL)) CFails++;
- if (COSE_Signer_SetKey(hSigner2, NULL, NULL)) CFails++;
- if (COSE_Signer_map_put_int(hSigner, 1, cn, COSE_BOTH, NULL)) CFails++;
- if (COSE_Signer_map_put_int(hSigner2, 1, NULL, COSE_BOTH, NULL)) CFails++;
- if (COSE_Signer_map_get_int(hSigner, 1, COSE_BOTH, NULL)) CFails++;
- if (COSE_Signer_SetExternal(hSigner, rgb, sizeof(rgb), NULL)) CFails++;
+ CHECK_FAILURE(COSE_Sign_map_get_int(hSignNULL, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_map_get_int(hSignBad, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_map_get_int(hSign, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+ CHECK_FAILURE(COSE_Sign_map_put_int(hSignNULL, 1, cn, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_map_put_int(hSignBad, 1, cn, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_map_put_int(hSign, 1, NULL, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+ CHECK_FAILURE(COSE_Sign_map_put_int(hSign, 1, cn, COSE_PROTECT_ONLY | COSE_UNPROTECT_ONLY, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
- hSign = (HCOSE_SIGN) COSE_Encrypt_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
- hSigner = (HCOSE_SIGNER) COSE_Recipient_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ CHECK_FAILURE(COSE_Sign_AddSigner(hSignNULL, hSigner, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_AddSigner(hSignBad, hSigner, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_AddSigner(hSign, hSignerNULL, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_AddSigner(hSign, hSignerBad, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_RETURN(COSE_Sign_AddSigner(hSign, hSigner, &cose_error), COSE_ERR_NONE, CFails++);
- if (COSE_Sign_SetContent(hSign, rgb, 10, NULL)) CFails++;
- if (COSE_Sign_map_get_int(hSign, 1, COSE_BOTH, NULL)) CFails++;
- if (COSE_Sign_map_put_int(hSign, 1, cn, COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Sign_AddSigner(hSign, hSigner, NULL)) CFails++;
- if (COSE_Sign_AddSigner(hSign2, hSigner, NULL)) CFails++;
- if (COSE_Sign_GetSigner(hSign, 2, NULL)) CFails++;
- if (COSE_Sign_Sign(hSign, NULL)) CFails++;
- if (COSE_Sign_validate(hSign, hSigner, NULL)) CFails++;
- if (COSE_Sign_validate(hSign2, hSigner, NULL)) CFails++;
+ CHECK_FAILURE(COSE_Sign_add_signer(hSignNULL, cn, 0, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_add_signer(hSignBad, cn, 0, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_add_signer(hSign, NULL, 0, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
- if (COSE_Signer_SetKey(hSigner, NULL, NULL)) CFails++;
- if (COSE_Signer_SetKey(hSigner2, NULL, NULL)) CFails++;
- if (COSE_Signer_map_put_int(hSigner, 1, cn, COSE_BOTH, NULL)) CFails++;
- if (COSE_Signer_map_put_int(hSigner2, 1, NULL, COSE_BOTH, NULL)) CFails++;
- if (COSE_Signer_map_get_int(hSigner, 1, COSE_BOTH, NULL)) CFails++;
- if (COSE_Signer_SetExternal(hSigner, rgb, sizeof(rgb), NULL)) CFails++;
+ CHECK_FAILURE(COSE_Sign_GetSigner(hSignNULL, 1, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_GetSigner(hSignBad, 1, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_GetSigner(hSign, 2, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+ CHECK_FAILURE(COSE_Sign_Sign(hSignNULL, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_Sign(hSignBad, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+
+ CHECK_FAILURE(COSE_Sign_validate(hSignNULL, hSigner, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_validate(hSignBad, hSigner, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_validate(hSign, hSignerNULL, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign_validate(hSign, hSignerBad, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+
+ CHECK_FAILURE(COSE_Signer_SetKey(hSignerNULL, cn, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Signer_SetKey(hSignerBad, cn, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Signer_SetKey(hSigner, NULL, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+
+ CHECK_FAILURE(COSE_Signer_map_get_int(hSignerNULL, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Signer_map_get_int(hSignerBad, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Signer_map_get_int(hSigner, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+
+ CHECK_FAILURE(COSE_Signer_map_put_int(hSignerNULL, 1, cn, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Signer_map_put_int(hSignerBad, 1, cn, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Signer_map_put_int(hSigner, 1, NULL, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+ CHECK_FAILURE(COSE_Signer_map_put_int(hSigner, 1, cn, COSE_PROTECT_ONLY | COSE_UNPROTECT_ONLY, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+
+ CHECK_FAILURE(COSE_Signer_SetExternal(hSignerNULL, rgb, sizeof(rgb), &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Signer_SetExternal(hSignerBad, rgb, sizeof(rgb), &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+
+ COSE_Sign_Free(hSign);
+ COSE_Signer_Free(hSigner);
//
// Unsupported algorithm
@@ -442,35 +468,47 @@
void Sign0_Corners()
{
HCOSE_SIGN0 hSign = NULL;
- HCOSE_SIGN0 hSign2;
+ HCOSE_SIGN0 hSignNULL = NULL;
+ HCOSE_SIGN0 hSignBad;
+
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
+ hSign = COSE_Sign0_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ hSignBad = (HCOSE_SIGN0)COSE_Sign_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
- // Incorrect algorithm
- // Null handle checks
+ // Look for invalid parameter
+ // Null handle checks
+ // bad handle checks
+ // null pointers
- if (COSE_Sign0_SetContent(hSign, rgb, 10, NULL)) CFails++;
- if (COSE_Sign0_map_get_int(hSign, 1, COSE_BOTH, NULL)) CFails++;
- if (COSE_Sign0_map_put_int(hSign, 1, cn, COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Sign0_Sign(hSign, cn, NULL)) CFails++;
- if (COSE_Sign0_Sign(hSign2, NULL, NULL)) CFails++;
- if (COSE_Sign0_validate(hSign, cn, NULL)) CFails++;
- if (COSE_Sign0_validate(hSign2, NULL, NULL)) CFails++;
- if (COSE_Sign0_SetExternal(hSign, rgb, sizeof(rgb), NULL)) CFails++;
+ CHECK_FAILURE(COSE_Sign0_SetContent(hSignNULL, rgb, 10, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign0_SetContent(hSignBad, rgb, 10, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign0_SetContent(hSign, NULL, 10, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
- hSign = (HCOSE_SIGN0)COSE_Encrypt_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
+ CHECK_FAILURE(COSE_Sign0_map_get_int(hSignNULL, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign0_map_get_int(hSignBad, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign0_map_get_int(hSign, 1, COSE_BOTH, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
- if (COSE_Sign0_SetContent(hSign, rgb, 10, NULL)) CFails++;
- if (COSE_Sign0_map_get_int(hSign, 1, COSE_BOTH, NULL)) CFails++;
- if (COSE_Sign0_map_put_int(hSign, 1, cn, COSE_PROTECT_ONLY, NULL)) CFails++;
- if (COSE_Sign0_Sign(hSign, cn, NULL)) CFails++;
- if (COSE_Sign0_validate(hSign, cn, NULL)) CFails++;
- if (COSE_Sign0_SetExternal(hSign, rgb, sizeof(rgb), NULL)) CFails++;
+ CHECK_FAILURE(COSE_Sign0_map_put_int(hSignNULL, 1, cn, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign0_map_put_int(hSignBad, 1, cn, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign0_map_put_int(hSign, 1, NULL, COSE_PROTECT_ONLY, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+ CHECK_FAILURE(COSE_Sign0_map_put_int(hSign, 1, cn, COSE_PROTECT_ONLY | COSE_UNPROTECT_ONLY, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+
+ CHECK_FAILURE(COSE_Sign0_Sign(hSignNULL, cn, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign0_Sign(hSignBad, cn, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign0_Sign(hSign, NULL, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+
+ CHECK_FAILURE(COSE_Sign0_validate(hSignNULL, cn, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign0_validate(hSignBad, cn, &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign0_validate(hSign, NULL, &cose_error), COSE_ERR_INVALID_PARAMETER, CFails++);
+
+ CHECK_FAILURE(COSE_Sign0_SetExternal(hSignNULL, rgb, sizeof(rgb), &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+ CHECK_FAILURE(COSE_Sign0_SetExternal(hSignBad, rgb, sizeof(rgb), &cose_error), COSE_ERR_INVALID_HANDLE, CFails++);
+
+ COSE_Sign0_Free(hSign);
//
// Unsupported algorithm
@@ -478,6 +516,7 @@
hSign = COSE_Sign0_Init(0, CBOR_CONTEXT_PARAM_COMMA NULL);
if (hSign == NULL) CFails++;
+ cn = cn_cbor_int_create(15, CBOR_CONTEXT_PARAM_COMMA NULL);
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++;
CHECK_FAILURE(COSE_Sign0_Sign(hSign, cn, &cose_error), COSE_ERR_UNKNOWN_ALGORITHM, CFails++);
diff --git a/test/test.c b/test/test.c
index 823ed4d..d288a5c 100644
--- a/test/test.c
+++ b/test/test.c
@@ -247,7 +247,7 @@
break;
case Attributes_Recipient_protected:
- f = COSE_Recipient_map_put((HCOSE_RECIPIENT)hHandle, keyNew, pValueNew, which, NULL);
+ f = COSE_Recipient_map_put_int((HCOSE_RECIPIENT)hHandle, keyNew, pValueNew, which, NULL);
break;
case Attributes_Enveloped_protected:
@@ -474,6 +474,7 @@
Enveloped_Corners();
Sign_Corners();
Sign0_Corners();
+ Recipient_Corners();
}
void RunMemoryTest(const char * szFileName)
diff --git a/test/test.h b/test/test.h
index 34d832b..3612b9d 100644
--- a/test/test.h
+++ b/test/test.h
@@ -21,6 +21,7 @@
int BuildEncryptMessage(const cn_cbor * pControl);
void Enveloped_Corners();
void Encrypt_Corners();
+void Recipient_Corners();
// sign.c