The introduced SHA1_NOFINAL hasher was not sufficient for EAP-AKA,
[strongswan.git] / src / libstrongswan / library.h
index 67a05f1..9d151c4 100644 (file)
@@ -1,12 +1,5 @@
-/**
- * @file library.h
- *
- * @brief Helper functions and definitions.
- *
- */
-
 /*
- * Copyright (C) 2006 Martin Willi
+ * Copyright (C) 2008 Martin Willi
  * Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
  * 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.
+ *
+ * $Id$
  */
 
-#ifndef LIBRARY_H_
-#define LIBRARY_H_
-
 /**
  * @defgroup libstrongswan libstrongswan
  *
- * libstrongswan: library with various crypto related things.
- */
-
-/**
  * @defgroup asn1 asn1
- *
- * ASN1 definitions, parser and generator functions.
- *
  * @ingroup libstrongswan
- */
-
-/**
- * @defgroup crypto crypto
- *
- * Crypto algorithms of different kind.
  *
+ * @defgroup credentials credentials
  * @ingroup libstrongswan
- */
-
-/**
- * @defgroup crypters crypters
- *
- * Symmetric encryption algorithms, used for
- * encryption and decryption.
- *
- * @ingroup crypto
- */
-
-/**
- * @defgroup hashers hashers
- *
- * Hashing algorithms, such as MD5 or SHA1
- *
- * @ingroup crypto
- */
-
-/**
- * @defgroup prfs prfs
- *
- * Pseudo random functions, used to generate 
- * pseude random byte sequences.
- *
- * @ingroup crypto
- */
-
-/**
- * @defgroup rsa rsa
  *
- * RSA private/public key algorithm.
+ * @defgroup keys keys
+ * @ingroup credentials
  *
- * @ingroup crypto
- */
-
-/**
- * @defgroup signers signers
- *
- * Symmetric signing algorithms, 
- * used to ensure message integrity.
+ * @defgroup certificates certificates
+ * @ingroup credentials
  *
- * @ingroup crypto
- */
-
-/**
+ * @defgroup crypto crypto
+ * @ingroup libstrongswan
+ * @defgroup database database
+ * @ingroup libstrongswan
+ * @defgroup fetcher fetcher
+ * @ingroup libstrongswan
+ * @defgroup fips fips
+ * @ingroup libstrongswan
+ * @defgroup plugins plugins
+ * @ingroup libstrongswan
  * @defgroup utils utils
- *
- * Generic helper classes.
- *
  * @ingroup libstrongswan
  */
 
-#include <gmp.h>
-#include <sys/types.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <printf.h>
-
-#include <enum.h>
-
-/**
- * Number of bits in a byte
- */
-#define BITS_PER_BYTE 8
-
-/**
- * Default length for various auxiliary text buffers
- */
-#define BUF_LEN 512
-
-/**
- * Macro compares two strings for equality
- */
-#define streq(x,y) (strcmp(x, y) == 0)
-
-/**
- * Macro compares two binary blobs for equality
- */
-#define memeq(x,y,len) (memcmp(x, y, len) == 0)
-
-/**
- * Macro gives back larger of two values.
- */
-#define max(x,y) ((x) > (y) ? (x):(y))
-
 /**
- * Macro gives back smaller of two values.
+ * @defgroup library library
+ * @{ @ingroup libstrongswan
  */
-#define min(x,y) ((x) < (y) ? (x):(y))
 
-/**
- * Call destructor of a object if object != NULL
- */
-#define DESTROY_IF(obj) if (obj) obj->destroy(obj)
-
-/**
- * Debug macro to follow control flow
- */
-#define POS printf("%s, line %d\n", __FILE__, __LINE__)
-
-/**
- * Macro to allocate a sized type.
- */
-#define malloc_thing(thing) ((thing*)malloc(sizeof(thing)))
+#ifndef LIBRARY_H_
+#define LIBRARY_H_
 
-/**
- * Assign a function as a class method
- */
-#define ASSIGN(method, function) (method = (typeof(method))function)
+#include <utils.h>
+#include <chunk.h>
+#include <settings.h>
+#include <printf_hook.h>
+#include <plugins/plugin_loader.h>
+#include <crypto/crypto_factory.h>
+#include <credentials/credential_factory.h>
+#include <fetcher/fetcher_manager.h>
+#include <database/database_factory.h>
 
