X-Git-Url: http://git.silcnet.org/gitweb/?p=crypto.git;a=blobdiff_plain;f=lib%2Fsilccrypt%2Fsilchmac.h;fp=lib%2Fsilccrypt%2Fsilchmac.h;h=0000000000000000000000000000000000000000;hp=66d82349b2279091c6fa1484d67619539a3c62c4;hb=8cbd4e2524c7e45c506bd00779d05f6608a81f66;hpb=57af98efbd82c4c89c81850f42b02585fed1a16a diff --git a/lib/silccrypt/silchmac.h b/lib/silccrypt/silchmac.h deleted file mode 100644 index 66d82349..00000000 --- a/lib/silccrypt/silchmac.h +++ /dev/null @@ -1,447 +0,0 @@ -/* - - silchmac.h - - Author: 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 - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - -*/ - -#ifndef SILCHMAC_H -#define SILCHMAC_H - -/****h* silccrypt/SILC HMAC Interface - * - * DESCRIPTION - * - * 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 - * routines were created according to RFC 2104. - * - ***/ - -/****s* silccrypt/SilcHMACAPI/SilcHmac - * - * NAME - * - * typedef struct SilcHmacStruct *SilcHmac; - * - * DESCRIPTION - * - * This context is the actual HMAC context and is allocated - * by silc_hmac_alloc and given as argument usually to all - * silc_hmac_* functions. It is freed by the silc_hmac_free - * function. - * - ***/ -typedef struct SilcHmacStruct *SilcHmac; - -/****s* silccrypt/SilcHMACAPI/SilcHmacObject - * - * NAME - * - * typedef struct { ... } SilcHmacObject; - * - * DESCRIPTION - * - * This structure represents one HMAC. The HMAC's name and the - * MAC length is defined in the structure. This structure is - * then given as argument to the silc_hmac_register. That function - * is used to register all HMACs into SILC. They can be then - * allocated by the name found in this structure by calling the - * silc_hmac_alloc. - * - ***/ -typedef struct { - char *name; - SilcUInt32 len; -} SilcHmacObject; - -/* Marks for all hmacs. This can be used in silc_hmac_unregister - to unregister all hmacs at once. */ -#define SILC_ALL_HMACS ((SilcHmacObject *)1) - -/* Default hmacs for silc_hmac_register_default(). */ -extern DLLAPI const SilcHmacObject silc_default_hmacs[]; - -/* Default HMAC in the SILC protocol */ -#define SILC_DEFAULT_HMAC "hmac-sha1-96" - -/* Prototypes */ - -/****f* silccrypt/SilcHMACAPI/silc_hmac_register - * - * SYNOPSIS - * - * SilcBool silc_hmac_register(const SilcHmacObject *hmac); - * - * DESCRIPTION - * - * Registers a new HMAC into the SILC. This function is used at the - * initialization of the SILC. All registered HMACs should be - * unregistered with silc_hmac_unregister. The `hmac' includes the - * name of the HMAC and the length of the MAC. Usually this - * function is not called directly. Instead, application can call - * the silc_hmac_register_default to register all default HMACs - * that are builtin the sources. Returns FALSE on error. - * - ***/ -SilcBool silc_hmac_register(const SilcHmacObject *hmac); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_unregister - * - * SYNOPSIS - * - * SilcBool silc_hmac_unregister(SilcHmacObject *hmac); - * - * DESCRIPTION - * - * Unregister a HMAC from SILC by the HMAC structure `hmac'. This - * should be called for all registered HMAC's. Returns FALSE on - * error. - * - ***/ -SilcBool silc_hmac_unregister(SilcHmacObject *hmac); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_register_default - * - * SYNOPSIS - * - * SilcBool silc_hmac_register_default(void); - * - * DESCRIPTION - * - * Registers all default HMACs into the SILC. These are the HMACs - * that are builtin in the sources. See the list of default HMACs - * in the silchmac.c source file. The application may use this - * to register default HMACs if specific HMAC in any specific order - * is not wanted (application's configuration usually may decide - * the order of the registration, in which case this should not be - * used). - * - ***/ -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 - * - * SilcBool silc_hmac_alloc(const char *name, SilcHash hash, - * SilcHmac *new_hmac); - * - * DESCRIPTION - * - * Allocates a new SilcHmac object of name of `name'. The `hash' may - * be provided as argument. If provided it is used as the hash function - * of the HMAC. If it is NULL then the hash function is allocated and - * the name of the hash algorithm is derived from the `name'. Returns - * FALSE if such HMAC does not exist. - * - ***/ -SilcBool silc_hmac_alloc(const char *name, SilcHash hash, SilcHmac *new_hmac); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_free - * - * SYNOPSIS - * - * void silc_hmac_free(SilcHmac hmac); - * - * DESCRIPTION - * - * Frees the allocated HMAC context. The key that may have been set - * with the silc_hmac_set_key is also destroyed. - * - ***/ -void silc_hmac_free(SilcHmac hmac); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_is_supported - * - * SYNOPSIS - * - * SilcBool silc_hmac_is_supported(const char *name); - * - * DESCRIPTION - * - * Returns TRUE if the HMAC indicated by the `name' exists. - * - ***/ -SilcBool silc_hmac_is_supported(const char *name); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_get_supported - * - * SYNOPSIS - * - * char *silc_hmac_get_supported(void); - * - * DESCRIPTION - * - * Returns comma (`,') separated list of registered HMACs. This is - * used for example when sending supported HMAC list during the SILC - * Key Exchange protocol (SKE). The caller must free the returned - * pointer. - * - ***/ -char *silc_hmac_get_supported(void); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_len - * - * SYNOPSIS - * - * SilcUInt32 silc_hmac_len(SilcHmac hmac); - * - * DESCRIPTION - * - * Returns the length of the MAC that the HMAC will produce. - * - ***/ -SilcUInt32 silc_hmac_len(SilcHmac hmac); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_get_hash - * - * SYNOPSIS - * - * SilcHash silc_hmac_get_hash(SilcHmac hmac); - * - * DESCRIPTION - * - * Returns the SilcHash context that has been associated with the - * HMAC context. The caller must not free the returned context. - * - ***/ -SilcHash silc_hmac_get_hash(SilcHmac hmac); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_get_name - * - * SYNOPSIS - * - * const char *silc_hmac_get_name(SilcHmac hmac); - * - * DESCRIPTION - * - * Returns the name of the HMAC context. - * - ***/ -const char *silc_hmac_get_name(SilcHmac hmac); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_set_key - * - * SYNOPSIS - * - * void silc_hmac_set_key(SilcHmac hmac, const unsigned char *key, - * SilcUInt32 key_len); - * - * DESCRIPTION - * - * Sets the key to be used in the HMAC operation. This must be set - * before calling silc_hmac_make or silc_hmac_final functions. If - * you do not want to set the key you can still produce a MAC by - * calling the silc_hmac_make_with_key where you give the key as - * argument. Usually application still wants to set the key. - * - ***/ -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 - * - * void silc_hmac_make(SilcHmac hmac, unsigned char *data, - * SilcUInt32 data_len, unsigned char *return_hash, - * SilcUInt32 *return_len); - * - * 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 - * `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'. - * - ***/ -void silc_hmac_make(SilcHmac hmac, unsigned char *data, - SilcUInt32 data_len, unsigned char *return_hash, - SilcUInt32 *return_len); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_make_with_key - * - * SYNOPSIS - * - * void silc_hmac_make_with_key(SilcHmac hmac, unsigned char *data, - * SilcUInt32 data_len, - * unsigned char *key, SilcUInt32 key_len, - * unsigned char *return_hash, - * SilcUInt32 *return_len); - * - * DESCRIPTION - * - * Same as the silc_hmac_make but takes the key for the HMAC as - * argument. If this is used the key that may have been set by calling - * silc_hmac_set_key is ignored. - * - ***/ -void silc_hmac_make_with_key(SilcHmac hmac, unsigned char *data, - SilcUInt32 data_len, - unsigned char *key, SilcUInt32 key_len, - unsigned char *return_hash, - SilcUInt32 *return_len); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_make_truncated - * - * SYNOPSIS - * - * void silc_hmac_make_truncated(SilcHmac hmac, - * unsigned char *data, - * SilcUInt32 data_len, - * SilcUInt32 truncated_len, - * unsigned char *return_hash); - * - * DESCRIPTION - * - * Same as the silc_hmac_make except that the returned MAC is - * truncated to the length indicated by the `truncated_len'. Some - * special applications may need this function. The `return_hash' - * must be at least the size of `truncated_len'. - * - * NOTES - * - * For security reasons, one should not truncate to less than half - * of the length of the true MAC lenght. However, since this routine - * may be used to non-critical applications this allows these dangerous - * truncations. - * - ***/ -void silc_hmac_make_truncated(SilcHmac hmac, - unsigned char *data, - SilcUInt32 data_len, - SilcUInt32 truncated_len, - unsigned char *return_hash); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_init - * - * SYNOPSIS - * - * void silc_hmac_init(SilcHmac hmac); - * - * DESCRIPTION - * - * Sometimes calling the silc_hmac_make might not be the most - * optimal case of doing MACs. If you have a lot of different data - * that you need to put together for computing a MAC you may either - * 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 - * 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 - * function. - * - ***/ -void silc_hmac_init(SilcHmac hmac); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_init_with_key - * - * SYNOPSIS - * - * void silc_hmac_init_with_key(SilcHmac hmac, const unsigned char *key, - * SilcUInt32 key_len); - * - * DESCRIPTION - * - * Same as silc_hmac_init but initializes with specific key. The - * key that may have been set with silc_hmac_set_key is ignored. - * - ***/ -void silc_hmac_init_with_key(SilcHmac hmac, const unsigned char *key, - SilcUInt32 key_len); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_update - * - * SYNOPSIS - * - * void silc_hmac_update(SilcHmac hmac, const unsigned char *data, - * SilcUInt32 data_len); - * - * DESCRIPTION - * - * This function may be called to add data to be used in the MAC - * computation. This can be called multiple times to add data from - * many sources before actually performing the HMAC. Once you've - * added all the data you need you can call the silc_hmac_final to - * actually produce the MAC. - * - * EXAMPLE - * - * unsigned char mac[20]; - * SilcUInt32 mac_len; - * - * silc_hmac_init(hmac); - * silc_hmac_update(hmac, data, data_len); - * silc_hmac_update(hmac, more_data, more_data_len); - * silc_hmac_final(hmac, mac, &mac_len); - * - ***/ -void silc_hmac_update(SilcHmac hmac, const unsigned char *data, - SilcUInt32 data_len); - -/****f* silccrypt/SilcHMACAPI/silc_hmac_final - * - * SYNOPSIS - * - * void silc_hmac_final(SilcHmac hmac, unsigned char *return_hash, - * SilcUInt32 *return_len); - * - * DESCRIPTION - * - * This function is used to produce the final MAC from the data - * 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 - * returned into `return_len'. - * - ***/ -void silc_hmac_final(SilcHmac hmac, unsigned char *return_hash, - SilcUInt32 *return_len); - -#endif