summaryrefslogtreecommitdiff
path: root/cleopatre/application/libspid/inc
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre/application/libspid/inc')
-rw-r--r--cleopatre/application/libspid/inc/label.h50
-rw-r--r--cleopatre/application/libspid/inc/libspid.h145
-rw-r--r--cleopatre/application/libspid/inc/openssl_md32_common.h408
-rw-r--r--cleopatre/application/libspid/inc/openssl_sha256.h101
-rw-r--r--cleopatre/application/libspid/inc/path.h55
5 files changed, 759 insertions, 0 deletions
diff --git a/cleopatre/application/libspid/inc/label.h b/cleopatre/application/libspid/inc/label.h
new file mode 100644
index 0000000000..bf0f274c60
--- /dev/null
+++ b/cleopatre/application/libspid/inc/label.h
@@ -0,0 +1,50 @@
+/* SPC300 project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/inc/label.h
+ * \brief define all labels used inside configuration / info files
+ * \ingroup libspid
+ *
+ * All labels of config / info files are defined here to avoid some possible type mistakes
+ */
+#ifndef LIBSPID_LABEL_H
+#define LIBSPID_LABEL_H
+
+/* LIBSPID_HARDWARE_INFO_PATH */
+#define LIBSPID_HARDWARE_INFO_LABEL_TOTO "toto"
+
+/* LIBSPID_HPAV_CONF_PATH */
+#define LIBSPID_HPAV_CONF_LABEL_CCO_PREFERRED "CCO_PREFERRED"
+#define LIBSPID_HPAV_CONF_LABEL_WAS_CCO "WAS_CCO"
+#define LIBSPID_HPAV_CONF_LABEL_NPW "NPW" /* network password */
+#define LIBSPID_HPAV_CONF_LABEL_NMK "NMK" /* network management key */
+#define LIBSPID_HPAV_CONF_LABEL_NID "NID" /* network identifier */
+#define LIBSPID_HPAV_CONF_LABEL_SL "SL" /* security level */
+#define LIBSPID_HPAV_CONF_LABEL_USER_HFID "USER_HFID" /* user human friendly identifier */
+#define LIBSPID_HPAV_CONF_LABEL_AVLN_HFID "AVLN_HFID" /* AVLN friendly identifer */
+
+#define LIBSPID_HPAV_CONF_VALUE_NONE "none"
+#define LIBSPID_HPAV_CONF_VALUE_SL_SC "sc" /* simple connect */
+#define LIBSPID_HPAV_CONF_VALUE_SL_HS "hs" /* high security */
+
+/* LIBSPID_HPAV_INFO_PATH */
+#define LIBSPID_HPAV_INFO_LABEL_PLCD_PID "PLCD_PID"
+#define LIBSPID_HPAV_INFO_LABEL_STATUS "STATUS"
+#define LIBSPID_HPAV_INFO_LABEL_CCO "CCO"
+#define LIBSPID_HPAV_INFO_LABEL_BACKUP_CCO "BACKUP_CCO"
+#define LIBSPID_HPAV_INFO_LABEL_SC "SC" /* station is in simple connect state */
+#define LIBSPID_HPAV_INFO_LABEL_NID "NID" /* network identifier */
+
+#define LIBSPID_HPAV_INFO_VALUE_STATUS_UNASSOCIATED "unassociated"
+#define LIBSPID_HPAV_INFO_VALUE_STATUS_ASSOCIATED "associated"
+#define LIBSPID_HPAV_INFO_VALUE_STATUS_AUTHENTICATED "authenticated"
+#define LIBSPID_HPAV_INFO_VALUE_CCO_STATION "station"
+#define LIBSPID_HPAV_INFO_VALUE_CCO_PROXY "proxy"
+#define LIBSPID_HPAV_INFO_VALUE_CCO_MAIN "main"
+
+#endif /* LIBSPID_LABEL_H */
diff --git a/cleopatre/application/libspid/inc/libspid.h b/cleopatre/application/libspid/inc/libspid.h
new file mode 100644
index 0000000000..29f354d573
--- /dev/null
+++ b/cleopatre/application/libspid/inc/libspid.h
@@ -0,0 +1,145 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/inc/libspid.h
+ * \brief structures and function prototypes of libspid
+ * \defgroup libspid libspid : general purpose SPiDCOM library
+ *
+ */
+
+#ifndef LIBSPID_H
+#define LIBSPID_H
+
+#include <stdint.h>
+#include <assert.h>
+
+#include "spid_img_desc.h"
+#include "nvram.h"
+#include "label.h"
+#include "openssl_sha256.h"
+#include "path.h"
+
+/** size of buffer to manage ip address */
+#define LIBSPID_IP_MAX_LEN 16
+
+/** size of buffer to manage mac address */
+#define LIBSPID_MAC_STR_LEN 18
+
+#define LIBSPID_LINE_MAX_LEN 1024
+#define LIBSPID_KEY_MAX_LEN 63
+#define LIBSPID_ELT_MAX_NB 32
+#define LIBSPID_CONFIG_DELIMITER "="
+#define LIBSPID_FALSE 0
+#define LIBSPID_TRUE 1
+
+/**
+ * list of errors returned by libspid functions
+ */
+typedef enum {
+ LIBSPID_SUCCESS = 0,
+ /** bad input parameters */
+ LIBSPID_ERROR_PARAM,
+ /** not enough available space */
+ LIBSPID_ERROR_NO_SPACE,
+ /** item / data not found */
+ LIBSPID_ERROR_NOT_FOUND,
+ /** system error, see errno for more details */
+ LIBSPID_ERROR_SYSTEM,
+} libspid_error_t;
+
+/**
+ * IP mode of interface : static or DHCP
+ */
+typedef enum {
+ /** interface setting is static : configuration is given by the local config file */
+ LIBSPID_IP_MODE_STATIC,
+ /** interface setting is DHCP : configuration is given by a DHCP server */
+ LIBSPID_IP_MODE_DHCP,
+} libspid_ip_mode_t;
+
+/** structure to manage IP network data */
+typedef struct {
+ /** IP mode */
+ libspid_ip_mode_t mode;
+ /** IP address in string format */
+ unsigned char address[LIBSPID_IP_MAX_LEN];
+ /** IP netmask in string format */
+ unsigned char netmask[LIBSPID_IP_MAX_LEN];
+ /** broadcast address in string format */
+ unsigned char broadcast[LIBSPID_IP_MAX_LEN];
+ /** gateway IP address in string format */
+ unsigned char gateway[LIBSPID_IP_MAX_LEN];
+ /** MTU of interface */
+ unsigned int mtu;
+} libspid_ip_t;
+
+typedef enum {
+ LIBSPID_IMAGE_DESC_TYPE_0,
+ LIBSPID_IMAGE_DESC_TYPE_1,
+ LIBSPID_IMAGE_DESC_TYPE_CURRENT,
+ LIBSPID_IMAGE_DESC_TYPE_ALTERNATE,
+ LIBSPID_IMAGE_DESC_TYPE_NB
+} libspid_image_desc_type_t;
+
+typedef enum {
+ LIBSPID_IMAGE_SELECT_0,
+ LIBSPID_IMAGE_SELECT_1,
+ LIBSPID_IMAGE_SELECT_SWITCH,
+ LIBSPID_IMAGE_SELECT_NB
+} libspid_image_select_t;
+
+/** */
+typedef struct
+{
+ int nothing;
+} spc300_image_desc_t;
+
+#define LIBSPID_GET_BOOLEAN(array) ((array[0] == 'Y' || array[0] == 'y')?1:0)
+/** size of pbkdf1 salt */
+#define LIBSPID_SECU_SALT_SIZE 8
+/** max password size. */
+#define LIBSPID_SECU_PWD_SIZE_MAX 64
+/** SHA 256 size. */
+#define LIBSPID_SECU_SHA256_SIZE 32
+/** pbkdf1 generated key size */
+#define LIBSPID_SECU_OUTPUT_KEY_SIZE 16
+/** PBKDF1 iteration. */
+#define LIBSPID_SECU_PBKDF1_ITERATION 1000
+
+typedef enum {
+ LIBSPID_SECU_SALT_TYPE_NONE = 0,
+ LIBSPID_SECU_SALT_TYPE_DAK,
+ LIBSPID_SECU_SALT_TYPE_NMK,
+ LIBSPID_SECU_SALT_TYPE_NB
+} libspid_secu_salt_type_t;
+
+extern libspid_error_t libspid_config_read_item (const char *filename, const char *label, char *value, int buffer_len);
+extern libspid_error_t libspid_config_write_item(const char *filename, const char *label, const char *value);
+extern libspid_error_t libspid_config_read_line(const char *filename, const char* delimiters, char *key, unsigned int *elt_number, char *elt[], char *buffer, unsigned int buffer_len);
+extern libspid_error_t libspid_config_write_line(const char *filename, const char delimiter, const char *key, unsigned int elt_number, char *elt[]);
+extern libspid_error_t libspid_config_remove_line(const char *filename, const char *delimiters, const char *key);
+extern libspid_error_t libspid_mac_str_to_bin(const char *str, unsigned char *bin);
+extern libspid_error_t libspid_mac_bin_to_str(const unsigned char *bin, char *str);
+extern libspid_error_t libspid_image_get_desc(libspid_image_desc_type_t type, spidcom_image_desc_t *image_desc, char *mtd_name);
+extern libspid_error_t libspid_image_select(libspid_image_select_t select);
+extern libspid_error_t libspid_network_get_ip (const char *interface, libspid_ip_t *ip);
+extern libspid_error_t libspid_network_set_ip (const char *interface, const libspid_ip_t *ip);
+extern libspid_error_t libspid_network_get_mac (const char *interface, unsigned char *mac);
+extern libspid_error_t libspid_system_get_kernel_version(char *buffer, int buffer_len);
+extern libspid_error_t libspid_system_get_plc_version (char *buffer, const int buffer_len);
+extern libspid_error_t libspid_system_get_av_version (char *buffer, const int buffer_len);
+extern libspid_error_t libspid_system_get_uptime(unsigned int *total_s, unsigned int *idle_s);
+extern libspid_error_t libspid_system_get_meminfo(char *buffer, int buffer_len);
+extern void libspid_system_reboot(void);
+extern libspid_error_t libspid_system_save(void);
+extern libspid_error_t libspid_system_save_file(const char *filename);
+extern libspid_error_t libspid_system_factory(void);
+extern libspid_error_t libspid_system_get_nvram(spc300_nvram_t *nvram);
+extern libspid_error_t libspid_secu_pbkdf1 (const unsigned char input[], const unsigned int input_length, const libspid_secu_salt_type_t salt_type, const unsigned int it_count, unsigned char output[], unsigned int output_length);
+
+#endif /* LIBSPID_H */
diff --git a/cleopatre/application/libspid/inc/openssl_md32_common.h b/cleopatre/application/libspid/inc/openssl_md32_common.h
new file mode 100644
index 0000000000..7c20684b06
--- /dev/null
+++ b/cleopatre/application/libspid/inc/openssl_md32_common.h
@@ -0,0 +1,408 @@
+/* crypto/md32_common.h */
+/* ====================================================================
+ * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ */
+
+/*
+ * This is a generic 32 bit "collector" for message digest algorithms.
+ * Whenever needed it collects input character stream into chunks of
+ * 32 bit values and invokes a block function that performs actual hash
+ * calculations.
+ *
+ * Porting guide.
+ *
+ * Obligatory macros:
+ *
+ * DATA_ORDER_IS_BIG_ENDIAN or DATA_ORDER_IS_LITTLE_ENDIAN
+ * this macro defines byte order of input stream.
+ * HASH_CBLOCK
+ * size of a unit chunk HASH_BLOCK operates on.
+ * HASH_LONG
+ * has to be at lest 32 bit wide, if it's wider, then
+ * HASH_LONG_LOG2 *has to* be defined along
+ * HASH_CTX
+ * context structure that at least contains following
+ * members:
+ * typedef struct {
+ * ...
+ * HASH_LONG Nl,Nh;
+ * either {
+ * HASH_LONG data[HASH_LBLOCK];
+ * unsigned char data[HASH_CBLOCK];
+ * };
+ * unsigned int num;
+ * ...
+ * } HASH_CTX;
+ * data[] vector is expected to be zeroed upon first call to
+ * HASH_UPDATE.
+ * HASH_UPDATE
+ * name of "Update" function, implemented here.
+ * HASH_TRANSFORM
+ * name of "Transform" function, implemented here.
+ * HASH_FINAL
+ * name of "Final" function, implemented here.
+ * HASH_BLOCK_DATA_ORDER
+ * name of "block" function capable of treating *unaligned* input
+ * message in original (data) byte order, implemented externally.
+ * HASH_MAKE_STRING
+ * macro convering context variables to an ASCII hash string.
+ *
+ * MD5 example:
+ *
+ * #define DATA_ORDER_IS_LITTLE_ENDIAN
+ *
+ * #define HASH_LONG MD5_LONG
+ * #define HASH_LONG_LOG2 MD5_LONG_LOG2
+ * #define HASH_CTX MD5_CTX
+ * #define HASH_CBLOCK MD5_CBLOCK
+ * #define HASH_UPDATE MD5_Update
+ * #define HASH_TRANSFORM MD5_Transform
+ * #define HASH_FINAL MD5_Final
+ * #define HASH_BLOCK_DATA_ORDER md5_block_data_order
+ *
+ * <appro@fy.chalmers.se>
+ */
+
+#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN)
+#error "DATA_ORDER must be defined!"
+#endif
+
+#ifndef HASH_CBLOCK
+#error "HASH_CBLOCK must be defined!"
+#endif
+#ifndef HASH_LONG
+#error "HASH_LONG must be defined!"
+#endif
+#ifndef HASH_CTX
+#error "HASH_CTX must be defined!"
+#endif
+
+#ifndef HASH_UPDATE
+#error "HASH_UPDATE must be defined!"
+#endif
+#ifndef HASH_TRANSFORM
+#error "HASH_TRANSFORM must be defined!"
+#endif
+#ifndef HASH_FINAL
+#error "HASH_FINAL must be defined!"
+#endif
+
+#ifndef HASH_BLOCK_DATA_ORDER
+#error "HASH_BLOCK_DATA_ORDER must be defined!"
+#endif
+
+/*
+ * Engage compiler specific rotate intrinsic function if available.
+ */
+#undef ROTATE
+#ifndef PEDANTIC
+# if defined(_MSC_VER) || defined(__ICC)
+# define ROTATE(a,n) _lrotl(a,n)
+# elif defined(__MWERKS__)
+# if defined(__POWERPC__)
+# define ROTATE(a,n) __rlwinm(a,n,0,31)
+# elif defined(__MC68K__)
+ /* Motorola specific tweak. <appro@fy.chalmers.se> */
+# define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) )
+# else
+# define ROTATE(a,n) __rol(a,n)
+# endif
+# elif defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
+ /*
+ * Some GNU C inline assembler templates. Note that these are
+ * rotates by *constant* number of bits! But that's exactly
+ * what we need here...
+ * <appro@fy.chalmers.se>
+ */
+# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
+# define ROTATE(a,n) ({ register unsigned int ret; \
+ asm ( \
+ "roll %1,%0" \
+ : "=r"(ret) \
+ : "I"(n), "0"(a) \
+ : "cc"); \
+ ret; \
+ })
+# elif defined(_ARCH_PPC) || defined(_ARCH_PPC64) || \
+ defined(__powerpc) || defined(__ppc__) || defined(__powerpc64__)
+# define ROTATE(a,n) ({ register unsigned int ret; \
+ asm ( \
+ "rlwinm %0,%1,%2,0,31" \
+ : "=r"(ret) \
+ : "r"(a), "I"(n)); \
+ ret; \
+ })
+# elif defined(__s390x__)
+# define ROTATE(a,n) ({ register unsigned int ret; \
+ asm ("rll %0,%1,%2" \
+ : "=r"(ret) \
+ : "r"(a), "I"(n)); \
+ ret; \
+ })
+# endif
+# endif
+#endif /* PEDANTIC */
+
+#ifndef ROTATE
+#define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n))))
+#endif
+
+#if defined(DATA_ORDER_IS_BIG_ENDIAN)
+
+#ifndef PEDANTIC
+# if defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
+# if ((defined(__i386) || defined(__i386__)) && !defined(I386_ONLY)) || \
+ (defined(__x86_64) || defined(__x86_64__))
+# if !defined(B_ENDIAN)
+ /*
+ * This gives ~30-40% performance improvement in SHA-256 compiled
+ * with gcc [on P4]. Well, first macro to be frank. We can pull
+ * this trick on x86* platforms only, because these CPUs can fetch
+ * unaligned data without raising an exception.
+ */
+# define HOST_c2l(c,l) ({ unsigned int r=*((const unsigned int *)(c)); \
+ asm ("bswapl %0":"=r"(r):"0"(r)); \
+ (c)+=4; (l)=r; })
+# define HOST_l2c(l,c) ({ unsigned int r=(l); \
+ asm ("bswapl %0":"=r"(r):"0"(r)); \
+ *((unsigned int *)(c))=r; (c)+=4; r; })
+# endif
+# endif
+# endif
+#endif
+#if defined(__s390__) || defined(__s390x__)
+# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, (l))
+# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, (l))
+#endif
+
+#ifndef HOST_c2l
+#define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \
+ l|=(((unsigned long)(*((c)++)))<<16), \
+ l|=(((unsigned long)(*((c)++)))<< 8), \
+ l|=(((unsigned long)(*((c)++))) ), \
+ l)
+#endif
+#ifndef HOST_l2c
+#define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \
+ *((c)++)=(unsigned char)(((l)>>16)&0xff), \
+ *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
+ *((c)++)=(unsigned char)(((l) )&0xff), \
+ l)
+#endif
+
+#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
+
+#ifndef PEDANTIC
+# if defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
+# if defined(__s390x__)
+# define HOST_c2l(c,l) ({ asm ("lrv %0,0(%1)" \
+ :"=r"(l) : "r"(c)); \
+ (c)+=4; (l); })
+# define HOST_l2c(l,c) ({ asm ("strv %0,0(%1)" \
+ : : "r"(l),"r"(c) : "memory"); \
+ (c)+=4; (l); })
+# endif
+# endif
+#endif
+#if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
+# ifndef B_ENDIAN
+ /* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */
+# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l)
+# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l)
+# endif
+#endif
+
+#ifndef HOST_c2l
+#define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \
+ l|=(((unsigned long)(*((c)++)))<< 8), \
+ l|=(((unsigned long)(*((c)++)))<<16), \
+ l|=(((unsigned long)(*((c)++)))<<24), \
+ l)
+#endif
+#ifndef HOST_l2c
+#define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
+ *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
+ *((c)++)=(unsigned char)(((l)>>16)&0xff), \
+ *((c)++)=(unsigned char)(((l)>>24)&0xff), \
+ l)
+#endif
+
+#endif
+
+/*
+ * Time for some action:-)
+ */
+
+int HASH_UPDATE (HASH_CTX *c, const void *data_, unsigned int len)
+ {
+ const unsigned char *data=data_;
+ unsigned char *p;
+ HASH_LONG l;
+ size_t n;
+
+ if (len==0) return 1;
+
+ l=(c->Nl+(((HASH_LONG)len)<<3))&0xffffffffUL;
+ /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
+ * Wei Dai <weidai@eskimo.com> for pointing it out. */
+ if (l < c->Nl) /* overflow */
+ c->Nh++;
+ c->Nh+=(len>>29); /* might cause compiler warning on 16-bit */
+ c->Nl=l;
+
+ n = c->num;
+ if (n != 0)
+ {
+ p=(unsigned char *)c->data;
+
+ if (len >= HASH_CBLOCK || len+n >= HASH_CBLOCK)
+ {
+ memcpy (p+n,data,HASH_CBLOCK-n);
+ HASH_BLOCK_DATA_ORDER (c,p,1);
+ n = HASH_CBLOCK-n;
+ data += n;
+ len -= n;
+ c->num = 0;
+ memset (p,0,HASH_CBLOCK); /* keep it zeroed */
+ }
+ else
+ {
+ memcpy (p+n,data,len);
+ c->num += (unsigned int)len;
+ return 1;
+ }
+ }
+
+ n = len/HASH_CBLOCK;
+ if (n > 0)
+ {
+ HASH_BLOCK_DATA_ORDER (c,data,n);
+ n *= HASH_CBLOCK;
+ data += n;
+ len -= n;
+ }
+
+ if (len != 0)
+ {
+ p = (unsigned char *)c->data;
+ c->num = len;
+ memcpy (p,data,len);
+ }
+ return 1;
+ }
+
+
+void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data)
+ {
+ HASH_BLOCK_DATA_ORDER (c,data,1);
+ }
+
+
+int HASH_FINAL (unsigned char *md, HASH_CTX *c)
+ {
+ unsigned char *p = (unsigned char *)c->data;
+ size_t n = c->num;
+
+ p[n] = 0x80; /* there is always room for one */
+ n++;
+
+ if (n > (HASH_CBLOCK-8))
+ {
+ memset (p+n,0,HASH_CBLOCK-n);
+ n=0;
+ HASH_BLOCK_DATA_ORDER (c,p,1);
+ }
+ memset (p+n,0,HASH_CBLOCK-8-n);
+
+ p += HASH_CBLOCK-8;
+#if defined(DATA_ORDER_IS_BIG_ENDIAN)
+ (void)HOST_l2c(c->Nh,p);
+ (void)HOST_l2c(c->Nl,p);
+#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
+ (void)HOST_l2c(c->Nl,p);
+ (void)HOST_l2c(c->Nh,p);
+#endif
+ p -= HASH_CBLOCK;
+ HASH_BLOCK_DATA_ORDER (c,p,1);
+ c->num=0;
+ memset (p,0,HASH_CBLOCK);
+
+#ifndef HASH_MAKE_STRING
+#error "HASH_MAKE_STRING must be defined!"
+#else
+ HASH_MAKE_STRING(c,md);
+#endif
+
+ return 1;
+ }
+
+#ifndef MD32_REG_T
+#define MD32_REG_T long
+/*
+ * This comment was originaly written for MD5, which is why it
+ * discusses A-D. But it basically applies to all 32-bit digests,
+ * which is why it was moved to common header file.
+ *
+ * In case you wonder why A-D are declared as long and not
+ * as MD5_LONG. Doing so results in slight performance
+ * boost on LP64 architectures. The catch is we don't
+ * really care if 32 MSBs of a 64-bit register get polluted
+ * with eventual overflows as we *save* only 32 LSBs in
+ * *either* case. Now declaring 'em long excuses the compiler
+ * from keeping 32 MSBs zeroed resulting in 13% performance
+ * improvement under SPARC Solaris7/64 and 5% under AlphaLinux.
+ * Well, to be honest it should say that this *prevents*
+ * performance degradation.
+ * <appro@fy.chalmers.se>
+ * Apparently there're LP64 compilers that generate better
+ * code if A-D are declared int. Most notably GCC-x86_64
+ * generates better code.
+ * <appro@fy.chalmers.se>
+ */
+#endif
diff --git a/cleopatre/application/libspid/inc/openssl_sha256.h b/cleopatre/application/libspid/inc/openssl_sha256.h
new file mode 100644
index 0000000000..86309e95e3
--- /dev/null
+++ b/cleopatre/application/libspid/inc/openssl_sha256.h
@@ -0,0 +1,101 @@
+/* crypto/sha/sha.h */
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to. The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * "This product includes cryptographic software written by
+ * Eric Young (eay@cryptsoft.com)"
+ * The word 'cryptographic' can be left out if the rouines from the library
+ * being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ * the apps directory (application code) you must include an acknowledgement:
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+#ifndef HEADER_SHA_H
+#define HEADER_SHA_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then !
+ * ! SHA_LONG_LOG2 has to be defined along. !
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ */
+#define SHA_LONG unsigned int
+#define SHA_LBLOCK 16
+#define SHA_CBLOCK (SHA_LBLOCK*4) /* SHA treats input data as a
+ * contiguous array of 32 bit
+ * wide big-endian values. */
+#define SHA_LAST_BLOCK (SHA_CBLOCK-8)
+#define SHA_DIGEST_LENGTH 20
+#define SHA256_CBLOCK (SHA_LBLOCK) /* SHA-256 treats input data as a
+ * contiguous array of 32 bit
+ * wide big-endian values. */
+#define SHA256_DIGEST_LENGTH 32
+
+typedef struct SHA256state_st
+{
+ SHA_LONG h[8];
+ SHA_LONG Nl,Nh;
+ SHA_LONG data[SHA_LBLOCK];
+ unsigned int num,md_len;
+} SHA256_CTX;
+
+void SHA256_Init(SHA256_CTX *c);
+int SHA256_Update(SHA256_CTX *c, const void *data, unsigned int len);
+int SHA256_Final(unsigned char *md, SHA256_CTX *c);
+unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md);
+void SHA256_Transform(SHA256_CTX *c, const unsigned char*data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/cleopatre/application/libspid/inc/path.h b/cleopatre/application/libspid/inc/path.h
new file mode 100644
index 0000000000..a308e922e5
--- /dev/null
+++ b/cleopatre/application/libspid/inc/path.h
@@ -0,0 +1,55 @@
+/* SPC300 bundle {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file application/libspid/inc/path.h
+ * \brief path defines of configuration files
+ * \ingroup libspid
+ *
+ * This file defines all pathes of configuraiton files.
+ * Modify it to add / change a file path.
+ *
+ */
+#ifndef LIBSPID_PATH_H
+#define LIBSPID_PATH_H
+
+#ifndef __UTESTS__
+
+ #define LIBSPID_SAVE_LIST_PATH "/etc/save.lst"
+ #define LIBSPID_SAVE_DIR_PATH "/usr/local/etc"
+ #define LIBSPID_CONF_ROOT_PATH "/etc"
+ #define LIBSPID_HARDWARE_INFO_PATH "/etc/hardware.info"
+ #define LIBSPID_HPAV_CONF_PATH "/etc/hpav.conf"
+ #define LIBSPID_HPAV_INFO_PATH "/etc/hpav.info"
+ #define LIBSPID_NETWORK_CONF_PATH "/etc/network/interfaces"
+ #define LIBSPID_SYSTEM_VERSION_PATH "/proc/version"
+ #define LIBSPID_SYSTEM_UPTIME_PATH "/proc/uptime"
+ #define LIBSPID_SYSTEM_MEMINFO_PATH "/proc/meminfo"
+ #define LIBSPID_SYSTEM_MTD_PATH "/proc/mtd"
+ #define LIBSPID_FACTORY_PATH "/factory"
+ #define LIBSPID_DEV_PATH "/dev"
+
+#else /* unitary tests paths */
+
+ #define UTESTS_TMP_DIR "/tmp/utests"
+ #define LIBSPID_SAVE_LIST_PATH "/tmp/utests/etc/save.lst"
+ #define LIBSPID_SAVE_DIR_PATH "/tmp/utests/local"
+ #define LIBSPID_CONF_ROOT_PATH "/tmp/utests/etc"
+ #define LIBSPID_HARDWARE_INFO_PATH "/tmp/utests/etc/hardware.info"
+ #define LIBSPID_HPAV_CONF_PATH "/tmp/utests/etc/hpav.conf"
+ #define LIBSPID_HPAV_INFO_PATH "/tmp/utests/etc/hpav.info"
+ #define LIBSPID_NETWORK_CONF_PATH "/tmp/utests/network/interfaces"
+ #define LIBSPID_SYSTEM_VERSION_PATH "/tmp/utests/proc/version"
+ #define LIBSPID_SYSTEM_UPTIME_PATH "/tmp/utests/proc/uptime"
+ #define LIBSPID_SYSTEM_MEMINFO_PATH "/tmp/utests/proc/meminfo"
+ #define LIBSPID_SYSTEM_MTD_PATH "/tmp/utests/proc/mtd"
+ #define LIBSPID_FACTORY_PATH "/tmp/utests/factory"
+ #define LIBSPID_DEV_PATH "/tmp/utests/dev"
+
+#endif
+
+#endif /* LIBSPID_PATH_H */