TRACE_ERROR("Sigalg parsing error (not even)", SSL_EV_CONN_SWITCHCTX_CB|SSL_EV_CONN_ERR, conn);
goto abort;
}
+ TRACE_DATA("Sigalg extension value", SSL_EV_CONN_SIGALG_EXT, conn, extension_data, &len);
for (; len > 0; len -= 2) {
hash = *extension_data++; /* hash */
sign = *extension_data++;
{ .mask = SSL_EV_CONN_STAPLING, .name = "sslc_stapling", .desc = "SSL OCSP stapling callback"},
{ .mask = SSL_EV_CONN_SWITCHCTX_CB, .name = "sslc_switchctx_cb", .desc = "SSL switchctx callback"},
{ .mask = SSL_EV_CONN_CHOOSE_SNI_CTX, .name = "sslc_choose_sni_ctx", .desc = "SSL choose sni context"},
+ { .mask = SSL_EV_CONN_SIGALG_EXT, .name = "sslc_sigalg_ext", .desc = "SSL sigalg extension parsing"},
{ }
};
chunk_appendf(&trace_buf, " crt=\"%s\"", sni_ctx->ckch_inst->ckch_store->path);
}
}
+
+ if (mask & SSL_EV_CONN_SIGALG_EXT && src->verbosity > SSL_VERB_ADVANCED) {
+ if (a2 && a3) {
+ const uint16_t *extension_data = a2;
+ size_t extension_len = *((size_t*)a3);
+ int first = 1;
+
+ chunk_appendf(&trace_buf, " value=");
+
+ while (extension_len > 1) {
+ const char *sigalg_name = sigalg2str(ntohs(*extension_data));
+
+ if (sigalg_name) {
+ chunk_appendf(&trace_buf, "%s%s(0x%02X%02X)", first ? "" : ":", sigalg_name,
+ ((uint8_t*)extension_data)[0],
+ ((uint8_t*)extension_data)[1]);
+ } else {
+ chunk_appendf(&trace_buf, "%s0x%02X%02X",
+ first ? "" : ":",
+ ((uint8_t*)extension_data)[0],
+ ((uint8_t*)extension_data)[1]);
+ }
+
+ first = 0;
+
+ extension_len-=sizeof(*extension_data);
+ ++extension_data;
+ }
+ }
+ }
}