supplemental data handshake message

Carolin Latze carolin.latze at unifr.ch
Fri Apr 30 16:06:40 CEST 2010


Hi everybody,

since there seems to be no documentation about how to implement a new
supplemental data handshake message (except for some comments in
lib/gnutls_supplemental.c), I have to come up with a new question:

According to lib/gnutls_supplemental.c, an extension that wants to send
supplemental data has to set the do_send_supplemental flag. Furthermore
the party expecting supplemental data has to set do_recv_supplemental.
For my little helloworld extension, I did that in lib/ext_helloworld.c
in the extension's send and recv method. That seems to work, since the
debug out tells me, gnutls expects supplemental data. Furthermore, I add
those two methods to ext_helloworld.c:

int _gnutls_helloworld_supp_recv_params(gnutls_session_t session,const
opaque *data,size_t _data_size)
{
        uint8_t len;
        ssize_t data_size = _data_size;
        unsigned char *msg;

        if (data_size > 0)
        {
          len = data[0];
          DECR_LEN (data_size, len);
          msg=(unsigned char*)malloc(len*sizeof(unsigned char));
          memcpy(msg,&data[1],len);
          msg[len]='\0';
          printf("supp data: %s\n",msg);
        }

        return 0;

}

int _gnutls_helloworld_supp_send_params(gnutls_session_t
session,gnutls_buffer *buf)
{

        unsigned char *msg = "supp hello";
        int len = strlen(msg);

        _gnutls_buffer_init(buf);
        _gnutls_buffer_append(buf,msg,(uint8_t) len);

        return len;

}

I am sure, I missed something since my GnuTLS client crashes:

EXT[0x8c30378]: Found extension 'SAFE_RENEGOTIATION/65281'
EXT[0x8c30378]: Found extension 'HELLOWORLD/40'
received msg: Hello little one
Safe renegotiation succeeded.
EXT[0x8c30378]: Expecting supplemental data
REC[0x8c30378]: Expected Packet[1] Handshake(22) with length: 1
REC[0x8c30378]: Received Packet[1] Handshake(22) with length: 7
REC[0x8c30378]: Decrypted Packet[1] Handshake(22) with length: 7
HSK[0x8c30378]: SUPPLEMENTAL was received [7 bytes]
ASSERT: gnutls_supplemental.c:183
ASSERT: gnutls_handshake.c:2650
ASSERT: gnutls_handshake.c:2783
ERROR: Handshake failed

Why does he expect a message with length 1? I suspect, that is the
problem here, right? Any ideas or hints?

Carolin





More information about the Gnutls-help mailing list