122 data->
value_len = (value != NULL) ? strlen(value) : 0;
141 unsigned int written;
144 assert(cert != NULL);
145 assert(ssl_d != NULL);
157 assert(written <
sizeof(e->
type));
172 assert(written <
sizeof(e->
version));
240 label =
"TreeviewLabelSubject";
242 if (lwc_intern_string(label, strlen(label),
249 label =
"TreeviewLabelSerial";
251 if (lwc_intern_string(label, strlen(label),
258 label =
"TreeviewLabelType";
260 if (lwc_intern_string(label, strlen(label),
267 label =
"TreeviewLabelValidUntil";
269 if (lwc_intern_string(label, strlen(label),
276 label =
"TreeviewLabelValidFrom";
278 if (lwc_intern_string(label, strlen(label),
285 label =
"TreeviewLabelVersion";
287 if (lwc_intern_string(label, strlen(label),
294 label =
"TreeviewLabelIssuer";
296 if (lwc_intern_string(label, strlen(label),
303 label =
"TreeviewLabelCertificates";
305 if (lwc_intern_string(label, strlen(label),
394 void *core_window_handle,
400 assert(ssl_d != NULL);
407 NSLOG(netsurf, INFO,
"Building certificate viewer");
426 for (cert_loop = ssl_d->
num - 1; cert_loop >= 0; cert_loop--) {
433 NSLOG(netsurf, INFO,
"Built certificate viewer");
446 assert(ssl_d != NULL);
468 NSLOG(netsurf, INFO,
"Finalising ssl certificate viewer");
486 NSLOG(netsurf, INFO,
"Finalised ssl certificate viewer");
493 #include <openssl/ssl.h> 494 #include <openssl/x509v3.h> 503 const ASN1_INTEGER *asn1_num;
511 cert = d2i_X509(NULL, &der, der_length);
517 info->
version = X509_get_version(cert);
520 mem = BIO_new(BIO_s_mem());
521 ASN1_TIME_print(mem, X509_get_notBefore(cert));
522 BIO_get_mem_ptr(mem, &buf);
523 (void) BIO_set_close(mem, BIO_NOCLOSE);
532 mem = BIO_new(BIO_s_mem());
534 X509_get_notAfter(cert));
535 BIO_get_mem_ptr(mem, &buf);
536 (void) BIO_set_close(mem, BIO_NOCLOSE);
540 min(
sizeof(info->
not_after) - 1, (
unsigned)buf->length));
545 info->
sig_type = X509_get_signature_type(cert);
548 asn1_num = X509_get_serialNumber(cert);
549 if (asn1_num != NULL) {
550 bignum = ASN1_INTEGER_to_BN(asn1_num, NULL);
551 if (bignum != NULL) {
552 char *tmp = BN_bn2hex(bignum);
566 mem = BIO_new(BIO_s_mem());
567 X509_NAME_print_ex(mem,
568 X509_get_issuer_name(cert),
569 0, XN_FLAG_SEP_CPLUS_SPC |
570 XN_FLAG_DN_REV | XN_FLAG_FN_NONE);
571 BIO_get_mem_ptr(mem, &buf);
572 (void) BIO_set_close(mem, BIO_NOCLOSE);
576 min(
sizeof(info->
issuer) - 1, (
unsigned) buf->length));
577 info->
issuer[
min(
sizeof(info->
issuer) - 1, (
unsigned) buf->length)] = 0;
581 mem = BIO_new(BIO_s_mem());
582 X509_NAME_print_ex(mem,
583 X509_get_subject_name(cert),
585 XN_FLAG_SEP_CPLUS_SPC |
588 BIO_get_mem_ptr(mem, &buf);
589 (void) BIO_set_close(mem, BIO_NOCLOSE);
593 min(
sizeof(info->
subject) - 1, (
unsigned)buf->length));
598 info->
cert_type = X509_certificate_type(cert, X509_get_pubkey(cert));
626 for (depth = 0; depth < chain->
depth;depth++) {
637 *cert_info_out = certs;
644 nserror (*cb)(
bool proceed,
void *pw),
652 assert(chain != NULL);
681 assert(ssl_d != NULL);
683 ssl_d->
cb(
false, ssl_d->
cbpw);
692 assert(ssl_d != NULL);
696 ssl_d->
cb(
true, ssl_d->
cbpw);
709 assert(ssl_d != NULL &&
710 "sslcert_viewer_redraw() given bad session data");
Whether field is default.
nserror sslcert_viewer_create_session_data(struct nsurl *url, nserror(*cb)(bool proceed, void *pw), void *cbpw, const struct cert_chain *chain, struct sslcert_session_data **ssl_d)
Create ssl certificate viewer session data.
struct treeview_field_desc fields[SSLCERT_V_N_FIELDS]
static nserror sslcert_viewer_set_treeview_field_data(struct sslcert_entry *e, const struct ssl_cert_info *cert, struct sslcert_session_data *ssl_d)
Set a sslcert viewer entry's data from the certificate.
size_t value_len
Field value length (bytes)
static void sslcert_cleanup_session(struct sslcert_session_data *ssl_d)
Free SSL certificate session data.
response_cb cb
Cert accept/reject callback.
const char * value
Field value.
browser_mouse_state
Mouse state.
Functionality is not implemented.
Localised message support (interface).
unsigned long num
Number of certificates in chain.
lwc_string * field
Field name.
long version
Certificate version.
nserror sslcert_viewer_accept(struct sslcert_session_data *ssl_d)
Accept a certificate chain.
size_t depth
the number of certificates in the chain
static void sslcert_viewer_delete_entry(struct sslcert_entry *e)
Delete ssl certificate viewer entries.
High-level resource cache interface.
static nserror sslcert_viewer_tree_node_entry_cb(struct treeview_node_msg msg, void *data)
node entry callback
void sslcert_viewer_redraw(struct sslcert_session_data *ssl_d, int x, int y, struct rect *clip, const struct redraw_context *ctx)
Redraw the ssl certificate viewer.
bool sslcert_viewer_keypress(struct sslcert_session_data *ssl_d, uint32_t key)
Key press handling.
nserror sslcert_viewer_init(struct core_window_callback_table *cw_t, void *core_window_handle, struct sslcert_session_data *ssl_d)
Initialise a ssl certificate viewer from session data.
nserror
Enumeration of error codes.
static nserror der_to_certinfo(uint8_t *der, size_t der_length, struct ssl_cert_info *info)
void treeview_mouse_action(treeview *tree, browser_mouse_state mouse, int x, int y)
Handles all kinds of mouse action.
enum treeview_field_flags flags
Flags for field.
#define NSLOG(catname, level, logmsg, args...)
uint8_t * der
data in Distinguished Encoding Rules (DER) format
nserror(* response_cb)(bool proceed, void *pw)
char not_after[32]
Valid to date.
int sig_type
Signature type.
ssl_cert_err err
Whatever is wrong with this certificate.
Unknown error - DO NOT USE.
struct treeview_callback_table sslv_tree_cb_t
ssl certificate treeview callbacks
void treeview_redraw(treeview *tree, const int x, const int y, struct rect *clip, const struct redraw_context *ctx)
Redraw a treeview object.
ssl certificate tree entry
bool treeview_keypress(treeview *tree, uint32_t key)
Key press handling for treeviews.
char subject[256]
Subject details.
nserror treeview_fini(void)
Finalise the treeview module (all treeviews must have been destroyed first)
SSL Certificate verification UI interface.
nsurl * url
The url of the certificate.
Treeview handling interface.
struct ssl_cert_info * certs
Certificates.
nserror treeview_init(void)
Prepare treeview module for treeview usage.
nserror treeview_destroy(treeview *tree)
Destroy a treeview object.
nserror sslcert_viewer_fini(struct sslcert_session_data *ssl_d)
Finalise a ssl certificate viewer.
static nserror sslcert_viewer_create_node(struct sslcert_session_data *ssl_d, int n)
Create a treeview node for a certificate.
nserror treeview_create(treeview **tree, const struct treeview_callback_table *callbacks, int n_fields, struct treeview_field_desc fields[], const struct core_window_callback_table *cw_t, struct core_window *cw, treeview_flags flags)
Create a treeview.
void * cbpw
Context passed to callback.
enum treeview_msg msg
The message type.
const char * messages_get(const char *key)
Fast lookup of a message by key from the standard Messages hash.
static nserror convert_chain_to_cert_info(const struct cert_chain *chain, struct ssl_cert_info **cert_info_out)
nserror treeview_create_node_entry(treeview *tree, treeview_node **entry, treeview_node *relation, enum treeview_relationship rel, const struct treeview_field_data fields[], void *data, treeview_node_options_flags flags)
Create an entry node in given treeview.
ssl_cert_err err
Whatever is wrong with this certificate.
lwc_string * field
A treeview field name.
int cert_type
Certificate type.
void urldb_set_cert_permissions(struct nsurl *url, bool permit)
Set certificate verification permissions.
static struct core_window_callback_table cw_t
Declare Core Window Callbacks:
struct treeview_field_data data[SSLCERT_V_N_FIELDS - 1]
ssl_cert_err
ssl certificate error status
static nserror sslcert_viewer_field_builder(enum sslcert_viewer_field field, struct treeview_field_data *data, const char *value, struct sslcert_session_data *ssl_d)
Build a sslcert viewer treeview field from given text.
static nserror sslcert_init_entry_fields(struct sslcert_session_data *ssl_d)
Initialise the treeview entry fields.
char not_before[32]
Valid from date.
ssl certificate information for certificate error message
nsurl * nsurl_ref(nsurl *url)
Increment the reference count to a NetSurf URL object.
treeview * tree
The treeview object.
static nserror sslcert_viewer_tree_node_folder_cb(struct treeview_node_msg msg, void *data)
folder operation callback
size_t der_length
DER length.
Treeview field description.
Callbacks to achieve various core window functionality.
Interface to a number of general purpose functionality.
nserror sslcert_viewer_reject(struct sslcert_session_data *ssl_d)
Reject a certificate chain.
static void sslcert_viewer_free_treeview_field_data(struct sslcert_entry *e)
Free a ssl certificate viewer entry's treeview field data.
char issuer[256]
Issuer details.
Fetching of data from a URL (interface).
ssl certificate verification context.
char serialnum[64]
Serial number.
Whether field name shown.
Client callbacks for events concerning nodes.
nserror(* folder)(struct treeview_node_msg msg, void *data)
sslcert_viewer_field
ssl certificate viewer data fields
static nserror clip(const struct redraw_context *ctx, const struct rect *clip)
Sets a clip rectangle for subsequent plot operations.
void sslcert_viewer_mouse_action(struct sslcert_session_data *ssl_d, browser_mouse_state mouse, int x, int y)
Handles all kinds of mouse action.
struct nsurl nsurl
NetSurf URL object.
struct cert_chain::@62 certs[MAX_CERT_DEPTH]
void nsurl_unref(nsurl *url)
Drop a reference to a NetSurf URL object.
Unified URL information database internal interface.