datasets: factorize serialised operations

Ticket: #5184
pull/8097/head
Eric Leblond 4 years ago committed by Victor Julien
parent a1a22cccd2
commit a9c05c7d96

@ -1134,13 +1134,10 @@ static int DatasetAddwRep(Dataset *set, const uint8_t *data, const uint32_t data
return -1;
}
/** \brief add serialized data to set
* \retval int 1 added
* \retval int 0 already in hash
* \retval int -1 API error (not added)
* \retval int -2 DATA error
*/
int DatasetAddSerialized(Dataset *set, const char *string)
typedef int (*DatasetOpFunc)(Dataset *set, const uint8_t *data, const uint32_t data_len);
static int DatasetOpSerialized(Dataset *set, const char *string, DatasetOpFunc DatasetOpString,
DatasetOpFunc DatasetOpMd5, DatasetOpFunc DatasetOpSha256)
{
if (set == NULL)
return -1;
@ -1156,7 +1153,7 @@ int DatasetAddSerialized(Dataset *set, const char *string)
return -2;
}
return DatasetAddString(set, decoded, num_decoded);
return DatasetOpString(set, decoded, num_decoded);
}
case DATASET_TYPE_MD5: {
if (strlen(string) != 32)
@ -1164,7 +1161,7 @@ int DatasetAddSerialized(Dataset *set, const char *string)
uint8_t hash[16];
if (HexToRaw((const uint8_t *)string, 32, hash, sizeof(hash)) < 0)
return -2;
return DatasetAddMd5(set, hash, 16);
return DatasetOpMd5(set, hash, 16);
}
case DATASET_TYPE_SHA256: {
if (strlen(string) != 64)
@ -1172,7 +1169,7 @@ int DatasetAddSerialized(Dataset *set, const char *string)
uint8_t hash[32];
if (HexToRaw((const uint8_t *)string, 64, hash, sizeof(hash)) < 0)
return -2;
return DatasetAddSha256(set, hash, 32);
return DatasetOpSha256(set, hash, 32);
}
}
return -1;
@ -1184,40 +1181,21 @@ int DatasetAddSerialized(Dataset *set, const char *string)
* \retval int -1 API error (not added)
* \retval int -2 DATA error
*/
int DatasetLookupSerialized(Dataset *set, const char *string)
int DatasetAddSerialized(Dataset *set, const char *string)
{
if (set == NULL)
return -1;
return DatasetOpSerialized(set, string, DatasetAddString, DatasetAddMd5, DatasetAddSha256);
}
switch (set->type) {
case DATASET_TYPE_STRING: {
// coverity[alloc_strlen : FALSE]
uint8_t decoded[strlen(string)];
uint32_t consumed = 0, num_decoded = 0;
Base64Ecode code = DecodeBase64(decoded, strlen(string), (const uint8_t *)string,
strlen(string), &consumed, &num_decoded, BASE64_MODE_STRICT);
if (code == BASE64_ECODE_ERR)
FatalError(SC_ERR_FATAL, "bad base64 encoding %s/%s", set->name, set->load);
return DatasetLookup(set, decoded, num_decoded);
}
case DATASET_TYPE_MD5: {
if (strlen(string) != 32)
return -2;
uint8_t hash[16];
if (HexToRaw((const uint8_t *)string, 32, hash, sizeof(hash)) < 0)
return -2;
return DatasetLookup(set, hash, 16);
}
case DATASET_TYPE_SHA256: {
if (strlen(string) != 64)
return -2;
uint8_t hash[32];
if (HexToRaw((const uint8_t *)string, 64, hash, sizeof(hash)) < 0)
return -2;
return DatasetLookup(set, hash, 32);
}
}
return -1;
/** \brief add serialized data to set
* \retval int 1 added
* \retval int 0 already in hash
* \retval int -1 API error (not added)
* \retval int -2 DATA error
*/
int DatasetLookupSerialized(Dataset *set, const char *string)
{
return DatasetOpSerialized(
set, string, DatasetLookupString, DatasetLookupMd5, DatasetLookupSha256);
}
/**
@ -1268,38 +1246,6 @@ static int DatasetRemoveSha256(Dataset *set, const uint8_t *data, const uint32_t
* \retval int -2 DATA error */
int DatasetRemoveSerialized(Dataset *set, const char *string)
{
if (set == NULL)
return -1;
switch (set->type) {
case DATASET_TYPE_STRING: {
// coverity[alloc_strlen : FALSE]
uint8_t decoded[strlen(string)];
uint32_t consumed = 0, num_decoded = 0;
Base64Ecode code = DecodeBase64(decoded, strlen(string), (const uint8_t *)string,
strlen(string), &consumed, &num_decoded, BASE64_MODE_STRICT);
if (code == BASE64_ECODE_ERR) {
return -2;
}
return DatasetRemoveString(set, decoded, num_decoded);
}
case DATASET_TYPE_MD5: {
if (strlen(string) != 32)
return -2;
uint8_t hash[16];
if (HexToRaw((const uint8_t *)string, 32, hash, sizeof(hash)) < 0)
return -2;
return DatasetRemoveMd5(set, hash, 16);
}
case DATASET_TYPE_SHA256: {
if (strlen(string) != 64)
return -2;
uint8_t hash[32];
if (HexToRaw((const uint8_t *)string, 64, hash, sizeof(hash)) < 0)
return -2;
return DatasetRemoveSha256(set, hash, 32);
}
}
return -1;
return DatasetOpSerialized(
set, string, DatasetRemoveString, DatasetRemoveMd5, DatasetRemoveSha256);
}

Loading…
Cancel
Save