Coverage Report

Created: 2026-06-07 07:05

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/suricata7/src/detect-transform-sha1.c
Line
Count
Source
1
/* Copyright (C) 2007-2020 Open Information Security Foundation
2
 *
3
 * You can copy, redistribute or modify this Program under the terms of
4
 * the GNU General Public License version 2 as published by the Free
5
 * Software Foundation.
6
 *
7
 * This program is distributed in the hope that it will be useful,
8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 * GNU General Public License for more details.
11
 *
12
 * You should have received a copy of the GNU General Public License
13
 * version 2 along with this program; if not, write to the Free Software
14
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15
 * 02110-1301, USA.
16
 */
17
18
/**
19
 * \file
20
 *
21
 * \author Victor Julien <victor@inliniac.net>
22
 *
23
 * Implements the sha1 transformation keyword
24
 */
25
26
#include "suricata-common.h"
27
28
#include "detect.h"
29
#include "detect-engine.h"
30
#include "detect-engine-prefilter.h"
31
#include "detect-parse.h"
32
#include "detect-transform-sha1.h"
33
34
#include "util-unittest.h"
35
#include "util-print.h"
36
37
#include "rust.h"
38
39
static int DetectTransformToSha1Setup (DetectEngineCtx *, Signature *, const char *);
40
#ifdef UNITTESTS
41
static void DetectTransformToSha1RegisterTests(void);
42
#endif
43
static void TransformToSha1(InspectionBuffer *buffer, void *options);
44
45
void DetectTransformSha1Register(void)
46
34
{
47
34
    sigmatch_table[DETECT_TRANSFORM_SHA1].name = "to_sha1";
48
34
    sigmatch_table[DETECT_TRANSFORM_SHA1].desc =
49
34
        "convert to sha1 hash of the buffer";
50
34
    sigmatch_table[DETECT_TRANSFORM_SHA1].url =
51
34
        "/rules/transforms.html#to-sha1";
52
34
    sigmatch_table[DETECT_TRANSFORM_SHA1].Setup =
53
34
        DetectTransformToSha1Setup;
54
34
    sigmatch_table[DETECT_TRANSFORM_SHA1].Transform =
55
34
        TransformToSha1;
56
#ifdef UNITTESTS
57
    sigmatch_table[DETECT_TRANSFORM_SHA1].RegisterTests =
58
        DetectTransformToSha1RegisterTests;
59
#endif
60
34
    sigmatch_table[DETECT_TRANSFORM_SHA1].flags |= SIGMATCH_NOOPT;
61
34
}
62
63
/**
64
 *  \internal
65
 *  \brief Apply the nocase keyword to the last pattern match, either content or uricontent
66
 *  \param det_ctx detection engine ctx
67
 *  \param s signature
68
 *  \param nullstr should be null
69
 *  \retval 0 ok
70
 *  \retval -1 failure
71
 */
72
static int DetectTransformToSha1Setup (DetectEngineCtx *de_ctx, Signature *s, const char *nullstr)
73
2.60k
{
74
2.60k
    SCEnter();
75
2.60k
    if (g_disable_hashing) {
76
0
        SCLogError("SHA1 hashing has been disabled, "
77
0
                   "needed for to_sha1 keyword");
78
0
        SCReturnInt(-1);
79
0
    }
80
2.60k
    int r = DetectSignatureAddTransform(s, DETECT_TRANSFORM_SHA1, NULL);
81
2.60k
    SCReturnInt(r);
82
2.60k
}
83
84
static void TransformToSha1(InspectionBuffer *buffer, void *options)
85
70
{
86
70
    const uint8_t *input = buffer->inspect;
87
70
    const uint32_t input_len = buffer->inspect_len;
88
70
    uint8_t output[SC_SHA1_LEN];
89
90
    //PrintRawDataFp(stdout, input, input_len);
91
70
    SCSha1HashBuffer(input, input_len, output, sizeof(output));
92
70
    InspectionBufferCopy(buffer, output, sizeof(output));
93
70
}
94
95
#ifdef UNITTESTS
96
static int DetectTransformToSha1Test01(void)
97
{
98
    const uint8_t *input = (const uint8_t *)" A B C D ";
99
    uint32_t input_len = strlen((char *)input);
100
101
    InspectionBuffer buffer;
102
    InspectionBufferInit(&buffer, 8);
103
    InspectionBufferSetup(NULL, -1, &buffer, input, input_len);
104
    PrintRawDataFp(stdout, buffer.inspect, buffer.inspect_len);
105
    TransformToSha1(&buffer, NULL);
106
    PrintRawDataFp(stdout, buffer.inspect, buffer.inspect_len);
107
    InspectionBufferFree(&buffer);
108
    PASS;
109
}
110
111
static void DetectTransformToSha1RegisterTests(void)
112
{
113
    UtRegisterTest("DetectTransformToSha1Test01",
114
            DetectTransformToSha1Test01);
115
}
116
#endif