void __certificate_properties_fill_signatureValue (GtkTreeStore *store, GtkTreeIter *parent, gnutls_x509_crt_t *certificate) { GtkTreeIter i; gint result; gchar *buffer = NULL; gsize buffer_size = 0; gchar *hex_buffer = NULL; gtk_tree_store_append(store, &i, parent); result = gnutls_x509_crt_get_signature(*certificate, 0, &buffer_size); if (result != GNUTLS_E_SHORT_MEMORY_BUFFER) { fprintf(stderr, "Error: (%s,%d): %s\n", __FILE__, __LINE__, gnutls_strerror(result)); return; } buffer = g_new0 (gchar, buffer_size); result = gnutls_x509_crt_get_signature(*certificate, buffer, &buffer_size); if (result < 0) { fprintf(stderr, "Error: (%s,%d): %s\n", __FILE__, __LINE__, gnutls_strerror(result)); return; } hex_buffer = __certificate_properties_dump_raw_data((guchar *) buffer, buffer_size); gtk_tree_store_set(store, &i, CERTIFICATE_PROPERTIES_COL_NAME, _("Signature"), CERTIFICATE_PROPERTIES_COL_VALUE, hex_buffer, -1); g_free(hex_buffer); }
uschar * tls_cert_signature(void * cert, uschar * mod) { uschar * cp1 = NULL; uschar * cp2; uschar * cp3; size_t len = 0; int ret; if ((ret = gnutls_x509_crt_get_signature((gnutls_x509_crt_t)cert, cp1, &len)) != GNUTLS_E_SHORT_MEMORY_BUFFER) return g_err("gs0", __FUNCTION__, ret); cp1 = store_get(len*4+1); if (gnutls_x509_crt_get_signature((gnutls_x509_crt_t)cert, cp1, &len) != 0) return g_err("gs1", __FUNCTION__, ret); for(cp3 = cp2 = cp1+len; cp1 < cp2; cp3 += 3, cp1++) sprintf(cp3, "%.2x ", *cp1); cp3[-1]= '\0'; return cp2; }