Mercurial > pidgin.yaz
diff libpurple/certificate.c @ 19329:e93db0c87b26
- Add purple_certificate_display_x509
author | William Ehlhardt <williamehlhardt@gmail.com> |
---|---|
date | Sat, 18 Aug 2007 05:54:49 +0000 |
parents | c28e1afe691b |
children | b65a23799dc2 |
line wrap: on
line diff
--- a/libpurple/certificate.c Sat Aug 18 04:13:16 2007 +0000 +++ b/libpurple/certificate.c Sat Aug 18 05:54:49 2007 +0000 @@ -1719,3 +1719,64 @@ pool->name); return TRUE; } + +/****************************************************************************/ +/* Scheme-specific functions */ +/****************************************************************************/ + +void +purple_certificate_display_x509(PurpleCertificate *crt) +{ + gchar *sha_asc; + GByteArray *sha_bin; + gchar *cn; + time_t activation, expiration; + /* Length of these buffers is dictated by 'man ctime_r' */ + gchar activ_str[26], expir_str[26]; + gchar *title, *primary, *secondary; + + /* Pull out the SHA1 checksum */ + sha_bin = purple_certificate_get_fingerprint_sha1(crt); + /* Now decode it for display */ + sha_asc = purple_base16_encode_chunked(sha_bin->data, + sha_bin->len); + + /* Get the cert Common Name */ + /* TODO: Will break on CA certs */ + cn = purple_certificate_get_subject_name(crt); + + /* Get the certificate times */ + /* TODO: Check the times against localtime */ + /* TODO: errorcheck? */ + g_assert(purple_certificate_get_times(crt, &activation, &expiration)); + ctime_r(&activation, activ_str); + ctime_r(&expiration, expir_str); + + /* Make messages */ + title = g_strdup_printf(_("Certificate: %s"), cn); + primary = NULL; + secondary = g_strdup_printf(_("Common name: %s\n\n" + "Fingerprint (SHA1): %s\n\n" + "Activation date: %s\n" + "Expiration date: %s\n"), + cn, sha_asc, activ_str, expir_str); + + /* Make a semi-pretty display */ + purple_notify_info( + NULL, /* TODO: Find what the handle ought to be */ + title, + primary, + secondary); + + /* Cleanup */ + g_free(cn); + g_free(title); + g_free(primary); + g_free(secondary); + g_free(sha_asc); + g_byte_array_free(sha_bin, TRUE); +} + + + +