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;
return -2;
}
- return DatasetAddString(set, decoded, num_decoded);
+ return DatasetOpString(set, decoded, num_decoded);
}
case DATASET_TYPE_MD5: {
if (strlen(string) != 32)
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)
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;
* \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);
}
/**
* \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);
}