88 size_t keylen = strlen(optstr);
89 if (keylen % 2 == 1) {
91 DetectTransformXorFree(
de_ctx, pxd);
94 if (keylen / 2 > UINT8_MAX) {
96 DetectTransformXorFree(
de_ctx, pxd);
101 if (pxd->
key == NULL) {
103 DetectTransformXorFree(
de_ctx, pxd);
106 for (
size_t i = 0; i < keylen / 2; i++) {
107 if ((isxdigit(optstr[2 * i])) && (isxdigit(optstr[2 * i + 1]))) {
108 pxd->
key[i] = (optstr[2 * i] >=
'A' ? ((optstr[2 * i] & 0xdf) -
'A') + 10
109 : (optstr[2 * i] -
'0'))
111 pxd->
key[i] |= (optstr[2 * i + 1] >=
'A' ? ((optstr[2 * i + 1] & 0xdf) -
'A') + 10
112 : (optstr[2 * i + 1] -
'0'));
115 "XOR transform key must be hexadecimal characters only");
116 DetectTransformXorFree(
de_ctx, pxd);
123 DetectTransformXorFree(
de_ctx, pxd);
131 const uint8_t *input = buffer->
inspect;
134 uint8_t output[input_len];
136 for (uint32_t i = 0; i < input_len; i++) {
137 output[i] = input[i] ^ pxd->
key[i % pxd->
length];