Added SILC Thread Queue API
[silc.git] / lib / silccrypt / silchash.h
index b8698281349ec2b80ff907678bdc5850173b9ea6..02a397cf1e40ee10157a2fc6689c9db3bfa0d894 100644 (file)
@@ -1,10 +1,10 @@
 /*
 
-  silchash.h 
+  silchash.h
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1997 - 2002 Pekka Riikonen
+  Copyright (C) 1997 - 2007 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
@@ -34,7 +34,7 @@
 /****s* silccrypt/SilcHashAPI/SilcHash
  *
  * NAME
- * 
+ *
  *    typedef struct SilcHashStruct *SilcHash;
  *
  * DESCRIPTION
@@ -50,7 +50,7 @@ typedef struct SilcHashStruct *SilcHash;
 /****s* silccrypt/SilcHashAPI/SilcHashObject
  *
  * NAME
- * 
+ *
  *    typedef struct { ... } SilcHashObject;
  *
  * DESCRIPTION
@@ -65,13 +65,14 @@ typedef struct SilcHashStruct *SilcHash;
  ***/
 typedef struct {
   char *name;
-  SilcUInt32 hash_len;
-  SilcUInt32 block_len;
+  char *oid;
+  SilcUInt16 hash_len;
+  SilcUInt16 block_len;
 
   void (*init)(void *);
   void (*update)(void *, const unsigned char *, SilcUInt32);
   void (*final)(void *, unsigned char *);
-  void (*transform)(SilcUInt32 *, const unsigned char *);
+  void (*transform)(void *, const unsigned char *);
   SilcUInt32 (*context_len)();
 } SilcHashObject;
 
@@ -110,7 +111,7 @@ void silc_##hash##_update(void *context, const unsigned char *data, \
 #define SILC_HASH_API_FINAL(hash)                                      \
 void silc_##hash##_final(void *context, unsigned char *digest)
 #define SILC_HASH_API_TRANSFORM(hash)                                  \
-void silc_##hash##_transform(SilcUInt32 *state,        const unsigned char *buffer)
+void silc_##hash##_transform(void *state, const unsigned char *buffer)
 #define SILC_HASH_API_CONTEXT_LEN(hash)                                        \
 SilcUInt32 silc_##hash##_context_len()
 
@@ -120,7 +121,7 @@ SilcUInt32 silc_##hash##_context_len()
  *
  * SYNOPSIS
  *
- *    bool silc_hash_register(const SilcHashObject *hash);
+ *    SilcBool silc_hash_register(const SilcHashObject *hash);
  *
  * DESCRIPTION
  *
@@ -133,13 +134,13 @@ SilcUInt32 silc_##hash##_context_len()
  *    that are builtin the sources.  Returns FALSE on error.
  *
  ***/
-bool silc_hash_register(const SilcHashObject *hash);
+SilcBool silc_hash_register(const SilcHashObject *hash);
 
 /****f* silccrypt/SilcHashAPI/silc_hash_unregister
  *
  * SYNOPSIS
  *
- *    bool silc_hash_unregister(SilcHashObject *hash);
+ *    SilcBool silc_hash_unregister(SilcHashObject *hash);
  *
  * DESCRIPTION
  *
@@ -148,13 +149,13 @@ bool silc_hash_register(const SilcHashObject *hash);
  *    FALSE on error.
  *
  ***/
-bool silc_hash_unregister(SilcHashObject *hash);
+SilcBool silc_hash_unregister(SilcHashObject *hash);
 
 /****f* silccrypt/SilcHashAPI/silc_hash_register_default
  *
  * SYNOPSIS
  *
- *    bool silc_hash_register_default(void);
+ *    SilcBool silc_hash_register_default(void);
  *
  * DESCRIPTION
  *
@@ -167,26 +168,26 @@ bool silc_hash_unregister(SilcHashObject *hash);
  *    which case this function should not be used).
  *
  ***/
-bool silc_hash_register_default(void);
+SilcBool silc_hash_register_default(void);
 
 /****f* silccrypt/SilcHashAPI/silc_hash_unregister_all
  *
  * SYNOPSIS
  *
- *    bool silc_hash_unregister_all(void);
+ *    SilcBool silc_hash_unregister_all(void);
  *
  * DESCRIPTION
  *
  *    Unregisters all registered hash functions.
  *
  ***/
