diff options
Diffstat (limited to 'src/ssl_export.cpp')
| -rw-r--r-- | src/ssl_export.cpp | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/src/ssl_export.cpp b/src/ssl_export.cpp new file mode 100644 index 0000000..a87bf2e --- /dev/null +++ b/src/ssl_export.cpp @@ -0,0 +1,255 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "ssl_internal.h" +#include "ssl_decoder.h" + +enum ssl_message_type ssl_message_type_get(const struct ssl_message *msg) +{ + return ((msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC) ? SSL_MSG_MAX : msg->type); +} + +// SSL_MESSAGE_CLIENT_HELLO +int32_t ssl_message_esni_is_true(const struct ssl_message *msg) +{ + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CLIENT_HELLO) + { + return -1; + } + + return ((msg->chello->esni==NULL) ? 1 : 0); +} + +int32_t ssl_message_ech_is_true(const struct ssl_message *msg) +{ + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CLIENT_HELLO) + { + return -1; + } + + return ((msg->chello->ech==NULL) ? 1 : 0); +} + +void ssl_message_sni_get0(const struct ssl_message *msg, char **value, size_t *value_sz) +{ + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CLIENT_HELLO) + { + return; + } + + if(msg->chello->sni==NULL) + { + return; + } + + *value=(char *)msg->chello->sni->value; + *value_sz=msg->chello->sni->lv_u32; +} + +const char *ssl_message_readable_version_get0(const struct ssl_message *msg) +{ + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC) + { + return NULL; + } + + uint16_t version=0; + switch(msg->type) + { + case SSL_MESSAGE_CLIENT_HELLO: + if(msg->chello==NULL) + { + return NULL; + } + version=msg->chello->version; + break; + case SSL_MESSAGE_SERVER_HELLO: + if(msg->shello==NULL) + { + return NULL; + } + version=msg->shello->version; + break; + default: + return NULL; + } + + switch(version) + { + case SSL_DECODER_VERSION_SSL_V2_0: + return "SSLv2.0"; + case SSL_DECODER_VERSION_SSL_V3_0: + return "SSLv3.0"; + case SSL_DECODER_VERSION_TLS_V1_0: + return "TLSv1.0"; + case SSL_DECODER_VERSION_TLS_V1_1: + return "TLSv1.1"; + case SSL_DECODER_VERSION_TLS_V1_2: + return "TLSv1.2"; + case SSL_DECODER_VERSION_TLS_V1_3: + return "TLSv1.3"; + case SSL_DECODER_VERSION_TLCP_V1_0: + return "TLCPv1.0"; + default: + break; + } + + return NULL; +} + +void ssl_message_ja3hash_get0(const struct ssl_message *msg, char **value, size_t *value_sz) +{ + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CLIENT_HELLO) + { + *value=NULL; + *value_sz=0; + return ; + } + + if(msg->chello->ja3.value==NULL || msg->chello->ja3.lv_u32==0) + { + *value=NULL; + *value_sz=0; + return ; + } + + *value=(char *)msg->chello->ja3.value; + *value_sz=msg->chello->ja3.lv_u32; +} + +// SSL_MESSAGE_SERVER_HELLO +void ssl_message_ja3shash_get0(const struct ssl_message *msg, char **value, size_t *value_sz) +{ + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_SERVER_HELLO) + { + *value=NULL; + *value_sz=0; + return; + } + + if(msg->shello->ja3s.value==NULL || msg->shello->ja3s.lv_u32==0) + { + *value=NULL; + *value_sz=0; + return; + } + + *value=(char *)msg->shello->ja3s.value; + *value_sz=msg->shello->ja3s.lv_u32; +} + +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) +{ + return 0; +} + +enum ssl_certificate_type ssl_certificate_type_get(const struct ssl_message *msg) +{ + return ((msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) ? msg->certificate->type : SSL_CERTIFICATE_TYPE_UNKNOWN); +} + +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) +{ + +} + +void ssl_message_subject_alter_next(const struct ssl_message *msg, char **value, size_t *value_sz) +{ + +} + +int ssl_message_reset_subject_alter_iter(struct ssl_message *msg) +{ + return 0; +} + +struct ssl_rdn_sequence *ssl_message_issuer_rdn_sequence_get0(const struct ssl_message *msg) +{ + return ((msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) ? &(msg->certificate->issuer) : NULL); +} + +struct ssl_rdn_sequence *ssl_message_subject_rdn_sequence_get0(const struct ssl_message *msg) +{ + return ((msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) ? &(msg->certificate->subject) : NULL); +} + +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) +{ + +} + +void ssl_message_protected_payload_get0(const struct ssl_message *msg, char **value, size_t *value_sz) +{ + +}
\ No newline at end of file |
