Added SILC Thread Queue API
[silc.git] / lib / silccrypt / silchash.h
index 698ce15a579cd2b5f6f924116760ed527b86e7e6..02a397cf1e40ee10157a2fc6689c9db3bfa0d894 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1997 - 2005 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
@@ -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()
 
@@ -186,7 +187,7 @@ SilcBool silc_hash_unregister_all(void);
  *
  * SYNOPSIS
  *
- *    SilcBool 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 @@ SilcBool silc_hash_unregister_all(void);
  *    returns FALSE if such hash function does not exist.
  *
  ***/
-SilcBool 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
  *
- *    SilcBool 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.
  *
  ***/
-SilcBool 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
@@ -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