#include "util-print.h"
#include "app-layer-parser.h"
#include "util-validate.h"
+#include "rust.h"
extern int g_detect_disabled;
#ifdef HAVE_NSS
if (ff->md5_ctx)
- HASH_Destroy(ff->md5_ctx);
+ SCMd5Free(ff->md5_ctx);
if (ff->sha1_ctx)
- HASH_Destroy(ff->sha1_ctx);
+ SCSha1Free(ff->sha1_ctx);
if (ff->sha256_ctx)
- HASH_Destroy(ff->sha256_ctx);
+ SCSha256Free(ff->sha256_ctx);
#endif
SCFree(ff);
}
#ifdef HAVE_NSS
if (file->md5_ctx) {
- HASH_Update(file->md5_ctx, data, data_len);
+ SCMd5Update(file->md5_ctx, data, data_len);
}
if (file->sha1_ctx) {
- HASH_Update(file->sha1_ctx, data, data_len);
+ SCSha1Update(file->sha1_ctx, data, data_len);
}
if (file->sha256_ctx) {
- HASH_Update(file->sha256_ctx, data, data_len);
+ SCSha256Update(file->sha256_ctx, data, data_len);
}
#endif
SCReturnInt(0);
int hash_done = 0;
/* no storage but forced hashing */
if (ff->md5_ctx) {
- HASH_Update(ff->md5_ctx, data, data_len);
+ SCMd5Update(ff->md5_ctx, data, data_len);
hash_done = 1;
}
if (ff->sha1_ctx) {
- HASH_Update(ff->sha1_ctx, data, data_len);
+ SCSha1Update(ff->sha1_ctx, data, data_len);
hash_done = 1;
}
if (ff->sha256_ctx) {
- HASH_Update(ff->sha256_ctx, data, data_len);
+ SCSha256Update(ff->sha256_ctx, data, data_len);
hash_done = 1;
}
#ifdef HAVE_NSS
if (!(ff->flags & FILE_NOMD5) || g_file_force_md5) {
- ff->md5_ctx = HASH_Create(HASH_AlgMD5);
- if (ff->md5_ctx != NULL) {
- HASH_Begin(ff->md5_ctx);
- }
+ ff->md5_ctx = SCMd5New();
}
if (!(ff->flags & FILE_NOSHA1) || g_file_force_sha1) {
- ff->sha1_ctx = HASH_Create(HASH_AlgSHA1);
- if (ff->sha1_ctx != NULL) {
- HASH_Begin(ff->sha1_ctx);
- }
+ ff->sha1_ctx = SCSha1New();
}
if (!(ff->flags & FILE_NOSHA256) || g_file_force_sha256) {
- ff->sha256_ctx = HASH_Create(HASH_AlgSHA256);
- if (ff->sha256_ctx != NULL) {
- HASH_Begin(ff->sha256_ctx);
- }
+ ff->sha256_ctx = SCSha256New();
}
#endif
#ifdef HAVE_NSS
/* no storage but hashing */
if (ff->md5_ctx)
- HASH_Update(ff->md5_ctx, data, data_len);
+ SCMd5Update(ff->md5_ctx, data, data_len);
if (ff->sha1_ctx)
- HASH_Update(ff->sha1_ctx, data, data_len);
+ SCSha1Update(ff->sha1_ctx, data, data_len);
if (ff->sha256_ctx)
- HASH_Update(ff->sha256_ctx, data, data_len);
+ SCSha256Update(ff->sha256_ctx, data, data_len);
#endif
} else {
if (AppendData(ff, data, data_len) != 0) {
#ifdef HAVE_NSS
if (ff->md5_ctx) {
- unsigned int len = 0;
- HASH_End(ff->md5_ctx, ff->md5, &len, sizeof(ff->md5));
+ SCMd5Finalize(ff->md5_ctx, ff->md5, sizeof(ff->md5));
+ ff->md5_ctx = NULL;
ff->flags |= FILE_MD5;
}
if (ff->sha1_ctx) {
- unsigned int len = 0;
- HASH_End(ff->sha1_ctx, ff->sha1, &len, sizeof(ff->sha1));
+ SCSha1Finalize(ff->sha1_ctx, ff->sha1, sizeof(ff->sha1));
+ ff->sha1_ctx = NULL;
ff->flags |= FILE_SHA1;
}
if (ff->sha256_ctx) {
if ((per_file_flags & FILE_NOSHA256) &&
ptr->sha256_ctx != NULL)
{
- HASH_Destroy(ptr->sha256_ctx);
+ SCSha256Free(ptr->sha256_ctx);
ptr->sha256_ctx = NULL;
}
if ((per_file_flags & FILE_NOSHA1) &&
ptr->sha1_ctx != NULL)
{
- HASH_Destroy(ptr->sha1_ctx);
+ SCSha1Free(ptr->sha1_ctx);
ptr->sha1_ctx = NULL;
}
if ((per_file_flags & FILE_NOMD5) &&
ptr->md5_ctx != NULL)
{
- HASH_Destroy(ptr->md5_ctx);
+ SCMd5Free(ptr->md5_ctx);
ptr->md5_ctx = NULL;
}
#endif
static void FileEndSha256(File *ff)
{
if (!(ff->flags & FILE_SHA256) && ff->sha256_ctx) {
- unsigned int len = 0;
- HASH_End(ff->sha256_ctx, ff->sha256, &len, sizeof(ff->sha256));
+ SCSha256Finalize(ff->sha256_ctx, ff->sha256, sizeof(ff->sha256));
+ ff->sha256_ctx = NULL;
ff->flags |= FILE_SHA256;
}
}
#include "util-streaming-buffer.h"
+/* Hack: Pulling rust.h to get the SCSha256 causes all sorts of problems with
+ * header include orders, which is something we'll have to resolve as we provide
+ * more functionality via Rust. But this lets me continue with replacing nss
+ * without fighting the headers at this time. */
+typedef struct SCSha256 SCSha256;
+#define SC_SHA256_LEN 32
+
+typedef struct SCSha1 SCSha1;
+#define SC_SHA1_LEN 20
+
+typedef struct SCMd5 SCMd5;
+#define SC_MD5_LEN 16
+
#define FILE_TRUNCATED BIT_U16(0)
#define FILE_NOMAGIC BIT_U16(1)
#define FILE_NOMD5 BIT_U16(2)
#endif
struct File_ *next;
#ifdef HAVE_NSS
- HASHContext *md5_ctx;
- uint8_t md5[MD5_LENGTH];
- HASHContext *sha1_ctx;
- uint8_t sha1[SHA1_LENGTH];
- HASHContext *sha256_ctx;
- uint8_t sha256[SHA256_LENGTH];
+ SCMd5 *md5_ctx;
+ uint8_t md5[SC_MD5_LEN];
+ SCSha1 *sha1_ctx;
+ uint8_t sha1[SC_SHA1_LEN];
+ SCSha256 *sha256_ctx;
+ uint8_t sha256[SC_SHA256_LEN];
#endif
uint64_t content_inspected; /**< used in pruning if FILE_USE_DETECT
* flag is set */