Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1999 - 2005 Pekka Riikonen
+ Copyright (C) 1999 - 2006 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
}
new = silc_calloc(1, sizeof(*new));
+ if (!new)
+ return FALSE;
new->name = strdup(hmac->name);
new->len = hmac->len;
/* Allocate the new object */
*new_hmac = silc_calloc(1, sizeof(**new_hmac));
+ if (!(*new_hmac))
+ return FALSE;
if (!hash) {
char *tmp = strdup(name), *hname;
memset(hmac->key, 0, hmac->key_len);
silc_free(hmac->key);
}
- hmac->key = silc_calloc(key_len, sizeof(unsigned char));
+ hmac->key = silc_malloc(key_len);
+ if (!hmac->key)
+ return;
hmac->key_len = key_len;
memcpy(hmac->key, key, key_len);
}
+/* Return HMAC key */
+
+const unsigned char *silc_hmac_get_key(SilcHmac hmac, SilcUInt32 *key_len)
+{
+ if (key_len)
+ *key_len = hmac->key_len;
+ return (const unsigned char *)hmac->key;
+}
+
/* Create the HMAC. This is thee make_hmac function pointer. This
uses the internal key set with silc_hmac_set_key. */
/*
- silchmac.h
+ silchmac.h
Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1999 - 2002 Pekka Riikonen
+ Copyright (C) 1999 - 2006 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*
* This is the interface for HMAC, or the keyed hash values, that are
* used for packet and message authentication. These routines uses
- * already implemented hash functions from the SilcHashAPI. These
+ * already implemented hash functions from the SilcHashAPI. These
* routines were created according to RFC 2104.
*
***/
/****s* silccrypt/SilcHMACAPI/SilcHmac
*
* NAME
- *
+ *
* typedef struct SilcHmacStruct *SilcHmac;
*
* DESCRIPTION
/****s* silccrypt/SilcHMACAPI/SilcHmacObject
*
* NAME
- *
+ *
* typedef struct { ... } SilcHmacObject;
*
* DESCRIPTION
void silc_hmac_set_key(SilcHmac hmac, const unsigned char *key,
SilcUInt32 key_len);
+/****f* silccrypt/SilcHMACAPI/silc_hmac_get_key
+ *
+ * SYNOPSIS
+ *
+ * const unsigned char *
+ * silc_hmac_get_key(SilcHmac hmac, SilcUInt32 *key_len);
+ *
+ * DESCRIPTION
+ *
+ * Returns the key data from the `hmac' set with silc_hamc_set_key.
+ * The caller must not free the returned pointer.
+ *
+ ***/
+const unsigned char *silc_hmac_get_key(SilcHmac hmac, SilcUInt32 *key_len);
+
/****f* silccrypt/SilcHMACAPI/silc_hmac_make
*
* SYNOPSIS
* DESCRIPTION
*
* Computes a MAC from a data buffer indicated by the `data' of the
- * length of `data_len'. The returned MAC is copied into the
+ * length of `data_len'. The returned MAC is copied into the
* `return_hash' pointer which must be at least the size of the
* value silc_hmac_len returns. The returned length is still
* returned to `return_len'.
* SYNOPSIS
*
* void silc_hmac_make_with_key(SilcHmac hmac, unsigned char *data,
- * SilcUInt32 data_len,
+ * SilcUInt32 data_len,
* unsigned char *key, SilcUInt32 key_len,
* unsigned char *return_hash,
* SilcUInt32 *return_len);
*
***/
void silc_hmac_make_with_key(SilcHmac hmac, unsigned char *data,
- SilcUInt32 data_len,
+ SilcUInt32 data_len,
unsigned char *key, SilcUInt32 key_len,
unsigned char *return_hash,
SilcUInt32 *return_len);
*
* SYNOPSIS
*
- * void silc_hmac_make_truncated(SilcHmac hmac,
- * unsigned char *data,
+ * void silc_hmac_make_truncated(SilcHmac hmac,
+ * unsigned char *data,
* SilcUInt32 data_len,
* SilcUInt32 truncated_len,
* unsigned char *return_hash);
* truncations.
*
***/
-void silc_hmac_make_truncated(SilcHmac hmac,
- unsigned char *data,
+void silc_hmac_make_truncated(SilcHmac hmac,
+ unsigned char *data,
SilcUInt32 data_len,
SilcUInt32 truncated_len,
unsigned char *return_hash);
* put them into a buffer and compute the MAC from the buffer by
* calling the silc_hmac_make, or you can use the silc_hmac_init,
* silc_hmac_update and silc_hmac_final to do the MAC. This function
- * prepares the allocated HMAC context for this kind of MAC
+ * prepares the allocated HMAC context for this kind of MAC
* computation. The caller must have been called the function
* silc_hmac_set_key before calling this function. To add the
* data to be used in the MAC computation call the silc_hmac_update
* DESCRIPTION
*
* This function is used to produce the final MAC from the data
- * that has been added to the HMAC context by calling the
+ * that has been added to the HMAC context by calling the
* silc_hmac_update function. The MAC is copied in to the
* `return_hash' pointer which must be at least the size that
* the silc_hmac_len returns. The length of the MAC is still