diff options
Diffstat (limited to 'src/ssl_export.cpp')
| -rw-r--r-- | src/ssl_export.cpp | 158 |
1 files changed, 144 insertions, 14 deletions
diff --git a/src/ssl_export.cpp b/src/ssl_export.cpp index a87bf2e..248ff1b 100644 --- a/src/ssl_export.cpp +++ b/src/ssl_export.cpp @@ -18,7 +18,7 @@ int32_t ssl_message_esni_is_true(const struct ssl_message *msg) return -1; } - return ((msg->chello->esni==NULL) ? 1 : 0); + return ((msg->chello->esni==NULL) ? 0 : 1); } int32_t ssl_message_ech_is_true(const struct ssl_message *msg) @@ -28,7 +28,7 @@ int32_t ssl_message_ech_is_true(const struct ssl_message *msg) return -1; } - return ((msg->chello->ech==NULL) ? 1 : 0); + return ((msg->chello->ech==NULL) ? 0 : 1); } void ssl_message_sni_get0(const struct ssl_message *msg, char **value, size_t *value_sz) @@ -71,6 +71,26 @@ const char *ssl_message_readable_version_get0(const struct ssl_message *msg) } version=msg->shello->version; break; + case SSL_MESSAGE_CERTIFICATE: + if(msg->certificate==NULL) + { + return NULL; + } + + switch(msg->certificate->version) + { + case 0: + return "v1"; + case 1: + return "v2"; + case 2: + return "v3"; + case 3: + return "v4"; + default: + break; + } + return NULL; default: return NULL; } @@ -78,19 +98,19 @@ const char *ssl_message_readable_version_get0(const struct ssl_message *msg) switch(version) { case SSL_DECODER_VERSION_SSL_V2_0: - return "SSLv2.0"; + return "SSL2.0"; case SSL_DECODER_VERSION_SSL_V3_0: - return "SSLv3.0"; + return "SSL3.0"; case SSL_DECODER_VERSION_TLS_V1_0: - return "TLSv1.0"; + return "TLS1.0"; case SSL_DECODER_VERSION_TLS_V1_1: - return "TLSv1.1"; + return "TLS1.1"; case SSL_DECODER_VERSION_TLS_V1_2: - return "TLSv1.2"; + return "TLS1.2"; case SSL_DECODER_VERSION_TLS_V1_3: - return "TLSv1.3"; + return "TLS1.3"; case SSL_DECODER_VERSION_TLCP_V1_0: - return "TLCPv1.0"; + return "TLCP1.0"; default: break; } @@ -151,102 +171,212 @@ int ssl_message_reset_extensions_iter(struct ssl_message *msg) 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); + return ((msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) ? SSL_CERTIFICATE_TYPE_UNKNOWN : msg->certificate->type); } void ssl_message_validity_before_get0(const struct ssl_message *msg, char **value, size_t *value_sz) { + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) + { + return; + } + *value=(char *)msg->certificate->validity.before; + *value_sz=strlen(msg->certificate->validity.before); } void ssl_message_validity_after_get0(const struct ssl_message *msg, char **value, size_t *value_sz) { + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) + { + return; + } + *value=(char *)msg->certificate->validity.after; + *value_sz=strlen(msg->certificate->validity.after); } void ssl_message_issuer_serial_number_get0(const struct ssl_message *msg, char **value, size_t *value_sz) { + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) + { + return; + } + *value=(char *)msg->certificate->serial.value; + *value_sz=msg->certificate->serial.len; } void ssl_message_subject_public_key_algorithm_get0(const struct ssl_message *msg, char **value, size_t *value_sz) { + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) + { + return; + } + *value=(char *)msg->certificate->subject_key.value; + *value_sz=msg->certificate->subject_key.len; } -void ssl_message_ssl_algorithm_identifier_get0(const struct ssl_message *msg, char **value, size_t *value_sz) +void ssl_message_algorithm_identifier_get0(const struct ssl_message *msg, char **value, size_t *value_sz) { + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) + { + return; + } + *value=(char *)msg->certificate->algorithm_identifier.value; + *value_sz=msg->certificate->algorithm_identifier.len; } -void ssl_message_ssl_signature_algorithm_id_get0(const struct ssl_message *msg, char **value, size_t *value_sz) +void ssl_message_signature_algorithm_id_get0(const struct ssl_message *msg, char **value, size_t *value_sz) { + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) + { + return; + } + *value=(char *)msg->certificate->signature_algorithm.value; + *value_sz=msg->certificate->signature_algorithm.len; } void ssl_message_subject_alter_next(const struct ssl_message *msg, char **value, size_t *value_sz) { + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) + { + return; + } + if(msg->certificate->subject_alter.num==0 || msg->certificate->subject_alter.offset>=msg->certificate->subject_alter.num) + { + *value=NULL; + *value_sz=0; + return; + } + + *value=(char *)msg->certificate->subject_alter.name[msg->certificate->subject_alter.offset]; + *value_sz=strlen(msg->certificate->subject_alter.name[msg->certificate->subject_alter.offset]); + msg->certificate->subject_alter.offset++; } int ssl_message_reset_subject_alter_iter(struct ssl_message *msg) { + if(msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) + { + return -1; + } + + msg->certificate->subject_alter.offset=0; 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); + return ((msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) ? NULL : &(msg->certificate->issuer)); } 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); + return ((msg==NULL || msg->magic!=SSL_MESSAGE_MAGIC || msg->type!=SSL_MESSAGE_CERTIFICATE) ? NULL : &(msg->certificate->subject)); } void ssl_rdn_sequence_common_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz) { + if(rdn==NULL) + { + return; + } + *value_sz=strlen(rdn->common); + *value=(((*value_sz)>0) ? rdn->common : NULL); } void ssl_rdn_sequence_country_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz) { + if(rdn==NULL) + { + return; + } + *value_sz=strlen(rdn->country); + *value=(((*value_sz)>0) ? rdn->country : NULL); } void ssl_rdn_sequence_locality_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz) { + if(rdn==NULL) + { + return; + } + *value_sz=strlen(rdn->locality); + *value=(((*value_sz)>0) ? rdn->locality : NULL); } void ssl_rdn_sequence_postal_code_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz) { + if(rdn==NULL) + { + return; + } + *value_sz=strlen(rdn->postal_code); + *value=(((*value_sz)>0) ? rdn->postal_code : NULL); } void ssl_rdn_sequence_organization_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz) { + if(rdn==NULL) + { + return; + } + *value_sz=strlen(rdn->organization); + *value=(((*value_sz)>0) ? rdn->organization : NULL); } void ssl_rdn_sequence_street_address_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz) { + if(rdn==NULL) + { + return; + } + *value_sz=strlen(rdn->street_address); + *value=(((*value_sz)>0) ? rdn->street_address : NULL); } void ssl_rdn_sequence_state_or_province_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz) { + if(rdn==NULL) + { + return; + } + *value_sz=strlen(rdn->state_or_Province); + *value=(((*value_sz)>0) ? rdn->state_or_Province : NULL); } void ssl_rdn_sequence_organizational_unit_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz) { + if(rdn==NULL) + { + return; + } + *value_sz=strlen(rdn->organizational_unit); + *value=(((*value_sz)>0) ? rdn->organizational_unit : NULL); } void ssl_rdn_sequence_list_get0(struct ssl_rdn_sequence *rdn, char **value, size_t *value_sz) { + if(rdn==NULL) + { + return; + } + *value_sz=strlen(rdn->rdn_sequence_list); + *value=(((*value_sz)>0) ? rdn->rdn_sequence_list : NULL); } void ssl_message_protected_payload_get0(const struct ssl_message *msg, char **value, size_t *value_sz) |
