OpenSSL/Engine architecture

[1]

To print a list of engines:

  ENGINE *e;
  int nengines = 0;

  ENGINE_load_builtin_engines ();

  for (e = ENGINE_get_first ()  ;  e != NULL  ;  e = ENGINE_get_next (e))
    {
      printf ("engine: %s\n", ENGINE_get_name (e));
      nengines++;
    }

  printf ("%d engines\n", nengines);