- skeletons for:
authorMartin Willi <martin@strongswan.org>
Mon, 21 Nov 2005 16:26:36 +0000 (16:26 -0000)
committerMartin Willi <martin@strongswan.org>
Mon, 21 Nov 2005 16:26:36 +0000 (16:26 -0000)
- prf
- prf_hmac_sha1
- hasher
- hasher_sha1

Source/charon/transforms/hashers/hasher.c [new file with mode: 0644]
Source/charon/transforms/hashers/hasher.h [new file with mode: 0644]
Source/charon/transforms/hashers/hasher_sha1.c [new file with mode: 0644]
Source/charon/transforms/hashers/hasher_sha1.h [new file with mode: 0644]
Source/charon/transforms/prfs/prf.c [new file with mode: 0644]
Source/charon/transforms/prfs/prf.h [new file with mode: 0644]
Source/charon/transforms/prfs/prf_hmac_sha1.c [new file with mode: 0644]
Source/charon/transforms/prfs/prf_hmac_sha1.h [new file with mode: 0644]

diff --git a/Source/charon/transforms/hashers/hasher.c b/Source/charon/transforms/hashers/hasher.c
new file mode 100644 (file)
index 0000000..2055824
--- /dev/null
@@ -0,0 +1,50 @@
+/**
+ * @file hasher.c
+ * 
+ * @brief Generic interface for hash functions
+ * 
+ */
+
+/*
+ * Copyright (C) 2005 Jan Hutter, Martin Willi
+ * Hochschule fuer Technik Rapperswil
+ *
+ * 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; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * 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.
+ */
+
+
+#include "hasher.h"
+
+#include "hasher_sha1.h"
+
+
+
+/*
+ * Described in header
+ */
+hasher_t *hasher_create(hash_algorithm_t hash_algorithm)
+{
+       switch (hash_algorithm)
+       {
+               case SHA1:
+               {
+                       return (hasher_t*)hasher_sha1_create();
+               }
+               case MD5:
+               default:
+                       return NULL;
+       }
+}
+
+
+
+
+
diff --git a/Source/charon/transforms/hashers/hasher.h b/Source/charon/transforms/hashers/hasher.h
new file mode 100644 (file)
index 0000000..2428678
--- /dev/null
@@ -0,0 +1,97 @@
+/**
+ * @file hasher.h
+ * 
+ * @brief Generic interface for hash functions
+ * 
+ */
+
+/*
+ * Copyright (C) 2005 Jan Hutter, Martin Willi
+ * Hochschule fuer Technik Rapperswil
+ *
+ * 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; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * 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 HASHER_H_
+#define HASHER_H_
+
+
+#include "../../types.h"
+
+/**
+ * algorithms to use for hashing
+ */
+typedef enum hash_algorithm_e hash_algorithm_t;
+
+enum hash_algorithm_e {
+       SHA1,
+       MD5
+};
+
+
+/**
+ * Object representing a hasher
+ */
+typedef struct hasher_s hasher_t;
+
+struct hasher_s {
+       /**
+        * @brief hash data and write it in the buffer
+        * 
+        * @param this                  calling hasher
+        * @param data                  data to hash
+        * @param [out]buffer   pointer where the hash will be written
+        * @return                              
+        *                                              - SUCCESS in any case
+        */
+       status_t (*get_hash) (hasher_t *this, chunk_t data, u_int8_t *buffer);
+       
+       /**
+        * @brief hash data and allocate space for the hash
+        * 
+        * @param this                  calling hasher
+        * @param seed                  a chunk containing the seed for the next bytes
+        * @param [out]hash             chunk which will hold allocated hash
+        * @return                              
+        *                                              - SUCCESS in any case
+        *                                              - OUT_OF_RES if space could not be allocated
+        */
+       status_t (*allocate_hash) (hasher_t *this, chunk_t data, chunk_t *hash);
+       
+       /**
+        * @brief get the block size of this hashing function
+        * 
+        * @param this                  calling hasher
+        * @return                              block size in bytes
+        */
+       size_t (*get_block_size) (hasher_t *this);
+       
+       /**
+        * @brief Destroys a hasher object.
+        *
+        * @param this  hasher_t object to destroy
+        * @return              
+        *                              SUCCESS in any case
+        */
+       status_t (*destroy) (hasher_t *this);
+};
+
+/**
+ * Creates a new hasher_t object
+ * 
+ * @param hash_algorithm                       Algorithm to use for hashing
+ * @return
+ *                                                                     - hasher_t if successfully
+ *                                                                     - NULL if out of ressources 
+ */
+hasher_t *hasher_create(hash_algorithm_t hash_algorithm);
+
+#endif /*HASHER_H_*/
diff --git a/Source/charon/transforms/hashers/hasher_sha1.c b/Source/charon/transforms/hashers/hasher_sha1.c
new file mode 100644 (file)
index 0000000..9a9df50
--- /dev/null
@@ -0,0 +1,59 @@
+/**
+ * @file hasher_sha1.c
+ * 
+ * @brief Implementation of hasher_t interface using the
+ * SHA1 algorithm.
+ * 
+ */
+
+/*
+ * Copyright (C) 2005 Jan Hutter, Martin Willi
+ * Hochschule fuer Technik Rapperswil
+ *
+ * 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; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * 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.
+ */
+
+#include "hasher_sha1.h"
+
+#include "../../utils/allocator.h"
+
+typedef struct private_hasher_sha1_s private_hasher_sha1_t;
+
+struct private_hasher_sha1_s {
+       /**
+        * public interface for this hasher
+        */
+       hasher_sha1_t public;   
+};
+
+
+
+
+
+/*
+ * Described in header
+ */
+hasher_sha1_t *hasher_sha1_create()
+{
+       private_hasher_sha1_t *this = allocator_alloc_thing(private_hasher_sha1_t);
+       
+       if (this == NULL)
+       {
+               return NULL;    
+       }
+       
+       return &(this->public);
+}
+
+
+
+
+
diff --git a/Source/charon/transforms/hashers/hasher_sha1.h b/Source/charon/transforms/hashers/hasher_sha1.h
new file mode 100644 (file)
index 0000000..c76f69e
--- /dev/null
@@ -0,0 +1,53 @@
+/**
+ * @file hasher_sha1.h
+ * 
+ * @brief Implementation of hasher_t interface using the
+ * SHA1 algorithm.
+ * 
+ */
+
+/*
+ * Copyright (C) 2005 Jan Hutter, Martin Willi
+ * Hochschule fuer Technik Rapperswil
+ *
+ * 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; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * 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 HASHER_SHA1_H_
+#define HASHER_SHA1_H_
+
+#include "hasher.h"
+
+
+/**
+ * Object representing the sha1 hasher
+ * 
+ */
+typedef struct hasher_sha1_s hasher_sha1_t;
+
+struct hasher_sha1_s {
+       
+       /**
+        * generic hasher_t interface for this hasher
+        */
+       hasher_t hasher_interface;
+};
+
+/**
+ * Creates a new hasher_sha1_t object
+ * 
+ * @return
+ *                                                     - hasher_sha1_t if successfully
+ *                                                     - NULL if out of ressources
+ */
+hasher_sha1_t *hasher_sha1_create();
+
+#endif /*HASHER_SHA1_H_*/
diff --git a/Source/charon/transforms/prfs/prf.c b/Source/charon/transforms/prfs/prf.c
new file mode 100644 (file)
index 0000000..d5f480f
--- /dev/null
@@ -0,0 +1,51 @@
+/**
+ * @file prf.c
+ * 
+ * @brief Generic interface for pseudo-random-functions
+ * 
+ */
+
+/*
+ * Copyright (C) 2005 Jan Hutter, Martin Willi
+ * Hochschule fuer Technik Rapperswil
+ *
+ * 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; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * 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.
+ */
+
+
+#include "prf.h"
+
+#include "prf_hmac_sha1.h"
+
+
+/*
+ * Described in header
+ */
+prf_t *prf_create(pseudo_random_function_t pseudo_random_function, chunk_t key)
+{
+       switch (pseudo_random_function)
+       {
+               case PRF_HMAC_SHA1:
+               {
+                       return (prf_t*)prf_hmac_sha1_create(key);
+               }
+               case PRF_HMAC_MD5:
+               case PRF_HMAC_TIGER:
+               case PRF_AES128_CBC:
+               default:
+                       return NULL;
+       }
+}
+
+
+
+
+
diff --git a/Source/charon/transforms/prfs/prf.h b/Source/charon/transforms/prfs/prf.h
new file mode 100644 (file)
index 0000000..537b05a
--- /dev/null
@@ -0,0 +1,88 @@
+/**
+ * @file prf.h
+ * 
+ * @brief Generic interface for pseudo-random-functions
+ * 
+ */
+
+/*
+ * Copyright (C) 2005 Jan Hutter, Martin Willi
+ * Hochschule fuer Technik Rapperswil
+ *
+ * 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; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * 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 PRF_H_
+#define PRF_H_
+
+#include "../../payloads/transform_substructure.h"
+
+
+/**
+ * Object representing a diffie hellman exchange
+ */
+typedef struct prf_s prf_t;
+
+struct prf_s {
+       /**
+        * @brief generates pseudo random bytes and writes them
+        * in the buffer
+        * 
+        * @param this                  calling prf
+        * @param seed                  a chunk containing the seed for the next bytes
+        * @param [out]buffer   pointer where the generated bytes will be written
+        * @return                              
+        *                                              - SUCCESS in any case
+        */
+       status_t (*get_bytes) (prf_t *this, chunk_t seed, u_int8_t *buffer);
+       
+       /**
+        * @brief generates pseudo random bytes and allocate space for them
+        * 
+        * @param this                  calling prf
+        * @param seed                  a chunk containing the seed for the next bytes
+        * @param [out]chunk    chunk which will hold generated bytes
+        * @return                              
+        *                                              - SUCCESS in any case
+        *                                              - OUT_OF_RES if space could not be allocated
+        */
+       status_t (*allocate_bytes) (prf_t *this, chunk_t seed, chunk_t *chunk);
+       
+       /**
+        * @brief get the block size of this prf
+        * 
+        * @param this                  calling prf
+        * @return                              block size in bytes
+        */
+       size_t (*get_block_size) (prf_t *this);
+       
+       /**
+        * @brief Destroys a prf object.
+        *
+        * @param this  prf_t object to destroy
+        * @return              
+        *                              SUCCESS in any case
+        */
+       status_t (*destroy) (prf_t *this);
+};
+
+/**
+ * Creates a new prf_t object
+ * 
+ * @param pseudo_random_function       Algorithm to use
+ * @param key                                          A chunk containing the key
+ * @return
+ *                                                                     - prf_t if successfully
+ *                                                                     - NULL if out of ressources or prf not supported
+ */
+prf_t *prf_create(pseudo_random_function_t pseudo_random_function, chunk_t key);
+
+#endif /*PRF_H_*/
diff --git a/Source/charon/transforms/prfs/prf_hmac_sha1.c b/Source/charon/transforms/prfs/prf_hmac_sha1.c
new file mode 100644 (file)
index 0000000..e62493a
--- /dev/null
@@ -0,0 +1,63 @@
+/**
+ * @file prf_hmac_sha1.h
+ * 
+ * @brief Implementation of prf_t interface using the
+ * HMAC SHA1 algorithm.
+ * 
+ */
+
+/*
+ * Copyright (C) 2005 Jan Hutter, Martin Willi
+ * Hochschule fuer Technik Rapperswil
+ *
+ * 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; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * 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.
+ */
+
+#include "prf_hmac_sha1.h"
+
+#include "../../utils/allocator.h"
+
+typedef struct private_prf_hmac_sha1_s private_prf_hmac_sha1_t;
+
+struct private_prf_hmac_sha1_s {
+       /**
+        * public interface for this prf
+        */
+       prf_hmac_sha1_t public; 
+};
+
+
+
+
+
+
+
+
+/*
+ * Described in header
+ */
+prf_hmac_sha1_t *prf_hmac_sha1_create(chunk_t key)
+{
+       private_prf_hmac_sha1_t *this = allocator_alloc_thing(private_prf_hmac_sha1_t);
+       
+       if (this == NULL)
+       {
+               return NULL;    
+       }
+       
+       return &(this->public);
+       
+}
+
+
+
+
+
diff --git a/Source/charon/transforms/prfs/prf_hmac_sha1.h b/Source/charon/transforms/prfs/prf_hmac_sha1.h
new file mode 100644 (file)
index 0000000..7f0142c
--- /dev/null
@@ -0,0 +1,55 @@
+/**
+ * @file prf_hmac_sha1.h
+ * 
+ * @brief Implementation of prf_t interface using the
+ * HMAC SHA1 algorithm.
+ * 
+ */
+
+/*
+ * Copyright (C) 2005 Jan Hutter, Martin Willi
+ * Hochschule fuer Technik Rapperswil
+ *
+ * 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; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * 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 PRF_HMAC_SHA1_H_
+#define PRF_HMAC_SHA1_H_
+
+#include "prf.h"
+
+#include "../../types.h"
+
+/**
+ * Object representing a diffie hellman exchange
+ * 
+ */
+typedef struct prf_hmac_sha1_s prf_hmac_sha1_t;
+
+struct prf_hmac_sha1_s {
+       
+       /**
+        * generic prf_t interface for this prf
+        */
+       prf_t prf_interface;
+};
+
+/**
+ * Creates a new prf_hmac_sha1_t object
+ * 
+ * @param key                                          Key to use for this prf
+ * @return
+ *                                                                     - prf_hmac_sha1_t if successfully
+ *                                                                     - NULL if out of ressources
+ */
+prf_hmac_sha1_t *prf_hmac_sha1_create(chunk_t key);
+
+#endif /*PRF_HMAC_SHA1_H_*/