diff --git a/README b/README
index fb52745..8c2a6f6 100644
--- a/README
+++ b/README
@@ -10,11 +10,13 @@ External source
Taken from http://chibios.sourceforge.net/
Note that CRLF is converted to LF in this repository.
-* STM32_USB-FS-Device_Driver
-Taken from http://github.com/robots/STM32.git
+* PolarSSS 0.14.0
+Taken from http://polarssl.org/
-* USBCDC
-Taken from http://github.com/robots/STM32.git
+* STM32F10x USB Full Speed Device Library (USB-FS-Device_Lib)
+I took Libraries/STM32_USB-FS-Device_Driver and a part of
+Project/Virtual_COM_Port in STM32_USB-FS-Device_Lib distribution.
+See http://www.st.com for detail.
HOWTO RUN
diff --git a/USBCDC/hw_config.c b/Virtual_COM_Port/hw_config.c
similarity index 100%
rename from USBCDC/hw_config.c
rename to Virtual_COM_Port/hw_config.c
diff --git a/USBCDC/hw_config.h b/Virtual_COM_Port/hw_config.h
similarity index 100%
rename from USBCDC/hw_config.h
rename to Virtual_COM_Port/hw_config.h
diff --git a/USBCDC/platform.h b/Virtual_COM_Port/platform.h
similarity index 100%
rename from USBCDC/platform.h
rename to Virtual_COM_Port/platform.h
diff --git a/USBCDC/platform_config.h b/Virtual_COM_Port/platform_config.h
similarity index 100%
rename from USBCDC/platform_config.h
rename to Virtual_COM_Port/platform_config.h
diff --git a/USBCDC/usb_conf.h b/Virtual_COM_Port/usb_conf.h
similarity index 100%
rename from USBCDC/usb_conf.h
rename to Virtual_COM_Port/usb_conf.h
diff --git a/USBCDC/usb_desc.c b/Virtual_COM_Port/usb_desc.c
similarity index 100%
rename from USBCDC/usb_desc.c
rename to Virtual_COM_Port/usb_desc.c
diff --git a/USBCDC/usb_desc.h b/Virtual_COM_Port/usb_desc.h
similarity index 100%
rename from USBCDC/usb_desc.h
rename to Virtual_COM_Port/usb_desc.h
diff --git a/USBCDC/usb_endp.c b/Virtual_COM_Port/usb_endp.c
similarity index 100%
rename from USBCDC/usb_endp.c
rename to Virtual_COM_Port/usb_endp.c
diff --git a/USBCDC/usb_istr.c b/Virtual_COM_Port/usb_istr.c
similarity index 100%
rename from USBCDC/usb_istr.c
rename to Virtual_COM_Port/usb_istr.c
diff --git a/USBCDC/usb_istr.h b/Virtual_COM_Port/usb_istr.h
similarity index 100%
rename from USBCDC/usb_istr.h
rename to Virtual_COM_Port/usb_istr.h
diff --git a/USBCDC/usb_prop.c b/Virtual_COM_Port/usb_prop.c
similarity index 100%
rename from USBCDC/usb_prop.c
rename to Virtual_COM_Port/usb_prop.c
diff --git a/USBCDC/usb_prop.h b/Virtual_COM_Port/usb_prop.h
similarity index 100%
rename from USBCDC/usb_prop.h
rename to Virtual_COM_Port/usb_prop.h
diff --git a/USBCDC/usb_pwr.c b/Virtual_COM_Port/usb_pwr.c
similarity index 100%
rename from USBCDC/usb_pwr.c
rename to Virtual_COM_Port/usb_pwr.c
diff --git a/USBCDC/usb_pwr.h b/Virtual_COM_Port/usb_pwr.h
similarity index 100%
rename from USBCDC/usb_pwr.h
rename to Virtual_COM_Port/usb_pwr.h
diff --git a/src/Makefile b/src/Makefile
index d40ec2e..729b32b 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,3 +1,6 @@
+# Makefile for Gnuk
+
+
##############################################################################
# Build global options
# NOTE: Can be overridden externally.
@@ -62,7 +65,7 @@ include $(CHIBIOS)/os/hal/hal.mk
include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/port.mk
include $(CHIBIOS)/os/kernel/kernel.mk
include stmusb.mk
-include usbcdc.mk
+include vcomport.mk
include rsa.mk
include ../boards/OLIMEX_STM32_H103/board.mk
@@ -76,15 +79,16 @@ CSRC = $(PORTSRC) \
$(CHIBIOS)/os/various/evtimer.c \
$(CHIBIOS)/os/various/syscalls.c \
$(STMUSBSRC) \
- $(USBCDCSRC) \
+ $(VCOMSRC) \
$(RSASRC) \
- main.c hw_config.c usb_lld.c usb_desc.c usb_prop.c usb-icc.c gpg.c ac.c gpg-do.c
+ main.c hw_config.c usb_lld.c usb_desc.c usb_prop.c \
+ usb-icc.c gpg.c ac.c openpgp-do.c flash.c
# List ASM source files here
ASMSRC = $(PORTASM) \
$(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/vectors.s gpg-data.s
-INCDIR = $(RSAINCDIR) $(STMUSBINCDIR) $(USBCDCDIR) \
+INCDIR = $(RSAINCDIR) $(STMUSBINCDIR) $(VCOMDIR) \
$(PORTINC) $(KERNINC) $(TESTINC) \
$(HALINC) $(PLATFORMINC) $(BOARDINC) \
$(CHIBIOS)/os/various
diff --git a/src/chconf.h b/src/chconf.h
index 65b9045..543634b 100644
--- a/src/chconf.h
+++ b/src/chconf.h
@@ -1,494 +1,56 @@
-/*
- ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio.
-
- This file is part of ChibiOS/RT.
-
- ChibiOS/RT 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 3 of the License, or
- (at your option) any later version.
-
- ChibiOS/RT 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.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
- ---
-
- A special exception to the GPL can be applied should you wish to distribute
- a combined work that includes ChibiOS/RT, without being obliged to provide
- the source code for any proprietary components. See the file exception.txt
- for full details of how and when the exception can be applied.
-*/
-
-/**
- * @file templates/chconf.h
- * @brief Configuration file template.
- * @details A copy of this file must be placed in each project directory, it
- * contains the application specific kernel settings.
- *
- * @addtogroup config
- * @details Kernel related settings and hooks.
- * @{
- */
+/* ChibiOS/RT configuration file */
#ifndef _CHCONF_H_
#define _CHCONF_H_
-/*===========================================================================*/
-/* Kernel parameters. */
-/*===========================================================================*/
-
-/**
- * @brief System tick frequency.
- * @details Frequency of the system timer that drives the system ticks. This
- * setting also defines the system tick time unit.
- */
-#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
#define CH_FREQUENCY 1000
-#endif
-
-/**
- * @brief Round robin interval.
- * @details This constant is the number of system ticks allowed for the
- * threads before preemption occurs. Setting this value to zero
- * disables the preemption for threads with equal priority and the
- * round robin becomes cooperative. Note that higher priority
- * threads can still preempt, the kernel is always preemptive.
- *
- * @note Disabling the round robin preemption makes the kernel more compact
- * and generally faster.
- */
-#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
#define CH_TIME_QUANTUM 20
-#endif
-
-/**
- * @brief Nested locks.
- * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
- * operations is allowed.
- * For performance and code size reasons the recommended setting
- * is to leave this option disabled.
- * You may use this option if you need to merge ChibiOS/RT with
- * external libraries that require nested lock/unlock operations.
- *
- * @note T he default is @p FALSE.
- */
-#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__)
#define CH_USE_NESTED_LOCKS FALSE
-#endif
-
-/**
- * @brief Managed RAM size.
- * @details Size of the RAM area to be managed by the OS. If set to zero
- * then the whole available RAM is used. The core memory is made
- * available to the heap allocator and/or can be used directly through
- * the simplified core memory allocator.
- *
- * @note In order to let the OS manage the whole RAM the linker script must
- * provide the @p __heap_base__ and @p __heap_end__ symbols.
- * @note Requires @p CH_USE_COREMEM.
- */
-#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
-#define CH_MEMCORE_SIZE 0
-#endif
-
-/*===========================================================================*/
-/* Performance options. */
-/*===========================================================================*/
-
-/**
- * @brief OS optimization.
- * @details If enabled then time efficient rather than space efficient code
- * is used when two possible implementations exist.
- *
- * @note This is not related to the compiler optimization options.
- * @note The default is @p TRUE.
- */
-#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
+#define CH_MEMCORE_SIZE 0 /* Whole RAM */
#define CH_OPTIMIZE_SPEED TRUE
-#endif
-
-/**
- * @brief Exotic optimization.
- * @details If defined then a CPU register is used as storage for the global
- * @p currp variable. Caching this variable in a register greatly
- * improves both space and time OS efficiency. A side effect is that
- * one less register has to be saved during the context switch
- * resulting in lower RAM usage and faster context switch.
- *
- * @note This option is only usable with the GCC compiler and is only useful
- * on processors with many registers like ARM cores.
- * @note If this option is enabled then ALL the libraries linked to the
- * ChibiOS/RT code must be recompiled with the GCC option @p
- * -ffixed-@.
- * @note This option must be enabled in the Makefile, it is listed here for
- * documentation only.
- */
-#if defined(__DOXYGEN__)
-#define CH_CURRP_REGISTER_CACHE "reg"
-#endif
-
-/*===========================================================================*/
-/* Subsystem options. */
-/*===========================================================================*/
-
-/**
- * @brief Threads registry APIs.
- * @details If enabled then the registry APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
#define CH_USE_REGISTRY TRUE
-#endif
-
-/**
- * @brief Threads synchronization APIs.
- * @details If enabled then the @p chThdWait() function is included in
- * the kernel.
- *
- * @note The default is @p TRUE.
- */
-#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
#define CH_USE_WAITEXIT TRUE
-#endif
-
-/**
- * @brief Semaphores APIs.
- * @details If enabled then the Semaphores APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
-#define CH_USE_SEMAPHORES TRUE
-#endif
-
-/**
- * @brief Semaphores queuing mode.
- * @details If enabled then the threads are enqueued on semaphores by
- * priority rather than in FIFO order.
- *
- * @note The default is @p FALSE. Enable this if you have special requirements.
- * @note Requires @p CH_USE_SEMAPHORES.
- */
-#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
+#define CH_USE_SEMAPHORES FALSE
#define CH_USE_SEMAPHORES_PRIORITY FALSE
-#endif
-
-/**
- * @brief Atomic semaphore API.
- * @details If enabled then the semaphores the @p chSemSignalWait() API
- * is included in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_USE_SEMAPHORES.
- */
-#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
-#define CH_USE_SEMSW TRUE
-#endif
-
-/**
- * @brief Mutexes APIs.
- * @details If enabled then the mutexes APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
+#define CH_USE_SEMSW FALSE
#define CH_USE_MUTEXES TRUE
-#endif
-
-/**
- * @brief Conditional Variables APIs.
- * @details If enabled then the conditional variables APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_USE_MUTEXES.
- */
-#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
#define CH_USE_CONDVARS TRUE
-#endif
-
-/**
- * @brief Conditional Variables APIs with timeout.
- * @details If enabled then the conditional variables APIs with timeout
- * specification are included in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_USE_CONDVARS.
- */
-#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
#define CH_USE_CONDVARS_TIMEOUT TRUE
-#endif
-
-/**
- * @brief Events Flags APIs.
- * @details If enabled then the event flags APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
-#define CH_USE_EVENTS TRUE
-#endif
-
-/**
- * @brief Events Flags APIs with timeout.
- * @details If enabled then the events APIs with timeout specification
- * are included in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_USE_EVENTS.
- */
-#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
-#define CH_USE_EVENTS_TIMEOUT TRUE
-#endif
-
-/**
- * @brief Synchronous Messages APIs.
- * @details If enabled then the synchronous messages APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
+#define CH_USE_EVENTS TRUE /* We use this! */
+#define CH_USE_EVENTS_TIMEOUT TRUE /* We use this! */
#define CH_USE_MESSAGES TRUE
-#endif
-
-/**
- * @brief Synchronous Messages queuing mode.
- * @details If enabled then messages are served by priority rather than in
- * FIFO order.
- *
- * @note The default is @p FALSE. Enable this if you have special requirements.
- * @note Requires @p CH_USE_MESSAGES.
- */
-#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
#define CH_USE_MESSAGES_PRIORITY FALSE
-#endif
-
-/**
- * @brief Mailboxes APIs.
- * @details If enabled then the asynchronous messages (mailboxes) APIs are
- * included in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_USE_SEMAPHORES.
- */
-#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
-#define CH_USE_MAILBOXES TRUE
-#endif
-
-/**
- * @brief I/O Queues APIs.
- * @details If enabled then the I/O queues APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_USE_SEMAPHORES.
- */
-#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
-#define CH_USE_QUEUES TRUE
-#endif
-
-/**
- * @brief Core Memory Manager APIs.
- * @details If enabled then the core memory manager APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
+#define CH_USE_MAILBOXES FALSE
+#define CH_USE_QUEUES FALSE
#define CH_USE_MEMCORE TRUE
-#endif
-
-/**
- * @brief Heap Allocator APIs.
- * @details If enabled then the memory heap allocator APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or
- * @p CH_USE_SEMAPHORES.
- * @note Mutexes are recommended.
- */
-#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
#define CH_USE_HEAP TRUE
-#endif
-
-/**
- * @brief C-runtime allocator.
- * @details If enabled the the heap allocator APIs just wrap the C-runtime
- * @p malloc() and @p free() functions.
- *
- * @note The default is @p FALSE.
- * @note Requires @p CH_USE_HEAP.
- * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the
- * appropriate documentation.
- */
-#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
#define CH_USE_MALLOC_HEAP FALSE
-#endif
-
-/**
- * @brief Memory Pools Allocator APIs.
- * @details If enabled then the memory pools allocator APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
#define CH_USE_MEMPOOLS TRUE
-#endif
+#define CH_USE_DYNAMIC FALSE
-/**
- * @brief Dynamic Threads APIs.
- * @details If enabled then the dynamic threads creation APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_USE_WAITEXIT.
- * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
- */
-#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
-#define CH_USE_DYNAMIC TRUE
-#endif
-
-/*===========================================================================*/
-/* Debug options. */
-/*===========================================================================*/
-
-/**
- * @brief Debug option, parameters checks.
- * @details If enabled then the checks on the API functions input
- * parameters are activated.
- *
- * @note The default is @p FALSE.
- */
-#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
+/* Debug options */
#define CH_DBG_ENABLE_CHECKS FALSE
-#endif
-
-/**
- * @brief Debug option, consistency checks.
- * @details If enabled then all the assertions in the kernel code are
- * activated. This includes consistency checks inside the kernel,
- * runtime anomalies and port-defined checks.
- *
- * @note The default is @p FALSE.
- */
-#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
#define CH_DBG_ENABLE_ASSERTS FALSE
-#endif
-
-/**
- * @brief Debug option, trace buffer.
- * @details If enabled then the context switch circular trace buffer is
- * activated.
- *
- * @note The default is @p FALSE.
- */
-#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
#define CH_DBG_ENABLE_TRACE FALSE
-#endif
-
-/**
- * @brief Debug option, stack checks.
- * @details If enabled then a runtime stack check is performed.
- *
- * @note The default is @p FALSE.
- * @note The stack check is performed in a architecture/port dependent way.
- * It may not be implemented or some ports.
- * @note The default failure mode is to halt the system with the global
- * @p panic_msg variable set to @p NULL.
- */
-#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
#define CH_DBG_ENABLE_STACK_CHECK FALSE
-#endif
-
-/**
- * @brief Debug option, stacks initialization.
- * @details If enabled then the threads working area is filled with a byte
- * value when a thread is created. This can be useful for the
- * runtime measurement of the used stack.
- *
- * @note The default is @p FALSE.
- */
-#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
#define CH_DBG_FILL_THREADS FALSE
-#endif
-
-/**
- * @brief Debug option, threads profiling.
- * @details If enabled then a field is added to the @p Thread structure that
- * counts the system ticks occurred while executing the thread.
- *
- * @note The default is @p TRUE.
- * @note This debug option is defaulted to TRUE because it is required by
- * some test cases into the test suite.
- */
-#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
#define CH_DBG_THREADS_PROFILING TRUE
-#endif
-/*===========================================================================*/
-/* Kernel hooks. */
-/*===========================================================================*/
-
-/**
- * @brief Threads descriptor structure hook.
- * @details User fields added to the end of the @p Thread structure.
- */
-#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
#define THREAD_EXT_FIELDS \
struct { \
/* Add threads custom fields here.*/ \
};
-#endif
-/**
- * @brief Threads initialization hook.
- * @details User initialization code added to the @p chThdInit() API.
- *
- * @note It is invoked from within @p chThdInit() and implicitily from all
- * the threads creation APIs.
- */
-#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__)
#define THREAD_EXT_INIT(tp) { \
/* Add threads initialization code here.*/ \
}
-#endif
-/**
- * @brief Threads finalization hook.
- * @details User finalization code added to the @p chThdExit() API.
- *
- * @note It is inserted into lock zone.
- * @note It is also invoked when the threads simply return in order to
- * terminate.
- */
-#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__)
#define THREAD_EXT_EXIT(tp) { \
/* Add threads finalization code here.*/ \
}
-#endif
-/**
- * @brief Idle Loop hook.
- * @details This hook is continuously invoked by the idle thread loop.
- */
-#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
#define IDLE_LOOP_HOOK() { \
/* Idle loop code here.*/ \
}
-#endif
-
-/*===========================================================================*/
-/* Port-specific settings (override port settings defaulted in chcore.h). */
-/*===========================================================================*/
#endif /* _CHCONF_H_ */
-
-/** @} */
diff --git a/src/gnuk.h b/src/gnuk.h
index 2acbbff..cc4c1fe 100644
--- a/src/gnuk.h
+++ b/src/gnuk.h
@@ -44,8 +44,9 @@ extern int verify_pso_admin (uint8_t *pw, int pw_len);
extern void write_res_apdu (const uint8_t *p, int len,
uint8_t sw1, uint8_t sw2);
-#define DEBUG 1
extern int gpg_do_table_init (void);
extern void gpg_do_get_data (uint16_t tag);
extern void gpg_do_put_data (uint16_t tag, uint8_t *data, int len);
+
+extern uint8_t * flash_do_write (uint16_t tag, uint8_t *data, int len);
diff --git a/src/halconf.h b/src/halconf.h
index 40b1798..58f7cd1 100644
--- a/src/halconf.h
+++ b/src/halconf.h
@@ -1,159 +1,17 @@
-/*
- ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio.
-
- This file is part of ChibiOS/RT.
-
- ChibiOS/RT 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 3 of the License, or
- (at your option) any later version.
-
- ChibiOS/RT 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.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
- ---
-
- A special exception to the GPL can be applied should you wish to distribute
- a combined work that includes ChibiOS/RT, without being obliged to provide
- the source code for any proprietary components. See the file exception.txt
- for full details of how and when the exception can be applied.
-*/
-
-/**
- * @file templates/halconf.h
- * @brief HAL configuration header.
- * @addtogroup HAL_CONF
- * @{
- */
-
-/*
- * HAL configuration file, this file allows to enable or disable the various
- * device drivers from your application. You may also use this file in order
- * to override the device drivers default settings.
- */
+/* HAL configuration file for ChibiOS/RT */
#ifndef _HALCONF_H_
#define _HALCONF_H_
-/*
- * Uncomment the following line in order to include a mcu-related
- * settings file. This file can be used to include platform specific
- * header files or to override the low level drivers settings.
- */
#include "mcuconf.h"
-/*===========================================================================*/
-/* PAL driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables the PAL subsystem.
- */
-#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__)
#define CH_HAL_USE_PAL TRUE
-#endif
-
-/*===========================================================================*/
-/* ADC driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables the ADC subsystem.
- */
-#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__)
#define CH_HAL_USE_ADC FALSE
-#endif
-
-/*===========================================================================*/
-/* CAN driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables the CAN subsystem.
- */
-#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__)
#define CH_HAL_USE_CAN FALSE
-#endif
-
-/*===========================================================================*/
-/* MAC driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables the MAC subsystem.
- */
-#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__)
#define CH_HAL_USE_MAC FALSE
-#endif
-
-/*===========================================================================*/
-/* PWM driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables the PWM subsystem.
- */
-#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__)
#define CH_HAL_USE_PWM FALSE
-#endif
-
-/*===========================================================================*/
-/* SERIAL driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables the SERIAL subsystem.
- */
-#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__)
-#define CH_HAL_USE_SERIAL TRUE
-#endif
-
-/*
- * Default SERIAL settings overrides (uncomment to override).
- */
-/*#define SERIAL_DEFAULT_BITRATE 38400*/
-/*#define SERIAL_BUFFERS_SIZE 64*/
-
-/*===========================================================================*/
-/* SPI driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables the SPI subsystem.
- */
-#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__)
+#define CH_HAL_USE_SERIAL FALSE
#define CH_HAL_USE_SPI FALSE
-#endif
-
-/*
- * Default SPI settings overrides (uncomment to override).
- */
-/*#define SPI_USE_MUTUAL_EXCLUSION TRUE*/
-
-/*===========================================================================*/
-/* MMC_SPI driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables the MMC_SPI subsystem.
- */
-#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
#define CH_HAL_USE_MMC_SPI FALSE
-#endif
-
-/*
- * Default MMC_SPI settings overrides (uncomment to override).
- */
-/*#define MMC_SECTOR_SIZE 512*/
-/*#define MMC_NICE_WAITING TRUE*/
-/*#define MMC_POLLING_INTERVAL 10*/
-/*#define MMC_POLLING_DELAY 10*/
#endif /* _HALCONF_H_ */
-
-/** @} */
diff --git a/src/hw_config.c b/src/hw_config.c
index c0153c0..8b762f9 100644
--- a/src/hw_config.c
+++ b/src/hw_config.c
@@ -1,3 +1,10 @@
+/* Hardware specific USB functions */
+/*
+ * For detail, please see the documentation of
+ * STM32F10x USB Full Speed Device Library (USB-FS-Device_Lib)
+ * by STMicroelectronics' MCD Application Team
+ */
+
#include "ch.h"
#include "hal.h"
diff --git a/src/main.c b/src/main.c
index 0e823de..c39d324 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,28 +1,25 @@
/*
- ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio.
-
- This file is part of ChibiOS/RT.
-
- ChibiOS/RT 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 3 of the License, or
- (at your option) any later version.
-
- ChibiOS/RT 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.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
- ---
-
- A special exception to the GPL can be applied should you wish to distribute
- a combined work that includes ChibiOS/RT, without being obliged to provide
- the source code for any proprietary components. See the file exception.txt
- for full details of how and when the exception can be applied.
-*/
+ * main.c - main routine of Gnuk
+ *
+ * Copyright (C) 2010 Free Software Initiative of Japan
+ * Author: NIIBE Yutaka
+ *
+ * This file is a part of Gnuk, a GnuPG USB Token implementation.
+ *
+ * Gnuk 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Gnuk 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
#include "ch.h"
#include "hal.h"
@@ -174,7 +171,8 @@ extern msg_t GPGthread (void *arg);
* Entry point, note, the main() function is already a thread in the system
* on entry.
*/
-int main(int argc, char **argv)
+int
+main (int argc, char **argv)
{
int count = 0;
diff --git a/src/gpg-do.c b/src/openpgp-do.c
similarity index 96%
rename from src/gpg-do.c
rename to src/openpgp-do.c
index 16e661c..61d3504 100644
--- a/src/gpg-do.c
+++ b/src/openpgp-do.c
@@ -1,5 +1,5 @@
/*
- * gpg-do.c -- OpenPGP card Data Objects (DO) handling
+ * openpgp-do.c -- OpenPGP card Data Objects (DO) handling
*
* Copyright (C) 2010 Free Software Initiative of Japan
* Author: NIIBE Yutaka
@@ -21,6 +21,8 @@
*
*/
+#include "config.h"
+
#include "ch.h"
#include "gnuk.h"
@@ -619,37 +621,6 @@ gpg_do_get_data (uint16_t tag)
write_res_apdu (NULL, 0, 0x6a, 0x88);
}
-uint8_t *
-flash_do_write (uint16_t tag, uint8_t *data, int len)
-{
- static uint8_t do_pool[1024];
- static uint8_t *last_p = do_pool;
- uint8_t *p = last_p;
-
- if (last_p - do_pool + len + 2 + 3 > 1024)
- return NULL;
-
- *last_p++ = (tag >> 8);
- *last_p++ = (tag & 0xff);
- if (len < 128)
- *last_p++ = len;
- else if (len < 256)
- {
- *last_p++ = 0x81;
- *last_p++ = len;
- }
- else
- {
- *last_p++ = 0x82;
- *last_p++ = (len >> 8);
- *last_p++ = (len & 0xff);
- }
- memcpy (last_p, data, len);
- last_p += len;
-
- return p + 2;
-}
-
void
gpg_do_put_data (uint16_t tag, uint8_t *data, int len)
{
diff --git a/src/rsa_sign.c b/src/rsa-sign.c
similarity index 98%
rename from src/rsa_sign.c
rename to src/rsa-sign.c
index 8e548f7..7f129ed 100644
--- a/src/rsa_sign.c
+++ b/src/rsa-sign.c
@@ -74,7 +74,7 @@ rsa_sign (unsigned char *raw_message)
len = (cmd_APDU[5]<<8) | cmd_APDU[6]; /* cmd_APDU_size - 6 */
mpi_init( &P1, &Q1, &H, NULL );
- rsa_init( &ctx, RSA_PKCS_V15, 0, NULL, NULL );
+ rsa_init( &ctx, RSA_PKCS_V15, 0 );
#if 0
ctx.len = 2048 / 8;
diff --git a/src/rsa.mk b/src/rsa.mk
index 6e53209..9fe30cc 100644
--- a/src/rsa.mk
+++ b/src/rsa.mk
@@ -1,4 +1,4 @@
-RSADIR = ../../polarssl-0.13.1
+RSADIR = ../polarssl-0.14.0
RSASRCDIR = $(RSADIR)/library
RSAINCDIR = $(RSADIR)/include
-RSASRC = $(RSASRCDIR)/bignum.c $(RSASRCDIR)/rsa.c rsa_sign.c
+RSASRC = $(RSASRCDIR)/bignum.c $(RSASRCDIR)/rsa.c rsa-sign.c
diff --git a/src/usb_conf.h b/src/usb_conf.h
index 37c2777..11f8f0f 100644
--- a/src/usb_conf.h
+++ b/src/usb_conf.h
@@ -1,36 +1,26 @@
+/* USB configuration file for USB-FS-Device_Lib */
/*
-(C) COPYRIGHT 2010 STMicroelectronics
-usb_conf.h
-MCD Application Team
-V3.1.1
-04/07/2010
-Virtual COM Port Demo configuration header
-*/
+ * For detail, please see the documentation of
+ * STM32F10x USB Full Speed Device Library (USB-FS-Device_Lib)
+ * by STMicroelectronics
+ */
#ifndef __USB_CONF_H
#define __USB_CONF_H
-/*-------------------------------------------------------------*/
-/* EP_NUM */
-/* defines how many endpoints are used by the device */
-/*-------------------------------------------------------------*/
-
+#ifdef ENABLE_VIRTUAL_COM_PORT
#define EP_NUM (6)
+#else
+#define EP_NUM (3)
+#endif
-/*-------------------------------------------------------------*/
-/* -------------- Buffer Description Table -----------------*/
-/*-------------------------------------------------------------*/
-/* buffer table base address */
-/* buffer table base address */
#define BTABLE_ADDRESS (0x00)
/* EP0 */
-/* rx/tx buffer base address */
#define ENDP0_RXADDR (0x40)
#define ENDP0_TXADDR (0x80)
/* EP1 */
-/* tx buffer base address */
#define ENDP1_TXADDR (0xC0)
/* EP2 */
#define ENDP2_TXADDR (0x100)
@@ -43,39 +33,6 @@ Virtual COM Port Demo configuration header
/* EP5 */
#define ENDP5_RXADDR (0x1C0)
-/*-------------------------------------------------------------*/
-/* ------------------- ISTR events -------------------------*/
-/*-------------------------------------------------------------*/
-/* IMR_MSK */
-/* mask defining which events has to be handled */
-/* by the device application software */
#define IMR_MSK (CNTR_CTRM | CNTR_SOFM | CNTR_RESETM )
-/*#define CTR_CALLBACK*/
-/*#define DOVR_CALLBACK*/
-/*#define ERR_CALLBACK*/
-/*#define WKUP_CALLBACK*/
-/*#define SUSP_CALLBACK*/
-/*#define RESET_CALLBACK*/
-/*#define SOF_CALLBACK*/
-/*#define ESOF_CALLBACK*/
-
-#if 0
-#define EP1_IN_Callback NOP_Process
-#define EP2_IN_Callback NOP_Process
-#define EP3_IN_Callback NOP_Process
-#define EP4_IN_Callback NOP_Process
-#define EP5_IN_Callback NOP_Process
-#define EP6_IN_Callback NOP_Process
-#define EP7_IN_Callback NOP_Process
-
-#define EP1_OUT_Callback NOP_Process
-#define EP2_OUT_Callback NOP_Process
-#define EP3_OUT_Callback NOP_Process
-#define EP4_OUT_Callback NOP_Process
-#define EP5_OUT_Callback NOP_Process
-#define EP6_OUT_Callback NOP_Process
-#define EP7_OUT_Callback NOP_Process
-#endif
-
#endif /* __USB_CONF_H */
diff --git a/src/usb_lld.h b/src/usb_lld.h
index 3547ff5..9e0ecfd 100644
--- a/src/usb_lld.h
+++ b/src/usb_lld.h
@@ -1,8 +1,2 @@
-/**
- * @brief USB interrupt priority level setting.
- */
-#if !defined(STM32_USB_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define STM32_USB_IRQ_PRIORITY 11
-#endif
-
void usb_lld_init (void);
diff --git a/src/usb_prop.c b/src/usb_prop.c
index 73e8d4e..e8df21f 100644
--- a/src/usb_prop.c
+++ b/src/usb_prop.c
@@ -1,10 +1,27 @@
/*
-usb_prop.c
-MCD Application Team
-V3.1.1
-04/07/2010
-All processing related to Virtual Com Port Demo
-*/
+ * usb_prop.c - glue/interface code between Gnuk and USB-FS-Device_Lib
+ *
+ * Copyright (C) 2010 Free Software Initiative of Japan
+ * Author: NIIBE Yutaka
+ *
+ * This file is a part of Gnuk, a GnuPG USB Token implementation.
+ *
+ * Gnuk 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Gnuk 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#include "config.h"
#include "usb_lib.h"
#include "usb_conf.h"
@@ -13,56 +30,16 @@ All processing related to Virtual Com Port Demo
#include "usb_pwr.h"
#include "hw_config.h"
-#if 0
-static uint8_t Request = 0;
+#ifdef ENABLE_VIRTUAL_COM_PORT
+#include "usb-cdc-vport.c"
#endif
-typedef struct
-{
- uint32_t bitrate;
- uint8_t format;
- uint8_t paritytype;
- uint8_t datatype;
-} LINE_CODING;
-
-static LINE_CODING linecoding = {
- 115200, /* baud rate*/
- 0x00, /* stop bits-1*/
- 0x00, /* parity - none*/
- 0x08 /* no. of bits 8*/
-};
-
-static uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length)
-{
- if (Length == 0)
- {
- pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
- return NULL;
- }
-
- return (uint8_t *)&linecoding;
-}
-
-static uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length)
-{
- if (Length == 0)
- {
- pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
- return NULL;
- }
-
- return (uint8_t *)&linecoding;
-}
-
-
-#define GNUK_MAX_PACKET_SIZE 64
-
static void
gnuk_device_init (void)
{
-
- /* Update the serial number string descriptor with the data from the unique
- ID*/
+ /*
+ * Update the serial number string descriptor (if needed)
+ */
Get_SerialNum ();
pInformation->Current_Configuration = 0;
@@ -79,13 +56,13 @@ gnuk_device_init (void)
static void
gnuk_device_reset (void)
{
- /* Set Virtual_Com_Port DEVICE as not configured */
+ /* Set DEVICE as not configured */
pInformation->Current_Configuration = 0;
/* Current Feature initialization */
pInformation->Current_Feature = Config_Descriptor.Descriptor[7];
- /* Set Virtual_Com_Port DEVICE with the default Interface*/
+ /* Set DEVICE with the default Interface*/
pInformation->Current_Interface = 0;
SetBTABLE (BTABLE_ADDRESS);
@@ -99,6 +76,7 @@ gnuk_device_reset (void)
SetEPRxCount (ENDP0, GNUK_MAX_PACKET_SIZE);
SetEPRxValid (ENDP0);
+#ifdef ENABLE_VIRTUAL_COM_PORT
/* Initialize Endpoint 1 */
SetEPType (ENDP1, EP_BULK);
SetEPTxAddr (ENDP1, ENDP1_TXADDR);
@@ -117,6 +95,7 @@ gnuk_device_reset (void)
SetEPRxCount (ENDP3, VIRTUAL_COM_PORT_DATA_SIZE);
SetEPRxStatus (ENDP3, EP_RX_VALID);
SetEPTxStatus (ENDP3, EP_TX_DIS);
+#endif
/* Initialize Endpoint 4 */
SetEPType (ENDP4, EP_BULK);
@@ -127,7 +106,7 @@ gnuk_device_reset (void)
/* Initialize Endpoint 5 */
SetEPType (ENDP5, EP_BULK);
SetEPRxAddr (ENDP5, ENDP5_RXADDR);
- SetEPRxCount (ENDP5, VIRTUAL_COM_PORT_DATA_SIZE); /* XXX */
+ SetEPRxCount (ENDP5, GNUK_MAX_PACKET_SIZE);
SetEPRxStatus (ENDP5, EP_RX_VALID);
SetEPTxStatus (ENDP5, EP_TX_DIS);
@@ -157,10 +136,6 @@ gnuk_device_SetDeviceAddress (void)
static void
gnuk_device_Status_In (void)
{
-#if 0
- if (Request == SET_LINE_CODING)
- Request = 0;
-#endif
}
/* OUT to port 0 */
@@ -169,65 +144,6 @@ gnuk_device_Status_Out (void)
{
}
-/*******************************************************************************
-* Function Name : Virtual_Com_Port_Data_Setup
-* Description : handle the data class specific requests
-* Input : Request Nb.
-* Output : None.
-* Return : USB_UNSUPPORT or USB_SUCCESS.
-*******************************************************************************/
-static RESULT
-Virtual_Com_Port_Data_Setup (uint8_t RequestNo)
-{
- uint8_t *(*CopyRoutine)(uint16_t);
-
- CopyRoutine = NULL;
-
- if (RequestNo == GET_LINE_CODING)
- {
- if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
- CopyRoutine = Virtual_Com_Port_GetLineCoding;
- }
- else if (RequestNo == SET_LINE_CODING)
- {
- if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
- CopyRoutine = Virtual_Com_Port_SetLineCoding;
-#if 0
- Request = SET_LINE_CODING;
-#endif
- }
-
- if (CopyRoutine == NULL)
- return USB_UNSUPPORT;
-
- pInformation->Ctrl_Info.CopyData = CopyRoutine;
- pInformation->Ctrl_Info.Usb_wOffset = 0;
- (*CopyRoutine) (0);
-
- return USB_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name : Virtual_Com_Port_NoData_Setup.
-* Description : handle the no data class specific requests.
-* Input : Request Nb.
-* Output : None.
-* Return : USB_UNSUPPORT or USB_SUCCESS.
-*******************************************************************************/
-static RESULT
-Virtual_Com_Port_NoData_Setup (uint8_t RequestNo)
-{
- if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
- {
- if (RequestNo == SET_COMM_FEATURE)
- return USB_SUCCESS;
- else if (RequestNo == SET_CONTROL_LINE_STATE)
- return USB_SUCCESS;
- }
-
- return USB_UNSUPPORT;
-}
-
static uint8_t *
gnuk_device_GetDeviceDescriptor (uint16_t Length)
{
@@ -261,7 +177,7 @@ gnuk_device_Get_Interface_Setting (uint8_t Interface, uint8_t AlternateSetting)
return USB_SUCCESS;
}
-
+
/*
* Interface to USB core
*/
@@ -271,8 +187,13 @@ DEVICE_PROP Device_Property = {
gnuk_device_reset,
gnuk_device_Status_In,
gnuk_device_Status_Out,
+#ifdef ENABLE_VIRTUAL_COM_PORT
Virtual_Com_Port_Data_Setup,
Virtual_Com_Port_NoData_Setup,
+#else
+ NULL,
+ NULL,
+#endif
gnuk_device_Get_Interface_Setting,
gnuk_device_GetDeviceDescriptor,
gnuk_device_GetConfigDescriptor,
diff --git a/src/usb_prop.h b/src/usb_prop.h
index ab42890..df6af01 100644
--- a/src/usb_prop.h
+++ b/src/usb_prop.h
@@ -1,25 +1,6 @@
-/*
-(C) COPYRIGHT 2010 STMicroelectronics
-usb_prop.h
-MCD Application Team
-V3.1.1
-04/07/2010
-All processing related to Virtual COM Port Demo (Endpoint 0)
-*/
-
#ifndef __usb_prop_H
#define __usb_prop_H
-#define SEND_ENCAPSULATED_COMMAND 0x00
-#define GET_ENCAPSULATED_RESPONSE 0x01
-#define SET_COMM_FEATURE 0x02
-#define GET_COMM_FEATURE 0x03
-#define CLEAR_COMM_FEATURE 0x04
-#define SET_LINE_CODING 0x20
-#define GET_LINE_CODING 0x21
-#define SET_CONTROL_LINE_STATE 0x22
-#define SEND_BREAK 0x23
-
extern ONE_DESCRIPTOR Device_Descriptor;
extern ONE_DESCRIPTOR Config_Descriptor;
extern ONE_DESCRIPTOR String_Descriptor[4];
diff --git a/src/usbcdc.mk b/src/usbcdc.mk
deleted file mode 100644
index 3f163a5..0000000
--- a/src/usbcdc.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-USBCDCDIR = ../USBCDC
-USBCDCSRC= $(USBCDCDIR)/usb_endp.c $(USBCDCDIR)/usb_istr.c \
- $(USBCDCDIR)/usb_pwr.c
diff --git a/src/vcomport.mk b/src/vcomport.mk
new file mode 100644
index 0000000..0325ec2
--- /dev/null
+++ b/src/vcomport.mk
@@ -0,0 +1,2 @@
+VCOMDIR = ../Virtual_COM_Port
+VCOMSRC= $(VCOMDIR)/usb_endp.c $(VCOMDIR)/usb_istr.c $(VCOMDIR)/usb_pwr.c