-/**
- * time_t not defined
- */
-#define UNDEFINED_TIME 0
+typedef struct library_t library_t;
 
 /**
- * General purpose boolean type.
+ * Libstrongswan library context, contains library relevant globals.
  */
-typedef int bool;
-#define FALSE 0
-#define TRUE  1
+struct library_t {
 
-typedef enum status_t status_t;
-
-/**
- * Return values of function calls.
- */
-enum status_t {
-       /**
-        * Call succeeded.
-        */
-       SUCCESS,
-       
-       /**
-        * Call failed.
-        */
-       FAILED,
-       
-       /**
-        * Out of resources.
-        */
-       OUT_OF_RES,
-       
-       /**
-        * The suggested operation is already done
-        */
-       ALREADY_DONE,
-       
-       /**
-        * Not supported.
-        */
-       NOT_SUPPORTED,
-       
        /**
-        * One of the arguments is invalid.
+        * Printf hook registering facility
         */
-       INVALID_ARG,
+       printf_hook_t *printf_hook;
        
        /**
-        * Something could not be found.
+        * crypto algorithm registry and factory
         */
-       NOT_FOUND,
+       crypto_factory_t *crypto;
        
        /**
-        * Error while parsing.
+        * credential constructor registry and factory
         */
-       PARSE_ERROR,
+       credential_factory_t *creds;
        
        /**
-        * Error while verifying.
+        * URL fetching facility
         */
-       VERIFY_ERROR,
+       fetcher_manager_t *fetcher;
        
        /**
-        * Object in invalid state.
+        * database construction factory
         */
-       INVALID_STATE,
+       database_factory_t *db;
        
        /**
-        * Destroy object which called method belongs to.
+        * plugin loading facility
         */
-       DESTROY_ME,
+       plugin_loader_t *plugins;
        
        /**
-        * Another call to the method is required.
+        * various settings loaded from settings file
         */
-       NEED_MORE,
+       settings_t *settings;
 };
 
 /**
- * used by strict_crl_policy
- */
-typedef enum {
-       STRICT_NO,
-       STRICT_YES,
-       STRICT_IFURI
-} strict_t;
-
-/**
- * enum_names for type status_t.
- */
-extern enum_name_t *status_names;
-
-/**
- * deprecated pluto style return value:
- * error message, NULL for success
- */
-typedef const char *err_t;
-
-/**
- * Handle struct timeval like an own type.
- */
-typedef struct timeval timeval_t;
-
-/**
- * Handle struct timespec like an own type.
- */
-typedef struct timespec timespec_t;
-
-/**
- * Handle struct chunk_t like an own type.
- */
-typedef struct sockaddr sockaddr_t;
-
-/**
- * Clone a data to a newly allocated buffer
- */
-void *clalloc(void *pointer, size_t size);
-
-/**
- * Same as memcpy, but XORs src into dst instead of copy
+ * Initialize library, creates "lib" instance.
+ *
+ * @param settings             file to read settings from, may be NULL for none
  */
-void memxor(u_int8_t dest[], u_int8_t src[], size_t n);
+void library_init(char *settings);
 
 /**
- * Special type to count references
+ * Deinitialize library, destroys "lib" instance.
  */
-typedef volatile u_int refcount_t;
+void library_deinit();
 
 /**
- * @brief Get a new reference.
- *
- * Increments the reference counter atomic.
- *
- * @param ref  pointer to ref counter
+ * Library instance, set after between library_init() and library_deinit() calls.
  */
-void ref_get(refcount_t *ref);
-
-/**
- * @brief Put back a unused reference.
- *
- * Decrements the reference counter atomic and 
- * says if more references available.
- *
- * @param ref  pointer to ref counter
- * @return             TRUE if no more references counted
- */
-bool ref_put(refcount_t *ref);
-
-
-#include <chunk.h>
-#include <printf_hook.h>
+extern library_t *lib;
 
-#endif /* LIBRARY_H_ */
+#endif /* LIBRARY_H_ @}*/