58 if ((*buffer)->data != NULL) {
60 (*buffer)->data = NULL;
77 static int Ja3BufferResizeIfFull(
JA3Buffer *buffer, uint32_t
len)
108 if (*buffer1 == NULL || *buffer2 == NULL) {
115 if ((*buffer1)->data == NULL) {
116 (*buffer1)->data = (*buffer2)->data;
117 (*buffer1)->used = (*buffer2)->used;
118 (*buffer1)->size = (*buffer2)->size;
123 int rc = Ja3BufferResizeIfFull(*buffer1, (*buffer2)->
used);
130 if ((*buffer2)->used == 0) {
131 (*buffer1)->used += snprintf((*buffer1)->data + (*buffer1)->used,
132 (*buffer1)->size - (*buffer1)->used,
",");
134 (*buffer1)->used += snprintf((*buffer1)->data + (*buffer1)->used,
135 (*buffer1)->size - (*buffer1)->used,
",%s",
152 static uint32_t NumberOfDigits(uint32_t num)
158 return 1 + NumberOfDigits(num / 10);
172 if (*buffer == NULL) {
177 if ((*buffer)->data == NULL) {
179 if ((*buffer)->data == NULL) {
180 SCLogError(
"Error allocating memory for JA3 data");
187 uint32_t value_len = NumberOfDigits(value);
189 int rc = Ja3BufferResizeIfFull(*buffer, value_len);
195 if ((*buffer)->used == 0) {
196 (*buffer)->used += snprintf((*buffer)->data, (*buffer)->size,
"%u", value);
199 (*buffer)->used += snprintf(
200 (*buffer)->data + (*buffer)->used, (*buffer)->size - (*buffer)->used,
"-%u", value);
216 if (buffer == NULL) {
221 if (buffer->
data == NULL) {
226 char *ja3_hash =
SCMalloc(SC_MD5_HEX_LEN + 1);
227 if (ja3_hash == NULL) {
228 SCLogError(
"Error allocating memory for JA3 hash");
232 SCMd5HashBufferToHex((
unsigned char *)buffer->
data, buffer->
used, ja3_hash, SC_MD5_HEX_LEN + 1);
249 if (is_enabled == 0) {
250 if (strcmp(
type,
"rule") != 0) {
266 const uint8_t *b = NULL;
268 if (rs_quic_tx_get_ja3(txv, &b, &b_len) != 1)
270 if (b == NULL || b_len == 0)
273 uint8_t ja3_hash[SC_MD5_HEX_LEN + 1];
275 SCMd5HashBufferToHex(b, b_len, (
char *)ja3_hash, SC_MD5_HEX_LEN + 1);
291 const uint8_t *b = NULL;
293 if (rs_quic_tx_get_ja3(txv, &b, &b_len) != 1)
295 if (b == NULL || b_len == 0)