[gnutls-dev] External signing API

Simon Josefsson simon at josefsson.org
Fri Aug 10 15:52:28 CEST 2007

"Alon Bar-Lev" <alon.barlev at gmail.com> writes:

> Hi!
> You need a way get the userdata (gnutls_sign_callback_get).

Hi!  The userdata is passed to the callback, see the prototype.  Do you
think another function is needed anyway?

> I guess integrating between certificate and private key to a single
> object will take time... But it will be the simplest solution as they
> are the same entity.

Yeah, I think the callback is in the best position to select the best
key, by looking at the certificate.  Anyway, I don't see how GnuTLS
could implement that choice easily.

> Please also add something like:
> So that external library/user may define its own set of codes.

Hm, exactly what use do you see for this?  Returning various different
PKCS#11 errors?  That makes sense...

However, the return code from the signing callback influence the TLS
handshake logic, some return codes leads to disconnect, some don't
(although I'm having a hard time understanding how the state machine
would recover).  See gnutls_error_is_fatal.  Looking at that function,
it seems it has the wrong default: if an error code isn't known to
gnutls, it is classified as non-fatal.  That is likely incorrect, the
internal logic needs to understand how to recover from non-fatal error
cases, and will thus need to know about the error code.  I've changed


> Best Regards,
> Alon Bar-Lev.
> On 8/10/07, Simon Josefsson <simon at josefsson.org> wrote:
>> I'm now finally working on integrating the external signing API into the
>> main branch.  Here is what I've came up with API-wise.  The names are
>> intentionally slightly different from any other existing namespace since
>> this is an experimental interface.  Do you need any other parameters?
>>   /* External signing callback.  Experimental. */
>>   typedef int (*gnutls_sign_func) (gnutls_session_t session,
>>                                    void *userdata,
>>                                    gnutls_certificate_type_t cert_type,
>>                                    gnutls_datum_t cert,
>>                                    const gnutls_datum_t hash,
>>                                    gnutls_datum_t * signature);
>>   void gnutls_sign_callback_set (gnutls_session_t session,
>>                                  gnutls_sign_func sign_func,
>>                                  void *userdata);
>> Thanks,
>> Simon
>> _______________________________________________
>> Gnutls-dev mailing list
>> Gnutls-dev at gnupg.org
>> http://lists.gnupg.org/mailman/listinfo/gnutls-dev

More information about the Gnutls-devel mailing list