Added SILC Thread Queue API
[silc.git] / lib / silccrypt / silchmac.h
index 37d28c5985b25a4d99d49a6af5c4e7ecaee2ed69..66d82349b2279091c6fa1484d67619539a3c62c4 100644 (file)
@@ -1,10 +1,10 @@
 /*
 
-  silchmac.h 
+  silchmac.h
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1999 - 2001 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
@@ -26,7 +26,7 @@
  *
  *    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.
  *
  ***/
@@ -34,7 +34,7 @@
 /****s* silccrypt/SilcHMACAPI/SilcHmac
  *
  * NAME
- * 
+ *
  *    typedef struct SilcHmacStruct *SilcHmac;
  *
  * DESCRIPTION
@@ -50,7 +50,7 @@ typedef struct SilcHmacStruct *SilcHmac;
 /****s* silccrypt/SilcHMACAPI/SilcHmacObject
  *
  * NAME
- * 
+ *
  *    typedef struct { ... } SilcHmacObject;
  *
  * DESCRIPTION
@@ -73,7 +73,7 @@ typedef struct {
 #define SILC_ALL_HMACS ((SilcHmacObject *)1)
 
 /* Default hmacs for silc_hmac_register_default(). */
-extern DLLAPI SilcHmacObject silc_default_hmacs[];
+extern DLLAPI const SilcHmacObject silc_default_hmacs[];
 
 /* Default HMAC in the SILC protocol */
 #define SILC_DEFAULT_HMAC "hmac-sha1-96"
@@ -84,7 +84,7 @@ extern DLLAPI SilcHmacObject silc_default_hmacs[];
  *
  * SYNOPSIS
  *
- *    bool silc_hmac_register(SilcHmacObject *hmac);
+ *    SilcBool silc_hmac_register(const SilcHmacObject *hmac);
  *
  * DESCRIPTION
  *
@@ -97,13 +97,13 @@ extern DLLAPI SilcHmacObject silc_default_hmacs[];
  *    that are builtin the sources.  Returns FALSE on error.
  *
  ***/
-bool silc_hmac_register(SilcHmacObject *hmac);
+SilcBool silc_hmac_register(const SilcHmacObject *hmac);
 
 /****f* silccrypt/SilcHMACAPI/silc_hmac_unregister
  *
  * SYNOPSIS
  *
- *    bool silc_hmac_unregister(SilcHmacObject *hmac);
+ *    SilcBool silc_hmac_unregister(SilcHmacObject *hmac);
  *
  * DESCRIPTION
  *
@@ -112,13 +112,13 @@ bool silc_hmac_register(SilcHmacObject *hmac);
  *    error.
  *
  ***/
-bool silc_hmac_unregister(SilcHmacObject *hmac);
+SilcBool silc_hmac_unregister(SilcHmacObject *hmac);
 
 /****f* silccrypt/SilcHMACAPI/silc_hmac_register_default
  *
  * SYNOPSIS
  *
- *    bool silc_hmac_register_default(void);
+ *    SilcBool silc_hmac_register_default(void);
  *
  * DESCRIPTION
  *
@@ -131,13 +131,27 @@ bool silc_hmac_unregister(SilcHmacObject *hmac);
  *    used).
  *
  ***/
-bool silc_hmac_register_default(void);
+SilcBool silc_hmac_register_default(void);
+
+/****f* silccrypt/SilcHMACAPI/silc_hmac_unregister_all
+ *
+ * SYNOPSIS
+ *
+ *    SilcBool silc_hmac_unregister_all(void);
+ *
+ * DESCRIPTION
+ *
+ *    Unregisters all registered HMACs.
+ *
+ ***/
+SilcBool silc_hmac_unregister_all(void);
 
 /****f* silccrypt/SilcHMACAPI/silc_hmac_alloc
  *
  * SYNOPSIS
  *
- *    bool silc_hmac_alloc(char *name, SilcHash hash, SilcHmac *new_hmac);
+ *    SilcBool silc_hmac_alloc(const char *name, SilcHash hash,
+ *                         SilcHmac *new_hmac);
  *
  * DESCRIPTION
  *
@@ -148,7 +162,7 @@ bool silc_hmac_register_default(void);
  *    FALSE if such HMAC does not exist.
  *
  ***/
-bool silc_hmac_alloc(char *name, SilcHash hash, SilcHmac *new_hmac);
+SilcBool silc_hmac_alloc(const char *name, SilcHash hash, SilcHmac *new_hmac);
 
 /****f* silccrypt/SilcHMACAPI/silc_hmac_free
  *
@@ -168,14 +182,14 @@ void silc_hmac_free(SilcHmac hmac);
  *
  * SYNOPSIS
  *
- *    bool silc_hmac_is_supported(const char *name);
+ *    SilcBool silc_hmac_is_supported(const char *name);
  *
  * DESCRIPTION
  *
  *    Returns TRUE if the HMAC indicated by the `name' exists.
  *
  ***/
-bool silc_hmac_is_supported(const char *name);
+SilcBool silc_hmac_is_supported(const char *name);
 
 /****f* silccrypt/SilcHMACAPI/silc_hmac_get_supported
  *
@@ -252,6 +266,21 @@ const char *silc_hmac_get_name(SilcHmac hmac);
 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
@@ -263,7 +292,7 @@ void silc_hmac_set_key(SilcHmac hmac, const unsigned char *key,
  * 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'.
@@ -278,7 +307,7 @@ void silc_hmac_make(SilcHmac hmac, unsigned char *data,
  * 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);
@@ -291,7 +320,7 @@ void silc_hmac_make(SilcHmac hmac, unsigned char *data,
  *
  ***/
 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);
@@ -300,8 +329,8 @@ void silc_hmac_make_with_key(SilcHmac hmac, unsigned char *data,
  *
  * 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);
@@ -321,8 +350,8 @@ void silc_hmac_make_with_key(SilcHmac hmac, unsigned char *data,
  *    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);
@@ -341,7 +370,7 @@ void silc_hmac_make_truncated(SilcHmac hmac,
  *    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
@@ -405,7 +434,7 @@ void silc_hmac_update(SilcHmac hmac, const unsigned char *data,
  * 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