mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 13:51:26 +02:00
MINOR: samples: add crc32c converter
This patch adds the support of CRC32c (rfc4960).
This commit is contained in:
parent
4952985b71
commit
50791a7df3
@ -12847,7 +12847,17 @@ crc32([<avalanche>])
|
|||||||
found in Ethernet, Gzip, PNG, etc... It is slower than the other algorithms
|
found in Ethernet, Gzip, PNG, etc... It is slower than the other algorithms
|
||||||
but may provide a better or at least less predictable distribution. It must
|
but may provide a better or at least less predictable distribution. It must
|
||||||
not be used for security purposes as a 32-bit hash is trivial to break. See
|
not be used for security purposes as a 32-bit hash is trivial to break. See
|
||||||
also "djb2", "sdbm", "wt6" and the "hash-type" directive.
|
also "djb2", "sdbm", "wt6", "crc32c" and the "hash-type" directive.
|
||||||
|
|
||||||
|
crc32c([<avalanche>])
|
||||||
|
Hashes a binary input sample into an unsigned 32-bit quantity using the CRC32C
|
||||||
|
hash function. Optionally, it is possible to apply a full avalanche hash
|
||||||
|
function to the output if the optional <avalanche> argument equals 1. This
|
||||||
|
converter uses the same functions as described in RFC4960, Appendix B [8].
|
||||||
|
It is provided for compatibility with other software which want a CRC32C to be
|
||||||
|
computed on some input keys. It is slower than the other algorithms and it must
|
||||||
|
not be used for security purposes as a 32-bit hash is trivial to break. See
|
||||||
|
also "djb2", "sdbm", "wt6", "crc32" and the "hash-type" directive.
|
||||||
|
|
||||||
da-csv-conv(<prop>[,<prop>*])
|
da-csv-conv(<prop>[,<prop>*])
|
||||||
Asks the DeviceAtlas converter to identify the User Agent string passed on
|
Asks the DeviceAtlas converter to identify the User Agent string passed on
|
||||||
@ -12890,8 +12900,8 @@ djb2([<avalanche>])
|
|||||||
balancing algorithms, so it will provide exactly the same results. It is
|
balancing algorithms, so it will provide exactly the same results. It is
|
||||||
mostly intended for debugging, but can be used as a stick-table entry to
|
mostly intended for debugging, but can be used as a stick-table entry to
|
||||||
collect rough statistics. It must not be used for security purposes as a
|
collect rough statistics. It must not be used for security purposes as a
|
||||||
32-bit hash is trivial to break. See also "crc32", "sdbm", "wt6" and the
|
32-bit hash is trivial to break. See also "crc32", "sdbm", "wt6", "crc32c",
|
||||||
"hash-type" directive.
|
and the "hash-type" directive.
|
||||||
|
|
||||||
even
|
even
|
||||||
Returns a boolean TRUE if the input value of type signed integer is even
|
Returns a boolean TRUE if the input value of type signed integer is even
|
||||||
@ -13199,8 +13209,8 @@ sdbm([<avalanche>])
|
|||||||
balancing algorithms, so it will provide exactly the same results. It is
|
balancing algorithms, so it will provide exactly the same results. It is
|
||||||
mostly intended for debugging, but can be used as a stick-table entry to
|
mostly intended for debugging, but can be used as a stick-table entry to
|
||||||
collect rough statistics. It must not be used for security purposes as a
|
collect rough statistics. It must not be used for security purposes as a
|
||||||
32-bit hash is trivial to break. See also "crc32", "djb2", "wt6" and the
|
32-bit hash is trivial to break. See also "crc32", "djb2", "wt6", "crc32c",
|
||||||
"hash-type" directive.
|
and the "hash-type" directive.
|
||||||
|
|
||||||
set-var(<var name>)
|
set-var(<var name>)
|
||||||
Sets a variable with the input content and returns the content on the output
|
Sets a variable with the input content and returns the content on the output
|
||||||
@ -13442,8 +13452,8 @@ wt6([<avalanche>])
|
|||||||
balancing algorithms, so it will provide exactly the same results. It is
|
balancing algorithms, so it will provide exactly the same results. It is
|
||||||
mostly intended for debugging, but can be used as a stick-table entry to
|
mostly intended for debugging, but can be used as a stick-table entry to
|
||||||
collect rough statistics. It must not be used for security purposes as a
|
collect rough statistics. It must not be used for security purposes as a
|
||||||
32-bit hash is trivial to break. See also "crc32", "djb2", "sdbm", and the
|
32-bit hash is trivial to break. See also "crc32", "djb2", "sdbm", "crc32c",
|
||||||
"hash-type" directive.
|
and the "hash-type" directive.
|
||||||
|
|
||||||
xor(<value>)
|
xor(<value>)
|
||||||
Performs a bitwise "XOR" (exclusive OR) between <value> and the input value
|
Performs a bitwise "XOR" (exclusive OR) between <value> and the input value
|
||||||
|
11
src/sample.c
11
src/sample.c
@ -1743,6 +1743,16 @@ static int sample_conv_crc32(const struct arg *arg_p, struct sample *smp, void *
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* hashes the binary input into crc32c (RFC4960, Appendix B [8].) */
|
||||||
|
static int sample_conv_crc32c(const struct arg *arg_p, struct sample *smp, void *private)
|
||||||
|
{
|
||||||
|
smp->data.u.sint = hash_crc32c(smp->data.u.str.str, smp->data.u.str.len);
|
||||||
|
if (arg_p && arg_p->data.sint)
|
||||||
|
smp->data.u.sint = full_hash(smp->data.u.sint);
|
||||||
|
smp->data.type = SMP_T_SINT;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* This function escape special json characters. The returned string can be
|
/* This function escape special json characters. The returned string can be
|
||||||
* safely set between two '"' and used as json string. The json string is
|
* safely set between two '"' and used as json string. The json string is
|
||||||
* defined like this:
|
* defined like this:
|
||||||
@ -2910,6 +2920,7 @@ static struct sample_conv_kw_list sample_conv_kws = {ILH, {
|
|||||||
{ "ltime", sample_conv_ltime, ARG2(1,STR,SINT), NULL, SMP_T_SINT, SMP_T_STR },
|
{ "ltime", sample_conv_ltime, ARG2(1,STR,SINT), NULL, SMP_T_SINT, SMP_T_STR },
|
||||||
{ "utime", sample_conv_utime, ARG2(1,STR,SINT), NULL, SMP_T_SINT, SMP_T_STR },
|
{ "utime", sample_conv_utime, ARG2(1,STR,SINT), NULL, SMP_T_SINT, SMP_T_STR },
|
||||||
{ "crc32", sample_conv_crc32, ARG1(0,SINT), NULL, SMP_T_BIN, SMP_T_SINT },
|
{ "crc32", sample_conv_crc32, ARG1(0,SINT), NULL, SMP_T_BIN, SMP_T_SINT },
|
||||||
|
{ "crc32c", sample_conv_crc32c, ARG1(0,SINT), NULL, SMP_T_BIN, SMP_T_SINT },
|
||||||
{ "djb2", sample_conv_djb2, ARG1(0,SINT), NULL, SMP_T_BIN, SMP_T_SINT },
|
{ "djb2", sample_conv_djb2, ARG1(0,SINT), NULL, SMP_T_BIN, SMP_T_SINT },
|
||||||
{ "sdbm", sample_conv_sdbm, ARG1(0,SINT), NULL, SMP_T_BIN, SMP_T_SINT },
|
{ "sdbm", sample_conv_sdbm, ARG1(0,SINT), NULL, SMP_T_BIN, SMP_T_SINT },
|
||||||
{ "wt6", sample_conv_wt6, ARG1(0,SINT), NULL, SMP_T_BIN, SMP_T_SINT },
|
{ "wt6", sample_conv_wt6, ARG1(0,SINT), NULL, SMP_T_BIN, SMP_T_SINT },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user