Skip to content

Commit

Permalink
dtls: Add uint48 handling functions.
Browse files Browse the repository at this point in the history
  • Loading branch information
jothan committed Oct 11, 2010
1 parent 7795df3 commit 0359c36
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 0 deletions.
10 changes: 10 additions & 0 deletions lib/gnutls_dtls.c
Expand Up @@ -192,3 +192,13 @@ _gnutls_dtls_clear_outgoing_buffer (gnutls_session_t session)
session->internals.dtls.retransmit_end = &session->internals.dtls.retransmit;
session->internals.dtls.retransmit = NULL;
}

void
_gnutls_dtls_split_sequence (const uint64 *input,
uint16_t *epoch, uint64_t *sequence)
{
*epoch = _gnutls_read_uint16 (UINT64DATA(*input));
*sequence = _gnutls_read_uint48 (&UINT64DATA(*input)[2]);

fprintf(stderr, "%04x:%012lx\n", *epoch, *sequence);
}
1 change: 1 addition & 0 deletions lib/gnutls_dtls.h
Expand Up @@ -35,5 +35,6 @@ int _gnutls_dtls_handshake_enqueue(gnutls_session_t session,

int _gnutls_dtls_transmit(gnutls_session_t session);
void _gnutls_dtls_clear_outgoing_buffer(gnutls_session_t session);
void _gnutls_dtls_split_sequence(const uint64 *input, uint16_t *epoch, uint64_t *sequence);

#endif
30 changes: 30 additions & 0 deletions lib/gnutls_num.c
Expand Up @@ -114,6 +114,20 @@ _gnutls_uint32touint24 (uint32_t num)

}

uint64_t
_gnutls_uint48touint64 (uint48 num)
{
uint64_t ret=0;

((uint8_t *) & ret)[2] = num.i[0];
((uint8_t *) & ret)[3] = num.i[1];
((uint8_t *) & ret)[4] = num.i[2];
((uint8_t *) & ret)[5] = num.i[3];
((uint8_t *) & ret)[6] = num.i[4];
((uint8_t *) & ret)[7] = num.i[5];
return ret;
}

/* data should be at least 3 bytes */
uint32_t
_gnutls_read_uint24 (const opaque * data)
Expand Down Expand Up @@ -222,3 +236,19 @@ _gnutls_uint64touint32 (const uint64 * num)

return ret;
}

uint64_t
_gnutls_read_uint48 (const opaque * data)
{
uint64_t ret;
uint48 num;

memcpy(num.i, data, 6);

ret = _gnutls_uint48touint64 (num);
#ifndef WORDS_BIGENDIAN
ret = bswap_64 (ret);
#endif

return ret;
}
2 changes: 2 additions & 0 deletions lib/gnutls_num.h
Expand Up @@ -32,6 +32,8 @@

uint32_t _gnutls_uint24touint32 (uint24 num);
uint24 _gnutls_uint32touint24 (uint32_t num);
uint64_t _gnutls_uint48touint64 (uint48 num);
uint64_t _gnutls_read_uint48 (const opaque * data);
uint32_t _gnutls_read_uint32 (const opaque * data);
uint16_t _gnutls_read_uint16 (const opaque * data);
uint32_t _gnutls_conv_uint32 (uint32_t data);
Expand Down

0 comments on commit 0359c36

Please sign in to comment.