Function: gnutls-available-p

gnutls-available-p is a function defined in gnutls.c.

Signature

(gnutls-available-p)

Documentation

Return list of capabilities if GnuTLS is available in this instance of Emacs.

...if supported : then...
GnuTLS 3 or higher : the list will contain gnutls3.
GnuTLS MACs : the list will contain macs.
GnuTLS digests : the list will contain digests.
GnuTLS symmetric ciphers: the list will contain ciphers.
GnuTLS AEAD ciphers : the list will contain AEAD-ciphers.
%DUMBFW : the list will contain ClientHello\ Padding.
Any GnuTLS extension with ID up to 100
                        : the list will contain its name.

Probably introduced at or before Emacs version 24.1.

Source Code

// Defined in /usr/src/emacs/src/gnutls.c
{
  Lisp_Object capabilities = Qnil;

#ifdef HAVE_GNUTLS

# ifdef WINDOWSNT
  Lisp_Object found = Fassq (Qgnutls, Vlibrary_cache);
  if (CONSP (found))
    return XCDR (found);

  /* Load the GnuTLS DLL and find exported functions.  The external
     library cache is updated after the capabilities have been
     determined.  */
  if (!init_gnutls_functions ())
    return Qnil;
# endif /* WINDOWSNT */

  capabilities = Fcons (Qgnutls, capabilities);

#  ifdef HAVE_GNUTLS_EXT__DUMBFW
  capabilities = Fcons (QClientHello_Padding, capabilities);
#  endif

# ifdef HAVE_GNUTLS3
  capabilities = Fcons (Qgnutls3, capabilities);
  capabilities = Fcons (Qdigests, capabilities);
  capabilities = Fcons (Qciphers, capabilities);

#  ifdef HAVE_GNUTLS_AEAD
  capabilities = Fcons (QAEAD_ciphers, capabilities);
#  endif

  capabilities = Fcons (Qmacs, capabilities);

#  ifdef HAVE_GNUTLS_EXT_GET_NAME
  for (unsigned int ext=0; ext < 100; ext++)
    {
      const char* name = gnutls_ext_get_name(ext);
      if (name != NULL)
        {
          Lisp_Object cap = intern (name);
          if (NILP (Fmemq (cap, capabilities)))
            capabilities = Fcons (cap, capabilities);
        }
    }
#  endif
# endif	  /* HAVE_GNUTLS3 */

# ifdef WINDOWSNT
  Vlibrary_cache = Fcons (Fcons (Qgnutls, capabilities), Vlibrary_cache);
# endif /* WINDOWSNT */
#endif	/* HAVE_GNUTLS */

  return capabilities;
}