-bool silc_hash_unregister_all(void);
+SilcBool silc_hash_unregister_all(void);
 
 /****f* silccrypt/SilcHashAPI/silc_hash_alloc
  *
  * SYNOPSIS
  *
- *    bool silc_hash_alloc(const unsigned char *name, SilcHash *new_hash);
+ *    SilcBool silc_hash_alloc(const char *name, SilcHash *new_hash);
  *
  * DESCRIPTION
  *
@@ -195,7 +196,22 @@ bool silc_hash_unregister_all(void);
  *    returns FALSE if such hash function does not exist.
  *
  ***/
-bool silc_hash_alloc(const unsigned char *name, SilcHash *new_hash);
+SilcBool silc_hash_alloc(const char *name, SilcHash *new_hash);
+
+/****f* silccrypt/SilcHashAPI/silc_hash_alloc_by_oid
+ *
+ * SYNOPSIS
+ *
+ *    SilcBool silc_hash_alloc_by_oid(const char *oid, SilcHash *new_hash);
+ *
+ * DESCRIPTION
+ *
+ *    Same as silc_hash_alloc but allocates the hash algorithm by the
+ *    hash algorithm OID string indicated by `oid'. Returns FALSE if such
+ *    hash function does not exist.
+ *
+ ***/
+SilcBool silc_hash_alloc_by_oid(const char *oid, SilcHash *new_hash);
 
 /****f* silccrypt/SilcHashAPI/silc_hash_free
  *
@@ -214,14 +230,14 @@ void silc_hash_free(SilcHash hash);
  *
  * SYNOPSIS
  *
- *    bool silc_hash_is_supported(const unsigned char *name);
+ *    SilcBool silc_hash_is_supported(const char *name);
  *
  * DESCRIPTION
  *
  *    Returns TRUE if the hash function indicated by the `name' exists.
  *
  ***/
-bool silc_hash_is_supported(const unsigned char *name);
+SilcBool silc_hash_is_supported(const char *name);
 
 /****f* silccrypt/SilcHashAPI/silc_hash_get_supported
  *
@@ -278,6 +294,20 @@ SilcUInt32 silc_hash_block_len(SilcHash hash);
  ***/
 const char *silc_hash_get_name(SilcHash hash);
 
+/****f* silccrypt/SilcHashAPI/silc_hash_get_oid
+ *
+ * SYNOPSIS
+ *
+ *    const char *silc_hash_get_name(SilcHash hash);
+ *
+ * DESCRIPTION
+ *
+ *    Returns the hash OID string.  Returns NULL if the hash doesn't have
+ *    OID string.  Use strlen() to get the OID string length.
+ *
+ ***/
+const char *silc_hash_get_oid(SilcHash hash);
+
 /****f* silccrypt/SilcHashAPI/silc_hash_make
  *
  * SYNOPSIS
@@ -310,7 +340,7 @@ void silc_hash_make(SilcHash hash, const unsigned char *data,
  *    put them into a buffer and compute the digest from the buffer by
  *    calling the silc_hash_make, or you can use the silc_hash_init,
  *    silc_hash_update and silc_hash_final to do the digest.  This function
- *    prepares the allocated hash function context for this kind of digest 
+ *    prepares the allocated hash function context for this kind of digest
  *    computation.  To add the data to be used in the digest computation
  *    call the silc_hash_update function.
  *
@@ -366,7 +396,7 @@ void silc_hash_final(SilcHash hash, unsigned char *return_hash);
  *
  * SYNOPSIS
  *
- *    void silc_hash_transform(SilcHash hash, SilcUInt32 *state,
+ *    void silc_hash_transform(SilcHash hash, void *state,
  *                             const unsigned char *data);
  *
  * DESCRIPTION
@@ -377,7 +407,7 @@ void silc_hash_final(SilcHash hash, unsigned char *return_hash);
  *    known by the caller.  Usually this function is not needed.
  *
  ***/
-void silc_hash_transform(SilcHash hash, SilcUInt32 *state,
+void silc_hash_transform(SilcHash hash, void *state,
                         const unsigned char *data);
 
 /****f* silccrypt/SilcHashAPI/silc_hash_fingerprint