src/vsl_util.c File Reference

Utility functions for the security layer. More...

#include "vsl_api.h"
#include "vsl_util.h"
#include "vsl.h"
#include "../poly1305aes/aes.h"
#include "../poly1305aes/poly1305aes.h"
#include <openssl/md5.h>
#include <openssl/sha.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

Go to the source code of this file.

Functions

void aes_ctr (unsigned char *ctr, const unsigned char *key, unsigned char *buf, const size_t len)
void ctr_inc (unsigned char *ctr)
int gen_key (unsigned char *key)
uint64_t htonll (uint64_t val)
void init_keys_c (vsl_sock *sock, const unsigned char *key)
void init_keys_s (vsl_sock *sock, const unsigned char *key)
bool is_blocking (vsl_sock *socket)
void md5 (const unsigned char *s1, int l1, const unsigned char *s2, int l2, unsigned char *hash)
uint64_t ntohll (uint64_t val)
unsigned char * read_objs (unsigned char *src, size_t max,...)
void set_blocking (vsl_sock *socket, bool mode)
void sha256 (const unsigned char *s1, int l1, const unsigned char *s2, int l2, unsigned char *hash)
int transfer (vsl_sock *sock, transmit_fn fn, unsigned char *buf, size_t min, size_t len)
unsigned char * write_objs (size_t *total,...)
void xor16 (unsigned char *b1, unsigned char *b2)


Detailed Description

Utility functions for the security layer.

Author:
Nikolaus Rath

Definition in file vsl_util.c.


Function Documentation

void aes_ctr ( unsigned char *  ctr,
const unsigned char *  key,
unsigned char *  buf,
const size_t  len 
)

Encrypts data in AES CTR mode. The counter is modified in place. The first 8 bytes of the counter must contain the nonce and the last 8 bytes should be initialised to zero.

Note that the function cannot be called multiple times without reinitalizing the counter before each invocation.

Parameters:
ctr counter
[in] key encryption key, length VSL_ENC_KEYLEN
buf buffer to encrypt
[in] len length of buffer

Definition at line 344 of file vsl_util.c.

void ctr_inc ( unsigned char *  ctr  )  [inline]

Increase the counter by one. Uses only the last 8 bytes, aborts in case of an overflow. Works in Little Endian.

Parameters:
ctr counter to increase

Definition at line 377 of file vsl_util.c.

int gen_key ( unsigned char *  key  ) 

Generate a random shared secret of length VSL_KEYLEN

Parameters:
[out] key generated key
Returns:
  • 0 on success

Definition at line 33 of file vsl_util.c.

uint64_t htonll ( uint64_t  val  )  [inline]

Convert uint64 from host byte order to network byte order.

Parameters:
[in] val value to convert
Returns:
val in network byte order

Definition at line 294 of file vsl_util.c.

void init_keys_c ( vsl_sock sock,
const unsigned char *  key 
)

Initialize session keys (client mode) from a shared secret.

Parameters:
[in] sock VSL socket
[in] key shared secret to generate keys from

Definition at line 63 of file vsl_util.c.

void init_keys_s ( vsl_sock sock,
const unsigned char *  key 
)

Initialize session keys (server mode) from a shared secret.

Parameters:
[in] sock VSL socket
[in] key shared secret to generate keys from

Definition at line 87 of file vsl_util.c.

bool is_blocking ( vsl_sock socket  ) 

Check whether the underlying vfer fd is blocking

Parameters:
[in] socket VSL socket

Definition at line 144 of file vsl_util.c.

void md5 ( const unsigned char *  s1,
int  l1,
const unsigned char *  s2,
int  l2,
unsigned char *  hash 
)

Generate a 16 byte MD5 hash of two char arrays

Parameters:
[in] s1 first char array
[in] l1 length of first array
[in] s2 second char array
[in] l2 length of second array
[out] hash resulting hash (length 16 bytes)

Definition at line 112 of file vsl_util.c.

uint64_t ntohll ( uint64_t  val  )  [inline]

Convert uint64 from host network order to host byte order.

Parameters:
[in] val value to convert
Returns:
val in network byte order

Definition at line 316 of file vsl_util.c.

unsigned char* read_objs ( unsigned char *  src,
size_t  max,
  ... 
)

Decomposes a buffer into a number of separate variables.

The variables have to be given as pairs of a void pointer to the variable and an size_t value describing the length of the variable in bytes. The argument list has to be terminated with a NULL pointer. For each pair void* dat, size_t len, the next len bytes of src are copied into dat. After the last object was copied, a pointer to the remainder of src is returned.

Example:

 remainder = read_objs(src,
                       (void*) &data1, sizeof(data1),
                       (void*) &data2, sizeof(data2));

Parameters:
[in] src source buffer
[in] max length of source buffer
[out] ... list of alternating void* and size_t arguments, terminated by NULL.
Returns:
  • pointer into to uncopied remainder of src
  • NULL the length of the varables was bigger than the source buffer

Definition at line 259 of file vsl_util.c.

void set_blocking ( vsl_sock socket,
bool  mode 
)

Sets the underlying vfer fd to blocking or nonblocking

Parameters:
[in] socket VSL socket
[in] mode whether to block or not

Definition at line 161 of file vsl_util.c.

void sha256 ( const unsigned char *  s1,
int  l1,
const unsigned char *  s2,
int  l2,
unsigned char *  hash 
)

Generate a 32 byte SHA256 hash of two char arrays

Parameters:
[in] s1 first char array
[in] l1 length of first array
[in] s2 second char array
[in] l2 length of second array
[out] hash resulting hash (length 32 bytes)

Definition at line 129 of file vsl_util.c.

int transfer ( vsl_sock sock,
transmit_fn  fn,
unsigned char *  buf,
size_t  min,
size_t  len 
)

Transfer's exactly len (streaming socket) or between min and len (datagram socket) bytes using the specified function (either vfer_send() or vfer_recv()).

Parameters:
[in] sock socket to use
[in] fn function to use
buf buffer to transmit
[in] min minimum amount to process for datagram sockets
[in] len length of buf
Returns:
  • nr of bytes processed on success

Definition at line 429 of file vsl_util.c.

unsigned char* write_objs ( size_t *  total,
  ... 
)

Allocates a buffer and writes a sequence of variables into it. The variables have to be given as pairs of a void pointer to the variable and an size_t value describing the length of the variable in bytes. The argument list has to be terminated with a NULL pointer. The total length of the allocated buffer is written into total.

Example:

 buf = write_objs(len,
                  (void*) &data1, sizeof(data1),
                  (void*) &data2, sizeof(data2));
This example allocates a buffer of length sizeof(data1) + sizeof(data2), and writes the objects data1 and data2 into it.

Parameters:
[out] total total allocated length
[in] ... list of alternating void* and size_t arguments, terminated by NULL.
Returns:
  • pointer to the allocated buffer
  • NULL if allocation failed

Definition at line 198 of file vsl_util.c.

void xor16 ( unsigned char *  b1,
unsigned char *  b2 
) [inline]

XOR 2 16 byte blocks. Argument 1 is modified in place.

Parameters:
b1 first block
[in] b2 second block
Todo:
Make this 16 byte xor faster

Definition at line 398 of file vsl_util.c.


Generated on Tue Aug 8 16:07:22 2006 for VFER by  doxygen 1.4.7