diff options
| author | 李佳 <[email protected]> | 2024-07-10 06:58:33 +0000 |
|---|---|---|
| committer | lijia <[email protected]> | 2024-07-11 11:23:10 +0800 |
| commit | 4782225f29b6f80ee023297d0a0726c6c798e3d7 (patch) | |
| tree | 35e385984c8312daf1de3f479af5523928626f54 /src/quic_deprotection.h | |
Initial commitv1.0.1
Diffstat (limited to 'src/quic_deprotection.h')
| -rw-r--r-- | src/quic_deprotection.h | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/src/quic_deprotection.h b/src/quic_deprotection.h new file mode 100644 index 0000000..11c0d03 --- /dev/null +++ b/src/quic_deprotection.h @@ -0,0 +1,116 @@ +#ifndef _QUIC_DEPROTECTION_H +#define _QUIC_DEPROTECTION_H + +#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 + +#endif |
