diff options
Diffstat (limited to 'decoders/quic/quic_deprotection.h')
| -rw-r--r-- | decoders/quic/quic_deprotection.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/decoders/quic/quic_deprotection.h b/decoders/quic/quic_deprotection.h new file mode 100644 index 0000000..525e398 --- /dev/null +++ b/decoders/quic/quic_deprotection.h @@ -0,0 +1,111 @@ +#pragma once +#ifdef __cpluscplus +extern "C" +{ +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <fcntl.h> +#include <signal.h> +#include <sys/stat.h> +#include <arpa/inet.h> + +#ifdef DEBUG_SWITCH + +#define LOG_DEBUG(format, ...) \ + { \ + fprintf(stdout, format "\n", ##__VA_ARGS__); \ + fflush(stdout); \ + } + +#define LOG_WARN(format, ...) \ + { \ + fprintf(stderr, format "\n", ##__VA_ARGS__); \ + fflush(stderr); \ + } + +#define LOG_ERROR(format, ...) \ + { \ + fprintf(stderr, format "\n", ##__VA_ARGS__); \ + fflush(stderr); \ + } + +#else + +#define LOG_DEBUG(format, ...) +#define LOG_WARN(format, ...) +#define LOG_ERROR(format, ...) + +#endif + +#define QUIC_MAX_UDP_PAYLOAD_SIZE 1460 + +#define quic_string(str) \ + { \ + sizeof(str) - 1, (u_char *)str} + + typedef struct + { + size_t len; + u_char *data; + } quic_str_t; + + typedef struct quic_secret_s + { + quic_str_t secret; + quic_str_t key; + quic_str_t iv; + quic_str_t hp; + } quic_secret_t; + + typedef enum + { + ssl_encryption_initial = 0, + ssl_encryption_early_data = 1, + ssl_encryption_handshake = 2, + ssl_encryption_application = 3, + } ssl_encryption_level_t; + + typedef enum + { + LONG = 0, + SHORT = 1, + } quic_header_type; + + typedef struct + { + quic_secret_t client_secret; + ssl_encryption_level_t level; // QUIC Packet Process Level + quic_header_type header_type; // QUIC Packet Header Type + + uint32_t version; // QUIC Version + uint8_t flags; // QUIC Flags + u_char *data; // QUIC Packet Data + size_t len; // QUIC Packet Length + u_char *pos; // Process Ptr + uint64_t largest_pkt_num; + + quic_str_t dcid; // QUIC DCID + quic_str_t scid; // QUIC SCID + quic_str_t token; // QUIC TOKEN + + size_t pkt_len; + uint64_t pkt_num; // QUIC Packet Number + u_char *plaintext; + quic_str_t payload; // Decrypted data + + unsigned key_phase : 1; + } quic_dpt_t; + + quic_dpt_t *quic_deprotection_new(void); + void quic_deprotection_free(quic_dpt_t *dpt); + void quic_deprotection_dump(quic_dpt_t *dpt); + int quic_deprotection(quic_dpt_t *dpt, const u_char *payload, size_t payload_len); + +#ifdef __cpluscplus +} +#endif |
