# HG changeset patch # User Elliott Sales de Andrade # Date 1324605136 0 # Node ID 105202d802db93d58eac0f4f3fb579dce038d949 # Parent 7ceb5ca4b323c3621666fd0a29194c9349ec1e00 Add NSS support for getting DER data. diff -r 7ceb5ca4b323 -r 105202d802db libpurple/plugins/ssl/ssl-nss.c --- a/libpurple/plugins/ssl/ssl-nss.c Fri Dec 23 01:09:13 2011 +0000 +++ b/libpurple/plugins/ssl/ssl-nss.c Fri Dec 23 01:52:16 2011 +0000 @@ -930,6 +930,29 @@ return TRUE; } +static GByteArray * +x509_get_der_data(PurpleCertificate *crt) +{ + CERTCertificate *crt_dat; + SECItem *dercrt; + GByteArray *data; + + crt_dat = X509_NSS_DATA(crt); + g_return_val_if_fail(crt_dat, NULL); + + dercrt = SEC_ASN1EncodeItem(NULL, NULL, crt_dat, + SEC_ASN1_GET(SEC_SignedCertificateTemplate)); + g_return_val_if_fail(dercrt != NULL, FALSE); + + data = g_byte_array_sized_new(dercrt->len); + memcpy(data->data, dercrt->data, dercrt->len); + data->len = dercrt->len; + + SECITEM_FreeItem(dercrt, PR_TRUE); + + return data; +} + static PurpleCertificateScheme x509_nss = { "x509", /* Scheme name */ N_("X.509 Certificates"), /* User-visible scheme name */ @@ -945,9 +968,9 @@ x509_check_name, /* Check subject name */ x509_times, /* Activation/Expiration time */ x509_importcerts_from_file, /* Multiple certificate import function */ + x509_get_der_data, /* Binary DER data */ NULL, - NULL, NULL };