summaryrefslogtreecommitdiff
path: root/include/ssl_decoder.h
blob: 2d35aabd8c3580ad63a29355c7d8ce93ee210019 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#pragma once

#ifdef __cplusplus
extern "C"
{
#endif

#include <stdint.h>
#include <stddef.h>

#define SSL_DECODER_MESSAGE_TOPIC "SSL_DECODER_MESSAGE"

enum ssl_message_type
{
    SSL_CLIENT_HELLO,
    SSL_SERVER_HELLO,
    SSL_CERTIFICATE,
    SSL_PROTECTED_PAYLOAD,
    SSL_MSG_MAX,
};

struct ssl_message;
enum ssl_message_type ssl_message_type_get(const struct ssl_message *msg);

// SSL_CLIENT_HELLO
int32_t ssl_message_esni_is_true(const struct ssl_message *msg);
int32_t ssl_message_ech_is_true(const struct ssl_message *msg);

void ssl_message_sni_get0(const struct ssl_message *msg, char **value, size_t *value_sz);

const char *ssl_message_readable_version_get0(const struct ssl_message *msg);
const char *ssl_message_readable_ja3hash_get0(const struct ssl_message *msg);

// SSL_SERVER_HELLO
const char *ssl_message_readable_ja3shash_get0(const struct ssl_message *msg);

void ssl_message_extensions_next(const struct ssl_message *msg, char **value, size_t *value_sz);
int ssl_message_reset_extensions_iter(struct ssl_message *msg);

// SSL_CERTIFICATE
enum ssl_certificate_type
{
    SSL_CERTIFICATE_TYPE_UNKNOWN=0,
    SSL_CERTIFICATE_TYPE_INDIVIDUAL,
    SSL_CERTIFICATE_TYPE_ROOT,
    SSL_CERTIFICATE_TYPE_MIDDLE,
    SSL_CERTIFICATE_TYPE_CHAIN,
    SSL_CERTIFICATE_TYPE_MAX,
};

enum ssl_certificate_type ssl_certificate_type_get(const struct ssl_message *msg);
void ssl_message_validity_before_get0(const struct ssl_message *msg, char **value, size_t *value_sz);
void ssl_message_validity_after_get0(const struct ssl_message *msg, char **value, size_t *value_sz);
void ssl_message_issuer_serial_number_get0(const struct ssl_message *msg, char **value, size_t *value_sz);
void ssl_message_subject_public_key_algorithm_get0(const struct ssl_message *msg, char **value, size_t *value_sz);
void ssl_message_ssl_algorithm_identifier_get0(const struct ssl_message *msg, char **value, size_t *value_sz);
void ssl_message_ssl_signature_algorithm_id_get0(const struct ssl_message *msg, char **value, size_t *value_sz);

/**
 * @brief loop reading all domain of subject_alter.
 * 
*/

void ssl_message_subject_alter_next(const struct ssl_message *msg, char **value, size_t *value_sz);
/**
 * @retval succeed( >= 0) failed(-1)
*/
int ssl_message_reset_subject_alter_iter(struct ssl_message *msg);

struct ssl_rdn_sequence;
struct ssl_rdn_sequence *ssl_message_issuer_rdn_sequence_get0(const struct ssl_message *msg);
struct ssl_rdn_sequence *ssl_message_subject_rdn_sequence_get0(const struct ssl_message *msg);

void ssl_rdn_sequence_common_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz);
void ssl_rdn_sequence_country_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz);
void ssl_rdn_sequence_locality_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz);
void ssl_rdn_sequence_postal_code_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz);
void ssl_rdn_sequence_organization_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz);
void ssl_rdn_sequence_street_address_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz);
void ssl_rdn_sequence_state_or_province_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz);
void ssl_rdn_sequence_organizational_unit_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz);
void ssl_rdn_sequence_list_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz);

// SSL_PROTECTED_PAYLOAD
void ssl_message_protected_payload_get0(const struct ssl_message *msg, char **value, size_t *value_sz);

#ifdef __cplusplus
}
#endif